/ Hex Artifact Content
Login

Artifact 2ec1d71220307fa5ee85a918a6240cf0b4635b0e:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 6e 63 6c  ite..**.*/.#incl
01b0: 75 64 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a  ude "sqlite3.h".
01c0: 23 69 66 6e 64 65 66 20 5f 53 51 4c 49 54 45 49  #ifndef _SQLITEI
01d0: 4e 54 5f 48 5f 0a 23 64 65 66 69 6e 65 20 5f 53  NT_H_.#define _S
01e0: 51 4c 49 54 45 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a  QLITEINT_H_../*.
01f0: 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69 6e 65  ** These #define
0200: 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c 65 20  s should enable 
0210: 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70 6f 72  >2GB file suppor
0220: 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20 74 68  t on POSIX if th
0230: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
0240: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
0250: 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20 20 49   supports it.  I
0260: 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73 0a 2a  f the OS lacks.*
0270: 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70  * large file sup
0280: 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68 65 20  port, or if the 
0290: 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c 20 74  OS is windows, t
02a0: 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65 20 6e  hese should be n
02b0: 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63  o-ops..**.** Tic
02c0: 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68 65 20  ket #2739:  The 
02d0: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
02e0: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70  E macro must app
02f0: 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79 0a 2a  ear before any.*
0300: 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c 75 64  * system #includ
0310: 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68 69 73  es.  Hence, this
0320: 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 20 6d   block of code m
0330: 75 73 74 20 62 65 20 74 68 65 20 76 65 72 79 20  ust be the very 
0340: 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20 69 6e  first.** code in
0350: 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69 6c 65   all source file
0360: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65 20 66  s..**.** Large f
0370: 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61 6e 20  ile support can 
0380: 62 65 20 64 69 73 61 62 6c 65 64 20 75 73 69 6e  be disabled usin
0390: 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 44  g the -DSQLITE_D
03a0: 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69 74 63  ISABLE_LFS switc
03b0: 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 70  h.** on the comp
03c0: 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  iler command lin
03d0: 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65  e.  This is nece
03e0: 73 73 61 72 79 20 69 66 20 79 6f 75 20 61 72 65  ssary if you are
03f0: 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e   compiling.** on
0400: 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68 69 6e   a recent machin
0410: 65 20 28 65 78 3a 20 52 65 64 20 48 61 74 20 37  e (ex: Red Hat 7
0420: 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61 6e 74  .2) but you want
0430: 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20 77 6f   your code to wo
0440: 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65  rk.** on an olde
0450: 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52  r machine (ex: R
0460: 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20 49 66  ed Hat 6.0).  If
0470: 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f 6e 20   you compile on 
0480: 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a 20 77  Red Hat 7.2.** w
0490: 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70 74 69  ithout this opti
04a0: 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61 62 6c  on, LFS is enabl
04b0: 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f 65 73  e.  But LFS does
04c0: 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 68   not exist in th
04d0: 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52  e kernel.** in R
04e0: 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f 20 74  ed Hat 6.0, so t
04f0: 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20 77 6f  he code won't wo
0500: 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f 72 20  rk.  Hence, for 
0510: 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79 0a 2a  maximum binary.*
0520: 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20 79 6f  * portability yo
0530: 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20 4c 46  u should omit LF
0540: 53 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72  S..**.** Similar
0550: 20 69 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63   is true for Mac
0560: 20 4f 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f   OS X.  LFS is o
0570: 6e 6c 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e  nly supported on
0580: 20 4d 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20   Mac OS X 9 and 
0590: 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65  later..*/.#ifnde
05a0: 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45  f SQLITE_DISABLE
05b0: 5f 4c 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c  _LFS.# define _L
05c0: 41 52 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20  ARGE_FILE       
05d0: 31 0a 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45  1.# ifndef _FILE
05e0: 5f 4f 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20  _OFFSET_BITS.#  
05f0: 20 64 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46   define _FILE_OF
0600: 46 53 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65  FSET_BITS 64.# e
0610: 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c  ndif.# define _L
0620: 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20  ARGEFILE_SOURCE 
0630: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
0640: 49 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66  Include the conf
0650: 69 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72  iguration header
0660: 20 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66   output by 'conf
0670: 69 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20  igure' if we're 
0680: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74  using the.** aut
0690: 6f 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c  oconf-based buil
06a0: 64 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 48 41 56  d.*/.#ifdef _HAV
06b0: 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  E_SQLITE_CONFIG_
06c0: 48 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66  H.#include "conf
06d0: 69 67 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23 69  ig.h".#endif..#i
06e0: 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 4c 69  nclude "sqliteLi
06f0: 6d 69 74 2e 68 22 0a 0a 2f 2a 20 44 69 73 61 62  mit.h"../* Disab
0700: 6c 65 20 6e 75 69 73 61 6e 63 65 20 77 61 72 6e  le nuisance warn
0710: 69 6e 67 73 20 6f 6e 20 42 6f 72 6c 61 6e 64 20  ings on Borland 
0720: 63 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 23 69 66  compilers */.#if
0730: 20 64 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c 41   defined(__BORLA
0740: 4e 44 43 5f 5f 29 0a 23 70 72 61 67 6d 61 20 77  NDC__).#pragma w
0750: 61 72 6e 20 2d 72 63 68 20 2f 2a 20 75 6e 72 65  arn -rch /* unre
0760: 61 63 68 61 62 6c 65 20 63 6f 64 65 20 2a 2f 0a  achable code */.
0770: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 63  #pragma warn -cc
0780: 63 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 20 69  c /* Condition i
0790: 73 20 61 6c 77 61 79 73 20 74 72 75 65 20 6f 72  s always true or
07a0: 20 66 61 6c 73 65 20 2a 2f 0a 23 70 72 61 67 6d   false */.#pragm
07b0: 61 20 77 61 72 6e 20 2d 61 75 73 20 2f 2a 20 41  a warn -aus /* A
07c0: 73 73 69 67 6e 65 64 20 76 61 6c 75 65 20 69 73  ssigned value is
07d0: 20 6e 65 76 65 72 20 75 73 65 64 20 2a 2f 0a 23   never used */.#
07e0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 73 75  pragma warn -csu
07f0: 20 2f 2a 20 43 6f 6d 70 61 72 69 6e 67 20 73 69   /* Comparing si
0800: 67 6e 65 64 20 61 6e 64 20 75 6e 73 69 67 6e 65  gned and unsigne
0810: 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  d */.#pragma war
0820: 6e 20 2d 73 70 61 20 2f 2a 20 53 75 73 70 69 63  n -spa /* Suspic
0830: 69 6f 75 73 20 70 6f 69 6e 74 65 72 20 61 72 69  ious pointer ari
0840: 74 68 6d 65 74 69 63 20 2a 2f 0a 23 65 6e 64 69  thmetic */.#endi
0850: 66 0a 0a 2f 2a 20 4e 65 65 64 65 64 20 66 6f 72  f../* Needed for
0860: 20 76 61 72 69 6f 75 73 20 64 65 66 69 6e 69 74   various definit
0870: 69 6f 6e 73 2e 2e 2e 20 2a 2f 0a 23 69 66 6e 64  ions... */.#ifnd
0880: 65 66 20 5f 47 4e 55 5f 53 4f 55 52 43 45 0a 23  ef _GNU_SOURCE.#
0890: 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f 53 4f 55   define _GNU_SOU
08a0: 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  RCE.#endif..#if 
08b0: 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53  defined(__OpenBS
08c0: 44 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  D__) && !defined
08d0: 28 5f 42 53 44 5f 53 4f 55 52 43 45 29 0a 23 20  (_BSD_SOURCE).# 
08e0: 64 65 66 69 6e 65 20 5f 42 53 44 5f 53 4f 55 52  define _BSD_SOUR
08f0: 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  CE.#endif../*.**
0900: 20 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72   Include standar
0910: 64 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61  d header files a
0920: 73 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23  s necessary.*/.#
0930: 69 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e  ifdef HAVE_STDIN
0940: 54 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  T_H.#include <st
0950: 64 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23  dint.h>.#endif.#
0960: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59  ifdef HAVE_INTTY
0970: 50 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c  PES_H.#include <
0980: 69 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64  inttypes.h>.#end
0990: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
09a0: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61  llowing macros a
09b0: 72 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20  re used to cast 
09c0: 70 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65  pointers to inte
09d0: 67 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65  gers and.** inte
09e0: 67 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73  gers to pointers
09f0: 2e 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64  .  The way you d
0a00: 6f 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72  o this varies fr
0a10: 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a  om one compiler.
0a20: 2a 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20  ** to the next, 
0a30: 73 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c  so we have devel
0a40: 6f 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69  oped the followi
0a50: 6e 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74  ng set of #if st
0a60: 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67  atements.** to g
0a70: 65 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69  enerate appropri
0a80: 61 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61  ate macros for a
0a90: 20 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63   wide range of c
0aa0: 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20  ompilers..**.** 
0ab0: 54 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53  The correct "ANS
0ac0: 49 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69  I" way to do thi
0ad0: 73 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20  s is to use the 
0ae0: 69 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 20 0a  intptr_t type. .
0af0: 2a 2a 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79  ** Unfortunately
0b00: 2c 20 74 68 61 74 20 74 79 70 65 64 65 66 20 69  , that typedef i
0b10: 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20  s not available 
0b20: 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73  on all compilers
0b30: 2c 20 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73  , or.** if it is
0b40: 20 61 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72   available, it r
0b50: 65 71 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c  equires an #incl
0b60: 75 64 65 20 6f 66 20 73 70 65 63 69 66 69 63 20  ude of specific 
0b70: 68 65 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20  headers.** that 
0b80: 76 61 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61  vary from one ma
0b90: 63 68 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78  chine to the nex
0ba0: 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  t..**.** Ticket 
0bb0: 23 33 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d  #3860:  The llvm
0bc0: 2d 67 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65  -gcc-4.2 compile
0bd0: 72 20 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f  r from Apple cho
0be0: 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28  kes on.** the ((
0bf0: 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30  void*)&((char*)0
0c00: 29 5b 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e  )[X]) construct.
0c10: 20 20 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65    But MSVC choke
0c20: 73 20 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29  s on ((void*)(X)
0c30: 29 2e 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65  )..** So we have
0c40: 20 74 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d   to define the m
0c50: 61 63 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65  acros in differe
0c60: 6e 74 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e  nt ways dependin
0c70: 67 20 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  g on the.** comp
0c80: 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  iler..*/.#if def
0c90: 69 6e 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54  ined(__PTRDIFF_T
0ca0: 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20  YPE__)  /* This 
0cb0: 63 61 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b  case should work
0cc0: 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65   for GCC */.# de
0cd0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f  fine SQLITE_INT_
0ce0: 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69  TO_PTR(X)  ((voi
0cf0: 64 2a 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59  d*)(__PTRDIFF_TY
0d00: 50 45 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69  PE__)(X)).# defi
0d10: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
0d20: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
0d30: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
0d40: 29 28 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66  )(X)).#elif !def
0d50: 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20  ined(__GNUC__)  
0d60: 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f       /* Works fo
0d70: 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65  r compilers othe
0d80: 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23  r than LLVM */.#
0d90: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
0da0: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
0db0: 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30  void*)&((char*)0
0dc0: 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53  )[X]).# define S
0dd0: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
0de0: 28 58 29 20 20 28 28 69 6e 74 29 28 28 28 63 68  (X)  ((int)(((ch
0df0: 61 72 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29  ar*)X)-(char*)0)
0e00: 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28  ).#elif defined(
0e10: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20  HAVE_STDINT_H)  
0e20: 20 2f 2a 20 55 73 65 20 74 68 69 73 20 63 61 73   /* Use this cas
0e30: 65 20 69 66 20 77 65 20 68 61 76 65 20 41 4e 53  e if we have ANS
0e40: 49 20 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64  I headers */.# d
0e50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
0e60: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
0e70: 69 64 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58  id*)(intptr_t)(X
0e80: 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  )).# define SQLI
0e90: 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29  TE_PTR_TO_INT(X)
0ea0: 20 20 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f    ((int)(intptr_
0eb0: 74 29 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20  t)(X)).#else    
0ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ed0: 20 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74        /* Generat
0ee0: 65 73 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62  es a warning - b
0ef0: 75 74 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72  ut it always wor
0f00: 6b 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  ks */.# define S
0f10: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
0f20: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29  (X)  ((void*)(X)
0f30: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
0f40: 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20  E_PTR_TO_INT(X) 
0f50: 20 28 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64   ((int)(X)).#end
0f60: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  if../*.** The SQ
0f70: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
0f80: 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65  macro must be de
0f90: 66 69 6e 65 64 20 61 73 20 30 2c 20 31 2c 20 6f  fined as 0, 1, o
0fa0: 72 20 32 2e 0a 2a 2a 20 30 20 6d 65 61 6e 73 20  r 2..** 0 means 
0fb0: 6d 75 74 65 78 65 73 20 61 72 65 20 70 65 72 6d  mutexes are perm
0fc0: 61 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c 65 20  anently disable 
0fd0: 61 6e 64 20 74 68 65 20 6c 69 62 72 61 72 79 20  and the library 
0fe0: 69 73 20 6e 65 76 65 72 0a 2a 2a 20 74 68 72 65  is never.** thre
0ff0: 61 64 73 61 66 65 2e 20 20 31 20 6d 65 61 6e 73  adsafe.  1 means
1000: 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20   the library is 
1010: 73 65 72 69 61 6c 69 7a 65 64 20 77 68 69 63 68  serialized which
1020: 20 69 73 20 74 68 65 20 68 69 67 68 65 73 74 0a   is the highest.
1030: 2a 2a 20 6c 65 76 65 6c 20 6f 66 20 74 68 72 65  ** level of thre
1040: 61 64 73 61 66 65 74 79 2e 20 20 32 20 6d 65 61  adsafety.  2 mea
1050: 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79 20 69  ns the library i
1060: 73 20 6d 75 6c 74 69 74 68 72 65 61 64 65 64 20  s multithreaded 
1070: 2d 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 74 68  - multiple.** th
1080: 72 65 61 64 73 20 63 61 6e 20 75 73 65 20 53 51  reads can use SQ
1090: 4c 69 74 65 20 61 73 20 6c 6f 6e 67 20 61 73 20  Lite as long as 
10a0: 6e 6f 20 74 77 6f 20 74 68 72 65 61 64 73 20 74  no two threads t
10b0: 72 79 20 74 6f 20 75 73 65 20 74 68 65 20 73 61  ry to use the sa
10c0: 6d 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  me.** database c
10d0: 6f 6e 6e 65 63 74 69 6f 6e 20 61 74 20 74 68 65  onnection at the
10e0: 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a   same time..**.*
10f0: 2a 20 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73  * Older versions
1100: 20 6f 66 20 53 51 4c 69 74 65 20 75 73 65 64 20   of SQLite used 
1110: 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 54 48 52 45  an optional THRE
1120: 41 44 53 41 46 45 20 6d 61 63 72 6f 2e 0a 2a 2a  ADSAFE macro..**
1130: 20 57 65 20 73 75 70 70 6f 72 74 20 74 68 61 74   We support that
1140: 20 66 6f 72 20 6c 65 67 61 63 79 2e 0a 2a 2f 0a   for legacy..*/.
1150: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1160: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a  ITE_THREADSAFE).
1170: 23 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52  # if defined(THR
1180: 45 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66  EADSAFE).#   def
1190: 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41  ine SQLITE_THREA
11a0: 44 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45  DSAFE THREADSAFE
11b0: 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69  .# else.#   defi
11c0: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
11d0: 53 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52  SAFE 1 /* IMP: R
11e0: 2d 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a  -07272-22309 */.
11f0: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a  # endif.#endif..
1200: 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20  /*.** Powersafe 
1210: 6f 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20  overwrite is on 
1220: 62 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74  by default.  But
1230: 20 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f   can be turned o
1240: 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20  ff using.** the 
1250: 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  -DSQLITE_POWERSA
1260: 46 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63  FE_OVERWRITE=0 c
1270: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69  ommand-line opti
1280: 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  on..*/.#ifndef S
1290: 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f  QLITE_POWERSAFE_
12a0: 4f 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69  OVERWRITE.# defi
12b0: 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53  ne SQLITE_POWERS
12c0: 41 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a  AFE_OVERWRITE 1.
12d0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
12e0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
12f0: 5f 4d 45 4d 53 54 41 54 55 53 20 6d 61 63 72 6f  _MEMSTATUS macro
1300: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
1310: 20 61 73 20 65 69 74 68 65 72 20 30 20 6f 72 20   as either 0 or 
1320: 31 2e 0a 2a 2a 20 49 74 20 64 65 74 65 72 6d 69  1..** It determi
1330: 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e  nes whether or n
1340: 6f 74 20 74 68 65 20 66 65 61 74 75 72 65 73 20  ot the features 
1350: 72 65 6c 61 74 65 64 20 74 6f 20 0a 2a 2a 20 53  related to .** S
1360: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d  QLITE_CONFIG_MEM
1370: 53 54 41 54 55 53 20 61 72 65 20 61 76 61 69 6c  STATUS are avail
1380: 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74 20  able by default 
1390: 6f 72 20 6e 6f 74 2e 20 54 68 69 73 20 76 61 6c  or not. This val
13a0: 75 65 20 63 61 6e 0a 2a 2a 20 62 65 20 6f 76 65  ue can.** be ove
13b0: 72 72 69 64 64 65 6e 20 61 74 20 72 75 6e 74 69  rridden at runti
13c0: 6d 65 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c  me using the sql
13d0: 69 74 65 33 5f 63 6f 6e 66 69 67 28 29 20 41 50  ite3_config() AP
13e0: 49 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  I..*/.#if !defin
13f0: 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ed(SQLITE_DEFAUL
1400: 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a 23 20 64  T_MEMSTATUS).# d
1410: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
1420: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 31  AULT_MEMSTATUS 1
1430: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
1440: 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68  xactly one of th
1450: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1460: 6f 73 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e  os must be defin
1470: 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ed in order to.*
1480: 2a 20 73 70 65 63 69 66 79 20 77 68 69 63 68 20  * specify which 
1490: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
14a0: 6e 20 73 75 62 73 79 73 74 65 6d 20 74 6f 20 75  n subsystem to u
14b0: 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51  se..**.**     SQ
14c0: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
14d0: 4f 43 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  OC          // U
14e0: 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d  se normal system
14f0: 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20   malloc().**    
1500: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
1510: 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20 2f  LLOC           /
1520: 2f 20 55 73 65 20 57 69 6e 33 32 20 6e 61 74 69  / Use Win32 nati
1530: 76 65 20 68 65 61 70 20 41 50 49 0a 2a 2a 20 20  ve heap API.**  
1540: 20 20 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d     SQLITE_ZERO_M
1550: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20  ALLOC           
1560: 20 2f 2f 20 55 73 65 20 61 20 73 74 75 62 20 61   // Use a stub a
1570: 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74 20 61 6c  llocator that al
1580: 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20  ways fails.**   
1590: 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55    SQLITE_MEMDEBU
15a0: 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  G               
15b0: 2f 2f 20 44 65 62 75 67 67 69 6e 67 20 76 65 72  // Debugging ver
15c0: 73 69 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d  sion of system m
15d0: 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e  alloc().**.** On
15e0: 20 57 69 6e 64 6f 77 73 2c 20 69 66 20 74 68 65   Windows, if the
15f0: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
1600: 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d 61  LLOC_VALIDATE ma
1610: 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 20 61  cro is defined a
1620: 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74  nd the.** assert
1630: 28 29 20 6d 61 63 72 6f 20 69 73 20 65 6e 61 62  () macro is enab
1640: 6c 65 64 2c 20 65 61 63 68 20 63 61 6c 6c 20 69  led, each call i
1650: 6e 74 6f 20 74 68 65 20 57 69 6e 33 32 20 6e 61  nto the Win32 na
1660: 74 69 76 65 20 68 65 61 70 20 73 75 62 73 79 73  tive heap subsys
1670: 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73  tem.** will caus
1680: 65 20 48 65 61 70 56 61 6c 69 64 61 74 65 20 74  e HeapValidate t
1690: 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20 20 49 66  o be called.  If
16a0: 20 68 65 61 70 20 76 61 6c 69 64 61 74 69 6f 6e   heap validation
16b0: 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e   should fail, an
16c0: 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e 20 77 69  .** assertion wi
16d0: 6c 6c 20 62 65 20 74 72 69 67 67 65 72 65 64 2e  ll be triggered.
16e0: 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f  .**.** If none o
16f0: 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20  f the above are 
1700: 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 73 65  defined, then se
1710: 74 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  t SQLITE_SYSTEM_
1720: 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65  MALLOC as.** the
1730: 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66   default..*/.#if
1740: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1750: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c  SYSTEM_MALLOC) \
1760: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
1770: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
1780: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
1790: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
17a0: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
17b0: 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  d(SQLITE_MEMDEBU
17c0: 47 29 3e 31 0a 23 20 65 72 72 6f 72 20 22 54 77  G)>1.# error "Tw
17d0: 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65  o or more of the
17e0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69   following compi
17f0: 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72  le-time configur
1800: 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20  ation options\. 
1810: 61 72 65 20 64 65 66 69 6e 65 64 20 62 75 74 20  are defined but 
1820: 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61  at most one is a
1830: 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45  llowed:\. SQLITE
1840: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20  _SYSTEM_MALLOC, 
1850: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
1860: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44  LOC, SQLITE_MEMD
1870: 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a  EBUG,\. SQLITE_Z
1880: 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64  ERO_MALLOC".#end
1890: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
18a0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
18b0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
18c0: 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  ed(SQLITE_WIN32_
18d0: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
18e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52  fined(SQLITE_ZER
18f0: 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  O_MALLOC) \.  + 
1900: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
1910: 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23 20 64 65  EMDEBUG)==0.# de
1920: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 59 53 54  fine SQLITE_SYST
1930: 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64  EM_MALLOC 1.#end
1940: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c  if../*.** If SQL
1950: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
1960: 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65 72  LIMIT is not zer
1970: 6f 2c 20 74 68 65 6e 20 74 72 79 20 74 6f 20 6b  o, then try to k
1980: 65 65 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73  eep the.** sizes
1990: 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
19a0: 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69  ations below thi
19b0: 73 20 76 61 6c 75 65 20 77 68 65 72 65 20 70 6f  s value where po
19c0: 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21  ssible..*/.#if !
19d0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
19e0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
19f0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1a00: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
1a10: 4d 49 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a  MIT 1024.#endif.
1a20: 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74  ./*.** We need t
1a30: 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f  o define _XOPEN_
1a40: 53 4f 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77  SOURCE as follow
1a50: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
1a60: 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76  able.** recursiv
1a70: 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73  e mutexes on mos
1a80: 74 20 55 6e 69 78 20 73 79 73 74 65 6d 73 20 61  t Unix systems a
1a90: 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f  nd fchmod() on O
1aa0: 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f  penBSD..** But _
1ab0: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 64 65 66  XOPEN_SOURCE def
1ac0: 69 6e 65 20 63 61 75 73 65 73 20 70 72 6f 62 6c  ine causes probl
1ad0: 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  ems for Mac OS X
1ae0: 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e  , so omit.** it.
1af0: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
1b00: 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20  (_XOPEN_SOURCE) 
1b10: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 44 41  && !defined(__DA
1b20: 52 57 49 4e 5f 5f 29 20 26 26 20 21 64 65 66 69  RWIN__) && !defi
1b30: 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23  ned(__APPLE__).#
1b40: 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f    define _XOPEN_
1b50: 53 4f 55 52 43 45 20 36 30 30 0a 23 65 6e 64 69  SOURCE 600.#endi
1b60: 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20  f../*.** NDEBUG 
1b70: 61 6e 64 20 53 51 4c 49 54 45 5f 44 45 42 55 47  and SQLITE_DEBUG
1b80: 20 61 72 65 20 6f 70 70 6f 73 69 74 65 73 2e 20   are opposites. 
1b90: 20 49 74 20 73 68 6f 75 6c 64 20 61 6c 77 61 79   It should alway
1ba0: 73 20 62 65 20 74 72 75 65 20 74 68 61 74 0a 2a  s be true that.*
1bb0: 2a 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47  * defined(NDEBUG
1bc0: 29 3d 3d 21 64 65 66 69 6e 65 64 28 53 51 4c 49  )==!defined(SQLI
1bd0: 54 45 5f 44 45 42 55 47 29 2e 20 20 49 66 20 74  TE_DEBUG).  If t
1be0: 68 69 73 20 69 73 20 6e 6f 74 20 63 75 72 72 65  his is not curre
1bf0: 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61  ntly true,.** ma
1c00: 6b 65 20 69 74 20 74 72 75 65 20 62 79 20 64 65  ke it true by de
1c10: 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66 69  fining or undefi
1c20: 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a  ning NDEBUG..**.
1c30: 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45 42 55  ** Setting NDEBU
1c40: 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f 64 65  G makes the code
1c50: 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61 73   smaller and fas
1c60: 74 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67  ter by disabling
1c70: 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29   the.** assert()
1c80: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
1c90: 68 65 20 63 6f 64 65 2e 20 20 53 6f 20 77 65 20  he code.  So we 
1ca0: 77 61 6e 74 20 74 68 65 20 64 65 66 61 75 6c 74  want the default
1cb0: 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65   action.** to be
1cc0: 20 66 6f 72 20 4e 44 45 42 55 47 20 74 6f 20 62   for NDEBUG to b
1cd0: 65 20 73 65 74 20 61 6e 64 20 4e 44 45 42 55 47  e set and NDEBUG
1ce0: 20 74 6f 20 62 65 20 75 6e 64 65 66 69 6e 65 64   to be undefined
1cf0: 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49 54 45 5f   only if SQLITE_
1d00: 44 45 42 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e  DEBUG.** is set.
1d10: 20 20 54 68 75 73 20 4e 44 45 42 55 47 20 62 65    Thus NDEBUG be
1d20: 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20  comes an opt-in 
1d30: 72 61 74 68 65 72 20 74 68 61 6e 20 61 6e 20 6f  rather than an o
1d40: 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72  pt-out.** featur
1d50: 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  e..*/.#if !defin
1d60: 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 21 64  ed(NDEBUG) && !d
1d70: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
1d80: 42 55 47 29 20 0a 23 20 64 65 66 69 6e 65 20 4e  BUG) .# define N
1d90: 44 45 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23  DEBUG 1.#endif.#
1da0: 69 66 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55  if defined(NDEBU
1db0: 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  G) && defined(SQ
1dc0: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e  LITE_DEBUG).# un
1dd0: 64 65 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69  def NDEBUG.#endi
1de0: 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20  f../*.** Enable 
1df0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
1e00: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
1e10: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69  f SQLITE_DEBUG i
1e20: 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a  s turned on..*/.
1e30: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1e40: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
1e50: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20  IN_COMMENTS) && 
1e60: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
1e70: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53  EBUG).# define S
1e80: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
1e90: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a  LAIN_COMMENTS 1.
1ea0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1eb0: 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63  e testcase() mac
1ec0: 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61 69  ro is used to ai
1ed0: 64 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65  d in coverage te
1ee0: 73 74 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a 2a  sting.  When .**
1ef0: 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20   doing coverage 
1f00: 74 65 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e  testing, the con
1f10: 64 69 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68  dition inside th
1f20: 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a  e argument to.**
1f30: 20 74 65 73 74 63 61 73 65 28 29 20 6d 75 73 74   testcase() must
1f40: 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f   be evaluated bo
1f50: 74 68 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73  th true and fals
1f60: 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
1f70: 20 67 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68   get full branch
1f80: 20 63 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20   coverage.  The 
1f90: 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f  testcase() macro
1fa0: 20 69 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20   is inserted.** 
1fb0: 74 6f 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61  to help ensure a
1fc0: 64 65 71 75 61 74 65 20 74 65 73 74 20 63 6f 76  dequate test cov
1fd0: 65 72 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20  erage in places 
1fe0: 77 68 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20  where simple.** 
1ff0: 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69  condition/decisi
2000: 6f 6e 20 63 6f 76 65 72 61 67 65 20 69 73 20 69  on coverage is i
2010: 6e 61 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20  nadequate.  For 
2020: 65 78 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73  example, testcas
2030: 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73  e().** can be us
2040: 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ed to make sure 
2050: 62 6f 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20  boundary values 
2060: 61 72 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72  are tested.  For
2070: 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74  .** bitmask test
2080: 73 2c 20 74 65 73 74 63 61 73 65 28 29 20 63 61  s, testcase() ca
2090: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b  n be used to mak
20a0: 65 20 73 75 72 65 20 65 61 63 68 20 62 69 74 0a  e sure each bit.
20b0: 2a 2a 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e  ** is significan
20c0: 74 20 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65  t and used at le
20d0: 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77  ast once.  On sw
20e0: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a  itch statements.
20f0: 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c  ** where multipl
2100: 65 20 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68  e cases go to th
2110: 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20  e same block of 
2120: 63 6f 64 65 2c 20 74 65 73 74 63 61 73 65 28 29  code, testcase()
2130: 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74  .** can insure t
2140: 68 61 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72  hat all cases ar
2150: 65 20 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a  e evaluated..**.
2160: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
2170: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20  _COVERAGE_TEST. 
2180: 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76   void sqlite3Cov
2190: 65 72 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65  erage(int);.# de
21a0: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
21b0: 20 20 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74    if( X ){ sqlit
21c0: 65 33 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e  e3Coverage(__LIN
21d0: 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20  E__); }.#else.# 
21e0: 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65 28  define testcase(
21f0: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2200: 20 54 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61   The TESTONLY ma
2210: 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65  cro is used to e
2220: 6e 63 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20  nclose variable 
2230: 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a  declarations or.
2240: 2a 2a 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66  ** other bits of
2250: 20 63 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e   code that are n
2260: 65 65 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74  eeded to support
2270: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a   the arguments.*
2280: 2a 20 77 69 74 68 69 6e 20 74 65 73 74 63 61 73  * within testcas
2290: 65 28 29 20 61 6e 64 20 61 73 73 65 72 74 28 29  e() and assert()
22a0: 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20   macros..*/.#if 
22b0: 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29  !defined(NDEBUG)
22c0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
22d0: 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54  TE_COVERAGE_TEST
22e0: 29 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f  ).# define TESTO
22f0: 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a  NLY(X)  X.#else.
2300: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
2310: 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  Y(X).#endif../*.
2320: 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20  ** Sometimes we 
2330: 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f  need a small amo
2340: 75 6e 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68  unt of code such
2350: 20 61 73 20 61 20 76 61 72 69 61 62 6c 65 20 69   as a variable i
2360: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a  nitialization.**
2370: 20 74 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20   to setup for a 
2380: 6c 61 74 65 72 20 61 73 73 65 72 74 28 29 20 73  later assert() s
2390: 74 61 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f  tatement.  We do
23a0: 20 6e 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63   not want this c
23b0: 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72  ode to.** appear
23c0: 20 77 68 65 6e 20 61 73 73 65 72 74 28 29 20 69   when assert() i
23d0: 73 20 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65  s disabled.  The
23e0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
23f0: 20 69 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a   is therefore.**
2400: 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e   used to contain
2410: 20 74 68 61 74 20 73 65 74 75 70 20 63 6f 64 65   that setup code
2420: 2e 20 20 54 68 65 20 22 56 56 41 22 20 61 63 72  .  The "VVA" acr
2430: 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a  onym stands for.
2440: 2a 2a 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e  ** "Verification
2450: 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e  , Validation, an
2460: 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22  d Accreditation"
2470: 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
2480: 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77  s, the.** code w
2490: 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29  ithin VVA_ONLY()
24a0: 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64   will only run d
24b0: 75 72 69 6e 67 20 76 65 72 69 66 69 63 61 74 69  uring verificati
24c0: 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f  on processes..*/
24d0: 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
24e0: 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c  # define VVA_ONL
24f0: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
2500: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
2510: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2520: 20 54 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20   The ALWAYS and 
2530: 4e 45 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72  NEVER macros sur
2540: 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78  round boolean ex
2550: 70 72 65 73 73 69 6f 6e 73 20 77 68 69 63 68 20  pressions which 
2560: 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64  .** are intended
2570: 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72   to always be tr
2580: 75 65 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73  ue or false, res
2590: 70 65 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68  pectively.  Such
25a0: 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20  .** expressions 
25b0: 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64  could be omitted
25c0: 20 66 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63   from the code c
25d0: 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20  ompletely.  But 
25e0: 74 68 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c  they.** are incl
25f0: 75 64 65 64 20 69 6e 20 61 20 66 65 77 20 63 61  uded in a few ca
2600: 73 65 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ses in order to 
2610: 65 6e 68 61 6e 63 65 20 74 68 65 20 72 65 73 69  enhance the resi
2620: 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c  lience.** of SQL
2630: 69 74 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65  ite to unexpecte
2640: 64 20 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20  d behavior - to 
2650: 6d 61 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73  make the code "s
2660: 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20  elf-healing".** 
2670: 6f 72 20 22 64 75 63 74 69 6c 65 22 20 72 61 74  or "ductile" rat
2680: 68 65 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22  her than being "
2690: 62 72 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61  brittle" and cra
26a0: 73 68 69 6e 67 20 61 74 20 74 68 65 20 66 69 72  shing at the fir
26b0: 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e  st.** hint of un
26c0: 70 6c 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72  planned behavior
26d0: 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ..**.** In other
26e0: 20 77 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61   words, ALWAYS a
26f0: 6e 64 20 4e 45 56 45 52 20 61 72 65 20 61 64 64  nd NEVER are add
2700: 65 64 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65  ed for defensive
2710: 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65   code..**.** Whe
2720: 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65  n doing coverage
2730: 20 74 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20   testing ALWAYS 
2740: 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 68 61  and NEVER are ha
2750: 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62  rd-coded to.** b
2760: 65 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65  e true and false
2770: 20 73 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72   so that the unr
2780: 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68  eachable code th
2790: 65 79 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a  ey specify will.
27a0: 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65  ** not be counte
27b0: 64 20 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f  d as untested co
27c0: 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  de..*/.#if defin
27d0: 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41  ed(SQLITE_COVERA
27e0: 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e  GE_TEST).# defin
27f0: 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20  e ALWAYS(X)     
2800: 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45   (1).# define NE
2810: 56 45 52 28 58 29 20 20 20 20 20 20 20 28 30 29  VER(X)       (0)
2820: 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
2830: 4e 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65  NDEBUG).# define
2840: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
2850: 28 28 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30  ((X)?1:(assert(0
2860: 29 2c 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e  ),0)).# define N
2870: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 28  EVER(X)       ((
2880: 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29  X)?(assert(0),1)
2890: 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  :0).#else.# defi
28a0: 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20  ne ALWAYS(X)    
28b0: 20 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e    (X).# define N
28c0: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 58  EVER(X)       (X
28d0: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
28e0: 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e  Return true (non
28f0: 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e  -zero) if the in
2900: 70 75 74 20 69 73 20 61 20 69 6e 74 65 67 65 72  put is a integer
2910: 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72   that is too lar
2920: 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20  ge.** to fit in 
2930: 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20 6d  32-bits.  This m
2940: 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73  acro is used ins
2950: 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20 74  ide of various t
2960: 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63  estcase().** mac
2970: 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74 68  ros to verify th
2980: 61 74 20 77 65 20 68 61 76 65 20 74 65 73 74 65  at we have teste
2990: 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61 72  d SQLite for lar
29a0: 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 2e  ge-file support.
29b0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f 42  .*/.#define IS_B
29c0: 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58 29  IG_INT(X)  (((X)
29d0: 26 7e 28 69 36 34 29 30 78 66 66 66 66 66 66 66  &~(i64)0xfffffff
29e0: 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  f)!=0)../*.** Th
29f0: 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79  e macro unlikely
2a00: 28 29 20 69 73 20 61 20 68 69 6e 74 20 74 68 61  () is a hint tha
2a10: 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62 6f  t surrounds a bo
2a20: 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73  olean.** express
2a30: 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61  ion that is usua
2a40: 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63 72  lly false.  Macr
2a50: 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72 6f  o likely() surro
2a60: 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61  unds.** a boolea
2a70: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  n expression tha
2a80: 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75  t is usually tru
2a90: 65 2e 20 20 54 68 65 73 65 20 68 69 6e 74 73 20  e.  These hints 
2aa0: 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68 65  could,.** in the
2ab0: 6f 72 79 2c 20 62 65 20 75 73 65 64 20 62 79 20  ory, be used by 
2ac0: 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20  the compiler to 
2ad0: 67 65 6e 65 72 61 74 65 20 62 65 74 74 65 72 20  generate better 
2ae0: 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75 72  code, but.** cur
2af0: 72 65 6e 74 6c 79 20 74 68 65 79 20 61 72 65 20  rently they are 
2b00: 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66 6f  just comments fo
2b10: 72 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 2e  r human readers.
2b20: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b 65  .*/.#define like
2b30: 6c 79 28 58 29 20 20 20 20 28 58 29 0a 23 64 65  ly(X)    (X).#de
2b40: 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29  fine unlikely(X)
2b50: 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65 20    (X)..#include 
2b60: 22 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75 64  "hash.h".#includ
2b70: 65 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e 63  e "parse.h".#inc
2b80: 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23  lude <stdio.h>.#
2b90: 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e  include <stdlib.
2ba0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72  h>.#include <str
2bb0: 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ing.h>.#include 
2bc0: 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c  <assert.h>.#incl
2bd0: 75 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a 0a  ude <stddef.h>..
2be0: 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c 69  /*.** If compili
2bf0: 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73 73  ng for a process
2c00: 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66 6c  or that lacks fl
2c10: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75 70  oating point sup
2c20: 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69 74  port,.** substit
2c30: 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72 20  ute integer for 
2c40: 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a  floating-point.*
2c50: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
2c60: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
2c70: 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f 75  INT.# define dou
2c80: 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  ble sqlite_int64
2c90: 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74 20  .# define float 
2ca0: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64  sqlite_int64.# d
2cb0: 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45  efine LONGDOUBLE
2cc0: 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e 74  _TYPE sqlite_int
2cd0: 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c 49  64.# ifndef SQLI
2ce0: 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20 64  TE_BIG_DBL.#   d
2cf0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
2d00: 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33 5f  _DBL (((sqlite3_
2d10: 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23 20  int64)1)<<50).# 
2d20: 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53  endif.# define S
2d30: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54  QLITE_OMIT_DATET
2d40: 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64 65  IME_FUNCS 1.# de
2d50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fine SQLITE_OMIT
2d60: 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65 66  _TRACE 1.# undef
2d70: 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45 4e   SQLITE_MIXED_EN
2d80: 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41 54  DIAN_64BIT_FLOAT
2d90: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
2da0: 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64 69  HAVE_ISNAN.#endi
2db0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
2dc0: 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69 6e  _BIG_DBL.# defin
2dd0: 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  e SQLITE_BIG_DBL
2de0: 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a 0a   (1e99).#endif..
2df0: 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50 44  /*.** OMIT_TEMPD
2e00: 42 20 69 73 20 73 65 74 20 74 6f 20 31 20 69 66  B is set to 1 if
2e10: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
2e20: 50 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c 20  PDB is defined, 
2e30: 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61 72  or 0.** afterwar
2e40: 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20 6d  d. Having this m
2e50: 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20 74  acro allows us t
2e60: 6f 20 63 61 75 73 65 20 74 68 65 20 43 20 63 6f  o cause the C co
2e70: 6d 70 69 6c 65 72 20 0a 2a 2a 20 74 6f 20 6f 6d  mpiler .** to om
2e80: 69 74 20 63 6f 64 65 20 75 73 65 64 20 62 79 20  it code used by 
2e90: 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74 68  TEMP tables with
2ea0: 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64 65  out messy #ifnde
2eb0: 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f  f statements..*/
2ec0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
2ed0: 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66 69  MIT_TEMPDB.#defi
2ee0: 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 31  ne OMIT_TEMPDB 1
2ef0: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f  .#else.#define O
2f00: 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65 6e  MIT_TEMPDB 0.#en
2f10: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22  dif../*.** The "
2f20: 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75 6d  file format" num
2f30: 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65  ber is an intege
2f40: 72 20 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d  r that is increm
2f50: 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a 2a  ented whenever.*
2f60: 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65 6c  * the VDBE-level
2f70: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68 61   file format cha
2f80: 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  nges.  The follo
2f90: 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66 69  wing macros defi
2fa0: 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64 65  ne the.** the de
2fb0: 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d 61  fault file forma
2fc0: 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62 61  t for new databa
2fd0: 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78 69  ses and the maxi
2fe0: 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a  mum file format.
2ff0: 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62 72  ** that the libr
3000: 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a 2f  ary can read..*/
3010: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
3020: 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  MAX_FILE_FORMAT 
3030: 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  4.#ifndef SQLITE
3040: 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
3050: 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53 51  RMAT.# define SQ
3060: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c  LITE_DEFAULT_FIL
3070: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64 69  E_FORMAT 4.#endi
3080: 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69  f../*.** Determi
3090: 6e 65 20 77 68 65 74 68 65 72 20 74 72 69 67 67  ne whether trigg
30a0: 65 72 73 20 61 72 65 20 72 65 63 75 72 73 69 76  ers are recursiv
30b0: 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54  e by default.  T
30c0: 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63 68  his can be.** ch
30d0: 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69 6d  anged at run-tim
30e0: 65 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d 61  e using a pragma
30f0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
3100: 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55  ITE_DEFAULT_RECU
3110: 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a 23  RSIVE_TRIGGERS.#
3120: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
3130: 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45  EFAULT_RECURSIVE
3140: 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e 64  _TRIGGERS 0.#end
3150: 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64  if../*.** Provid
3160: 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  e a default valu
3170: 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 4d  e for SQLITE_TEM
3180: 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65 20  P_STORE in case 
3190: 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66  it is not specif
31a0: 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f  ied.** on the co
31b0: 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69  mmand-line.*/.#i
31c0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45 4d  fndef SQLITE_TEM
31d0: 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e 65  P_STORE.# define
31e0: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
31f0: 52 45 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51  RE 1.# define SQ
3200: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 5f  LITE_TEMP_STORE_
3210: 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65  xc 1  /* Exclude
3220: 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f   from ctime.c */
3230: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 47  .#endif../*.** G
3240: 43 43 20 64 6f 65 73 20 6e 6f 74 20 64 65 66 69  CC does not defi
3250: 6e 65 20 74 68 65 20 6f 66 66 73 65 74 6f 66 28  ne the offsetof(
3260: 29 20 6d 61 63 72 6f 20 73 6f 20 77 65 27 6c 6c  ) macro so we'll
3270: 20 68 61 76 65 20 74 6f 20 64 6f 20 69 74 0a 2a   have to do it.*
3280: 2a 20 6f 75 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a  * ourselves..*/.
3290: 23 69 66 6e 64 65 66 20 6f 66 66 73 65 74 6f 66  #ifndef offsetof
32a0: 0a 23 64 65 66 69 6e 65 20 6f 66 66 73 65 74 6f  .#define offseto
32b0: 66 28 53 54 52 55 43 54 55 52 45 2c 46 49 45 4c  f(STRUCTURE,FIEL
32c0: 44 29 20 28 28 69 6e 74 29 28 28 63 68 61 72 2a  D) ((int)((char*
32d0: 29 26 28 28 53 54 52 55 43 54 55 52 45 2a 29 30  )&((STRUCTURE*)0
32e0: 29 2d 3e 46 49 45 4c 44 29 29 0a 23 65 6e 64 69  )->FIELD)).#endi
32f0: 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  f../*.** Macros 
3300: 74 6f 20 63 6f 6d 70 75 74 65 20 6d 69 6e 69 6d  to compute minim
3310: 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20 6f  um and maximum o
3320: 66 20 74 77 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a  f two numbers..*
3330: 2f 0a 23 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c  /.#define MIN(A,
3340: 42 29 20 28 28 41 29 3c 28 42 29 3f 28 41 29 3a  B) ((A)<(B)?(A):
3350: 28 42 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 58  (B)).#define MAX
3360: 28 41 2c 42 29 20 28 28 41 29 3e 28 42 29 3f 28  (A,B) ((A)>(B)?(
3370: 41 29 3a 28 42 29 29 0a 0a 2f 2a 0a 2a 2a 20 43  A):(B))../*.** C
3380: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
3390: 68 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73  his machine uses
33a0: 20 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20   EBCDIC.  (Yes, 
33b0: 62 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a  believe it or.**
33c0: 20 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20   not, there are 
33d0: 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f  still machines o
33e0: 75 74 20 74 68 65 72 65 20 74 68 61 74 20 75 73  ut there that us
33f0: 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69  e EBCDIC.).*/.#i
3400: 66 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a  f 'A' == '\301'.
3410: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3420: 45 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23  EBCDIC 1.#else.#
3430: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41   define SQLITE_A
3440: 53 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  SCII 1.#endif../
3450: 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66  *.** Integers of
3460: 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54   known sizes.  T
3470: 68 65 73 65 20 74 79 70 65 64 65 66 73 20 6d 69  hese typedefs mi
3480: 67 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61  ght change for a
3490: 72 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20  rchitectures.** 
34a0: 77 68 65 72 65 20 74 68 65 20 73 69 7a 65 73 20  where the sizes 
34b0: 76 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73  very.  Preproces
34c0: 73 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61  sor macros are a
34d0: 76 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74  vailable so that
34e0: 20 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61   the.** types ca
34f0: 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c  n be convenientl
3500: 79 20 72 65 64 65 66 69 6e 65 64 20 61 74 20 63  y redefined at c
3510: 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69  ompile-type.  Li
3520: 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20  ke this:.**.**  
3530: 20 20 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e         cc '-DUIN
3540: 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c  TPTR_TYPE=long l
3550: 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a  ong int' ....*/.
3560: 23 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54  #ifndef UINT32_T
3570: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
3580: 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66  _UINT32_T.#  def
3590: 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20  ine UINT32_TYPE 
35a0: 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a  uint32_t.# else.
35b0: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32  #  define UINT32
35c0: 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69  _TYPE unsigned i
35d0: 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  nt.# endif.#endi
35e0: 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36  f.#ifndef UINT16
35f0: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
3600: 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64  VE_UINT16_T.#  d
3610: 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50  efine UINT16_TYP
3620: 45 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73  E uint16_t.# els
3630: 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  e.#  define UINT
3640: 31 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  16_TYPE unsigned
3650: 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64   short int.# end
3660: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
3670: 66 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69  f INT16_TYPE.# i
3680: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f  fdef HAVE_INT16_
3690: 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31  T.#  define INT1
36a0: 36 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23  6_TYPE int16_t.#
36b0: 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20   else.#  define 
36c0: 49 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74  INT16_TYPE short
36d0: 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e   int.# endif.#en
36e0: 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54  dif.#ifndef UINT
36f0: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
3700: 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64  AVE_UINT8_T.#  d
3710: 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45  efine UINT8_TYPE
3720: 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a   uint8_t.# else.
3730: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f  #  define UINT8_
3740: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68  TYPE unsigned ch
3750: 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  ar.# endif.#endi
3760: 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54  f.#ifndef INT8_T
3770: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
3780: 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e  _INT8_T.#  defin
3790: 65 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38  e INT8_TYPE int8
37a0: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
37b0: 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69  ine INT8_TYPE si
37c0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
37d0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
37e0: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
37f0: 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f  .# define LONGDO
3800: 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64  UBLE_TYPE long d
3810: 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70  ouble.#endif.typ
3820: 65 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36  edef sqlite_int6
3830: 34 20 69 36 34 3b 20 20 20 20 20 20 20 20 20 20  4 i64;          
3840: 2f 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64  /* 8-byte signed
3850: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
3860: 64 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36  def sqlite_uint6
3870: 34 20 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f  4 u64;         /
3880: 2a 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 8-byte unsigne
3890: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
38a0: 65 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45  edef UINT32_TYPE
38b0: 20 75 33 32 3b 20 20 20 20 20 20 20 20 20 20 20   u32;           
38c0: 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 4-byte unsign
38d0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
38e0: 70 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50  pedef UINT16_TYP
38f0: 45 20 75 31 36 3b 20 20 20 20 20 20 20 20 20 20  E u16;          
3900: 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67   /* 2-byte unsig
3910: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
3920: 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50  ypedef INT16_TYP
3930: 45 20 69 31 36 3b 20 20 20 20 20 20 20 20 20 20  E i16;          
3940: 20 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e    /* 2-byte sign
3950: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
3960: 70 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45  pedef UINT8_TYPE
3970: 20 75 38 3b 20 20 20 20 20 20 20 20 20 20 20 20   u8;            
3980: 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67   /* 1-byte unsig
3990: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
39a0: 79 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45  ypedef INT8_TYPE
39b0: 20 69 38 3b 20 20 20 20 20 20 20 20 20 20 20 20   i8;            
39c0: 20 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e    /* 1-byte sign
39d0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f  ed integer */../
39e0: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f  *.** SQLITE_MAX_
39f0: 55 33 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e  U32 is a u64 con
3a00: 73 74 61 6e 74 20 74 68 61 74 20 69 73 20 74 68  stant that is th
3a10: 65 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61  e maximum u64 va
3a20: 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20  lue.** that can 
3a30: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75  be stored in a u
3a40: 33 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20  32 without loss 
3a50: 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 76 61  of data.  The va
3a60: 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30  lue.** is 0x0000
3a70: 30 30 30 30 66 66 66 66 66 66 66 66 2e 20 20 42  0000ffffffff.  B
3a80: 75 74 20 62 65 63 61 75 73 65 20 6f 66 20 71 75  ut because of qu
3a90: 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d  irks of some com
3aa0: 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61  pilers, we.** ha
3ab0: 76 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68  ve to specify th
3ac0: 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c  e value in the l
3ad0: 65 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61  ess intuitive ma
3ae0: 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23  nner shown:.*/.#
3af0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
3b00: 58 5f 55 33 32 20 20 28 28 28 28 75 36 34 29 31  X_U32  ((((u64)1
3b10: 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a  )<<32)-1)../*.**
3b20: 20 54 68 65 20 64 61 74 61 74 79 70 65 20 75 73   The datatype us
3b30: 65 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69  ed to store esti
3b40: 6d 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d  mates of the num
3b50: 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61  ber of rows in a
3b60: 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
3b70: 65 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20  ex.  This is an 
3b80: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
3b90: 20 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39   type.  For 99.9
3ba0: 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c  % of.** the worl
3bb0: 64 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65  d, a 32-bit inte
3bc0: 67 65 72 20 69 73 20 73 75 66 66 69 63 69 65 6e  ger is sufficien
3bd0: 74 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69 74  t.  But a 64-bit
3be0: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20   integer.** can 
3bf0: 62 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69  be used at compi
3c00: 6c 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72  le-time if desir
3c10: 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ed..*/.#ifdef SQ
3c20: 4c 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53  LITE_64BIT_STATS
3c30: 0a 20 74 79 70 65 64 65 66 20 75 36 34 20 74 52  . typedef u64 tR
3c40: 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d  owcnt;    /* 64-
3c50: 62 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75  bit only if requ
3c60: 65 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65  ested at compile
3c70: 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20  -time */.#else. 
3c80: 74 79 70 65 64 65 66 20 75 33 32 20 74 52 6f 77  typedef u32 tRow
3c90: 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69  cnt;    /* 32-bi
3ca0: 74 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74  t is the default
3cb0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
3cc0: 2a 20 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e  * Estimated quan
3cd0: 74 69 74 69 65 73 20 75 73 65 64 20 66 6f 72 20  tities used for 
3ce0: 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61  query planning a
3cf0: 72 65 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d  re stored as 16-
3d00: 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d  bit.** logarithm
3d10: 73 2e 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79  s.  For quantity
3d20: 20 58 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74   X, the value st
3d30: 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28  ored is 10*log2(
3d40: 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76  X).  This.** giv
3d50: 65 73 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61  es a possible ra
3d60: 6e 67 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66  nge of values of
3d70: 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31   approximately 1
3d80: 2e 30 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36  .0e986 to 1e-986
3d90: 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c  ..** But the all
3da0: 6f 77 65 64 20 76 61 6c 75 65 73 20 61 72 65 20  owed values are 
3db0: 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65  "grainy".  Not e
3dc0: 76 65 72 79 20 76 61 6c 75 65 20 69 73 20 72 65  very value is re
3dd0: 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20  presentable..** 
3de0: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61  For example, qua
3df0: 6e 74 69 74 69 65 73 20 31 36 20 61 6e 64 20 31  ntities 16 and 1
3e00: 37 20 61 72 65 20 62 6f 74 68 20 72 65 70 72 65  7 are both repre
3e10: 73 65 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45  sented by a LogE
3e20: 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f  st.** of 40.  Ho
3e30: 77 65 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67  wever, since Log
3e40: 45 73 74 20 71 75 61 6e 74 61 74 69 74 65 73 20  Est quantatites 
3e50: 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f 20 62  are suppose to b
3e60: 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20  e estimates,.** 
3e70: 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75 65 73  not exact values
3e80: 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69 73 69  , this imprecisi
3e90: 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62  on is not a prob
3ea0: 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45  lem..**.** "LogE
3eb0: 73 74 22 20 69 73 20 73 68 6f 72 74 20 66 6f 72  st" is short for
3ec0: 20 22 4c 6f 67 61 72 69 74 68 69 6d 69 63 20 45   "Logarithimic E
3ed0: 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20  stimate"..**.** 
3ee0: 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20  Examples:.**    
3ef0: 20 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20 20    1 -> 0        
3f00: 20 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20 20        20 -> 43  
3f10: 20 20 20 20 20 20 20 20 31 30 30 30 30 20 2d 3e          10000 ->
3f20: 20 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d   132.**      2 -
3f30: 3e 20 31 30 20 20 20 20 20 20 20 20 20 20 20 20  > 10            
3f40: 20 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20 20   25 -> 46       
3f50: 20 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36 0a     25000 -> 146.
3f60: 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36 20  **      3 -> 16 
3f70: 20 20 20 20 20 20 20 20 20 20 20 31 30 30 20 2d             100 -
3f80: 3e 20 36 36 20 20 20 20 20 20 20 20 31 30 30 30  > 66        1000
3f90: 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20  000 -> 199.**   
3fa0: 20 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20 20     4 -> 20      
3fb0: 20 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39 20       1000 -> 99 
3fc0: 20 20 20 20 20 20 20 31 30 34 38 35 37 36 20 2d         1048576 -
3fd0: 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30 20  > 200.**     10 
3fe0: 2d 3e 20 33 33 20 20 20 20 20 20 20 20 20 20 20  -> 33           
3ff0: 31 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20 34  1024 -> 100    4
4000: 32 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32 30  294967296 -> 320
4010: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73  .**.** The LogEs
4020: 74 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69 76  t can be negativ
4030: 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66 72  e to indicate fr
4040: 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e  actional values.
4050: 20 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a   .** Examples:.*
4060: 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20 2d  *.**    0.5 -> -
4070: 31 30 20 20 20 20 20 20 20 20 20 20 20 30 2e 31  10           0.1
4080: 20 2d 3e 20 2d 33 33 20 20 20 20 20 20 20 20 30   -> -33        0
4090: 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a  .0625 -> -40.*/.
40a0: 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59  typedef INT16_TY
40b0: 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a  PE LogEst;../*.*
40c0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
40d0: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68  rmine whether th
40e0: 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62 69 67  e machine is big
40f0: 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64 69 61   or little endia
4100: 6e 2c 0a 2a 2a 20 65 76 61 6c 75 61 74 65 64 20  n,.** evaluated 
4110: 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2f 0a 23  at runtime..*/.#
4120: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  ifdef SQLITE_AMA
4130: 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e 73 74 20  LGAMATION.const 
4140: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d  int sqlite3one =
4150: 20 31 3b 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e   1;.#else.extern
4160: 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74   const int sqlit
4170: 65 33 6f 6e 65 3b 0a 23 65 6e 64 69 66 0a 23 69  e3one;.#endif.#i
4180: 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29 20  f defined(i386) 
4190: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
41a0: 36 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  6__) || defined(
41b0: 5f 4d 5f 49 58 38 36 29 5c 0a 20 20 20 20 20 20  _M_IX86)\.      
41c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
41d0: 20 20 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65         || define
41e0: 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64  d(__x86_64) || d
41f0: 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f  efined(__x86_64_
4200: 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  _).# define SQLI
4210: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
4220: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
4230: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31  E_LITTLEENDIAN 1
4240: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4250: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51  _UTF16NATIVE  SQ
4260: 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6c  LITE_UTF16LE.#el
4270: 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  se.# define SQLI
4280: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
4290: 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69  (*(char *)(&sqli
42a0: 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65  te3one)==0).# de
42b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
42c0: 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72  LEENDIAN (*(char
42d0: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
42e0: 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==1).# define SQ
42f0: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
4300: 20 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49   (SQLITE_BIGENDI
4310: 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42  AN?SQLITE_UTF16B
4320: 45 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  E:SQLITE_UTF16LE
4330: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4340: 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68  Constants for th
4350: 65 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d  e largest and sm
4360: 61 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20  allest possible 
4370: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
4380: 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65  tegers..** These
4390: 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69   macros are desi
43a0: 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72  gned to work cor
43b0: 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33  rectly on both 3
43c0: 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74  2-bit and 64-bit
43d0: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a  .** compilers..*
43e0: 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53  /.#define LARGES
43f0: 54 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66  T_INT64  (0xffff
4400: 66 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66  ffff|(((i64)0x7f
4410: 66 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64  ffffff)<<32)).#d
4420: 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49  efine SMALLEST_I
4430: 4e 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20  NT64 (((i64)-1) 
4440: 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29  - LARGEST_INT64)
4450: 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64 20 75  ../* .** Round u
4460: 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68  p a number to th
4470: 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75  e next larger mu
4480: 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68  ltiple of 8.  Th
4490: 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f  is is used.** to
44a0: 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c   force 8-byte al
44b0: 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69  ignment on 64-bi
44c0: 74 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2e  t architectures.
44d0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
44e0: 44 38 28 78 29 20 20 20 20 20 28 28 28 78 29 2b  D8(x)     (((x)+
44f0: 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f  7)&~7)../*.** Ro
4500: 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20  und down to the 
4510: 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65  nearest multiple
4520: 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65   of 8.*/.#define
4530: 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28   ROUNDDOWN8(x) (
4540: 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41  (x)&~7)../*.** A
4550: 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
4560: 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67  ointer X is alig
4570: 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65  ned to an 8-byte
4580: 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73   boundary.  This
4590: 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65  .** macro is use
45a0: 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73  d only within as
45b0: 73 65 72 74 28 29 20 74 6f 20 76 65 72 69 66 79  sert() to verify
45c0: 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67   that the code g
45d0: 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e  ets.** all align
45e0: 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e  ment restriction
45f0: 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a  s correct..**.**
4600: 20 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49   Except, if SQLI
4610: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
4620: 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69  D_MALLOC is defi
4630: 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ned, then the.**
4640: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c   underlying mall
4650: 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 69 6f  oc() implementio
4660: 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75  n might return u
4670: 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64  s 4-byte aligned
4680: 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49  .** pointers.  I
4690: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c  n that case, onl
46a0: 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20  y verify 4-byte 
46b0: 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69  alignment..*/.#i
46c0: 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  fdef SQLITE_4_BY
46d0: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
46e0: 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54  C.# define EIGHT
46f0: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
4700: 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28  X)   ((((char*)(
4710: 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33  X) - (char*)0)&3
4720: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  )==0).#else.# de
4730: 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f  fine EIGHT_BYTE_
4740: 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28  ALIGNMENT(X)   (
4750: 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28  (((char*)(X) - (
4760: 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a  char*)0)&7)==0).
4770: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69  #endif../*.** Di
4780: 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c  sable MMAP on pl
4790: 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74  atforms where it
47a0: 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74   is known to not
47b0: 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66   work.*/.#if def
47c0: 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f  ined(__OpenBSD__
47d0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51  ) || defined(__Q
47e0: 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66  NXNTO__).# undef
47f0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
4800: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
4810: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
4820: 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  IZE 0.#endif../*
4830: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69  .** Default maxi
4840: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f  mum size of memo
4850: 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72  ry used by memor
4860: 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20  y-mapped I/O in 
4870: 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65  the VFS.*/.#ifde
4880: 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e  f __APPLE__.# in
4890: 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e  clude <TargetCon
48a0: 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 20 69  ditionals.h>.# i
48b0: 66 20 54 41 52 47 45 54 5f 4f 53 5f 49 50 48 4f  f TARGET_OS_IPHO
48c0: 4e 45 0a 23 20 20 20 75 6e 64 65 66 20 53 51 4c  NE.#   undef SQL
48d0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
48e0: 45 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  E.#   define SQL
48f0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
4900: 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  E 0.# endif.#end
4910: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
4920: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
4930: 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c  # if defined(__l
4940: 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64  inux__) \.  || d
4950: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c  efined(_WIN32) \
4960: 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f  .  || (defined(_
4970: 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66  _APPLE__) && def
4980: 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20  ined(__MACH__)) 
4990: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
49a0: 5f 73 75 6e 29 0a 23 20 20 20 64 65 66 69 6e 65  _sun).#   define
49b0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
49c0: 5f 53 49 5a 45 20 30 78 37 66 66 66 30 30 30 30  _SIZE 0x7fff0000
49d0: 20 20 2f 2a 20 32 31 34 37 34 31 38 31 31 32 20    /* 2147418112 
49e0: 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65  */.# else.#   de
49f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
4a00: 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e  MMAP_SIZE 0.# en
4a10: 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  dif.# define SQL
4a20: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
4a30: 45 5f 78 63 20 31 20 2f 2a 20 65 78 63 6c 75 64  E_xc 1 /* exclud
4a40: 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a  e from ctime.c *
4a50: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
4a60: 54 68 65 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  The default MMAP
4a70: 5f 53 49 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e  _SIZE is zero on
4a80: 20 61 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20   all platforms. 
4a90: 20 4f 72 2c 20 65 76 65 6e 20 69 66 20 61 20 6c   Or, even if a l
4aa0: 61 72 67 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74  arger.** default
4ab0: 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 73 70   MMAP_SIZE is sp
4ac0: 65 63 69 66 69 65 64 20 61 74 20 63 6f 6d 70 69  ecified at compi
4ad0: 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75  le-time, make su
4ae0: 72 65 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a  re that it does.
4af0: 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 20 74 68  ** not exceed th
4b00: 65 20 6d 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73  e maximum mmap s
4b10: 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ize..*/.#ifndef 
4b20: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
4b30: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
4b40: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
4b50: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 64  _MMAP_SIZE 0.# d
4b60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
4b70: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78  AULT_MMAP_SIZE_x
4b80: 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20  c 1  /* Exclude 
4b90: 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a  from ctime.c */.
4ba0: 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
4bb0: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
4bc0: 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  IZE>SQLITE_MAX_M
4bd0: 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66  MAP_SIZE.# undef
4be0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
4bf0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69  MMAP_SIZE.# defi
4c00: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
4c10: 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49  T_MMAP_SIZE SQLI
4c20: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
4c30: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f  .#endif../*.** O
4c40: 6e 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54  nly one of SQLIT
4c50: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f  E_ENABLE_STAT3 o
4c60: 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  r SQLITE_ENABLE_
4c70: 53 54 41 54 34 20 63 61 6e 20 62 65 20 64 65 66  STAT4 can be def
4c80: 69 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74  ined..** Priorit
4c90: 79 20 69 73 20 67 69 76 65 6e 20 74 6f 20 53 51  y is given to SQ
4ca0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
4cb0: 34 2e 20 20 49 66 20 65 69 74 68 65 72 20 61 72  4.  If either ar
4cc0: 65 20 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a  e defined, also.
4cd0: 2a 2a 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ** define SQLITE
4ce0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
4cf0: 5f 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66  _STAT4.*/.#ifdef
4d00: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
4d10: 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c  TAT4.# undef SQL
4d20: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
4d30: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4d40: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
4d50: 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53  _STAT4 1.#elif S
4d60: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
4d70: 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  T3.# define SQLI
4d80: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
4d90: 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66  OR_STAT4 1.#elif
4da0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
4db0: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20  TAT3_OR_STAT4.# 
4dc0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
4dd0: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
4de0: 54 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  T4.#endif../*.**
4df0: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
4e00: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
4e10: 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
4e20: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75 73  to store the bus
4e30: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
4e40: 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65  lback for a give
4e50: 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e  n sqlite handle.
4e60: 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69   .**.** The sqli
4e70: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
4e80: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
4e90: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
4ea0: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
4eb0: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
4ec0: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
4ed0: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
4ee0: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
4ef0: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
4f00: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
4f10: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
4f20: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
4f30: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
4f40: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
4f50: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
4f60: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
4f70: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
4f80: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
4f90: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
4fa0: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
4fb0: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e  r {.  int (*xFun
4fc0: 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20  c)(void *,int); 
4fd0: 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c   /* The busy cal
4fe0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
4ff0: 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  *pArg;          
5000: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
5010: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
5020: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
5030: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
5040: 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74      /* Increment
5050: 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75 73  ed with each bus
5060: 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  y call */.};../*
5070: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
5080: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
5090: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
50a0: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
50b0: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
50c0: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
50d0: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
50e0: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
50f0: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
5100: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
5110: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
5120: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
5130: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
5140: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
5150: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
5160: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
5170: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
5180: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
5190: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
51a0: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
51b0: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
51c0: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
51d0: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
51e0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
51f0: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
5200: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
5210: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
5220: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
5230: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
5240: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
5250: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
5260: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
5270: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
5280: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
5290: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
52a0: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
52b0: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
52c0: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
52d0: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
52e0: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
52f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
5300: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
5310: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
5320: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
5330: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
5340: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
5350: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
5360: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
5370: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
5380: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
5390: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
53a0: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a 2a  nstead of the .*
53b0: 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20  * one parameter 
53c0: 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73  that destructors
53d0: 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20   normally want. 
53e0: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69   So we have to i
53f0: 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68 69  ntroduce .** thi
5400: 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68  s magic value th
5410: 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77  at the code know
5420: 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66  s to handle diff
5430: 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a 2a  erently.  Any .*
5440: 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77  * pointer will w
5450: 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67  ork here as long
5460: 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69 6e   as it is distin
5470: 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53  ct from SQLITE_S
5480: 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c  TATIC.** and SQL
5490: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a  ITE_TRANSIENT..*
54a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
54b0: 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c  _DYNAMIC   ((sql
54c0: 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f  ite3_destructor_
54d0: 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c  type)sqlite3Mall
54e0: 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57  ocSize)../*.** W
54f0: 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  hen SQLITE_OMIT_
5500: 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20  WSD is defined, 
5510: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
5520: 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72  e target platfor
5530: 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75  m does.** not su
5540: 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53  pport Writable S
5550: 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44 29  tatic Data (WSD)
5560: 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20   such as global 
5570: 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69 61  and static varia
5580: 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72  bles..** All var
5590: 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68  iables must eith
55a0: 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61  er be on the sta
55b0: 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c  ck or dynamicall
55c0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d  y allocated from
55d0: 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57  .** the heap.  W
55e0: 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70  hen WSD is unsup
55f0: 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72 69  ported, the vari
5600: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
5610: 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74  s scattered.** t
5620: 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51  hroughout the SQ
5630: 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62  Lite code must b
5640: 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20  ecome constants 
5650: 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53 51  instead.  The SQ
5660: 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72  LITE_WSD.** macr
5670: 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68  o is used for th
5680: 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64  is purpose.  And
5690: 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65   instead of refe
56a0: 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69  rencing the vari
56b0: 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79  able.** directly
56c0: 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e  , we use its con
56d0: 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74  stant as a key t
56e0: 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e  o lookup the run
56f0: 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a  -time allocated.
5700: 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20 68  ** buffer that h
5710: 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61 62  olds real variab
5720: 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e  le.  The constan
5730: 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e  t is also the in
5740: 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72  itializer.** for
5750: 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c   the run-time al
5760: 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a  located buffer..
5770: 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75  **.** In the usu
5780: 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57 53  al case where WS
5790: 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20  D is supported, 
57a0: 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61  the SQLITE_WSD a
57b0: 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63  nd GLOBAL.** mac
57c0: 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70  ros become no-op
57d0: 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20  s and have zero 
57e0: 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61  performance impa
57f0: 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ct..*/.#ifdef SQ
5800: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
5810: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
5820: 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69  SD const.  #defi
5830: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28  ne GLOBAL(t,v) (
5840: 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64  *(t*)sqlite3_wsd
5850: 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76  _find((void*)&(v
5860: 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20  ), sizeof(v))). 
5870: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
5880: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f  GlobalConfig GLO
5890: 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74  BAL(struct Sqlit
58a0: 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65  e3Config, sqlite
58b0: 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73  3Config).  int s
58c0: 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28  qlite3_wsd_init(
58d0: 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20  int N, int J);. 
58e0: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77   void *sqlite3_w
58f0: 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c  sd_find(void *K,
5900: 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20   int L);.#else. 
5910: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
5920: 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20 47  WSD .  #define G
5930: 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23  LOBAL(t,v) v.  #
5940: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
5950: 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74  obalConfig sqlit
5960: 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a  e3Config.#endif.
5970: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
5980: 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20  wing macros are 
5990: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
59a0: 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
59b0: 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b  gs and to.** mak
59c0: 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75  e it clear to hu
59d0: 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e  man readers when
59e0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
59f0: 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72  meter is deliber
5a00: 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20 75  ately .** left u
5a10: 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65  nused within the
5a20: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
5a30: 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c  ion. This usuall
5a40: 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a  y happens when.*
5a50: 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  * a function is 
5a60: 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e  called via a fun
5a70: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46  ction pointer. F
5a80: 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20 0a  or example the .
5a90: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
5aa0: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72  n of an SQL aggr
5ab0: 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62  egate step callb
5ac0: 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20  ack may not use 
5ad0: 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  the.** parameter
5ae0: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
5af0: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
5b00: 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  nts passed to th
5b10: 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20  e aggregate,.** 
5b20: 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74  if it knows that
5b30: 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65   this is enforce
5b40: 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a  d elsewhere..**.
5b50: 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69  ** When a functi
5b60: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
5b70: 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20  not used at all 
5b80: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
5b90: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a  of a function,.*
5ba0: 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c  * it is generall
5bb0: 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64  y named "NotUsed
5bc0: 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20  " or "NotUsed2" 
5bd0: 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65  to make things e
5be0: 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20  ven clearer..** 
5bf0: 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d  However, these m
5c00: 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62  acros may also b
5c10: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
5c20: 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61  ss warnings rela
5c30: 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65  ted to.** parame
5c40: 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72  ters that may or
5c50: 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64   may not be used
5c60: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f   depending on co
5c70: 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
5c80: 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c  s..** For exampl
5c90: 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65  e those paramete
5ca0: 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20  rs only used in 
5cb0: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
5cc0: 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a  nts. In these.**
5cd0: 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61 6d   cases the param
5ce0: 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20  eters are named 
5cf0: 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61 6c  as per the usual
5d00: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f   conventions..*/
5d10: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
5d20: 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f  PARAMETER(x) (vo
5d30: 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55  id)(x).#define U
5d40: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32  NUSED_PARAMETER2
5d50: 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52  (x,y) UNUSED_PAR
5d60: 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44  AMETER(x),UNUSED
5d70: 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f  _PARAMETER(y)../
5d80: 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66  *.** Forward ref
5d90: 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63  erences to struc
5da0: 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66  tures.*/.typedef
5db0: 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20   struct AggInfo 
5dc0: 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  AggInfo;.typedef
5dd0: 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74   struct AuthCont
5de0: 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b  ext AuthContext;
5df0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5e00: 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f  AutoincInfo Auto
5e10: 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  incInfo;.typedef
5e20: 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20 42   struct Bitvec B
5e30: 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73  itvec;.typedef s
5e40: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f  truct CollSeq Co
5e50: 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73  llSeq;.typedef s
5e60: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c  truct Column Col
5e70: 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  umn;.typedef str
5e80: 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64  uct Db Db;.typed
5e90: 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61  ef struct Schema
5ea0: 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66   Schema;.typedef
5eb0: 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78 70   struct Expr Exp
5ec0: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
5ed0: 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c  t ExprList ExprL
5ee0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
5ef0: 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78 70  uct ExprSpan Exp
5f00: 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20 73  rSpan;.typedef s
5f10: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
5f20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5f30: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
5f40: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
5f50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
5f60: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
5f70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
5f80: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
5f90: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
5fa0: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
5fb0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
5fc0: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
5fd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5fe0: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
5ff0: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
6000: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
6010: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
6020: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
6030: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
6040: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
6050: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
6060: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
6070: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
6080: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
6090: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
60a0: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
60b0: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
60c0: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
60d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
60e0: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
60f0: 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77 53  edef struct RowS
6100: 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64  et RowSet;.typed
6110: 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70 6f  ef struct Savepo
6120: 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74  int Savepoint;.t
6130: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
6140: 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70  lect Select;.typ
6150: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
6160: 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65 73  ctDest SelectDes
6170: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
6180: 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73  t SrcList SrcLis
6190: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
61a0: 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41 63  t StrAccum StrAc
61b0: 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72  cum;.typedef str
61c0: 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b  uct Table Table;
61d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
61e0: 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c  TableLock TableL
61f0: 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ock;.typedef str
6200: 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b  uct Token Token;
6210: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6220: 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b  Trigger Trigger;
6230: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6240: 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67  TriggerPrg Trigg
6250: 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73  erPrg;.typedef s
6260: 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
6270: 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74  p TriggerStep;.t
6280: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e  ypedef struct Un
6290: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70  packedRecord Unp
62a0: 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70  ackedRecord;.typ
62b0: 65 64 65 66 20 73 74 72 75 63 74 20 56 54 61 62  edef struct VTab
62c0: 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64  le VTable;.typed
62d0: 65 66 20 73 74 72 75 63 74 20 56 74 61 62 43 74  ef struct VtabCt
62e0: 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64  x VtabCtx;.typed
62f0: 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72  ef struct Walker
6300: 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66   Walker;.typedef
6310: 20 73 74 72 75 63 74 20 57 68 65 72 65 49 6e 66   struct WhereInf
6320: 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 0a 2f 2a  o WhereInfo;../*
6330: 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69  .** Defer sourci
6340: 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74  ng vdbe.h and bt
6350: 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65  ree.h until afte
6360: 72 20 74 68 65 20 22 75 38 22 20 61 6e 64 20 0a  r the "u8" and .
6370: 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22  ** "BusyHandler"
6380: 20 74 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e   typedefs. vdbe.
6390: 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20  h also requires 
63a0: 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61  a few of the opa
63b0: 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  que.** pointer t
63c0: 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44  ypes (i.e. FuncD
63d0: 65 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76  ef) defined abov
63e0: 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  e..*/.#include "
63f0: 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64  btree.h".#includ
6400: 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c  e "vdbe.h".#incl
6410: 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69  ude "pager.h".#i
6420: 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68  nclude "pcache.h
6430: 22 0a 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e  "..#include "os.
6440: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74  h".#include "mut
6450: 65 78 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  ex.h".../*.** Ea
6460: 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ch database file
6470: 20 74 6f 20 62 65 20 61 63 63 65 73 73 65 64 20   to be accessed 
6480: 62 79 20 74 68 65 20 73 79 73 74 65 6d 20 69 73  by the system is
6490: 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
64a0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
64b0: 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65   structure.  The
64c0: 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20  re are normally 
64d0: 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72  two of these str
64e0: 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68  uctures.** in th
64f0: 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61  e sqlite.aDb[] a
6500: 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73  rray.  aDb[0] is
6510: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
6520: 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61  se file and.** a
6530: 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74  Db[1] is the dat
6540: 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
6550: 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72  to hold temporar
6560: 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74  y tables.  Addit
6570: 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73  ional.** databas
6580: 65 73 20 6d 61 79 20 62 65 20 61 74 74 61 63 68  es may be attach
6590: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62  ed..*/.struct Db
65a0: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
65b0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ;         /* Nam
65c0: 65 20 6f 66 20 74 68 69 73 20 64 61 74 61 62 61  e of this databa
65d0: 73 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  se */.  Btree *p
65e0: 42 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  Bt;          /* 
65f0: 54 68 65 20 42 2a 54 72 65 65 20 73 74 72 75 63  The B*Tree struc
6600: 74 75 72 65 20 66 6f 72 20 74 68 69 73 20 64 61  ture for this da
6610: 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20  tabase file */. 
6620: 20 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c   u8 safety_level
6630: 3b 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67  ;     /* How agg
6640: 72 65 73 73 69 76 65 20 61 74 20 73 79 6e 63 69  ressive at synci
6650: 6e 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20  ng data to disk 
6660: 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
6670: 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69  hema;     /* Poi
6680: 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61 73 65  nter to database
6690: 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c   schema (possibl
66a0: 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a  y shared) */.};.
66b0: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
66c0: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
66d0: 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 73 74  ing structure st
66e0: 6f 72 65 73 20 61 20 64 61 74 61 62 61 73 65 20  ores a database 
66f0: 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f  schema..**.** Mo
6700: 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  st Schema object
6710: 73 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64  s are associated
6720: 20 77 69 74 68 20 61 20 42 74 72 65 65 2e 20 20   with a Btree.  
6730: 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73  The exception is
6740: 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66  .** the Schema f
6750: 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  or the TEMP data
6760: 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44  baes (sqlite3.aD
6770: 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20 66  b[1]) which is f
6780: 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a  ree-standing..**
6790: 20 49 6e 20 73 68 61 72 65 64 20 63 61 63 68 65   In shared cache
67a0: 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20   mode, a single 
67b0: 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61  Schema object ca
67c0: 6e 20 62 65 20 73 68 61 72 65 64 20 62 79 20 6d  n be shared by m
67d0: 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65  ultiple.** Btree
67e0: 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20  s that refer to 
67f0: 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79  the same underly
6800: 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a  ing BtShared obj
6810: 65 63 74 2e 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65  ect..** .** Sche
6820: 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61  ma objects are a
6830: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61  utomatically dea
6840: 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68  llocated when th
6850: 65 20 6c 61 73 74 20 42 74 72 65 65 20 74 68 61  e last Btree tha
6860: 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20  t.** references 
6870: 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65  them is destroye
6880: 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53 63  d.   The TEMP Sc
6890: 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79  hema is manually
68a0: 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c   freed by.** sql
68b0: 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a  ite3_close()..*.
68c0: 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73 74  ** A thread must
68d0: 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75   be holding a mu
68e0: 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65  tex on the corre
68f0: 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69  sponding Btree i
6900: 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63  n order.** to ac
6910: 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74  cess Schema cont
6920: 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69  ent.  This impli
6930: 65 73 20 74 68 61 74 20 74 68 65 20 74 68 72 65  es that the thre
6940: 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a  ad must also be.
6950: 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74  ** holding a mut
6960: 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65  ex on the sqlite
6970: 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69  3 connection poi
6980: 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74  nter that owns t
6990: 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72  he Btree..** For
69a0: 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20   a TEMP Schema, 
69b0: 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74  only the connect
69c0: 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71  ion mutex is req
69d0: 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  uired..*/.struct
69e0: 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20   Schema {.  int 
69f0: 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20  schema_cookie;  
6a00: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63 68   /* Database sch
6a10: 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  ema version numb
6a20: 65 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65  er for this file
6a30: 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72   */.  int iGener
6a40: 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65  ation;     /* Ge
6a50: 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
6a60: 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77  .  Incremented w
6a70: 69 74 68 20 65 61 63 68 20 63 68 61 6e 67 65 20  ith each change 
6a80: 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73  */.  Hash tblHas
6a90: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  h;        /* All
6aa0: 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20   tables indexed 
6ab0: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
6ac0: 68 20 69 64 78 48 61 73 68 3b 20 20 20 20 20 20  h idxHash;      
6ad0: 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29    /* All (named)
6ae0: 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64   indices indexed
6af0: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
6b00: 73 68 20 74 72 69 67 48 61 73 68 3b 20 20 20 20  sh trigHash;    
6b10: 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65     /* All trigge
6b20: 72 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  rs indexed by na
6b30: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65  me */.  Hash fke
6b40: 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  yHash;       /* 
6b50: 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  All foreign keys
6b60: 20 62 79 20 72 65 66 65 72 65 6e 63 65 64 20 74   by referenced t
6b70: 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  able name */.  T
6b80: 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20  able *pSeqTab;  
6b90: 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74      /* The sqlit
6ba0: 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65  e_sequence table
6bb0: 20 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43   used by AUTOINC
6bc0: 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66  REMENT */.  u8 f
6bd0: 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20  ile_format;     
6be0: 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61   /* Schema forma
6bf0: 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68  t version for th
6c00: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20  is file */.  u8 
6c10: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
6c20: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
6c30: 6e 67 20 75 73 65 64 20 62 79 20 74 68 69 73 20  ng used by this 
6c40: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31  database */.  u1
6c50: 36 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  6 flags;        
6c60: 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f     /* Flags asso
6c70: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
6c80: 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74   schema */.  int
6c90: 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20   cache_size;    
6ca0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
6cb0: 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74  ages to use in t
6cc0: 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a  he cache */.};..
6cd0: 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  /*.** These macr
6ce0: 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  os can be used t
6cf0: 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20  o test, set, or 
6d00: 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68  clear bits in th
6d10: 65 20 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61  e .** Db.pSchema
6d20: 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ->flags field..*
6d30: 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 50  /.#define DbHasP
6d40: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
6d50: 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d     (((D)->aDb[I]
6d60: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26  .pSchema->flags&
6d70: 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
6d80: 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65  ne DbHasAnyPrope
6d90: 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44  rty(D,I,P)  (((D
6da0: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
6db0: 61 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30  a->flags&(P))!=0
6dc0: 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65 74 50  ).#define DbSetP
6dd0: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
6de0: 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70     (D)->aDb[I].p
6df0: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 7c 3d 28  Schema->flags|=(
6e00: 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65  P).#define DbCle
6e10: 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  arProperty(D,I,P
6e20: 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e  )   (D)->aDb[I].
6e30: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 3d  pSchema->flags&=
6e40: 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ~(P)../*.** Allo
6e50: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74  wed values for t
6e60: 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66  he DB.pSchema->f
6e70: 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a  lags field..**.*
6e80: 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c  * The DB_SchemaL
6e90: 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20 73 65  oaded flag is se
6ea0: 74 20 61 66 74 65 72 20 74 68 65 20 64 61 74 61  t after the data
6eb0: 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20  base schema has 
6ec0: 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74  been.** read int
6ed0: 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20  o internal hash 
6ee0: 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42  tables..**.** DB
6ef0: 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65  _UnresetViews me
6f00: 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20  ans that one or 
6f10: 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76 65 20  more views have 
6f20: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61  column names tha
6f30: 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66  t.** have been f
6f40: 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74  illed out.  If t
6f50: 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  he schema change
6f60: 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20  s, these column 
6f70: 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63  names might.** c
6f80: 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68  hanges and so th
6f90: 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64  e view will need
6fa0: 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f   to be reset..*/
6fb0: 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65  .#define DB_Sche
6fc0: 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30  maLoaded    0x00
6fd0: 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d  01  /* The schem
6fe0: 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65  a has been loade
6ff0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  d */.#define DB_
7000: 55 6e 72 65 73 65 74 56 69 65 77 73 20 20 20 20  UnresetViews    
7010: 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20  0x0002  /* Some 
7020: 76 69 65 77 73 20 68 61 76 65 20 64 65 66 69 6e  views have defin
7030: 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ed column names 
7040: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d  */.#define DB_Em
7050: 70 74 79 20 20 20 20 20 20 20 20 20 20 20 30 78  pty           0x
7060: 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c  0004  /* The fil
7070: 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67  e is empty (leng
7080: 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a  th 0 bytes) */..
7090: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  /*.** The number
70a0: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69   of different ki
70b0: 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68  nds of things th
70c0: 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65  at can be limite
70d0: 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73  d.** using the s
70e0: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69  qlite3_limit() i
70f0: 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65  nterface..*/.#de
7100: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49  fine SQLITE_N_LI
7110: 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49  MIT (SQLITE_LIMI
7120: 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 2b  T_TRIGGER_DEPTH+
7130: 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73  1)../*.** Lookas
7140: 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20  ide malloc is a 
7150: 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a  set of fixed-siz
7160: 65 20 62 75 66 66 65 72 73 20 74 68 61 74 20 63  e buffers that c
7170: 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f  an be used.** to
7180: 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74   satisfy small t
7190: 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20  ransient memory 
71a0: 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65  allocation reque
71b0: 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a  sts for objects.
71c0: 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ** associated wi
71d0: 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  th a particular 
71e0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
71f0: 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66  ion.  The use of
7200: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** lookaside ma
7210: 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20  lloc provides a 
7220: 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66  significant perf
7230: 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d  ormance enhancem
7240: 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31  ent.** (approx 1
7250: 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20  0%) by avoiding 
7260: 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f  numerous malloc/
7270: 66 72 65 65 20 72 65 71 75 65 73 74 73 20 77 68  free requests wh
7280: 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53  ile parsing.** S
7290: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  QL statements..*
72a0: 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69  *.** The Lookasi
72b0: 64 65 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  de structure hol
72c0: 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ds configuration
72d0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
72e0: 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73  ut the.** lookas
72f0: 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79  ide malloc subsy
7300: 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69  stem.  Each avai
7310: 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  lable memory all
7320: 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68  ocation in.** th
7330: 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73  e lookaside subs
7340: 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20  ystem is stored 
7350: 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  on a linked list
7360: 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f   of LookasideSlo
7370: 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a  t.** objects..**
7380: 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c  .** Lookaside al
7390: 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e  locations are on
73a0: 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f  ly allowed for o
73b0: 62 6a 65 63 74 73 20 74 68 61 74 20 61 72 65 20  bjects that are 
73c0: 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69  associated.** wi
73d0: 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  th a particular 
73e0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
73f0: 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68  ion.  Hence, sch
7400: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ema information 
7410: 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f  cannot.** be sto
7420: 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65  red in lookaside
7430: 20 62 65 63 61 75 73 65 20 69 6e 20 73 68 61 72   because in shar
7440: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68  ed cache mode th
7450: 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  e schema informa
7460: 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65  tion.** is share
7470: 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61  d by multiple da
7480: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
7490: 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20  ns.  Therefore, 
74a0: 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a  while parsing.**
74b0: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
74c0: 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69  ion, the Lookasi
74d0: 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67  de.bEnabled flag
74e0: 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74   is cleared so t
74f0: 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65  hat.** lookaside
7500: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
7510: 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e   not used to con
7520: 73 74 72 75 63 74 20 74 68 65 20 73 63 68 65 6d  struct the schem
7530: 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74  a objects..*/.st
7540: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b  ruct Lookaside {
7550: 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20  .  u16 sz;      
7560: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
7570: 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66 65  ze of each buffe
7580: 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  r in bytes */.  
7590: 75 38 20 62 45 6e 61 62 6c 65 64 3b 20 20 20 20  u8 bEnabled;    
75a0: 20 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 73 65          /* False
75b0: 20 74 6f 20 64 69 73 61 62 6c 65 20 6e 65 77 20   to disable new 
75c0: 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  lookaside alloca
75d0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62 4d  tions */.  u8 bM
75e0: 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20  alloced;        
75f0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53     /* True if pS
7600: 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72  tart obtained fr
7610: 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  om sqlite3_mallo
7620: 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75  c() */.  int nOu
7630: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
7640: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75   /* Number of bu
7650: 66 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20  ffers currently 
7660: 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20  checked out */. 
7670: 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20   int mxOut;     
7680: 20 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68           /* High
7690: 77 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e  water mark for n
76a0: 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53  Out */.  int anS
76b0: 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20  tat[3];         
76c0: 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a   /* 0: hits.  1:
76d0: 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32   size misses.  2
76e0: 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f  : full misses */
76f0: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
7700: 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69   *pFree;   /* Li
7710: 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  st of available 
7720: 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69  buffers */.  voi
7730: 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20  d *pStart;      
7740: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79       /* First by
7750: 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  te of available 
7760: 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a  memory space */.
7770: 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20    void *pEnd;   
7780: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
7790: 73 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64  st byte past end
77a0: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70   of available sp
77b0: 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74  ace */.};.struct
77c0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b   LookasideSlot {
77d0: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
77e0: 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e   *pNext;    /* N
77f0: 65 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68  ext buffer in th
7800: 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62  e list of free b
7810: 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  uffers */.};../*
7820: 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65  .** A hash table
7830: 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64 65   for function de
7840: 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  finitions..**.**
7850: 20 48 61 73 68 20 65 61 63 68 20 46 75 6e 63 44   Hash each FuncD
7860: 65 66 20 73 74 72 75 63 74 75 72 65 20 69 6e 74  ef structure int
7870: 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  o one of the Fun
7880: 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f  cDefHash.a[] slo
7890: 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e  ts..** Collision
78a0: 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e  s are on the Fun
78b0: 63 44 65 66 2e 70 48 61 73 68 20 63 68 61 69 6e  cDef.pHash chain
78c0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
78d0: 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63  DefHash {.  Func
78e0: 44 65 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20 20  Def *a[23];     
78f0: 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20    /* Hash table 
7900: 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  for functions */
7910: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  .};../*.** Each 
7920: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
7930: 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ion is an instan
7940: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
7950: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
7960: 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  /.struct sqlite3
7970: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73   {.  sqlite3_vfs
7980: 20 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20 20   *pVfs;         
7990: 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61     /* OS Interfa
79a0: 63 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56  ce */.  struct V
79b0: 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20  dbe *pVdbe;     
79c0: 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
79d0: 20 61 63 74 69 76 65 20 76 69 72 74 75 61 6c 20   active virtual 
79e0: 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f  machines */.  Co
79f0: 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c  llSeq *pDfltColl
7a00: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
7a10: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
7a20: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42  ting sequence (B
7a30: 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69  INARY) */.  sqli
7a40: 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78  te3_mutex *mutex
7a50: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  ;         /* Con
7a60: 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f  nection mutex */
7a70: 0a 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20  .  Db *aDb;     
7a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a90: 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73   /* All backends
7aa0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20   */.  int nDb;  
7ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ac0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
7ad0: 20 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e   backends curren
7ae0: 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20  tly in use */.  
7af0: 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20  int flags;      
7b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7b10: 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66   Miscellaneous f
7b20: 6c 61 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20  lags. See below 
7b30: 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77  */.  i64 lastRow
7b40: 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  id;             
7b50: 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d     /* ROWID of m
7b60: 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72  ost recent inser
7b70: 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
7b80: 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20  .  i64 szMmap;  
7b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ba0: 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70   /* Default mmap
7bb0: 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f  _size setting */
7bc0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  .  unsigned int 
7bd0: 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20  openFlags;      
7be0: 20 2f 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64   /* Flags passed
7bf0: 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e   to sqlite3_vfs.
7c00: 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74  xOpen() */.  int
7c10: 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20   errCode;       
7c20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
7c30: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
7c40: 63 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20  code (SQLITE_*) 
7c50: 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b  */.  int errMask
7c60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7c70: 20 20 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63     /* & result c
7c80: 6f 64 65 73 20 77 69 74 68 20 74 68 69 73 20 62  odes with this b
7c90: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20  efore returning 
7ca0: 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c  */.  u16 dbOptFl
7cb0: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
7cc0: 20 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65     /* Flags to e
7cd0: 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70  nable/disable op
7ce0: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20  timizations */. 
7cf0: 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20   u8 autoCommit; 
7d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7d10: 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  * The auto-commi
7d20: 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20  t flag. */.  u8 
7d30: 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20  temp_store;     
7d40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a             /* 1:
7d50: 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20   file 2: memory 
7d60: 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  0: default */.  
7d70: 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b  u8 mallocFailed;
7d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7d90: 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65   True if we have
7da0: 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66   seen a malloc f
7db0: 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64  ailure */.  u8 d
7dc0: 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20  fltLockMode;    
7dd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
7de0: 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64  ault locking-mod
7df0: 65 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64  e for attached d
7e00: 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63  bs */.  signed c
7e10: 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b  har nextAutovac;
7e20: 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63        /* Autovac
7e30: 20 73 65 74 74 69 6e 67 20 61 66 74 65 72 20 56   setting after V
7e40: 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a  ACUUM if >=0 */.
7e50: 20 20 75 38 20 73 75 70 70 72 65 73 73 45 72 72    u8 suppressErr
7e60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7e70: 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20  /* Do not issue 
7e80: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69  error messages i
7e90: 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76  f true */.  u8 v
7ea0: 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20  tabOnConflict;  
7eb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
7ec0: 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72  ue to return for
7ed0: 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66   s3_vtab_on_conf
7ee0: 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69  lict() */.  u8 i
7ef0: 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
7f00: 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75  point;    /* Tru
7f10: 65 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f  e if the outermo
7f20: 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20  st savepoint is 
7f30: 61 20 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65  a TS */.  int ne
7f40: 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20  xtPagesize;     
7f50: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73          /* Pages
7f60: 69 7a 65 20 61 66 74 65 72 20 56 41 43 55 55 4d  ize after VACUUM
7f70: 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20   if >0 */.  u32 
7f80: 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20 20 20  magic;          
7f90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67            /* Mag
7fa0: 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65  ic number for de
7fb0: 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73  tect library mis
7fc0: 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68  use */.  int nCh
7fd0: 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  ange;           
7fe0: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
7ff0: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
8000: 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  te3_changes() */
8010: 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61  .  int nTotalCha
8020: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
8030: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
8040: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f  ed by sqlite3_to
8050: 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  tal_changes() */
8060: 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51  .  int aLimit[SQ
8070: 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20  LITE_N_LIMIT];  
8080: 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20   /* Limits */.  
8090: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e  struct sqlite3In
80a0: 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a  itInfo {      /*
80b0: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   Information use
80c0: 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c  d during initial
80d0: 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  ization */.    i
80e0: 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20  nt newTnum;     
80f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f             /* Ro
8100: 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20  otpage of table 
8110: 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
8120: 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b  d */.    u8 iDb;
8130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8140: 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62       /* Which db
8150: 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69   file is being i
8160: 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
8170: 20 20 75 38 20 62 75 73 79 3b 20 20 20 20 20 20    u8 busy;      
8180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8190: 20 54 52 55 45 20 69 66 20 63 75 72 72 65 6e 74   TRUE if current
81a0: 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20  ly initializing 
81b0: 2a 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e  */.    u8 orphan
81c0: 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 20 20  Trigger;        
81d0: 20 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65     /* Last state
81e0: 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64  ment is orphaned
81f0: 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f   TEMP trigger */
8200: 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74  .  } init;.  int
8210: 20 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20   nVdbeActive;   
8220: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
8230: 6d 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75  mber of VDBEs cu
8240: 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20  rrently running 
8250: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65  */.  int nVdbeRe
8260: 61 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ad;             
8270: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8280: 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61  active VDBEs tha
8290: 74 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20  t read or write 
82a0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72  */.  int nVdbeWr
82b0: 69 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ite;            
82c0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
82d0: 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61  active VDBEs tha
82e0: 74 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  t read and write
82f0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45   */.  int nVdbeE
8300: 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  xec;            
8310: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
8320: 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
8330: 20 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20   VdbeExec() */. 
8340: 20 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b   int nExtension;
8350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8360: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64  * Number of load
8370: 65 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f  ed extensions */
8380: 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e  .  void **aExten
8390: 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  sion;           
83a0: 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61   /* Array of sha
83b0: 72 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64  red library hand
83c0: 6c 65 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  les */.  void (*
83d0: 78 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f  xTrace)(void*,co
83e0: 6e 73 74 20 63 68 61 72 2a 29 3b 20 20 20 20 20  nst char*);     
83f0: 20 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63     /* Trace func
8400: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
8410: 70 54 72 61 63 65 41 72 67 3b 20 20 20 20 20 20  pTraceArg;      
8420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8430: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
8440: 74 6f 20 74 68 65 20 74 72 61 63 65 20 66 75 6e  to the trace fun
8450: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
8460: 28 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64  (*xProfile)(void
8470: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36  *,const char*,u6
8480: 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e  4);  /* Profilin
8490: 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  g function */.  
84a0: 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72  void *pProfileAr
84b0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
84c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
84d0: 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65  ument to profile
84e0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
84f0: 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b  oid *pCommitArg;
8500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8510: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
8520: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28  xCommitCallback(
8530: 29 20 2a 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a  ) */   .  int (*
8540: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29  xCommitCallback)
8550: 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49  (void*);    /* I
8560: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
8570: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
8580: 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b  d *pRollbackArg;
8590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
85a0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52  * Argument to xR
85b0: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28  ollbackCallback(
85c0: 29 20 2a 2f 20 20 20 0a 20 20 76 6f 69 64 20 28  ) */   .  void (
85d0: 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61  *xRollbackCallba
85e0: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49  ck)(void*); /* I
85f0: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
8600: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
8610: 64 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20  d *pUpdateArg;. 
8620: 20 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43   void (*xUpdateC
8630: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69  allback)(void*,i
8640: 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
8650: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69  const char*,sqli
8660: 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 6e 64  te_int64);.#ifnd
8670: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
8680: 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43  AL.  int (*xWalC
8690: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c  allback)(void *,
86a0: 20 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73   sqlite3 *, cons
86b0: 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
86c0: 20 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b    void *pWalArg;
86d0: 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a  .#endif.  void(*
86e0: 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69  xCollNeeded)(voi
86f0: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
8700: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63  eTextRep,const c
8710: 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78  har*);.  void(*x
8720: 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f  CollNeeded16)(vo
8730: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
8740: 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20   eTextRep,const 
8750: 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a  void*);.  void *
8760: 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a  pCollNeededArg;.
8770: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
8780: 2a 70 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  *pErr;          
8790: 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65  /* Most recent e
87a0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
87b0: 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f    union {.    vo
87c0: 6c 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74  latile int isInt
87d0: 65 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75  errupted; /* Tru
87e0: 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74  e if sqlite3_int
87f0: 65 72 72 75 70 74 20 68 61 73 20 62 65 65 6e 20  errupt has been 
8800: 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f  called */.    do
8810: 75 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20  uble notUsed1;  
8820: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61            /* Spa
8830: 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20  cer */.  } u1;. 
8840: 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61   Lookaside looka
8850: 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f  side;          /
8860: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * Lookaside mall
8870: 6f 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  oc configuration
8880: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
8890: 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a  TE_OMIT_AUTHORIZ
88a0: 41 54 49 4f 4e 0a 20 20 69 6e 74 20 28 2a 78 41  ATION.  int (*xA
88b0: 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  uth)(void*,int,c
88c0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
88d0: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
88e0: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
88f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8910: 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f   /* Access autho
8920: 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f  rization functio
8930: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  n */.  void *pAu
8940: 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  thArg;          
8950: 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75       /* 1st argu
8960: 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65  ment to the acce
8970: 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e  ss auth function
8980: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
8990: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
89a0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
89b0: 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65  .  int (*xProgre
89c0: 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  ss)(void *);    
89d0: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73   /* The progress
89e0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   callback */.  v
89f0: 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72  oid *pProgressAr
8a00: 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
8a10: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
8a20: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
8a30: 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  k */.  unsigned 
8a40: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20  nProgressOps;   
8a50: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
8a60: 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72  f opcodes for pr
8a70: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
8a80: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
8a90: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
8aa0: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
8ab0: 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20   nVTrans;       
8ac0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
8ad0: 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20  located size of 
8ae0: 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73  aVTrans */.  Has
8af0: 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20  h aModule;      
8b00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f             /* po
8b10: 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74  pulated by sqlit
8b20: 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
8b30: 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20  () */.  VtabCtx 
8b40: 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20  *pVtabCtx;      
8b50: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74        /* Context
8b60: 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62   for active vtab
8b70: 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20   connect/create 
8b80: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56  */.  VTable **aV
8b90: 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
8ba0: 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61     /* Virtual ta
8bb0: 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74  bles with open t
8bc0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  ransactions */. 
8bd0: 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e   VTable *pDiscon
8be0: 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63  nect;    /* Disc
8bf0: 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20  onnect these in 
8c00: 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65  next sqlite3_pre
8c10: 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66  pare() */.#endif
8c20: 0a 20 20 46 75 6e 63 44 65 66 48 61 73 68 20 61  .  FuncDefHash a
8c30: 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
8c40: 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f   /* Hash table o
8c50: 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e  f connection fun
8c60: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68  ctions */.  Hash
8c70: 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20   aCollSeq;      
8c80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
8c90: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
8ca0: 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61  nces */.  BusyHa
8cb0: 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65  ndler busyHandle
8cc0: 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20  r;      /* Busy 
8cd0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62  callback */.  Db
8ce0: 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20   aDbStatic[2];  
8cf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
8d00: 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20  tatic space for 
8d10: 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61  the 2 default ba
8d20: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65  ckends */.  Save
8d30: 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
8d40: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  t;        /* Lis
8d50: 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65  t of active save
8d60: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
8d70: 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20  busyTimeout;    
8d80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73            /* Bus
8d90: 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75  y handler timeou
8da0: 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20  t, in msec */.  
8db0: 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20  int nSavepoint; 
8dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8dd0: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74   Number of non-t
8de0: 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
8df0: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  oints */.  int n
8e00: 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20  Statement;      
8e10: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
8e20: 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61  er of nested sta
8e30: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
8e40: 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ons  */.  i64 nD
8e50: 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20  eferredCons;    
8e60: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
8e70: 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
8e80: 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63  nts this transac
8e90: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e  tion. */.  i64 n
8ea0: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
8eb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
8ec0: 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61  deferred immedia
8ed0: 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  te constraints *
8ee0: 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73  /.  int *pnBytes
8ef0: 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20  Freed;          
8f00: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c    /* If not NULL
8f10: 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73  , increment this
8f20: 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a   in DbFree() */.
8f30: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
8f40: 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
8f50: 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c  IFY.  /* The fol
8f60: 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73  lowing variables
8f70: 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74   are all protect
8f80: 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43  ed by the STATIC
8f90: 5f 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75  _MASTER .  ** mu
8fa0: 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69  tex, not by sqli
8fb0: 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20  te3.mutex. They 
8fc0: 61 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65  are used by code
8fd0: 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20   in notify.c. . 
8fe0: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
8ff0: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
9000: 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73  n==Y, that means
9010: 20 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69   that X is waiti
9020: 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a  ng for Y to.  **
9030: 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20   unlock so that 
9040: 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a  it can proceed..
9050: 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58    **.  ** When X
9060: 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63  .pBlockingConnec
9070: 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65  tion==Y, that me
9080: 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69  ans that somethi
9090: 6e 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a  ng that X tried.
90a0: 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f    ** tried to do
90b0: 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64   recently failed
90c0: 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f   with an SQLITE_
90d0: 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65  LOCKED error due
90e0: 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68   to locks.  ** h
90f0: 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20  eld by Y..  */. 
9100: 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b   sqlite3 *pBlock
9110: 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f  ingConnection; /
9120: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61  * Connection tha
9130: 74 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f  t caused SQLITE_
9140: 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69  LOCKED */.  sqli
9150: 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e  te3 *pUnlockConn
9160: 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ection;         
9170: 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20    /* Connection 
9180: 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c  to watch for unl
9190: 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ock */.  void *p
91a0: 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20  UnlockArg;      
91b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
91c0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55  * Argument to xU
91d0: 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20  nlockNotify */. 
91e0: 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e   void (*xUnlockN
91f0: 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20  otify)(void **, 
9200: 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b  int);  /* Unlock
9210: 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b   notify callback
9220: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
9230: 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20  NextBlocked;    
9240: 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c      /* Next in l
9250: 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b  ist of all block
9260: 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a  ed connections *
9270: 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  /.#endif.};../*.
9280: 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69  ** A macro to di
9290: 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64  scover the encod
92a0: 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73  ing of a databas
92b0: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 4e  e..*/.#define EN
92c0: 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62  C(db) ((db)->aDb
92d0: 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63  [0].pSchema->enc
92e0: 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  )../*.** Possibl
92f0: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  e values for the
9300: 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a   sqlite3.flags..
9310: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9320: 45 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20  E_VdbeTrace     
9330: 20 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20   0x00000001  /* 
9340: 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44  True to trace VD
9350: 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  BE execution */.
9360: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
9370: 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78  nternChanges  0x
9380: 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63  00000002  /* Unc
9390: 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61  ommitted Hash ta
93a0: 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ble changes */.#
93b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
93c0: 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30  llFSync      0x0
93d0: 30 30 30 30 30 30 34 20 20 2f 2a 20 55 73 65 20  0000004  /* Use 
93e0: 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68  full fsync on th
93f0: 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65  e backend */.#de
9400: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74  fine SQLITE_Ckpt
9410: 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30  FullFSync  0x000
9420: 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75  00008  /* Use fu
9430: 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65  ll fsync for che
9440: 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69  ckpoint */.#defi
9450: 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53  ne SQLITE_CacheS
9460: 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30  pill     0x00000
9470: 30 31 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70  010  /* OK to sp
9480: 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65 20  ill pager cache 
9490: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
94a0: 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20  E_FullColNames  
94b0: 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20   0x00000020  /* 
94c0: 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e  Show full column
94d0: 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54   names on SELECT
94e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
94f0: 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73  TE_ShortColNames
9500: 20 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a    0x00000040  /*
9510: 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75   Show short colu
9520: 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65  mns names */.#de
9530: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e  fine SQLITE_Coun
9540: 74 52 6f 77 73 20 20 20 20 20 20 30 78 30 30 30  tRows      0x000
9550: 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20  00080  /* Count 
9560: 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20  rows changed by 
9570: 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20  INSERT, */.     
9580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95a0: 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45       /*   DELETE
95b0: 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20  , or UPDATE and 
95c0: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20  return */.      
95d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95f0: 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75      /*   the cou
9600: 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62  nt using a callb
9610: 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ack. */.#define 
9620: 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62  SQLITE_NullCallb
9630: 61 63 6b 20 20 20 30 78 30 30 30 30 30 31 30 30  ack   0x00000100
9640: 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
9650: 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66  callback once if
9660: 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20   the */.        
9670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9690: 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65    /*   result se
96a0: 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64  t is empty */.#d
96b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c  efine SQLITE_Sql
96c0: 54 72 61 63 65 20 20 20 20 20 20 20 30 78 30 30  Trace       0x00
96d0: 30 30 30 32 30 30 20 20 2f 2a 20 44 65 62 75 67  000200  /* Debug
96e0: 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74   print SQL as it
96f0: 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65   executes */.#de
9700: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
9710: 4c 69 73 74 69 6e 67 20 20 20 20 30 78 30 30 30  Listing    0x000
9720: 30 30 34 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00400  /* Debug 
9730: 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45  listings of VDBE
9740: 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65   programs */.#de
9750: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74  fine SQLITE_Writ
9760: 65 53 63 68 65 6d 61 20 20 20 20 30 78 30 30 30  eSchema    0x000
9770: 30 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20  00800  /* OK to 
9780: 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41  update SQLITE_MA
9790: 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20  STER */.#define 
97a0: 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70  SQLITE_VdbeAddop
97b0: 54 72 61 63 65 20 30 78 30 30 30 30 31 30 30 30  Trace 0x00001000
97c0: 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74    /* Trace sqlit
97d0: 65 33 56 64 62 65 41 64 64 4f 70 28 29 20 63 61  e3VdbeAddOp() ca
97e0: 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  lls */.#define S
97f0: 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63  QLITE_IgnoreChec
9800: 6b 73 20 20 20 30 78 30 30 30 30 32 30 30 30 20  ks   0x00002000 
9810: 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72   /* Do not enfor
9820: 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61  ce check constra
9830: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
9840: 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d  SQLITE_ReadUncom
9850: 6d 69 74 74 65 64 20 30 78 30 30 30 34 30 30 30  mitted 0x0004000
9860: 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65 64 2d    /* For shared-
9870: 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64  cache mode */.#d
9880: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67  efine SQLITE_Leg
9890: 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30  acyFileFmt  0x00
98a0: 30 30 38 30 30 30 20 20 2f 2a 20 43 72 65 61 74  008000  /* Creat
98b0: 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  e new databases 
98c0: 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23  in format 1 */.#
98d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
98e0: 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30 78 30  coveryMode   0x0
98f0: 30 30 31 30 30 30 30 20 20 2f 2a 20 49 67 6e 6f  0010000  /* Igno
9900: 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f 72 73  re schema errors
9910: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9920: 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20  TE_ReverseOrder 
9930: 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a    0x00020000  /*
9940: 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72   Reverse unorder
9950: 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64  ed SELECTs */.#d
9960: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63  efine SQLITE_Rec
9970: 54 72 69 67 67 65 72 73 20 20 20 20 30 78 30 30  Triggers    0x00
9980: 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  040000  /* Enabl
9990: 65 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67  e recursive trig
99a0: 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gers */.#define 
99b0: 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65  SQLITE_ForeignKe
99c0: 79 73 20 20 20 20 30 78 30 30 30 38 30 30 30 30  ys    0x00080000
99d0: 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72    /* Enforce for
99e0: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
99f0: 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65  ints  */.#define
9a00: 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65   SQLITE_AutoInde
9a10: 78 20 20 20 20 20 20 30 78 30 30 31 30 30 30 30  x      0x0010000
9a20: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74  0  /* Enable aut
9a30: 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a  omatic indexes *
9a40: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9a50: 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20  _PreferBuiltin  
9a60: 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20 50  0x00200000  /* P
9a70: 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69  reference to bui
9a80: 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23  lt-in funcs */.#
9a90: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f  define SQLITE_Lo
9aa0: 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30  adExtension  0x0
9ab0: 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0400000  /* Enab
9ac0: 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  le load_extensio
9ad0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
9ae0: 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65  ITE_EnableTrigge
9af0: 72 20 20 30 78 30 30 38 30 30 30 30 30 20 20 2f  r  0x00800000  /
9b00: 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
9b10: 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65   triggers */.#de
9b20: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65  fine SQLITE_Defe
9b30: 72 46 4b 73 20 20 20 20 20 20 20 30 78 30 31 30  rFKs       0x010
9b40: 30 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20  00000  /* Defer 
9b50: 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e  all FK constrain
9b60: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
9b70: 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20  LITE_QueryOnly  
9b80: 20 20 20 20 30 78 30 32 30 30 30 30 30 30 20 20      0x02000000  
9b90: 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61 62  /* Disable datab
9ba0: 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ase changes */.#
9bb0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
9bc0: 62 65 45 51 50 20 20 20 20 20 20 20 20 30 78 30  beEQP        0x0
9bd0: 34 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75  4000000  /* Debu
9be0: 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  g EXPLAIN QUERY 
9bf0: 50 4c 41 4e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  PLAN */.../*.** 
9c00: 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69  Bits of the sqli
9c10: 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66  te3.dbOptFlags f
9c20: 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75 73  ield that are us
9c30: 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c  ed by the.** sql
9c40: 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
9c50: 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  l(SQLITE_TESTCTR
9c60: 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c  L_OPTIMIZATIONS,
9c70: 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74  ...) interface t
9c80: 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79  o.** selectively
9c90: 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73   disable various
9ca0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
9cb0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9cc0: 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72  E_QueryFlattener
9cd0: 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65   0x0001   /* Que
9ce0: 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f  ry flattening */
9cf0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9d00: 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30  ColumnCache    0
9d10: 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d  x0002   /* Colum
9d20: 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  n cache */.#defi
9d30: 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42  ne SQLITE_GroupB
9d40: 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20  yOrder   0x0004 
9d50: 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76    /* GROUPBY cov
9d60: 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f  er of ORDERBY */
9d70: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9d80: 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30  FactorOutConst 0
9d90: 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74  x0008   /* Const
9da0: 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f  ant factoring */
9db0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9dc0: 49 64 78 52 65 61 6c 41 73 49 6e 74 20 20 20 30  IdxRealAsInt   0
9dd0: 78 30 30 31 30 20 20 20 2f 2a 20 53 74 6f 72 65  x0010   /* Store
9de0: 20 52 45 41 4c 20 61 73 20 49 4e 54 20 69 6e 20   REAL as INT in 
9df0: 69 6e 64 69 63 65 73 20 2a 2f 0a 23 64 65 66 69  indices */.#defi
9e00: 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e  ne SQLITE_Distin
9e10: 63 74 4f 70 74 20 20 20 20 30 78 30 30 32 30 20  ctOpt    0x0020 
9e20: 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73    /* DISTINCT us
9e30: 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23  ing indexes */.#
9e40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
9e50: 76 65 72 49 64 78 53 63 61 6e 20 20 20 30 78 30  verIdxScan   0x0
9e60: 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e  040   /* Coverin
9e70: 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f  g index scans */
9e80: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9e90: 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30  OrderByIdxJoin 0
9ea0: 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44 45 52  x0080   /* ORDER
9eb0: 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61   BY of joins via
9ec0: 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
9ed0: 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43 6f 72  e SQLITE_SubqCor
9ee0: 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30 20 20  outine  0x0100  
9ef0: 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73 75 62   /* Evaluate sub
9f00: 71 75 65 72 69 65 73 20 61 73 20 63 6f 72 6f 75  queries as corou
9f10: 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tines */.#define
9f20: 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69   SQLITE_Transiti
9f30: 76 65 20 20 20 20 20 30 78 30 32 30 30 20 20 20  ve     0x0200   
9f40: 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f  /* Transitive co
9f50: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
9f60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74  fine SQLITE_Omit
9f70: 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30 34 30  NoopJoin   0x040
9f80: 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73  0   /* Omit unus
9f90: 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69  ed tables in joi
9fa0: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
9fb0: 4c 49 54 45 5f 53 74 61 74 33 20 20 20 20 20 20  LITE_Stat3      
9fc0: 20 20 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20      0x0800   /* 
9fd0: 55 73 65 20 74 68 65 20 53 51 4c 49 54 45 5f 53  Use the SQLITE_S
9fe0: 54 41 54 33 20 74 61 62 6c 65 20 2a 2f 0a 23 64  TAT3 table */.#d
9ff0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 64 6a  efine SQLITE_Adj
a000: 75 73 74 4f 75 74 45 73 74 20 20 20 30 78 31 30  ustOutEst   0x10
a010: 30 30 20 20 20 2f 2a 20 41 64 6a 75 73 74 20 6f  00   /* Adjust o
a020: 75 74 70 75 74 20 65 73 74 69 6d 61 74 65 73 20  utput estimates 
a030: 75 73 69 6e 67 20 57 48 45 52 45 20 2a 2f 0a 23  using WHERE */.#
a040: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c  define SQLITE_Al
a050: 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78 66  lOpts        0xf
a060: 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74  fff   /* All opt
a070: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f  imizations */../
a080: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20  *.** Macros for 
a090: 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72 20  testing whether 
a0a0: 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74  or not optimizat
a0b0: 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64  ions are enabled
a0c0: 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f   or disabled..*/
a0d0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
a0e0: 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
a0f0: 54 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  T.#define Optimi
a100: 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64  zationDisabled(d
a110: 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29  b, mask)  (((db)
a120: 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61  ->dbOptFlags&(ma
a130: 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  sk))!=0).#define
a140: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61   OptimizationEna
a150: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
a160: 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c   (((db)->dbOptFl
a170: 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a  ags&(mask))==0).
a180: 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 70  #else.#define Op
a190: 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c  timizationDisabl
a1a0: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 30 0a  ed(db, mask)  0.
a1b0: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
a1c0: 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20  tionEnabled(db, 
a1d0: 6d 61 73 6b 29 20 20 20 31 0a 23 65 6e 64 69 66  mask)   1.#endif
a1e0: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
a1f0: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
a200: 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65  sqlite.magic fie
a210: 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ld..** The numbe
a220: 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20  rs are obtained 
a230: 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61  at random and ha
a240: 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65  ve no special me
a250: 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20  aning, other.** 
a260: 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69  than being disti
a270: 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f  nct from one ano
a280: 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ther..*/.#define
a290: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50   SQLITE_MAGIC_OP
a2a0: 45 4e 20 20 20 20 20 30 78 61 30 32 39 61 36 39  EN     0xa029a69
a2b0: 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69  7  /* Database i
a2c0: 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s open */.#defin
a2d0: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43  e SQLITE_MAGIC_C
a2e0: 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63 32 64  LOSED   0x9f3c2d
a2f0: 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  33  /* Database 
a300: 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65  is closed */.#de
a310: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
a320: 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62 37  C_SICK     0x4b7
a330: 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20  71290  /* Error 
a340: 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f  and awaiting clo
a350: 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  se */.#define SQ
a360: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20  LITE_MAGIC_BUSY 
a370: 20 20 20 20 30 78 66 30 33 62 37 39 30 36 20 20      0xf03b7906  
a380: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75 72 72  /* Database curr
a390: 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a  ently in use */.
a3a0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
a3b0: 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78  AGIC_ERROR    0x
a3c0: 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20  b5357930  /* An 
a3d0: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72  SQLITE_MISUSE er
a3e0: 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a  ror occurred */.
a3f0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
a400: 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78  AGIC_ZOMBIE   0x
a410: 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f  64cffc7f  /* Clo
a420: 73 65 20 77 69 74 68 20 6c 61 73 74 20 73 74 61  se with last sta
a430: 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a  tement close */.
a440: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
a450: 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69  function is defi
a460: 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ned by an instan
a470: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
a480: 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  ing.** structure
a490: 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  .  A pointer to 
a4a0: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
a4b0: 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
a4c0: 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a 20  sqlite.aFunc.** 
a4d0: 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57 68 65  hash table.  Whe
a4e0: 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63 74  n multiple funct
a4f0: 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20 73 61  ions have the sa
a500: 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68 61 73  me name, the has
a510: 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74  h table.** point
a520: 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c 69  s to a linked li
a530: 73 74 20 6f 66 20 74 68 65 73 65 20 73 74 72 75  st of these stru
a540: 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63  ctures..*/.struc
a550: 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 31  t FuncDef {.  i1
a560: 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20  6 nArg;         
a570: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
a580: 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d  arguments.  -1 m
a590: 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a  eans unlimited *
a5a0: 2f 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61 67  /.  u16 funcFlag
a5b0: 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65  s;       /* Some
a5c0: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
a5d0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f  SQLITE_FUNC_* */
a5e0: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
a5f0: 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20  ta;     /* User 
a600: 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a  data parameter *
a610: 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65  /.  FuncDef *pNe
a620: 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
a630: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73   function with s
a640: 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f  ame name */.  vo
a650: 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69  id (*xFunc)(sqli
a660: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
a670: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
a680: 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20 66 75  ); /* Regular fu
a690: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
a6a0: 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65   (*xStep)(sqlite
a6b0: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
a6c0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
a6d0: 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 73 74   /* Aggregate st
a6e0: 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  ep */.  void (*x
a6f0: 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65  Finalize)(sqlite
a700: 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20  3_context*);    
a710: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
a720: 67 67 72 65 67 61 74 65 20 66 69 6e 61 6c 69 7a  ggregate finaliz
a730: 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e  er */.  char *zN
a740: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ame;         /* 
a750: 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  SQL name of the 
a760: 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46  function. */.  F
a770: 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20  uncDef *pHash;  
a780: 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68      /* Next with
a790: 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d   a different nam
a7a0: 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20 68  e but the same h
a7b0: 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65 73  ash */.  FuncDes
a7c0: 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75  tructor *pDestru
a7d0: 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72  ctor;   /* Refer
a7e0: 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73  ence counted des
a7f0: 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e  tructor function
a800: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
a810: 69 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63  is structure enc
a820: 61 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72  apsulates a user
a830: 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75  -function destru
a840: 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61  ctor callback (a
a850: 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
a860: 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e  using create_fun
a870: 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20  ction_v2()) and 
a880: 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  a reference coun
a890: 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65  ter. When.** cre
a8a0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
a8b0: 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63  ) is called to c
a8c0: 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e  reate a function
a8d0: 20 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74   with a destruct
a8e0: 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20  or,.** a single 
a8f0: 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
a900: 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ype is allocated
a910: 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  . FuncDestructor
a920: 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 20  .nRef is set to 
a930: 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
a940: 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  f FuncDef object
a950: 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68 65  s created (eithe
a960: 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64  r 1 or 3, depend
a970: 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a  ing on whether.*
a980: 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65  * or not the spe
a990: 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20  cified encoding 
a9a0: 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20  is SQLITE_ANY). 
a9b0: 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73  The FuncDef.pDes
a9c0: 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65  tructor.** membe
a9d0: 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65  r of each of the
a9e0: 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a   new FuncDef obj
a9f0: 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20 70  ects is set to p
aa00: 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f  oint to the allo
aa10: 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73  cated.** FuncDes
aa20: 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  tructor..**.** T
aa30: 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20  hereafter, when 
aa40: 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44  one of the FuncD
aa50: 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65  ef objects is de
aa60: 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65 72  leted, the refer
aa70: 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e  ence.** count on
aa80: 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20   this object is 
aa90: 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65  decremented. Whe
aaa0: 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c 20  n it reaches 0, 
aab0: 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a  the destructor.*
aac0: 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64  * is invoked and
aad0: 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75 63   the FuncDestruc
aae0: 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66 72  tor structure fr
aaf0: 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  eed..*/.struct F
ab00: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a  uncDestructor {.
ab10: 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f    int nRef;.  vo
ab20: 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76  id (*xDestroy)(v
ab30: 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a  oid *);.  void *
ab40: 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f  pUserData;.};../
ab50: 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
ab60: 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66  lues for FuncDef
ab70: 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68  .flags.  Note th
ab80: 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61  at the _LENGTH a
ab90: 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61  nd _TYPEOF.** va
aba0: 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73  lues must corres
abb0: 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c  pond to OPFLAG_L
abc0: 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46  ENGTHARG and OPF
abd0: 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20  LAG_TYPEOFARG.  
abe0: 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73  There.** are ass
abf0: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
ac00: 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20   in the code to 
ac10: 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2f 0a  verify this..*/.
ac20: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
ac30: 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30  UNC_ENCMASK  0x0
ac40: 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46  03 /* SQLITE_UTF
ac50: 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  8, SQLITE_UTF16B
ac60: 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a  E or UTF16LE */.
ac70: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
ac80: 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30  UNC_LIKE     0x0
ac90: 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20  04 /* Candidate 
aca0: 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74  for the LIKE opt
acb0: 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65  imization */.#de
acc0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
acd0: 5f 43 41 53 45 20 20 20 20 20 30 78 30 30 38 20  _CASE     0x008 
ace0: 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76  /* Case-sensitiv
acf0: 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63  e LIKE-type func
ad00: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
ad10: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45  SQLITE_FUNC_EPHE
ad20: 4d 20 20 20 20 30 78 30 31 30 20 2f 2a 20 45 70  M    0x010 /* Ep
ad30: 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65  hemeral.  Delete
ad40: 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64   with VDBE */.#d
ad50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
ad60: 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 32 30  C_NEEDCOLL 0x020
ad70: 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75   /* sqlite3GetFu
ad80: 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68  ncCollSeq() migh
ad90: 74 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f 0a 23  t be called */.#
ada0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
adb0: 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 34  NC_LENGTH   0x04
adc0: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65  0 /* Built-in le
add0: 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20  ngth() function 
ade0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
adf0: 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20  E_FUNC_TYPEOF   
ae00: 30 78 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69  0x080 /* Built-i
ae10: 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  n typeof() funct
ae20: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
ae30: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54  QLITE_FUNC_COUNT
ae40: 20 20 20 20 30 78 31 30 30 20 2f 2a 20 42 75 69      0x100 /* Bui
ae50: 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61  lt-in count(*) a
ae60: 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66  ggregate */.#def
ae70: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
ae80: 43 4f 41 4c 45 53 43 45 20 30 78 32 30 30 20 2f  COALESCE 0x200 /
ae90: 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65  * Built-in coale
aea0: 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28  sce() or ifnull(
aeb0: 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ) */.#define SQL
aec0: 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c  ITE_FUNC_UNLIKEL
aed0: 59 20 30 78 34 30 30 20 2f 2a 20 42 75 69 6c 74  Y 0x400 /* Built
aee0: 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66  -in unlikely() f
aef0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a  unction */../*.*
af00: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
af10: 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55  three macros, FU
af20: 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55  NCTION(), LIKEFU
af30: 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41  NC() and AGGREGA
af40: 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64  TE() are.** used
af50: 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69   to create the i
af60: 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20  nitializers for 
af70: 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75  the FuncDef stru
af80: 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20  ctures..**.**   
af90: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
afa0: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
afb0: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55   xFunc).**     U
afc0: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
afd0: 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
afe0: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
aff0: 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a  function zName .
b000: 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74  **     implement
b010: 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e  ed by C function
b020: 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63 65   xFunc that acce
b030: 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e  pts nArg argumen
b040: 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76  ts. The.**     v
b050: 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 69  alue passed as i
b060: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
b070: 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64   (void*) and mad
b080: 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20  e available.**  
b090: 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d 64     as the user-d
b0a0: 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65  ata (sqlite3_use
b0b0: 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74 68  r_data()) for th
b0c0: 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a  e function. If .
b0d0: 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20  **     argument 
b0e0: 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65  bNC is true, the
b0f0: 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  n the SQLITE_FUN
b100: 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20  C_NEEDCOLL flag 
b110: 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  is set..**.**   
b120: 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
b130: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
b140: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29  , xStep, xFinal)
b150: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
b160: 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67  create an aggreg
b170: 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  ate function def
b180: 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  inition implemen
b190: 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68  ted by.**     th
b1a0: 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53  e C functions xS
b1b0: 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20  tep and xFinal. 
b1c0: 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70  The first four p
b1d0: 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20  arameters.**    
b1e0: 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64   are interpreted
b1f0: 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
b200: 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20   as the first 4 
b210: 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a  parameters to.**
b220: 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e       FUNCTION().
b230: 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e  .**.**   LIKEFUN
b240: 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70  C(zName, nArg, p
b250: 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20  Arg, flags).**  
b260: 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
b270: 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74  e a scalar funct
b280: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  ion definition o
b290: 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61  f a function zNa
b2a0: 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68 61 74 20  me .**     that 
b2b0: 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67  accepts nArg arg
b2c0: 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d  uments and is im
b2d0: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63  plemented by a c
b2e0: 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20 20 20  all to C .**    
b2f0: 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75   function likeFu
b300: 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72  nc. Argument pAr
b310: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
b320: 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65  void *) and made
b330: 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c  .**     availabl
b340: 65 20 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f  e as the functio
b350: 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c  n user-data (sql
b360: 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29  ite3_user_data()
b370: 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75  ). The.**     Fu
b380: 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69  ncDef.flags vari
b390: 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74  able is set to t
b3a0: 68 65 20 76 61 6c 75 65 20 70 61 73 73 65 64 20  he value passed 
b3b0: 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20  as the flags.** 
b3c0: 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a      parameter..*
b3d0: 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49  /.#define FUNCTI
b3e0: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
b3f0: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
b400: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
b410: 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
b420: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
b430: 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  LL), \.   SQLITE
b440: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
b450: 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
b460: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
b470: 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f  .#define FUNCTIO
b480: 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  N2(zName, nArg, 
b490: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
b4a0: 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a  , extraFlags) \.
b4b0: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
b4c0: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
b4d0: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c  _FUNC_NEEDCOLL)|
b4e0: 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20  extraFlags, \.  
b4f0: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
b500: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
b510: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
b520: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
b530: 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  STR_FUNCTION(zNa
b540: 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20  me, nArg, pArg, 
b550: 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
b560: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
b570: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
b580: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
b590: 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75  .   pArg, 0, xFu
b5a0: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
b5b0: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
b5c0: 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
b5d0: 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73  nArg, arg, flags
b5e0: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
b5f0: 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20  ITE_UTF8|flags, 
b600: 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c 20  (void *)arg, 0, 
b610: 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20  likeFunc, 0, 0, 
b620: 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64  #zName, 0, 0}.#d
b630: 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 28  efine AGGREGATE(
b640: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
b650: 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69  , nc, xStep, xFi
b660: 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  nal) \.  {nArg, 
b670: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a  SQLITE_UTF8|(nc*
b680: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
b690: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
b6a0: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
b6b0: 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70 2c  g), 0, 0, xStep,
b6c0: 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c  xFinal,#zName,0,
b6d0: 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75  0}../*.** All cu
b6e0: 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73  rrent savepoints
b6f0: 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
b700: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61   linked list sta
b710: 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69  rting at.** sqli
b720: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20  te3.pSavepoint. 
b730: 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
b740: 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73  t in the list is
b750: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
b760: 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76  ly.** opened sav
b770: 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e  epoint. Savepoin
b780: 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20  ts are added to 
b790: 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65 20  the list by the 
b7a0: 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70  vdbe.** OP_Savep
b7b0: 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  oint instruction
b7c0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65  ..*/.struct Save
b7d0: 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a  point {.  char *
b7e0: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
b7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b800: 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20   Savepoint name 
b810: 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29  (nul-terminated)
b820: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
b830: 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  redCons;        
b840: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
b850: 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
b860: 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f  fk violations */
b870: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
b880: 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  ImmCons;        
b890: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
b8a0: 20 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d   of deferred imm
b8b0: 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f   fk. */.  Savepo
b8c0: 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  int *pNext;     
b8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b8e0: 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e   Parent savepoin
b8f0: 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b  t (if any) */.};
b900: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
b910: 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61  owing are used a
b920: 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  s the second par
b930: 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
b940: 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a  3Savepoint(),.**
b950: 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61   and as the P1 a
b960: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f  rgument to the O
b970: 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
b980: 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66  ruction..*/.#def
b990: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  ine SAVEPOINT_BE
b9a0: 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69  GIN      0.#defi
b9b0: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  ne SAVEPOINT_REL
b9c0: 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e  EASE    1.#defin
b9d0: 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  e SAVEPOINT_ROLL
b9e0: 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a  BACK   2.../*.**
b9f0: 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64   Each SQLite mod
ba00: 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62  ule (virtual tab
ba10: 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69  le definition) i
ba20: 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a  s defined by an.
ba30: 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
ba40: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
ba50: 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69  ucture, stored i
ba60: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d  n the sqlite3.aM
ba70: 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61  odule.** hash ta
ba80: 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d  ble..*/.struct M
ba90: 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20  odule {.  const 
baa0: 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
bab0: 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f  pModule;       /
bac0: 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74  * Callback point
bad0: 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ers */.  const c
bae0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
baf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bb00: 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20   Name passed to 
bb10: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
bb20: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b  */.  void *pAux;
bb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75            /* pAu
bb50: 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  x passed to crea
bb60: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
bb70: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
bb80: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20  )(void *);      
bb90: 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20        /* Module 
bba0: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
bbb0: 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ion */.};../*.**
bbc0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
bbd0: 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  ut each column o
bbe0: 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69  f an SQL table i
bbf0: 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73  s held in an ins
bc00: 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
bc10: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
bc20: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20  truct Column {. 
bc30: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
bc40: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
bc50: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78  s column */.  Ex
bc60: 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f  pr *pDflt;     /
bc70: 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20  * Default value 
bc80: 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  of this column *
bc90: 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b  /.  char *zDflt;
bca0: 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
bcb0: 20 74 65 78 74 20 6f 66 20 74 68 65 20 64 65 66   text of the def
bcc0: 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20  ault value */.  
bcd0: 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 20 20  char *zType;    
bce0: 20 2f 2a 20 44 61 74 61 20 74 79 70 65 20 66 6f   /* Data type fo
bcf0: 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  r this column */
bd00: 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20  .  char *zColl; 
bd10: 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67      /* Collating
bd20: 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e   sequence.  If N
bd30: 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66  ULL, use the def
bd40: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74  ault */.  u8 not
bd50: 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e  Null;      /* An
bd60: 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61   OE_ code for ha
bd70: 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c  ndling a NOT NUL
bd80: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  L constraint */.
bd90: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
bda0: 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65     /* One of the
bdb0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20   SQLITE_AFF_... 
bdc0: 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73  values */.  u8 s
bdd0: 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  zEst;        /* 
bde0: 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f  Estimated size o
bdf0: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 20  f this column.  
be00: 49 4e 54 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63  INT==1 */.  u8 c
be10: 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  olFlags;     /* 
be20: 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69  Boolean properti
be30: 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47  es.  See COLFLAG
be40: 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20  _ defines below 
be50: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
be60: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c  d values for Col
be70: 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f  umn.colFlags:.*/
be80: 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
be90: 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31  _PRIMKEY  0x0001
bea0: 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73      /* Column is
beb0: 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 69   part of the pri
bec0: 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66  mary key */.#def
bed0: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  ine COLFLAG_HIDD
bee0: 45 4e 20 20 20 30 78 30 30 30 32 20 20 20 20 2f  EN   0x0002    /
bef0: 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  * A hidden colum
bf00: 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74  n in a virtual t
bf10: 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  able */../*.** A
bf20: 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75   "Collating Sequ
bf30: 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65 64  ence" is defined
bf40: 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
bf50: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
bf60: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43  .** structure. C
bf70: 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63  onceptually, a c
bf80: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
bf90: 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  e consists of a 
bfa0: 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f  name and.** a co
bfb0: 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65  mparison routine
bfc0: 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68   that defines th
bfd0: 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20  e order of that 
bfe0: 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20  sequence..**.** 
bff0: 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20  If CollSeq.xCmp 
c000: 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e  is NULL, it mean
c010: 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f  s that the.** co
c020: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
c030: 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20   is undefined.  
c040: 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e  Indices built on
c050: 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a   an undefined.**
c060: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
c070: 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72  nce may not be r
c080: 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a  ead or written..
c090: 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65  */.struct CollSe
c0a0: 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  q {.  char *zNam
c0b0: 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  e;          /* N
c0c0: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61  ame of the colla
c0d0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55  ting sequence, U
c0e0: 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a  TF-8 encoded */.
c0f0: 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
c100: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
c110: 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64  encoding handled
c120: 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   by xCmp() */.  
c130: 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20  void *pUser;    
c140: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
c150: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28  rgument to xCmp(
c160: 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d  ) */.  int (*xCm
c170: 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  p)(void*,int, co
c180: 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
c190: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
c1a0: 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69  void (*xDel)(voi
c1b0: 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63  d*);  /* Destruc
c1c0: 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f  tor for pUser */
c1d0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72  .};../*.** A sor
c1e0: 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65  t order can be e
c1f0: 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45 53  ither ASC or DES
c200: 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  C..*/.#define SQ
c210: 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20  LITE_SO_ASC     
c220: 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20    0  /* Sort in 
c230: 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20  ascending order 
c240: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c250: 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31  E_SO_DESC      1
c260: 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63    /* Sort in asc
c270: 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a  ending order */.
c280: 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66  ./*.** Column af
c290: 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a  finity types..**
c2a0: 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74  .** These used t
c2b0: 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20  o have mnemonic 
c2c0: 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f  name like 'i' fo
c2d0: 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  r SQLITE_AFF_INT
c2e0: 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20  EGER and.** 't' 
c2f0: 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  for SQLITE_AFF_T
c300: 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e  EXT.  But we can
c310: 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73   save a little s
c320: 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65  pace and improve
c330: 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20  .** the speed a 
c340: 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72  little by number
c350: 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 63  ing the values c
c360: 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20 0a  onsecutively.  .
c370: 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72  **.** But rather
c380: 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68   than start with
c390: 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69   0 or 1, we begi
c3a0: 6e 20 77 69 74 68 20 27 61 27 2e 20 20 54 68 61  n with 'a'.  Tha
c3b0: 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d  t way,.** when m
c3c0: 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79  ultiple affinity
c3d0: 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61   types are conca
c3e0: 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73  tenated into a s
c3f0: 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65  tring and.** use
c400: 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72  d as the P4 oper
c410: 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62  and, they will b
c420: 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e  e more readable.
c430: 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f  .**.** Note also
c440: 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69   that the numeri
c450: 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75  c types are grou
c460: 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20  ped together so 
c470: 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20  that testing.** 
c480: 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79  for a numeric ty
c490: 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  pe is a single c
c4a0: 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f 0a 23 64  omparison..*/.#d
c4b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
c4c0: 5f 54 45 58 54 20 20 20 20 20 27 61 27 0a 23 64  _TEXT     'a'.#d
c4d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
c4e0: 5f 4e 4f 4e 45 20 20 20 20 20 27 62 27 0a 23 64  _NONE     'b'.#d
c4f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
c500: 5f 4e 55 4d 45 52 49 43 20 20 27 63 27 0a 23 64  _NUMERIC  'c'.#d
c510: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
c520: 5f 49 4e 54 45 47 45 52 20 20 27 64 27 0a 23 64  _INTEGER  'd'.#d
c530: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
c540: 5f 52 45 41 4c 20 20 20 20 20 27 65 27 0a 0a 23  _REAL     'e'..#
c550: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
c560: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
c570: 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45  X)  ((X)>=SQLITE
c580: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f  _AFF_NUMERIC)../
c590: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
c5a0: 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20  AFF_MASK values 
c5b0: 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69  masks off the si
c5c0: 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f  gnificant bits o
c5d0: 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79  f an.** affinity
c5e0: 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66   value. .*/.#def
c5f0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  ine SQLITE_AFF_M
c600: 41 53 4b 20 20 20 20 20 30 78 36 37 0a 0a 2f 2a  ASK     0x67../*
c610: 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62  .** Additional b
c620: 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63  it values that c
c630: 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20  an be ORed with 
c640: 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68  an affinity with
c650: 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20  out.** changing 
c660: 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2f  the affinity..*/
c670: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c680: 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 30  JUMPIFNULL   0x0
c690: 38 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65  8  /* jumps if e
c6a0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
c6b0: 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
c6c0: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
c6d0: 20 20 20 20 20 30 78 31 30 20 20 2f 2a 20 53 74       0x10  /* St
c6e0: 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  ore result in re
c6f0: 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68 61  g[P2] rather tha
c700: 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e  n jump */.#defin
c710: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
c720: 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e        0x80  /* N
c730: 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a  ULL=NULL */../*.
c740: 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20  ** An object of 
c750: 74 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65  this type is cre
c760: 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69  ated for each vi
c770: 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73  rtual table pres
c780: 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61  ent in.** the da
c790: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 0a  tabase schema. .
c7a0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74  **.** If the dat
c7b0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
c7c0: 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65  shared, then the
c7d0: 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e  re is one instan
c7e0: 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74  ce of this.** st
c7f0: 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68  ructure for each
c800: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
c810: 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20  tion (sqlite3*) 
c820: 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68  that uses the sh
c830: 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20  ared.** schema. 
c840: 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20  This is because 
c850: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
c860: 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65  nnection require
c870: 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65  s its own unique
c880: 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
c890: 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
c8a0: 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f  * handle used to
c8b0: 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
c8c0: 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20 69 6d  ual table .** im
c8d0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71  plementation. sq
c8e0: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
c8f0: 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73  les can not be s
c900: 68 61 72 65 64 20 62 65 74 77 65 65 6e 20 0a 2a  hared between .*
c910: 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * database conne
c920: 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65  ctions, even whe
c930: 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68  n the rest of th
c940: 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61  e in-memory data
c950: 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d 61 20  base .** schema 
c960: 69 73 20 73 68 61 72 65 64 2c 20 61 73 20 74 68  is shared, as th
c970: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
c980: 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68   often stores th
c990: 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
c9a0: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
c9b0: 70 61 73 73 65 64 20 74 6f 20 69 74 20 76 69 61  passed to it via
c9c0: 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20   the xConnect() 
c9d0: 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d 65 74  or xCreate() met
c9e0: 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e  hod.** during in
c9f0: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74  itialization int
ca00: 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61  ernally. This da
ca10: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
ca20: 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20  n handle may.** 
ca30: 74 68 65 6e 20 62 65 20 75 73 65 64 20 62 79 20  then be used by 
ca40: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
ca50: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
ca60: 20 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20   to access real 
ca70: 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74 68 69  tables .** withi
ca80: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  n the database. 
ca90: 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70  So that they app
caa0: 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74  ear as part of t
cab0: 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a 20 74  he callers .** t
cac0: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73  ransaction, thes
cad0: 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20  e accesses need 
cae0: 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74  to be made via t
caf0: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
cb00: 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   .** connection 
cb10: 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20  as that used to 
cb20: 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72  execute SQL oper
cb30: 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69  ations on the vi
cb40: 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a  rtual table..**.
cb50: 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62  ** All VTable ob
cb60: 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65  jects that corre
cb70: 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c  spond to a singl
cb80: 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61  e table in a sha
cb90: 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  red.** database 
cba0: 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69  schema are initi
cbb0: 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61  ally stored in a
cbc0: 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69   linked-list poi
cbd0: 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68  nted to by.** th
cbe0: 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20  e Table.pVTable 
cbf0: 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20  member variable 
cc00: 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
cc10: 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63  ding Table objec
cc20: 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71  t..** When an sq
cc30: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
cc40: 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71  operation is req
cc50: 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20  uired to access 
cc60: 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  the virtual.** t
cc70: 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65  able, it searche
cc80: 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74  s the list for t
cc90: 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63  he VTable that c
cca0: 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
ccb0: 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f  e.** database co
ccc0: 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74  nnection doing t
ccd0: 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20  he preparing so 
cce0: 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f  as to use the co
ccf0: 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33  rrect.** sqlite3
cd00: 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e  _vtab* handle in
cd10: 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75   the compiled qu
cd20: 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ery..**.** When 
cd30: 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62  an in-memory Tab
cd40: 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c  le object is del
cd50: 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c  eted (for exampl
cd60: 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63  e when the.** sc
cd70: 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65  hema is being re
cd80: 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20  loaded for some 
cd90: 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61  reason), the VTa
cda0: 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ble objects are 
cdb0: 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65 64 20  not .** deleted 
cdc0: 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f  and the sqlite3_
cdd0: 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72  vtab* handles ar
cde0: 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63  e not xDisconnec
cdf0: 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65 64 69  t()ed .** immedi
ce00: 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20  ately. Instead, 
ce10: 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66  they are moved f
ce20: 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56  rom the Table.pV
ce30: 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a  Table list to.**
ce40: 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20   another linked 
ce50: 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74  list headed by t
ce60: 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  he sqlite3.pDisc
ce70: 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66  onnect member of
ce80: 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
ce90: 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74  nding sqlite3 st
cea0: 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72  ructure. They ar
ceb0: 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78  e then deleted/x
cec0: 44 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a  Disconnected .**
ced0: 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61   next time a sta
cee0: 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72  tement is prepar
cef0: 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71  ed using said sq
cf00: 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20  lite3*. This is 
cf10: 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64  done.** to avoid
cf20: 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73   deadlock issues
cf30: 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69   involving multi
cf40: 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65  ple sqlite3.mute
cf50: 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65  x mutexes..** Re
cf60: 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20  fer to comments 
cf70: 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73  above function s
cf80: 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
cf90: 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a  List() for an.**
cfa0: 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20   explanation as 
cfb0: 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66  to why it is saf
cfc0: 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72  e to add an entr
cfd0: 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e  y to an sqlite3.
cfe0: 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c  pDisconnect.** l
cff0: 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64  ist without hold
d000: 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f  ing the correspo
d010: 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75  nding sqlite3.mu
d020: 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a  tex mutex..**.**
d030: 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20   The memory for 
d040: 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20  objects of this 
d050: 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61  type is always a
d060: 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a 20  llocated by .** 
d070: 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28  sqlite3DbMalloc(
d080: 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e  ), using the con
d090: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73  nection handle s
d0a0: 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e  tored in VTable.
d0b0: 64 62 20 61 73 20 0a 2a 2a 20 74 68 65 20 66 69  db as .** the fi
d0c0: 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f  rst argument..*/
d0d0: 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b  .struct VTable {
d0e0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
d0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d100: 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  Database connect
d110: 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ion associated w
d120: 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ith this table *
d130: 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64  /.  Module *pMod
d140: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
d150: 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75   Pointer to modu
d160: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
d170: 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  n */.  sqlite3_v
d180: 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20  tab *pVtab;     
d190: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
d1a0: 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a  tab instance */.
d1b0: 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
d1c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d1d0: 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
d1e0: 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  s to this struct
d1f0: 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e  ure */.  u8 bCon
d200: 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20  straint;        
d210: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f     /* True if co
d220: 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73 75  nstraints are su
d230: 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74  pported */.  int
d240: 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20   iSavepoint;    
d250: 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20         /* Depth 
d260: 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54  of the SAVEPOINT
d270: 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62   stack */.  VTab
d280: 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  le *pNext;      
d290: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e        /* Next in
d2a0: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65   linked list (se
d2b0: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a  e above) */.};..
d2c0: 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 74  /*.** Each SQL t
d2d0: 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e  able is represen
d2e0: 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79  ted in memory by
d2f0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
d300: 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67  the.** following
d310: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
d320: 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65 20 69 73  * Table.zName is
d330: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
d340: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 63 61 73   table.  The cas
d350: 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61  e of the origina
d360: 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54 41 42 4c  l.** CREATE TABL
d370: 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73  E statement is s
d380: 74 6f 72 65 64 2c 20 62 75 74 20 63 61 73 65 20  tored, but case 
d390: 69 73 20 6e 6f 74 20 73 69 67 6e 69 66 69 63 61  is not significa
d3a0: 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72  nt for.** compar
d3b0: 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62  isons..**.** Tab
d3c0: 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68 65 20 6e  le.nCol is the n
d3d0: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
d3e0: 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20   in this table. 
d3f0: 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69 73 20 61   Table.aCol is a
d400: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  .** pointer to a
d410: 6e 20 61 72 72 61 79 20 6f 66 20 43 6f 6c 75 6d  n array of Colum
d420: 6e 20 73 74 72 75 63 74 75 72 65 73 2c 20 6f 6e  n structures, on
d430: 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  e for each colum
d440: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  n..**.** If the 
d450: 74 61 62 6c 65 20 68 61 73 20 61 6e 20 49 4e 54  table has an INT
d460: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
d470: 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e 69 50 4b  , then Table.iPK
d480: 65 79 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  ey is the index 
d490: 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c 75 6d 6e  of.** the column
d4a0: 20 74 68 61 74 20 69 73 20 74 68 61 74 20 6b 65   that is that ke
d4b0: 79 2e 20 20 20 4f 74 68 65 72 77 69 73 65 20 54  y.   Otherwise T
d4c0: 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 6e 65  able.iPKey is ne
d4d0: 67 61 74 69 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a  gative.  Note.**
d4e0: 20 74 68 61 74 20 74 68 65 20 64 61 74 61 74 79   that the dataty
d4f0: 70 65 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52  pe of the PRIMAR
d500: 59 20 4b 45 59 20 6d 75 73 74 20 62 65 20 49 4e  Y KEY must be IN
d510: 54 45 47 45 52 20 66 6f 72 20 74 68 69 73 20 66  TEGER for this f
d520: 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65 20 73 65  ield to.** be se
d530: 74 2e 20 20 41 6e 20 49 4e 54 45 47 45 52 20 50  t.  An INTEGER P
d540: 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 75 73  RIMARY KEY is us
d550: 65 64 20 61 73 20 74 68 65 20 72 6f 77 69 64 20  ed as the rowid 
d560: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 0a  for each row of.
d570: 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  ** the table.  I
d580: 66 20 61 20 74 61 62 6c 65 20 68 61 73 20 6e 6f  f a table has no
d590: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
d5a0: 20 4b 45 59 2c 20 74 68 65 6e 20 61 20 72 61 6e   KEY, then a ran
d5b0: 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20 69 73 20  dom rowid.** is 
d5c0: 67 65 6e 65 72 61 74 65 64 20 66 6f 72 20 65 61  generated for ea
d5d0: 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74 61  ch row of the ta
d5e0: 62 6c 65 2e 20 20 54 46 5f 48 61 73 50 72 69 6d  ble.  TF_HasPrim
d5f0: 61 72 79 4b 65 79 20 69 73 20 73 65 74 20 69 66  aryKey is set if
d600: 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 68 61  .** the table ha
d610: 73 20 61 6e 79 20 50 52 49 4d 41 52 59 20 4b 45  s any PRIMARY KE
d620: 59 2c 20 49 4e 54 45 47 45 52 20 6f 72 20 6f 74  Y, INTEGER or ot
d630: 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  herwise..**.** T
d640: 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20 74 68 65  able.tnum is the
d650: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72   page number for
d660: 20 74 68 65 20 72 6f 6f 74 20 42 54 72 65 65 20   the root BTree 
d670: 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c  page of the tabl
d680: 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64 61 74 61  e in the.** data
d690: 62 61 73 65 20 66 69 6c 65 2e 20 20 49 66 20 54  base file.  If T
d6a0: 61 62 6c 65 2e 69 44 62 20 69 73 20 74 68 65 20  able.iDb is the 
d6b0: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
d6c0: 61 62 61 73 65 20 74 61 62 6c 65 20 62 61 63 6b  abase table back
d6d0: 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c 69 74 65  end.** in sqlite
d6e0: 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73 20 66 6f  .aDb[].  0 is fo
d6f0: 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  r the main datab
d700: 61 73 65 20 61 6e 64 20 31 20 69 73 20 66 6f 72  ase and 1 is for
d710: 20 74 68 65 20 66 69 6c 65 20 74 68 61 74 0a 2a   the file that.*
d720: 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f 72 61 72  * holds temporar
d730: 79 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  y tables and ind
d740: 69 63 65 73 2e 20 20 49 66 20 54 46 5f 45 70 68  ices.  If TF_Eph
d750: 65 6d 65 72 61 6c 20 69 73 20 73 65 74 0a 2a 2a  emeral is set.**
d760: 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
d770: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 66  is stored in a f
d780: 69 6c 65 20 74 68 61 74 20 69 73 20 61 75 74 6f  ile that is auto
d790: 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65  matically delete
d7a0: 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20 56 44  d.** when the VD
d7b0: 42 45 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65  BE cursor to the
d7c0: 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64   table is closed
d7d0: 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  .  In this case 
d7e0: 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72  Table.tnum .** r
d7f0: 65 66 65 72 73 20 56 44 42 45 20 63 75 72 73 6f  efers VDBE curso
d800: 72 20 6e 75 6d 62 65 72 20 74 68 61 74 20 68 6f  r number that ho
d810: 6c 64 73 20 74 68 65 20 74 61 62 6c 65 20 6f 70  lds the table op
d820: 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65 20 72  en, not to the r
d830: 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75 6d 62  oot.** page numb
d840: 65 72 2e 20 20 54 72 61 6e 73 69 65 6e 74 20 74  er.  Transient t
d850: 61 62 6c 65 73 20 61 72 65 20 75 73 65 64 20 74  ables are used t
d860: 6f 20 68 6f 6c 64 20 74 68 65 20 72 65 73 75 6c  o hold the resul
d870: 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62 2d 71  ts of a.** sub-q
d880: 75 65 72 79 20 74 68 61 74 20 61 70 70 65 61 72  uery that appear
d890: 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 72  s instead of a r
d8a0: 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 20 69  eal table name i
d8b0: 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
d8c0: 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c 45 43  e .** of a SELEC
d8d0: 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  T statement..*/.
d8e0: 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20  struct Table {. 
d8f0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
d900: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
d910: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   the table or vi
d920: 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a  ew */.  Column *
d930: 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  aCol;        /* 
d940: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
d950: 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  t each column */
d960: 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78  .  Index *pIndex
d970: 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  ;       /* List 
d980: 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f  of SQL indexes o
d990: 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f  n this table. */
d9a0: 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65  .  Select *pSele
d9b0: 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20  ct;     /* NULL 
d9c0: 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69  for tables.  Poi
d9d0: 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f  nts to definitio
d9e0: 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a  n if a view. */.
d9f0: 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20    FKey *pFKey;  
da00: 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64         /* Linked
da10: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72   list of all for
da20: 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69  eign keys in thi
da30: 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61  s table */.  cha
da40: 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
da50: 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
da60: 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
da70: 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
da80: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
da90: 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20  TE_OMIT_CHECK.  
daa0: 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b  ExprList *pCheck
dab0: 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43  ;    /* All CHEC
dac0: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  K constraints */
dad0: 0a 23 65 6e 64 69 66 0a 20 20 74 52 6f 77 63 6e  .#endif.  tRowcn
dae0: 74 20 6e 52 6f 77 45 73 74 3b 20 20 20 20 20 2f  t nRowEst;     /
daf0: 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73  * Estimated rows
db00: 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d   in table - from
db10: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61   sqlite_stat1 ta
db20: 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75  ble */.  int tnu
db30: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
db40: 20 52 6f 6f 74 20 42 54 72 65 65 20 6e 6f 64 65   Root BTree node
db50: 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20   for this table 
db60: 28 73 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 29  (see note above)
db70: 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b   */.  i16 iPKey;
db80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66             /* If
db90: 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75   not negative, u
dba0: 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61  se aCol[iPKey] a
dbb0: 73 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  s the primary ke
dbc0: 79 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b  y */.  i16 nCol;
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
dbe0: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
dbf0: 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a   in this table *
dc00: 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20  /.  u16 nRef;   
dc10: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
dc20: 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
dc30: 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a  o this Table */.
dc40: 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f    LogEst szTabRo
dc50: 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61  w;     /* Estima
dc60: 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68  ted size of each
dc70: 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79   table row in by
dc80: 74 65 73 20 2a 2f 0a 20 20 75 38 20 74 61 62 46  tes */.  u8 tabF
dc90: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a  lags;         /*
dca0: 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61   Mask of TF_* va
dcb0: 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 6b 65 79  lues */.  u8 key
dcc0: 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f  Conf;          /
dcd0: 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20  * What to do in 
dce0: 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65  case of uniquene
dcf0: 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69  ss conflict on i
dd00: 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20  PKey */.#ifndef 
dd10: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45  SQLITE_OMIT_ALTE
dd20: 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64  RTABLE.  int add
dd30: 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a  ColOffset;    /*
dd40: 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41 54   Offset in CREAT
dd50: 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20  E TABLE stmt to 
dd60: 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e  add a new column
dd70: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
dd80: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
dd90: 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e  IRTUALTABLE.  in
dda0: 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20  t nModuleArg;   
ddb0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
ddc0: 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65  arguments to the
ddd0: 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61   module */.  cha
dde0: 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b  r **azModuleArg;
ddf0: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 61 6c 6c    /* Text of all
de00: 20 6d 6f 64 75 6c 65 20 61 72 67 73 2e 20 5b 30   module args. [0
de10: 5d 20 69 73 20 6d 6f 64 75 6c 65 20 6e 61 6d 65  ] is module name
de20: 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56   */.  VTable *pV
de30: 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69  Table;     /* Li
de40: 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a  st of VTable obj
de50: 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ects. */.#endif.
de60: 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
de70: 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f  ger;   /* List o
de80: 66 20 74 72 69 67 67 65 72 73 20 73 74 6f 72 65  f triggers store
de90: 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a  d in pSchema */.
dea0: 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
deb0: 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  a;     /* Schema
dec0: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
ded0: 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54  his table */.  T
dee0: 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69  able *pNextZombi
def0: 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74  e;  /* Next on t
df00: 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65  he Parse.pZombie
df10: 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  Tab list */.};..
df20: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
df30: 6c 75 65 73 20 66 6f 72 20 54 61 62 65 2e 74 61  lues for Tabe.ta
df40: 62 46 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69  bFlags..*/.#defi
df50: 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20  ne TF_Readonly  
df60: 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
df70: 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65   Read-only syste
df80: 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  m table */.#defi
df90: 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20  ne TF_Ephemeral 
dfa0: 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a        0x02    /*
dfb0: 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61   An ephemeral ta
dfc0: 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
dfd0: 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20  F_HasPrimaryKey 
dfe0: 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 61 62    0x04    /* Tab
dff0: 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61 72 79  le has a primary
e000: 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
e010: 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  TF_Autoincrement
e020: 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 49 6e     0x08    /* In
e030: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
e040: 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65  y is autoincreme
e050: 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  nt */.#define TF
e060: 5f 56 69 72 74 75 61 6c 20 20 20 20 20 20 20 20  _Virtual        
e070: 20 30 78 31 30 20 20 20 20 2f 2a 20 49 73 20 61   0x10    /* Is a
e080: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
e090: 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74  /.#define TF_Wit
e0a0: 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 32  houtRowid    0x2
e0b0: 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64  0    /* No rowid
e0c0: 20 75 73 65 64 2e 20 50 52 49 4d 41 52 59 20 4b   used. PRIMARY K
e0d0: 45 59 20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f  EY is the key */
e0e0: 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f  .../*.** Test to
e0f0: 20 73 65 65 20 77 68 65 74 68 65 72 20 6f 72 20   see whether or 
e100: 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20 61  not a table is a
e110: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
e120: 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65   This is.** done
e130: 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20 74   as a macro so t
e140: 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20 6f  hat it will be o
e150: 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68 65  ptimized out whe
e160: 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  n virtual.** tab
e170: 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f 6d  le support is om
e180: 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62  itted from the b
e190: 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  uild..*/.#ifndef
e1a0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
e1b0: 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
e1c0: 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
e1d0: 20 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62        (((X)->tab
e1e0: 46 6c 61 67 73 20 26 20 54 46 5f 56 69 72 74 75  Flags & TF_Virtu
e1f0: 61 6c 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e  al)!=0).#  defin
e200: 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
e210: 28 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c  (X) (((X)->colFl
e220: 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49  ags & COLFLAG_HI
e230: 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c 73 65 0a  DDEN)!=0).#else.
e240: 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74  #  define IsVirt
e250: 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23 20  ual(X)      0.# 
e260: 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
e270: 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64  Column(X) 0.#end
e280: 69 66 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20  if../* Does the 
e290: 74 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77  table have a row
e2a0: 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61  id */.#define Ha
e2b0: 73 52 6f 77 69 64 28 58 29 20 20 20 20 20 28 28  sRowid(X)     ((
e2c0: 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
e2d0: 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29  TF_WithoutRowid)
e2e0: 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ==0)../*.** Each
e2f0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
e300: 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e  straint is an in
e310: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
e320: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
e330: 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69  e..**.** A forei
e340: 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69  gn key is associ
e350: 61 74 65 64 20 77 69 74 68 20 74 77 6f 20 74 61  ated with two ta
e360: 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d  bles.  The "from
e370: 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  " table is.** th
e380: 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
e390: 74 61 69 6e 73 20 74 68 65 20 52 45 46 45 52 45  tains the REFERE
e3a0: 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68 61 74  NCES clause that
e3b0: 20 63 72 65 61 74 65 73 20 74 68 65 20 66 6f 72   creates the for
e3c0: 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68  eign.** key.  Th
e3d0: 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20  e "to" table is 
e3e0: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69  the table that i
e3f0: 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52  s named in the R
e400: 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
e410: 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68  ..** Consider th
e420: 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a  is example:.**.*
e430: 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42  *     CREATE TAB
e440: 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20  LE ex1(.**      
e450: 20 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41   a INTEGER PRIMA
e460: 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20  RY KEY,.**      
e470: 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54   b INTEGER CONST
e480: 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45  RAINT fk1 REFERE
e490: 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20  NCES ex2(x).**  
e4a0: 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20     );.**.** For 
e4b0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31  foreign key "fk1
e4c0: 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ", the from-tabl
e4d0: 65 20 69 73 20 22 65 78 31 22 20 61 6e 64 20 74  e is "ex1" and t
e4e0: 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22  he to-table is "
e4f0: 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c  ex2"..** Equival
e500: 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a  ent names:.**.**
e510: 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20       from-table 
e520: 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a  == child-table.*
e530: 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65  *       to-table
e540: 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65   == parent-table
e550: 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45  .**.** Each REFE
e560: 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65  RENCES clause ge
e570: 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61  nerates an insta
e580: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
e590: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
e5a0: 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63  * which is attac
e5b0: 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d  hed to the from-
e5c0: 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74  table.  The to-t
e5d0: 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78  able need not ex
e5e0: 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  ist when.** the 
e5f0: 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72  from-table is cr
e600: 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73  eated.  The exis
e610: 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d  tence of the to-
e620: 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65  table is not che
e630: 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  cked..**.** The 
e640: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65  list of all pare
e650: 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61  nts for child Ta
e660: 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61 74  ble X is held at
e670: 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20   X.pFKey..**.** 
e680: 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68  A list of all ch
e690: 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62  ildren for a tab
e6a0: 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63  le named Z (whic
e6b0: 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e  h might not even
e6c0: 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65   exist).** is he
e6d0: 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65  ld in Schema.fke
e6e0: 79 48 61 73 68 20 77 69 74 68 20 61 20 68 61 73  yHash with a has
e6f0: 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73  h key of Z..*/.s
e700: 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54  truct FKey {.  T
e710: 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20  able *pFrom;    
e720: 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69   /* Table contai
e730: 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e  ning the REFEREN
e740: 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a  CES clause (aka:
e750: 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65   Child) */.  FKe
e760: 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f  y *pNextFrom;  /
e770: 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68  * Next FKey with
e780: 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72   the same in pFr
e790: 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20  om. Next parent 
e7a0: 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68  of pFrom */.  ch
e7b0: 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20  ar *zTo;        
e7c0: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65  /* Name of table
e7d0: 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f   that the key po
e7e0: 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61  ints to (aka: Pa
e7f0: 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20  rent) */.  FKey 
e800: 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20  *pNextTo;    /* 
e810: 4e 65 78 74 20 77 69 74 68 20 74 68 65 20 73 61  Next with the sa
e820: 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69  me zTo. Next chi
e830: 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20  ld of zTo. */.  
e840: 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20  FKey *pPrevTo;  
e850: 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69    /* Previous wi
e860: 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20  th the same zTo 
e870: 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20  */.  int nCol;  
e880: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
e890: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
e8a0: 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20  his key */.  /* 
e8b0: 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31  EV: R-30323-2191
e8c0: 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65  7 */.  u8 isDefe
e8d0: 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54  rred;       /* T
e8e0: 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
e8f0: 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65  t checking is de
e900: 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d  ferred till COMM
e910: 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69  IT */.  u8 aActi
e920: 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  on[2];        /*
e930: 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f   ON DELETE and O
e940: 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73  N UPDATE actions
e950: 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a  , respectively *
e960: 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54  /.  Trigger *apT
e970: 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69  rigger[2];/* Tri
e980: 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f  ggers for aActio
e990: 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  n[] actions */. 
e9a0: 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20   struct sColMap 
e9b0: 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e  {      /* Mappin
e9c0: 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  g of columns in 
e9d0: 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73  pFrom to columns
e9e0: 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69   in zTo */.    i
e9f0: 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20  nt iFrom;       
ea00: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
ea10: 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d   column in pFrom
ea20: 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43   */.    char *zC
ea30: 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ol;           /*
ea40: 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20   Name of column 
ea50: 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c  in zTo.  If NULL
ea60: 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59   use PRIMARY KEY
ea70: 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b   */.  } aCol[1];
ea80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
ea90: 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
eaa0: 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e  h of nCol column
eab0: 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  s */.};../*.** S
eac0: 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d  QLite supports m
ead0: 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61  any different wa
eae0: 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20  ys to resolve a 
eaf0: 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
eb00: 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70  ror.  ROLLBACK p
eb10: 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
eb20: 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e  that a constrain
eb30: 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63  t violation.** c
eb40: 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61 74  auses the operat
eb50: 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74  ion in process t
eb60: 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74  o fail and for t
eb70: 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
eb80: 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20  action.** to be 
eb90: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42  rolled back.  AB
eba0: 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ORT processing m
ebb0: 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69  eans the operati
ebc0: 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a  on in process.**
ebd0: 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70   fails and any p
ebe0: 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f  rior changes fro
ebf0: 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61  m that one opera
ec00: 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20  tion are backed 
ec10: 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20  out,.** but the 
ec20: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
ec30: 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  ot rolled back. 
ec40: 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67   FAIL processing
ec50: 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74   means that.** t
ec60: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
ec70: 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61  progress stops a
ec80: 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72  nd returns an er
ec90: 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70  ror code.  But p
eca0: 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20  rior.** changes 
ecb0: 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20  due to the same 
ecc0: 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f  operation are no
ecd0: 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64  t backed out and
ece0: 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20   no rollback.** 
ecf0: 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20  occurs.  IGNORE 
ed00: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 70  means that the p
ed10: 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68  articular row th
ed20: 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63 6f  at caused the co
ed30: 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
ed40: 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65  r is not inserte
ed50: 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50  d or updated.  P
ed60: 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
ed70: 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
ed80: 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e  .** is returned.
ed90: 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20    REPLACE means 
eda0: 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e 67  that preexisting
edb0: 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74   database rows t
edc0: 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20  hat caused.** a 
edd0: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
ede0: 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20  t violation are 
edf0: 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20  removed so that 
ee00: 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f  the new insert o
ee10: 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20  r.** update can 
ee20: 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73  proceed.  Proces
ee30: 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
ee40: 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72  nd no error is r
ee50: 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52  eported..**.** R
ee60: 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c  ESTRICT, SETNULL
ee70: 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61 63  , and CASCADE ac
ee80: 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79  tions apply only
ee90: 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73   to foreign keys
eea0: 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73  ..** RESTRICT is
eeb0: 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f   the same as ABO
eec0: 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  RT for IMMEDIATE
eed0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e   foreign keys an
eee0: 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73  d the.** same as
eef0: 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45   ROLLBACK for DE
ef00: 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45  FERRED keys.  SE
ef10: 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74  TNULL means that
ef20: 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
ef30: 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55  key is set to NU
ef40: 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61  LL.  CASCADE mea
ef50: 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54 45  ns that a DELETE
ef60: 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74 68   or UPDATE of th
ef70: 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20  e.** referenced 
ef80: 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f  table row is pro
ef90: 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65  pagated into the
efa0: 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20   row that holds 
efb0: 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b  the.** foreign k
efc0: 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20 66  ey..** .** The f
efd0: 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69  ollowing symboli
efe0: 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65  c values are use
eff0: 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63  d to record whic
f000: 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74  h type.** of act
f010: 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a  ion to take..*/.
f020: 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20  #define OE_None 
f030: 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65      0   /* There
f040: 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e   is no constrain
f050: 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64  t to check */.#d
f060: 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63  efine OE_Rollbac
f070: 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68  k 1   /* Fail th
f080: 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20  e operation and 
f090: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
f0a0: 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
f0b0: 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20  ine OE_Abort    
f0c0: 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20  2   /* Back out 
f0d0: 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e  changes but do n
f0e0: 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  o rollback trans
f0f0: 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
f100: 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20  e OE_Fail     3 
f110: 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70    /* Stop the op
f120: 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76  eration but leav
f130: 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e  e all prior chan
f140: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ges */.#define O
f150: 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f  E_Ignore   4   /
f160: 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72  * Ignore the err
f170: 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68  or. Do not do th
f180: 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  e INSERT or UPDA
f190: 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  TE */.#define OE
f1a0: 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a  _Replace  5   /*
f1b0: 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67   Delete existing
f1c0: 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f   record, then do
f1d0: 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
f1e0: 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45  E */..#define OE
f1f0: 5f 52 65 73 74 72 69 63 74 20 36 20 20 20 2f 2a  _Restrict 6   /*
f200: 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d   OE_Abort for IM
f210: 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c  MEDIATE, OE_Roll
f220: 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45  back for DEFERRE
f230: 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  D */.#define OE_
f240: 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20  SetNull  7   /* 
f250: 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
f260: 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c  key value to NUL
f270: 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  L */.#define OE_
f280: 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a 20  SetDflt  8   /* 
f290: 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
f2a0: 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73  key value to its
f2b0: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66   default */.#def
f2c0: 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20  ine OE_Cascade  
f2d0: 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74  9   /* Cascade t
f2e0: 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23  he changes */..#
f2f0: 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c  define OE_Defaul
f300: 74 20 20 31 30 20 20 2f 2a 20 44 6f 20 77 68 61  t  10  /* Do wha
f310: 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c  tever the defaul
f320: 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a  t action is */..
f330: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
f340: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
f350: 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
f360: 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
f370: 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
f380: 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b   to sqlite3VdbeK
f390: 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73  eyCompare and is
f3a0: 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c   used to control
f3b0: 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70 61 72 69   the .** compari
f3c0: 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69  son of the two i
f3d0: 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a  ndex keys..**.**
f3e0: 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74   Note that aSort
f3f0: 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c  Order[] and aCol
f400: 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b  l[] have nField+
f410: 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a  1 slots.  There.
f420: 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c  ** are nField sl
f430: 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  ots for the colu
f440: 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20  mns of an index 
f450: 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73  then one extra s
f460: 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  lot.** for the r
f470: 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e  owid at the end.
f480: 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e  .*/.struct KeyIn
f490: 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b  fo {.  u32 nRef;
f4a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
f4b0: 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63  mber of referenc
f4c0: 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e  es to this KeyIn
f4d0: 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75  fo object */.  u
f4e0: 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
f4f0: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
f500: 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65  ing - one of the
f510: 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c   SQLITE_UTF* val
f520: 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69  ues */.  u16 nFi
f530: 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  eld;         /* 
f540: 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f  Number of key co
f550: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64  lumns in the ind
f560: 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 58 46 69  ex */.  u16 nXFi
f570: 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  eld;        /* N
f580: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
f590: 20 62 65 79 6f 6e 64 20 74 68 65 20 6b 65 79 20   beyond the key 
f5a0: 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c  columns */.  sql
f5b0: 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
f5c0: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
f5d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20   connection */. 
f5e0: 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b   u8 *aSortOrder;
f5f0: 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64       /* Sort ord
f600: 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  er for each colu
f610: 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  mn. */.  CollSeq
f620: 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20   *aColl[1];  /* 
f630: 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
f640: 63 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d  ce for each term
f650: 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d   of the key */.}
f660: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
f670: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
f680: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
f690: 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f  holds informatio
f6a0: 6e 20 61 62 6f 75 74 20 61 0a 2a 2a 20 73 69 6e  n about a.** sin
f6b0: 67 6c 65 20 69 6e 64 65 78 20 72 65 63 6f 72 64  gle index record
f6c0: 20 74 68 61 74 20 68 61 73 20 61 6c 72 65 61 64   that has alread
f6d0: 79 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75  y been parsed ou
f6e0: 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61  t into individua
f6f0: 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a  l.** values..**.
f700: 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20 61  ** A record is a
f710: 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f  n object that co
f720: 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
f730: 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74  re fields of dat
f740: 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72  a..** Records ar
f750: 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
f760: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  the content of a
f770: 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74   table row and t
f780: 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b  o store.** the k
f790: 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20  ey of an index. 
f7a0: 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67   A blob encoding
f7b0: 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73 20   of a record is 
f7c0: 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68  created by.** th
f7d0: 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20  e OP_MakeRecord 
f7e0: 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44  opcode of the VD
f7f0: 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73 73  BE and is disass
f800: 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a  embled by the.**
f810: 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
f820: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74  e..**.** This st
f830: 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 61 20  ructure holds a 
f840: 72 65 63 6f 72 64 20 74 68 61 74 20 68 61 73 20  record that has 
f850: 61 6c 72 65 61 64 79 20 62 65 65 6e 20 64 69 73  already been dis
f860: 61 73 73 65 6d 62 6c 65 64 0a 2a 2a 20 69 6e 74  assembled.** int
f870: 6f 20 69 74 73 20 63 6f 6e 73 74 69 74 75 65 6e  o its constituen
f880: 74 20 66 69 65 6c 64 73 2e 0a 2a 2f 0a 73 74 72  t fields..*/.str
f890: 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
f8a0: 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  rd {.  KeyInfo *
f8b0: 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f  pKeyInfo;  /* Co
f8c0: 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74  llation and sort
f8d0: 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69  -order informati
f8e0: 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65  on */.  u16 nFie
f8f0: 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ld;         /* N
f900: 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
f910: 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20   in apMem[] */. 
f920: 20 75 38 20 66 6c 61 67 73 3b 20 20 20 20 20 20   u8 flags;      
f930: 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20       /* Boolean 
f940: 73 65 74 74 69 6e 67 73 2e 20 20 55 4e 50 41 43  settings.  UNPAC
f950: 4b 45 44 5f 2e 2e 2e 20 62 65 6c 6f 77 20 2a 2f  KED_... below */
f960: 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20  .  Mem *aMem;   
f970: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73         /* Values
f980: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
f990: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 6f 66 20  lowed values of 
f9a0: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2e 66  UnpackedRecord.f
f9b0: 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lags.*/.#define 
f9c0: 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
f9d0: 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20         0x01  /* 
f9e0: 4d 61 6b 65 20 74 68 69 73 20 6b 65 79 20 61 6e  Make this key an
f9f0: 20 65 70 73 69 6c 6f 6e 20 6c 61 72 67 65 72 20   epsilon larger 
fa00: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43  */.#define UNPAC
fa10: 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48  KED_PREFIX_MATCH
fa20: 20 20 30 78 30 32 20 20 2f 2a 20 41 20 70 72 65    0x02  /* A pre
fa30: 66 69 78 20 6d 61 74 63 68 20 69 73 20 63 6f 6e  fix match is con
fa40: 73 69 64 65 72 65 64 20 4f 4b 20 2a 2f 0a 0a 2f  sidered OK */../
fa50: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e  *.** Each SQL in
fa60: 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74  dex is represent
fa70: 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
fa80: 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
fa90: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
faa0: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
fab0: 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   The columns of 
fac0: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61  the table that a
fad0: 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  re to be indexed
fae0: 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a   are described.*
faf0: 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d  * by the aiColum
fb00: 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69  n[] field of thi
fb10: 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  s structure.  Fo
fb20: 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f  r example, suppo
fb30: 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68  se.** we have th
fb40: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
fb50: 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a  e and index:.**.
fb60: 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
fb70: 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20  BLE Ex1(c1 int, 
fb80: 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29  c2 int, c3 text)
fb90: 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  ;.**     CREATE 
fba0: 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31  INDEX Ex2 ON Ex1
fbb0: 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49  (c3,c1);.**.** I
fbc0: 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75  n the Table stru
fbd0: 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
fbe0: 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65   Ex1, nCol==3 be
fbf0: 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a  cause there are.
fc00: 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73  ** three columns
fc10: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
fc20: 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72  In the Index str
fc30: 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
fc40: 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d  g.** Ex2, nColum
fc50: 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20  n==2 since 2 of 
fc60: 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66  the 3 columns of
fc70: 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64   Ex1 are indexed
fc80: 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  ..** The value o
fc90: 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32  f aiColumn is {2
fca0: 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b  , 0}.  aiColumn[
fcb0: 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68  0]==2 because th
fcc0: 65 20 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75  e .** first colu
fcd0: 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
fce0: 20 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64   (c3) has an ind
fcf0: 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61  ex of 2 in Ex1.a
fd00: 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65  Col[]..** The se
fd10: 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  cond column to b
fd20: 65 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68  e indexed (c1) h
fd30: 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30  as an index of 0
fd40: 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b   in.** Ex1.aCol[
fd50: 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43  ], hence Ex2.aiC
fd60: 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a  olumn[1]==0..**.
fd70: 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45  ** The Index.onE
fd80: 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72  rror field deter
fd90: 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72  mines whether or
fda0: 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64   not the indexed
fdb0: 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74   columns.** must
fdc0: 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77   be unique and w
fdd0: 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65  hat to do if the
fde0: 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e  y are not.  When
fdf0: 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f   Index.onError=O
fe00: 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65  E_None,.** it me
fe10: 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20  ans this is not 
fe20: 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20  a unique index. 
fe30: 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73   Otherwise it is
fe40: 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a   a unique index.
fe50: 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ** and the value
fe60: 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f   of Index.onErro
fe70: 72 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77  r indicate the w
fe80: 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65  hich conflict re
fe90: 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67  solution .** alg
fea0: 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79  orithm to employ
feb0: 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74   whenever an att
fec0: 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20  empt is made to 
fed0: 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69  insert a non-uni
fee0: 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a  que.** element..
fef0: 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20  */.struct Index 
ff00: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
ff10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ff20: 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64  Name of this ind
ff30: 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43  ex */.  i16 *aiC
ff40: 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
ff50: 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e   /* Which column
ff60: 73 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  s are used by th
ff70: 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69  is index.  1st i
ff80: 73 20 30 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  s 0 */.  tRowcnt
ff90: 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20   *aiRowEst;     
ffa0: 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a    /* From ANALYZ
ffb0: 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c  E: Est. rows sel
ffc0: 65 63 74 65 64 20 62 79 20 65 61 63 68 20 63 6f  ected by each co
ffd0: 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  lumn */.  Table 
ffe0: 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  *pTable;        
fff0: 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61     /* The SQL ta
10000 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65  ble being indexe
10010 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  d */.  char *zCo
10020 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20  lAff;           
10030 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69  /* String defini
10040 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ng the affinity 
10050 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  of each column *
10060 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74  /.  Index *pNext
10070 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
10080 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61  The next index a
10090 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
100a0 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f  he same table */
100b0 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
100c0 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  ma;         /* S
100d0 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
100e0 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
100f0 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b   u8 *aSortOrder;
10100 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72            /* for
10110 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72   each column: Tr
10120 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d  ue==DESC, False=
10130 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61 72 20 2a  =ASC */.  char *
10140 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20  *azColl;        
10150 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63     /* Array of c
10160 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
10170 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65  e names for inde
10180 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61  x */.  Expr *pPa
10190 72 74 49 64 78 57 68 65 72 65 3b 20 20 20 20 20  rtIdxWhere;     
101a0 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  /* WHERE clause 
101b0 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69  for partial indi
101c0 63 65 73 20 2a 2f 0a 20 20 4b 65 79 49 6e 66 6f  ces */.  KeyInfo
101d0 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 20 20 20   *pKeyInfo;     
101e0 20 20 2f 2a 20 41 20 4b 65 79 49 6e 66 6f 20 6f    /* A KeyInfo o
101f0 62 6a 65 63 74 20 73 75 69 74 61 62 6c 65 20 66  bject suitable f
10200 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  or this index */
10210 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20  .  int tnum;    
10220 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
10230 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e  B Page containin
10240 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69  g root of this i
10250 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  ndex */.  LogEst
10260 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20   szIdxRow;      
10270 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
10280 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65  average row size
10290 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75   in bytes */.  u
102a0 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20  16 nKeyCol;     
102b0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
102c0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72  r of columns for
102d0 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a  ming the key */.
102e0 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20    u16 nColumn;  
102f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
10300 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
10310 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e  stored in the in
10320 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72  dex */.  u8 onEr
10330 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ror;            
10340 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f    /* OE_Abort, O
10350 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70  E_Ignore, OE_Rep
10360 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65  lace, or OE_None
10370 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 61   */.  unsigned a
10380 75 74 6f 49 6e 64 65 78 3a 32 3b 20 20 20 20 2f  utoIndex:2;    /
10390 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d  * 1==UNIQUE, 2==
103a0 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d  PRIMARY KEY, 0==
103b0 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
103c0 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72    unsigned bUnor
103d0 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73  dered:1;   /* Us
103e0 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72  e this index for
103f0 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65   == or IN querie
10400 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69  s only */.  unsi
10410 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c  gned uniqNotNull
10420 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
10430 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e  UNIQUE and NOT N
10440 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75  ULL for all colu
10450 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  mns */.  unsigne
10460 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20  d isResized:1;  
10470 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
10480 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29  izeIndexObject()
10490 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
104a0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
104b0 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f  sCovering:1;   /
104c0 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20 69  * True if this i
104d0 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  s a covering ind
104e0 65 78 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  ex */.#ifdef SQL
104f0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
10500 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20  _OR_STAT4.  int 
10510 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20  nSample;        
10520 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
10530 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53  f elements in aS
10540 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  ample[] */.  int
10550 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20   nSampleCol;    
10560 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
10570 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45   IndexSample.anE
10580 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f  q[] and so on */
10590 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67  .  tRowcnt *aAvg
105a0 45 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  Eq;         /* A
105b0 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65  verage nEq value
105c0 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69  s for keys not i
105d0 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49  n aSample */.  I
105e0 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d  ndexSample *aSam
105f0 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c  ple;    /* Sampl
10600 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d  es of the left-m
10610 6f 73 74 20 6b 65 79 20 2a 2f 0a 23 65 6e 64 69  ost key */.#endi
10620 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  f.};../*.** Each
10630 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69   sample stored i
10640 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n the sqlite_sta
10650 74 33 20 74 61 62 6c 65 20 69 73 20 72 65 70 72  t3 table is repr
10660 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
10670 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74  y .** using a st
10680 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20  ructure of this 
10690 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d  type.  See docum
106a0 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20  entation at the 
106b0 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e  top of the.** an
106c0 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66  alyze.c source f
106d0 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ile for addition
106e0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
106f0 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53  */.struct IndexS
10700 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a  ample {.  void *
10710 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50  p;          /* P
10720 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65  ointer to sample
10730 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  d record */.  in
10740 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  t n;            
10750 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72  /* Size of recor
10760 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  d in bytes */.  
10770 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20  tRowcnt *anEq;  
10780 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
10790 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74   of rows where t
107a0 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68  he key equals th
107b0 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
107c0 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20  Rowcnt *anLt;   
107d0 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
107e0 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65  of rows where ke
107f0 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
10800 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
10810 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20  tRowcnt *anDLt; 
10820 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
10830 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79   of distinct key
10840 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  s less than this
10850 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f   sample */.};../
10860 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20  *.** Each token 
10870 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68  coming out of th
10880 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e  e lexer is an in
10890 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69  stance of.** thi
108a0 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f  s structure.  To
108b0 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73  kens are also us
108c0 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e  ed as part of an
108d0 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a   expression..**.
108e0 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e  ** Note if Token
108f0 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e  .z==0 then Token
10900 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e  .dyn and Token.n
10910 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61   are undefined a
10920 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69  nd.** may contai
10930 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e  n random values.
10940 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e    Do not make an
10950 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62  y assumptions ab
10960 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a  out Token.dyn.**
10970 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65   and Token.n whe
10980 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f  n Token.z==0..*/
10990 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a  .struct Token {.
109a0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b    const char *z;
109b0 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
109c0 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20  the token.  Not 
109d0 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21  NULL-terminated!
109e0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
109f0 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62  nt n;    /* Numb
10a00 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  er of characters
10a10 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a   in this token *
10a20 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
10a30 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
10a40 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
10a50 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e  ns information n
10a60 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
10a70 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20  e.** code for a 
10a80 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74  SELECT that cont
10a90 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
10aa0 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
10ab0 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41  If Expr.op==TK_A
10ac0 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f  GG_COLUMN or TK_
10ad0 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65  AGG_FUNCTION the
10ae0 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20  n Expr.pAggInfo 
10af0 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  is a.** pointer 
10b00 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
10b10 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f  e.  The Expr.iCo
10b20 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68  lumn field is th
10b30 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67  e index in.** Ag
10b40 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20  gInfo.aCol[] or 
10b50 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20  AggInfo.aFunc[] 
10b60 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e  of information n
10b70 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
10b80 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68  e.** code for th
10b90 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41  at node..**.** A
10ba0 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20  ggInfo.pGroupBy 
10bb0 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e  and AggInfo.aFun
10bc0 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f  c.pExpr point to
10bd0 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74   fields within t
10be0 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53  he.** original S
10bf0 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65 20  elect structure 
10c00 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74  that describes t
10c10 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
10c20 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66  ent.  These.** f
10c30 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65  ields do not nee
10c40 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77 68  d to be freed wh
10c50 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20  en deallocating 
10c60 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75  the AggInfo stru
10c70 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
10c80 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20   AggInfo {.  u8 
10c90 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20  directMode;     
10ca0 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72       /* Direct r
10cb0 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65  endering mode me
10cc0 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64 69  ans take data di
10cd0 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20  rectly.         
10ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cf0 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20   ** from source 
10d00 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74 68  tables rather th
10d10 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61  an from accumula
10d20 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65  tors */.  u8 use
10d30 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20  SortingIdx;     
10d40 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d    /* In direct m
10d50 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74  ode, reference t
10d60 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
10d70 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20 20   rather.        
10d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d90 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f    ** than the so
10da0 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
10db0 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20  int sortingIdx; 
10dc0 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
10dd0 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
10de0 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
10df0 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64  .  int sortingId
10e00 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75  xPTab;     /* Cu
10e10 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70  rsor number of p
10e20 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20  seudo-table */. 
10e30 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c   int nSortingCol
10e40 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62  umn;     /* Numb
10e50 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
10e60 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
10e70 65 78 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ex */.  ExprList
10e80 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20   *pGroupBy;     
10e90 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79 20  /* The group by 
10ea0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75  clause */.  stru
10eb0 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b  ct AggInfo_col {
10ec0 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20      /* For each 
10ed0 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73  column used in s
10ee0 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a  ource tables */.
10ef0 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
10f00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10f10 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  Source table */.
10f20 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
10f30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10f40 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
10f50 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
10f60 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f  e */.    int iCo
10f70 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
10f80 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62    /* Column numb
10f90 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f  er within the so
10fa0 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
10fb0 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c    int iSorterCol
10fc0 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f  umn;       /* Co
10fd0 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74  lumn number in t
10fe0 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
10ff0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
11000 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
11010 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
11020 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
11030 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
11040 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11060 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70  The original exp
11070 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a  ression */.  } *
11080 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c  aCol;.  int nCol
11090 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
110a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65  /* Number of use
110b0 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f  d entries in aCo
110c0 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63  l[] */.  int nAc
110d0 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20  cumulator;      
110e0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
110f0 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20  lumns that show 
11100 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f  through to the o
11110 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20  utput..         
11120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11130 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63   ** Additional c
11140 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20  olumns are used 
11150 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65  only as paramete
11160 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20  rs to.          
11170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11180 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ** aggregate fun
11190 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75  ctions */.  stru
111a0 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20  ct AggInfo_func 
111b0 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20  {   /* For each 
111c0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
111d0 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  on */.    Expr *
111e0 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
111f0 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
11200 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75   encoding the fu
11210 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75  nction */.    Fu
11220 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20  ncDef *pFunc;   
11230 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67         /* The ag
11240 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
11250 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
11260 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b  */.    int iMem;
11270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11280 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  /* Memory locati
11290 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20  on that acts as 
112a0 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20  accumulator */. 
112b0 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74     int iDistinct
112c0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45  ;           /* E
112d0 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75  phemeral table u
112e0 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44  sed to enforce D
112f0 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a  ISTINCT */.  } *
11300 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75  aFunc;.  int nFu
11310 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
11320 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
11330 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d  tries in aFunc[]
11340 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
11350 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61 72  e datatype ynVar
11360 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74   is a signed int
11370 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d  eger, either 16-
11380 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a  bit or 32-bit..*
11390 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20  * Usually it is 
113a0 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66  16-bits.  But if
113b0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49   SQLITE_MAX_VARI
113c0 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67  ABLE_NUMBER is g
113d0 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33  reater.** than 3
113e0 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f 20  2767 we have to 
113f0 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20  make it 32-bit. 
11400 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66 65   16-bit is prefe
11410 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20  rred because.** 
11420 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d  it uses less mem
11430 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72 20  ory in the Expr 
11440 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73  object, which is
11450 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73   a big memory us
11460 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73  er.** in systems
11470 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72   with lots of pr
11480 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
11490 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c  s.  And few appl
114a0 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64  ications.** need
114b0 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74   more than about
114c0 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61 62   10 or 20 variab
114d0 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65  les.  But some e
114e0 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e  xtreme users wan
114f0 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65  t.** to have pre
11500 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
11510 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36 37   with over 32767
11520 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20   variables, and 
11530 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20  for them.** the 
11540 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61  option is availa
11550 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d  ble (at compile-
11560 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51  time)..*/.#if SQ
11570 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
11580 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a  E_NUMBER<=32767.
11590 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56 61  typedef i16 ynVa
115a0 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66  r;.#else.typedef
115b0 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64   int ynVar;.#end
115c0 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e  if../*.** Each n
115d0 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73  ode of an expres
115e0 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73  sion in the pars
115f0 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73  e tree is an ins
11600 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
11610 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
11620 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65  * Expr.op is the
11630 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74   opcode. The int
11640 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65  eger parser toke
11650 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75 73  n codes are reus
11660 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73  ed.** as opcodes
11670 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70   here. For examp
11680 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 64  le, the parser d
11690 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20  efines TK_GE to 
116a0 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  be an integer.**
116b0 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69   code representi
116c0 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72  ng the ">=" oper
116d0 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20  ator. This same 
116e0 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73 20  integer code is 
116f0 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70  reused.** to rep
11700 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61 74  resent the great
11710 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c  er-than-or-equal
11720 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20  -to operator in 
11730 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a  the expression.*
11740 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  * tree..**.** If
11750 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
11760 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61  is an SQL litera
11770 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54  l (TK_INTEGER, T
11780 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42  K_FLOAT, TK_BLOB
11790 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49  , .** or TK_STRI
117a0 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  NG), then Expr.t
117b0 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
117c0 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53 51  e text of the SQ
117d0 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a  L literal. If.**
117e0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
117f0 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28 54  is a variable (T
11800 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65  K_VARIABLE), the
11810 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
11820 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61  tains the .** va
11830 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e  riable name. Fin
11840 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70  ally, if the exp
11850 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
11860 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46  L function (TK_F
11870 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65  UNCTION),.** the
11880 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
11890 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f  tains the name o
118a0 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  f the function..
118b0 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68  **.** Expr.pRigh
118c0 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74  t and Expr.pLeft
118d0 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e   are the left an
118e0 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65  d right subexpre
118f0 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62  ssions of a.** b
11900 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20  inary operator. 
11910 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d  Either or both m
11920 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  ay be NULL..**.*
11930 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  * Expr.x.pList i
11940 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75  s a list of argu
11950 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70  ments if the exp
11960 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
11970 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61  L function,.** a
11980 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
11990 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73   or an IN expres
119a0 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
119b0 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c   "<lhs> IN (<y>,
119c0 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78   <z>...)"..** Ex
119d0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
119e0 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72  used if the expr
119f0 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d  ession is a sub-
11a00 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70  select or an exp
11a10 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ression of.** th
11a20 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
11a30 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20   (SELECT ...)". 
11a40 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c  If the EP_xIsSel
11a50 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69  ect bit is set i
11a60 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c  n the.** Expr.fl
11a70 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45  ags mask, then E
11a80 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
11a90 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73   valid. Otherwis
11aa0 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  e, Expr.x.pList 
11ab0 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a  is .** valid..**
11ac0 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f  .** An expressio
11ad0 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44  n of the form ID
11ae0 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73   or ID.ID refers
11af0 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20   to a column in 
11b00 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20  a table..** For 
11b10 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73  such expressions
11b20 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74  , Expr.op is set
11b30 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e   to TK_COLUMN an
11b40 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73  d Expr.iTable is
11b50 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20  .** the integer 
11b60 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  cursor number of
11b70 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70   a VDBE cursor p
11b80 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20  ointing to that 
11b90 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70  table and.** Exp
11ba0 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65  r.iColumn is the
11bb0 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66   column number f
11bc0 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20  or the specific 
11bd0 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a  column.  If the.
11be0 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  ** expression is
11bf0 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c   used as a resul
11c00 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74  t in an aggregat
11c10 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74  e SELECT, then t
11c20 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61  he.** value is a
11c30 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68  lso stored in th
11c40 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75  e Expr.iAgg colu
11c50 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67  mn in the aggreg
11c60 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69  ate so that.** i
11c70 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65  t can be accesse
11c80 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72  d after all aggr
11c90 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75  egates are compu
11ca0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ted..**.** If th
11cb0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
11cc0 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61  an unbound varia
11cd0 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75  ble marker (a qu
11ce0 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20  estion mark .** 
11cf0 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e  character '?' in
11d00 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51   the original SQ
11d10 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70 72  L) then the Expr
11d20 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68  .iTable holds th
11d30 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62  e index .** numb
11d40 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72 69  er for that vari
11d50 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  able..**.** If t
11d60 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
11d70 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65 6e   a subquery then
11d80 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f   Expr.iColumn ho
11d90 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  lds an integer.*
11da0 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  * register numbe
11db0 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  r containing the
11dc0 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73   result of the s
11dd0 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68 65  ubquery.  If the
11de0 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69 76  .** subquery giv
11df0 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65  es a constant re
11e00 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c  sult, then iTabl
11e10 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65  e is -1.  If the
11e20 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76   subquery.** giv
11e30 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 61  es a different a
11e40 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72 65  nswer at differe
11e50 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20  nt times during 
11e60 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73  statement proces
11e70 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61  sing.** then iTa
11e80 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72 65  ble is the addre
11e90 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69  ss of a subrouti
11ea0 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73  ne that computes
11eb0 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a   the subquery..*
11ec0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72  *.** If the Expr
11ed0 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43   is of type OP_C
11ee0 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74  olumn, and the t
11ef0 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63  able it is selec
11f00 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20  ting from.** is 
11f10 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20  a disk table or 
11f20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75  the "old.*" pseu
11f30 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70  do-table, then p
11f40 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  Tab points to th
11f50 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69  e.** correspondi
11f60 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  ng table definit
11f70 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43  ion..**.** ALLOC
11f80 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a  ATION NOTES:.**.
11f90 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  ** Expr objects 
11fa0 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66  can use a lot of
11fb0 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e   memory space in
11fc0 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
11fd0 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65  .  To.** help re
11fe0 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75  duce memory requ
11ff0 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69  irements, someti
12000 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  mes an Expr obje
12010 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72  ct will be.** tr
12020 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f  uncated.  And to
12030 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62   reduce the numb
12040 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c  er of memory all
12050 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69  ocations, someti
12060 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f  mes.** two or mo
12070 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  re Expr objects 
12080 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69  will be stored i
12090 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72  n a single memor
120a0 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a  y allocation,.**
120b0 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 45   together with E
120c0 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e  xpr.zToken strin
120d0 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  gs..**.** If the
120e0 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20   EP_Reduced and 
120f0 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
12100 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a  gs are set when.
12110 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63  ** an Expr objec
12120 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20  t is truncated. 
12130 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64   When EP_Reduced
12140 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c   is set, then al
12150 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45  l.** the child E
12160 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74  xpr objects in t
12170 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e  he Expr.pLeft an
12180 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73 75  d Expr.pRight su
12190 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f  btrees.** are co
121a0 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74  ntained within t
121b0 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61  he same memory a
121c0 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65  llocation.  Note
121d0 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a  , however, that.
121e0 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73 20  ** the subtrees 
121f0 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  in Expr.x.pList 
12200 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  or Expr.x.pSelec
12210 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65 70  t are always sep
12220 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63  arately.** alloc
12230 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73  ated, regardless
12240 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e   of whether or n
12250 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  ot EP_Reduced is
12260 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   set..*/.struct 
12270 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Expr {.  u8 op; 
12280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12290 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72  /* Operation per
122a0 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e  formed by this n
122b0 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  ode */.  char af
122c0 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20  finity;         
122d0 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
122e0 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72  of the column or
122f0 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75   0 if not a colu
12300 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67  mn */.  u32 flag
12310 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
12320 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e  * Various flags.
12330 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77    EP_* See below
12340 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
12350 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20    char *zToken; 
12360 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
12370 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65  n value. Zero te
12380 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71  rminated and deq
12390 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74  uoted */.    int
123a0 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20   iValue;        
123b0 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74      /* Non-negat
123c0 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  ive integer valu
123d0 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65  e if EP_IntValue
123e0 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a   */.  } u;..  /*
123f0 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e   If the EP_Token
12400 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74  Only flag is set
12410 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
12420 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
12430 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
12440 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
12450 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
12460 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
12470 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
12480 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
12490 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
124a0 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
124b0 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n. .  **********
124c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
124d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
124e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
124f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20  ***********/..  
12500 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20  Expr *pLeft;    
12510 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73         /* Left s
12520 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72  ubnode */.  Expr
12530 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20   *pRight;       
12540 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e     /* Right subn
12550 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ode */.  union {
12560 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
12570 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20  List;     /* op 
12580 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45  = IN, EXISTS, SE
12590 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43  LECT, CASE, FUNC
125a0 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f  TION, BETWEEN */
125b0 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
125c0 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f  lect;     /* EP_
125d0 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70  xIsSelect and op
125e0 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
125f0 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a  ELECT */.  } x;.
12600 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f  .  /* If the EP_
12610 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73 20  Reduced flag is 
12620 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e  set in the Expr.
12630 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
12640 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69   no.  ** space i
12650 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
12660 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77  the fields below
12670 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20   this point. An 
12680 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20  attempt to.  ** 
12690 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c  access them will
126a0 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67   result in a seg
126b0 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63  fault or malfunc
126c0 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  tion..  ********
126d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
126e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
126f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12700 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
12710 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45  #if SQLITE_MAX_E
12720 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e  XPR_DEPTH>0.  in
12730 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20  t nHeight;      
12740 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f       /* Height o
12750 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64 65  f the tree heade
12760 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a  d by this node *
12770 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69  /.#endif.  int i
12780 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
12790 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    /* TK_COLUMN: 
127a0 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  cursor number of
127b0 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63   table holding c
127c0 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20  olumn.          
127d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
127e0 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72  * TK_REGISTER: r
127f0 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20  egister number. 
12800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12810 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52          ** TK_TR
12820 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c  IGGER: 1 -> new,
12830 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20   0 -> old.      
12840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12850 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c     ** EP_Unlikel
12860 79 3a 20 20 31 30 30 30 20 74 69 6d 65 73 20 6c  y:  1000 times l
12870 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f 0a 20 20 79  ikelihood */.  y
12880 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20  nVar iColumn;   
12890 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55        /* TK_COLU
128a0 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78  MN: column index
128b0 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e  .  -1 for rowid.
128c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
128d0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
128e0 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62  VARIABLE: variab
128f0 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79  le number (alway
12900 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20 69 31  s >= 1). */.  i1
12910 36 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20  6 iAgg;         
12920 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e       /* Which en
12930 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d  try in pAggInfo-
12940 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75  >aCol[] or ->aFu
12950 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52  nc[] */.  i16 iR
12960 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20  ightJoinTable;  
12970 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f   /* If EP_FromJo
12980 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61  in, the right ta
12990 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20  ble of the join 
129a0 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20  */.  u8 op2;    
129b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
129c0 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67  K_REGISTER: orig
129d0 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78  inal value of Ex
129e0 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20  pr.op.          
129f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
12a00 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65  * TK_COLUMN: the
12a10 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72   value of p5 for
12a20 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20   OP_Column.     
12a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a40 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55      ** TK_AGG_FU
12a50 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20  NCTION: nesting 
12a60 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e  depth */.  AggIn
12a70 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20  fo *pAggInfo;   
12a80 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f    /* Used by TK_
12a90 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54  AGG_COLUMN and T
12aa0 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a  K_AGG_FUNCTION *
12ab0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
12ac0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61             /* Ta
12ad0 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d  ble for TK_COLUM
12ae0 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a  N expressions. *
12af0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
12b00 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68  following are th
12b10 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69  e meanings of bi
12b20 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  ts in the Expr.f
12b30 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
12b40 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f  define EP_FromJo
12b50 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20  in  0x000001 /* 
12b60 4f 72 69 67 69 6e 61 74 65 64 20 69 6e 20 4f 4e  Originated in ON
12b70 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65   or USING clause
12b80 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 23 64   of a join */.#d
12b90 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20  efine EP_Agg    
12ba0 20 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20 43     0x000002 /* C
12bb0 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
12bc0 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75  ore aggregate fu
12bd0 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  nctions */.#defi
12be0 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65 64 20 20  ne EP_Resolved  
12bf0 30 78 30 30 30 30 30 34 20 2f 2a 20 49 44 73 20  0x000004 /* IDs 
12c00 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76  have been resolv
12c10 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f  ed to COLUMNs */
12c20 0a 23 64 65 66 69 6e 65 20 45 50 5f 45 72 72 6f  .#define EP_Erro
12c30 72 20 20 20 20 20 30 78 30 30 30 30 30 38 20 2f  r     0x000008 /
12c40 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e  * Expression con
12c50 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
12c60 65 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66  e errors */.#def
12c70 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20  ine EP_Distinct 
12c80 20 30 78 30 30 30 30 31 30 20 2f 2a 20 41 67 67   0x000010 /* Agg
12c90 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
12ca0 77 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65  with DISTINCT ke
12cb0 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65  yword */.#define
12cc0 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30 78   EP_VarSelect 0x
12cd0 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65 63  000020 /* pSelec
12ce0 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c  t is correlated,
12cf0 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f   not constant */
12d00 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51  .#define EP_DblQ
12d10 75 6f 74 65 64 20 30 78 30 30 30 30 34 30 20 2f  uoted 0x000040 /
12d20 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72  * token.z was or
12d30 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e  iginally in "...
12d40 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  " */.#define EP_
12d50 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30 30  InfixFunc 0x0000
12d60 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61  80 /* True for a
12d70 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e  n infix function
12d80 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74  : LIKE, GLOB, et
12d90 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  c */.#define EP_
12da0 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30 31  Collate   0x0001
12db0 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61  00 /* Tree conta
12dc0 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45  ins a TK_COLLATE
12dd0 20 6f 70 65 61 72 74 6f 72 20 2a 2f 0a 23 64 65   opeartor */.#de
12de0 66 69 6e 65 20 45 50 5f 46 69 78 65 64 44 65 73  fine EP_FixedDes
12df0 74 20 30 78 30 30 30 32 30 30 20 2f 2a 20 52 65  t 0x000200 /* Re
12e00 73 75 6c 74 20 6e 65 65 64 65 64 20 69 6e 20 61  sult needed in a
12e10 20 73 70 65 63 69 66 69 63 20 72 65 67 69 73 74   specific regist
12e20 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  er */.#define EP
12e30 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30  _IntValue  0x000
12e40 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76  400 /* Integer v
12e50 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69  alue contained i
12e60 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64  n u.iValue */.#d
12e70 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65  efine EP_xIsSele
12e80 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78  ct 0x000800 /* x
12e90 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
12ea0 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70  d (otherwise x.p
12eb0 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66  List is) */.#def
12ec0 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20  ine EP_Skip     
12ed0 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c   0x001000 /* COL
12ee0 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c  LATE, AS, or UNL
12ef0 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65  IKELY */.#define
12f00 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78   EP_Reduced   0x
12f10 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73  002000 /* Expr s
12f20 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43  truct EXPR_REDUC
12f30 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  EDSIZE bytes onl
12f40 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
12f50 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30  TokenOnly 0x0040
12f60 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
12f70 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  t EXPR_TOKENONLY
12f80 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20  SIZE bytes only 
12f90 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74  */.#define EP_St
12fa0 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30 30  atic    0x008000
12fb0 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f   /* Held in memo
12fc0 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20  ry not obtained 
12fd0 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f  from malloc() */
12fe0 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54  .#define EP_MemT
12ff0 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f  oken  0x010000 /
13000 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65  * Need to sqlite
13010 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a  3DbFree() Expr.z
13020 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  Token */.#define
13030 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78   EP_NoReduce  0x
13040 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74  020000 /* Cannot
13050 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
13060 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65  this Expr */.#de
13070 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79  fine EP_Unlikely
13080 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e    0x040000 /* un
13090 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65  likely() or like
130a0 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f  lihood() functio
130b0 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  n */../*.** Thes
130c0 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
130d0 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
130e0 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
130f0 20 69 6e 20 74 68 65 20 0a 2a 2a 20 45 78 70 72   in the .** Expr
13100 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  .flags field..*/
13110 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73  .#define ExprHas
13120 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
13130 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
13140 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  P))!=0).#define 
13150 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72  ExprHasAllProper
13160 74 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e  ty(E,P)  (((E)->
13170 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29  flags&(P))==(P))
13180 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  .#define ExprSet
13190 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
131a0 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50    (E)->flags|=(P
131b0 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c  ).#define ExprCl
131c0 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29  earProperty(E,P)
131d0 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e     (E)->flags&=~
131e0 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72  (P)../* The Expr
131f0 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 29  SetVVAProperty()
13200 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
13210 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c  or Verification,
13220 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20   Validation,.** 
13230 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f  and Accreditatio
13240 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b  n only.  It work
13250 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72  s like ExprSetPr
13260 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e 67 20  operty() during 
13270 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73  VVA.** processes
13280 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20   but is a no-op 
13290 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f  for delivery..*/
132a0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
132b0 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78  EBUG.# define Ex
132c0 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
132d0 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67  (E,P)  (E)->flag
132e0 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64  s|=(P).#else.# d
132f0 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41  efine ExprSetVVA
13300 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65  Property(E,P).#e
13310 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
13320 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
13330 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
13340 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20  tes required by 
13350 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a  a normal Expr .*
13360 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70  * struct, an Exp
13370 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
13380 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
13390 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c  g set in Expr.fl
133a0 61 67 73 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45  ags .** and an E
133b0 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20  xpr struct with 
133c0 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
133d0 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64   flag set..*/.#d
133e0 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53  efine EXPR_FULLS
133f0 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69  IZE           si
13400 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20  zeof(Expr)      
13410 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a       /* Full siz
13420 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  e */.#define EXP
13430 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20  R_REDUCEDSIZE   
13440 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78       offsetof(Ex
13450 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43  pr,iTable)  /* C
13460 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a  ommon features *
13470 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54  /.#define EXPR_T
13480 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20  OKENONLYSIZE    
13490 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
134a0 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65  pLeft)   /* Fewe
134b0 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f  r features */../
134c0 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65  *.** Flags passe
134d0 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  d to the sqlite3
134e0 45 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69  ExprDup() functi
134f0 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64  on. See the head
13500 65 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61  er comment .** a
13510 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70 72  bove sqlite3Expr
13520 44 75 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c  Dup() for detail
13530 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  s..*/.#define EX
13540 50 52 44 55 50 5f 52 45 44 55 43 45 20 20 20 20  PRDUP_REDUCE    
13550 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20       0x0001  /* 
13560 55 73 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a  Used reduced-siz
13570 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a  e Expr nodes */.
13580 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66  ./*.** A list of
13590 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45   expressions.  E
135a0 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ach expression m
135b0 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61  ay optionally ha
135c0 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41  ve a.** name.  A
135d0 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62  n expr/name comb
135e0 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75  ination can be u
135f0 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  sed in several w
13600 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20  ays, such.** as 
13610 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70  the list of "exp
13620 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73 20  r AS ID" fields 
13630 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c  following a "SEL
13640 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a  ECT" or in the.*
13650 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20  * list of "ID = 
13660 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61  expr" items in a
13670 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73  n UPDATE.  A lis
13680 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
13690 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20   can.** also be 
136a0 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75  used as the argu
136b0 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69  ment to a functi
136c0 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73  on, in which cas
136d0 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a  e the a.zName.**
136e0 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73   field is not us
136f0 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66  ed..**.** By def
13700 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53  ault the Expr.zS
13710 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20  pan field holds 
13720 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65  a human-readable
13730 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a   description of.
13740 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ** the expressio
13750 6e 20 74 68 61 74 20 69 73 20 75 73 65 64 20 69  n that is used i
13760 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
13770 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67   of error messag
13780 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e  es and.** column
13790 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69   labels.  In thi
137a0 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70  s case, Expr.zSp
137b0 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20  an is typically 
137c0 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a  the text of a.**
137d0 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69   column expressi
137e0 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74 73 20  on as it exists 
137f0 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  in a SELECT stat
13800 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c  ement.  However,
13810 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e   if.** the bSpan
13820 49 73 54 61 62 20 66 6c 61 67 20 69 73 20 73 65  IsTab flag is se
13830 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73  t, then zSpan is
13840 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d   overloaded to m
13850 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20  ean the name.** 
13860 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  of the result co
13870 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d  lumn in the form
13880 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45  : DATABASE.TABLE
13890 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c  .COLUMN.  This l
138a0 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20  ater.** form is 
138b0 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65  used for name re
138c0 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65  solution with ne
138d0 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  sted FROM clause
138e0 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  s..*/.struct Exp
138f0 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45  rList {.  int nE
13900 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
13910 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78   /* Number of ex
13920 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65  pressions on the
13930 20 6c 69 73 74 20 2a 2f 0a 20 20 69 6e 74 20 69   list */.  int i
13940 45 43 75 72 73 6f 72 3b 20 20 20 20 20 20 20 20  ECursor;        
13950 20 20 2f 2a 20 56 44 42 45 20 43 75 72 73 6f 72    /* VDBE Cursor
13960 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
13970 20 74 68 69 73 20 45 78 70 72 4c 69 73 74 20 2a   this ExprList *
13980 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c  /.  struct ExprL
13990 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f  ist_item { /* Fo
139a0 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f  r each expressio
139b0 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  n in the list */
139c0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
139d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
139e0 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72  The list of expr
139f0 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63  essions */.    c
13a00 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
13a10 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
13a20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
13a30 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20  this expression 
13a40 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70  */.    char *zSp
13a50 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  an;            /
13a60 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20  * Original text 
13a70 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
13a80 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74  n */.    u8 sort
13a90 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
13aa0 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f   /* 1 for DESC o
13ab0 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20  r 0 for ASC */. 
13ac0 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65     unsigned done
13ad0 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20   :1;       /* A 
13ae0 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65  flag to indicate
13af0 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67   when processing
13b00 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a   is finished */.
13b10 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70      unsigned bSp
13b20 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a  anIsTab :1; /* z
13b30 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41  Span holds DB.TA
13b40 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20  BLE.COLUMN */.  
13b50 20 20 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f    u16 iOrderByCo
13b60 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72  l;        /* For
13b70 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d   ORDER BY, colum
13b80 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75  n number in resu
13b90 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 75 31  lt set */.    u1
13ba0 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20  6 iAlias;       
13bb0 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
13bc0 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73  nto Parse.aAlias
13bd0 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a  [] for zName */.
13be0 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20    } *a;         
13bf0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
13c00 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  c a power of two
13c10 20 67 72 65 61 74 65 72 20 6f 72 20 65 71 75 61   greater or equa
13c20 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b  l to nExpr */.};
13c30 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
13c40 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
13c50 63 74 75 72 65 20 69 73 20 75 73 65 64 20 62 79  cture is used by
13c60 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 72   the parser to r
13c70 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68  ecord both.** th
13c80 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72  e parse tree for
13c90 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61   an expression a
13ca0 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69  nd the span of i
13cb0 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e  nput text for an
13cc0 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a  .** expression..
13cd0 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 53 70  */.struct ExprSp
13ce0 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78  an {.  Expr *pEx
13cf0 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  pr;          /* 
13d00 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70  The expression p
13d10 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63  arse tree */.  c
13d20 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72  onst char *zStar
13d30 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68  t;   /* First ch
13d40 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74  aracter of input
13d50 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74   text */.  const
13d60 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20   char *zEnd;    
13d70 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65   /* One characte
13d80 72 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f  r past the end o
13d90 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a  f input text */.
13da0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
13db0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
13dc0 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64  ructure can hold
13dd0 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f   a simple list o
13de0 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a  f identifiers,.*
13df0 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69  * such as the li
13e00 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68  st "a,b,c" in th
13e10 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
13e20 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  ements:.**.**   
13e30 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
13e40 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e  (a,b,c) VALUES .
13e50 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  ..;.**      CREA
13e60 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20  TE INDEX idx ON 
13e70 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20  t(a,b,c);.**    
13e80 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
13e90 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44   trig BEFORE UPD
13ea0 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20  ATE ON t(a,b,c) 
13eb0 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ...;.**.** The I
13ec0 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c  dList.a.idx fiel
13ed0 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74  d is used when t
13ee0 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73  he IdList repres
13ef0 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66  ents the list of
13f00 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  .** column names
13f10 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e   after a table n
13f20 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54  ame in an INSERT
13f30 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
13f40 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  the statement.**
13f50 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49  .**     INSERT I
13f60 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e  NTO t(a,b,c) ...
13f70 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73  .**.** If "a" is
13f80 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e   the k-th column
13f90 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74   of table "t", t
13fa0 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e  hen IdList.a[0].
13fb0 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63  idx==k..*/.struc
13fc0 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72  t IdList {.  str
13fd0 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20  uct IdList_item 
13fe0 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  {.    char *zNam
13ff0 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
14000 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65  of the identifie
14010 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78  r */.    int idx
14020 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ;          /* In
14030 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c  dex in some Tabl
14040 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f  e.aCol[] of a co
14050 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65  lumn named zName
14060 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e   */.  } *a;.  in
14070 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f  t nId;         /
14080 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e  * Number of iden
14090 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c  tifiers on the l
140a0 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
140b0 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74   The bitmask dat
140c0 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 65  atype defined be
140d0 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20  low is used for 
140e0 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
140f0 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61  tions..**.** Cha
14100 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20  nging this from 
14110 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32  a 64-bit to a 32
14120 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73  -bit type limits
14130 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a   the number of.*
14140 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f  * tables in a jo
14150 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64  in to 32 instead
14160 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74 20   of 64.  But it 
14170 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68 65  also reduces the
14180 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20   size.** of the 
14190 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20 62  library by 738 b
141a0 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f  ytes on ix86..*/
141b0 0a 74 79 70 65 64 65 66 20 75 36 34 20 42 69 74  .typedef u64 Bit
141c0 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  mask;../*.** The
141d0 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
141e0 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22  in a Bitmask.  "
141f0 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d  BMS" means "BitM
14200 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64  ask Size"..*/.#d
14210 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74  efine BMS  ((int
14220 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b  )(sizeof(Bitmask
14230 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62  )*8))../*.** A b
14240 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a  it in a Bitmask.
14250 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42  */.#define MASKB
14260 49 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61  IT(n)   (((Bitma
14270 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a  sk)1)<<(n))../*.
14280 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
14290 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
142a0 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c  ibes the FROM cl
142b0 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
142c0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45   statement..** E
142d0 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62  ach table or sub
142e0 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f  query in the FRO
142f0 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65  M clause is a se
14300 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f  parate element o
14310 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74  f.** the SrcList
14320 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a  .a[] array..**.*
14330 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74  * With the addit
14340 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ion of multiple 
14350 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74  database support
14360 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
14370 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e  structure.** can
14380 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
14390 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74   describe a part
143a0 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63  icular table suc
143b0 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74  h as the table t
143c0 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69  hat.** is modifi
143d0 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c  ed by an INSERT,
143e0 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
143f0 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  TE statement.  I
14400 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a  n standard SQL,.
14410 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20  ** such a table 
14420 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65  must be a simple
14430 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20   name: ID.  But 
14440 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74  in SQLite, the t
14450 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20  able can.** now 
14460 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  be identified by
14470 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65   a database name
14480 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68  , a dot, then th
14490 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44  e table name: ID
144a0 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a  .ID..**.** The j
144b0 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f  ointype starts o
144c0 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a  ut showing the j
144d0 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e  oin type between
144e0 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62   the current tab
144f0 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65  le.** and the ne
14500 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20  xt table on the 
14510 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65  list.  The parse
14520 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73  r builds the lis
14530 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42  t this way..** B
14540 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  ut sqlite3SrcLis
14550 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29  tShiftJoinType()
14560 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68   later shifts th
14570 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74  e jointypes so t
14580 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e  hat each.** join
14590 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74  type expresses t
145a0 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  he join between 
145b0 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  the table and th
145c0 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65  e previous table
145d0 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63  ..**.** In the c
145e0 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68  olUsed field, th
145f0 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
14600 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74   (bit 63) is set
14610 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a   if the table.**
14620 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
14630 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61  han 63 columns a
14640 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20  nd the 64-th or 
14650 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20  later column is 
14660 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  used..*/.struct 
14670 53 72 63 4c 69 73 74 20 7b 0a 20 20 75 38 20 6e  SrcList {.  u8 n
14680 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  Src;        /* N
14690 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
146a0 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e  or subqueries in
146b0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
146c0 20 2a 2f 0a 20 20 75 38 20 6e 41 6c 6c 6f 63 3b   */.  u8 nAlloc;
146d0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
146e0 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63  of entries alloc
146f0 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f  ated in a[] belo
14700 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72  w */.  struct Sr
14710 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  cList_item {.   
14720 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
14730 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20  ;  /* Schema to 
14740 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20  which this item 
14750 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20  is fixed */.    
14760 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b  char *zDatabase;
14770 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
14780 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68  abase holding th
14790 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
147a0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
147b0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
147c0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
147d0 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20  ar *zAlias;     
147e0 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20  /* The "B" part 
147f0 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68  of a "A AS B" ph
14800 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20  rase.  zName is 
14810 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54  the "A" */.    T
14820 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
14830 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65   /* An SQL table
14840 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
14850 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53  o zName */.    S
14860 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
14870 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61   /* A SELECT sta
14880 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70  tement used in p
14890 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20  lace of a table 
148a0 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  name */.    int 
148b0 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a  addrFillSub;  /*
148c0 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72   Address of subr
148d0 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65  outine to manife
148e0 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f  st a subquery */
148f0 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75  .    int regRetu
14900 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  rn;    /* Regist
14910 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72  er holding retur
14920 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64  n address of add
14930 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20  rFillSub */.    
14940 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20  u8 jointype;    
14950 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69    /* Type of joi
14960 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 61  n between this a
14970 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
14980 69 6f 75 73 20 2a 2f 0a 20 20 20 20 75 6e 73 69  ious */.    unsi
14990 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20  gned notIndexed 
149a0 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  :1;    /* True i
149b0 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54  f there is a NOT
149c0 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20   INDEXED clause 
149d0 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
149e0 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b  isCorrelated :1;
149f0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62    /* True if sub
14a00 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c  -query is correl
14a10 61 74 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69  ated */.    unsi
14a20 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e  gned viaCoroutin
14a30 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d  e :1;  /* Implem
14a40 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f  ented as a co-ro
14a50 75 74 69 6e 65 20 2a 2f 0a 23 69 66 6e 64 65 66  utine */.#ifndef
14a60 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
14a70 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c  LAIN.    u8 iSel
14a80 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66  ectId;     /* If
14a90 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65   pSelect!=0, the
14aa0 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73   id of the sub-s
14ab0 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a  elect in EQP */.
14ac0 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69  #endif.    int i
14ad0 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20  Cursor;      /* 
14ae0 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
14af0 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61  number used to a
14b00 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65  ccess this table
14b10 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f   */.    Expr *pO
14b20 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  n;        /* The
14b30 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20   ON clause of a 
14b40 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69  join */.    IdLi
14b50 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a  st *pUsing;   /*
14b60 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   The USING claus
14b70 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
14b80 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73     Bitmask colUs
14b90 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31  ed;  /* Bit N (1
14ba0 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75  <<N) set if colu
14bb0 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20  mn N of pTab is 
14bc0 75 73 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72  used */.    char
14bd0 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f 2a   *zIndex;     /*
14be0 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d   Identifier from
14bf0 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49   "INDEXED BY <zI
14c00 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f  ndex>" clause */
14c10 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64  .    Index *pInd
14c20 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78 20  ex;    /* Index 
14c30 73 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73  structure corres
14c40 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64 65  ponding to zInde
14c50 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 7d  x, if any */.  }
14c60 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20   a[1];          
14c70 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
14c80 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69 66  for each identif
14c90 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ier on the list 
14ca0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72  */.};../*.** Per
14cb0 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66  mitted values of
14cc0 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a   the SrcList.a.j
14cd0 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f  ointype field.*/
14ce0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45  .#define JT_INNE
14cf0 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20  R     0x0001    
14d00 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69  /* Any kind of i
14d10 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f  nner or cross jo
14d20 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
14d30 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30 30  _CROSS     0x000
14d40 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74  2    /* Explicit
14d50 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53   use of the CROS
14d60 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  S keyword */.#de
14d70 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20  fine JT_NATURAL 
14d80 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54    0x0004    /* T
14d90 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72  rue for a "natur
14da0 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  al" join */.#def
14db0 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20  ine JT_LEFT     
14dc0 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65   0x0008    /* Le
14dd0 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ft outer join */
14de0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48  .#define JT_RIGH
14df0 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20  T     0x0010    
14e00 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a  /* Right outer j
14e10 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
14e20 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30  T_OUTER     0x00
14e30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55  20    /* The "OU
14e40 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20  TER" keyword is 
14e50 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69  present */.#defi
14e60 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20  ne JT_ERROR     
14e70 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b  0x0040    /* unk
14e80 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72  nown or unsuppor
14e90 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f  ted join type */
14ea0 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61  .../*.** Flags a
14eb0 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74  ppropriate for t
14ec0 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61  he wctrlFlags pa
14ed0 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74  rameter of sqlit
14ee0 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a  e3WhereBegin().*
14ef0 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 49  * and the WhereI
14f00 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d  nfo.wctrlFlags m
14f10 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ember..*/.#defin
14f20 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
14f30 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20  NORMAL   0x0000 
14f40 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66  /* No-op */.#def
14f50 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
14f60 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30  Y_MIN      0x000
14f70 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  1 /* ORDER BY pr
14f80 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e  ocessing for min
14f90 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
14fa0 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
14fb0 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30 32  _MAX      0x0002
14fc0 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f   /* ORDER BY pro
14fd0 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28  cessing for max(
14fe0 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  ) func */.#defin
14ff0 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f  e WHERE_ONEPASS_
15000 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34 20  DESIRED  0x0004 
15010 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e  /* Want to do on
15020 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44 45  e-pass UPDATE/DE
15030 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE */.#define 
15040 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53  WHERE_DUPLICATES
15050 5f 4f 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a  _OK    0x0008 /*
15060 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20   Ok to return a 
15070 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  row more than on
15080 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ce */.#define WH
15090 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c  ERE_OMIT_OPEN_CL
150a0 4f 53 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54  OSE  0x0010 /* T
150b0 61 62 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65  able cursors are
150c0 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f   already open */
150d0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46  .#define WHERE_F
150e0 4f 52 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20  ORCE_TABLE      
150f0 30 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74  0x0020 /* Do not
15100 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e   use an index-on
15110 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65  ly search */.#de
15120 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41  fine WHERE_ONETA
15130 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30  BLE_ONLY    0x00
15140 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20  40 /* Only code 
15150 74 68 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e  the 1st table in
15160 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64 65   pTabList */.#de
15170 66 69 6e 65 20 57 48 45 52 45 5f 41 4e 44 5f 4f  fine WHERE_AND_O
15180 4e 4c 59 20 20 20 20 20 20 20 20 20 30 78 30 30  NLY         0x00
15190 38 30 20 2f 2a 20 44 6f 6e 27 74 20 75 73 65 20  80 /* Don't use 
151a0 69 6e 64 69 63 65 73 20 66 6f 72 20 4f 52 20 74  indices for OR t
151b0 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  erms */.#define 
151c0 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20  WHERE_GROUPBY   
151d0 20 20 20 20 20 20 20 30 78 30 31 30 30 20 2f 2a         0x0100 /*
151e0 20 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61   pOrderBy is rea
151f0 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a  lly a GROUP BY *
15200 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
15210 44 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20  DISTINCTBY      
15220 20 30 78 30 32 30 30 20 2f 2a 20 70 4f 72 64 65   0x0200 /* pOrde
15230 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rby is really a 
15240 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20  DISTINCT clause 
15250 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
15260 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20  _WANT_DISTINCT  
15270 20 20 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c 20    0x0400 /* All 
15280 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20  output needs to 
15290 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 0a  be distinct */..
152a0 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72  /* Allowed retur
152b0 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71  n values from sq
152c0 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74  lite3WhereIsDist
152d0 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e  inct().*/.#defin
152e0 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
152f0 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a  _NOOP      0  /*
15300 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
15310 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64  d not used */.#d
15320 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
15330 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31  INCT_UNIQUE    1
15340 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74    /* No duplicat
15350 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  es */.#define WH
15360 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44  ERE_DISTINCT_ORD
15370 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c  ERED   2  /* All
15380 20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65 20   duplicates are 
15390 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66  adjacent */.#def
153a0 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
153b0 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20  CT_UNORDERED 3  
153c0 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61 72  /* Duplicates ar
153d0 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a  e scattered */..
153e0 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74  /*.** A NameCont
153f0 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f  ext defines a co
15400 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74  ntext in which t
15410 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20  o resolve table 
15420 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61  and column.** na
15430 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78  mes.  The contex
15440 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  t consists of a 
15450 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28  list of tables (
15460 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69  the pSrcList) fi
15470 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73  eld and.** a lis
15480 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65  t of named expre
15490 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20  ssion (pEList). 
154a0 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65   The named expre
154b0 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a  ssion list may.*
154c0 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20  * be NULL.  The 
154d0 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73  pSrc corresponds
154e0 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   to the FROM cla
154f0 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
15500 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62  or.** to the tab
15510 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  le being operate
15520 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20  d on by INSERT, 
15530 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54  UPDATE, or DELET
15540 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73  E.  The.** pELis
15550 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
15560 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
15570 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20  of a SELECT and 
15580 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f  is NULL for.** o
15590 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e  ther statements.
155a0 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  .**.** NameConte
155b0 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65  xts can be neste
155c0 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69  d.  When resolvi
155d0 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e  ng names, the in
155e0 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e  ner-most .** con
155f0 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64  text is searched
15600 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d   first.  If no m
15610 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
15620 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a  he next outer.**
15630 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63   context is chec
15640 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69  ked.  If there i
15650 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68  s still no match
15660 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65  , the next conte
15670 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64  xt.** is checked
15680 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20  .  This process 
15690 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20  continues until 
156a0 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69  either a match i
156b0 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c  s found.** or al
156c0 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63  l contexts are c
156d0 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61  heck.  When a ma
156e0 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
156f0 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66  e nRef member of
15700 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20  .** the context 
15710 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d  containing the m
15720 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e  atch is incremen
15730 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68  ted. .**.** Each
15740 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61   subquery gets a
15750 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74   new NameContext
15760 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65  .  The pNext fie
15770 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ld points to the
15780 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
15790 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75  in the parent qu
157a0 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70  ery.  Thus the p
157b0 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69  rocess of scanni
157c0 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f  ng the.** NameCo
157d0 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65  ntext list corre
157e0 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68  sponds to search
157f0 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63  ing through succ
15800 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a  essively outer.*
15810 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f  * subqueries loo
15820 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68  king for a match
15830 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65  ..*/.struct Name
15840 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73  Context {.  Pars
15850 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
15860 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a   /* The parser *
15870 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
15880 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20  cList;   /* One 
15890 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75  or more tables u
158a0 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e  sed to resolve n
158b0 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ames */.  ExprLi
158c0 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f  st *pEList;    /
158d0 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20  * Optional list 
158e0 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f  of result-set co
158f0 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e  lumns */.  AggIn
15900 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20  fo *pAggInfo;   
15910 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
15920 62 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20  bout aggregates 
15930 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f  at this level */
15940 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a  .  NameContext *
15950 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20  pNext;  /* Next 
15960 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65  outer name conte
15970 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75  xt.  NULL for ou
15980 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74  termost */.  int
15990 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
159a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
159b0 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79  ames resolved by
159c0 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f   this context */
159d0 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
159e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
159f0 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f  r of errors enco
15a00 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72 65  untered while re
15a10 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f  solving names */
15a20 0a 20 20 75 38 20 6e 63 46 6c 61 67 73 3b 20 20  .  u8 ncFlags;  
15a30 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20          /* Zero 
15a40 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61  or more NC_* fla
15a50 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  gs defined below
15a60 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
15a70 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
15a80 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74   the NameContext
15a90 2c 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e  , ncFlags field.
15aa0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41  .*/.#define NC_A
15ab0 6c 6c 6f 77 41 67 67 20 20 30 78 30 31 20 20 20  llowAgg  0x01   
15ac0 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75   /* Aggregate fu
15ad0 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f  nctions are allo
15ae0 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66  wed here */.#def
15af0 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20  ine NC_HasAgg   
15b00 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 6e 65 20   0x02    /* One 
15b10 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
15b20 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e  e functions seen
15b30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
15b40 73 43 68 65 63 6b 20 20 20 30 78 30 34 20 20 20  sCheck   0x04   
15b50 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
15b60 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61  lving names in a
15b70 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
15b80 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  t */.#define NC_
15b90 49 6e 41 67 67 46 75 6e 63 20 30 78 30 38 20 20  InAggFunc 0x08  
15ba0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61    /* True if ana
15bb0 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73  lyzing arguments
15bc0 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20   to an agg func 
15bd0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61  */.#define NC_Pa
15be0 72 74 49 64 78 20 20 20 30 78 31 30 20 20 20 20  rtIdx   0x10    
15bf0 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
15c00 76 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69  ving a partial i
15c10 6e 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 0a 2f  ndex WHERE */../
15c20 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
15c30 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
15c40 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  g structure cont
15c50 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61  ains all informa
15c60 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74  tion.** needed t
15c70 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20  o generate code 
15c80 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c  for a single SEL
15c90 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
15ca0 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73  *.** nLimit is s
15cb0 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72  et to -1 if ther
15cc0 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c  e is no LIMIT cl
15cd0 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69  ause.  nOffset i
15ce0 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49  s set to 0..** I
15cf0 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d  f there is a LIM
15d00 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70  IT clause, the p
15d10 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69  arser sets nLimi
15d20 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
15d30 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61  f the.** limit a
15d40 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68  nd nOffset to th
15d50 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  e value of the o
15d60 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74  ffset (or 0 if t
15d70 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f  here is not.** o
15d80 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74  ffset).  But lat
15d90 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e  er on, nLimit an
15da0 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65  d nOffset become
15db0 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61   the memory loca
15dc0 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tions.** in the 
15dd0 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64  VDBE that record
15de0 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f   the limit and o
15df0 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a  ffset counters..
15e00 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70  **.** addrOpenEp
15e10 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e  hm[] entries con
15e20 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73  tain the address
15e30 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   of OP_OpenEphem
15e40 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a  eral opcodes..**
15e50 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73   These addresses
15e60 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20   must be stored 
15e70 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67  so that we can g
15e80 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20  o back and fill 
15e90 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59  in.** the P4_KEY
15ea0 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61  INFO and P2 para
15eb0 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e  meters later.  N
15ec0 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e  either the KeyIn
15ed0 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75  fo nor.** the nu
15ee0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
15ef0 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d  in P2 can be com
15f00 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d  puted at the sam
15f10 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65  e time.** as the
15f20 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73   OP_OpenEphm ins
15f30 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65  truction is code
15f40 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a  d because not.**
15f50 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74   enough informat
15f60 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f  ion about the co
15f70 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20  mpound query is 
15f80 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f  known at that po
15f90 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49  int..** The KeyI
15fa0 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
15fb0 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20  Tran[0] and [1] 
15fc0 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
15fd0 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20  ng sequences.** 
15fe0 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73  for the result s
15ff0 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f  et.  The KeyInfo
16000 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68   for addrOpenEph
16010 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f  m[2] contains co
16020 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65  llating.** seque
16030 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44  nces for the ORD
16040 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f  ER BY clause..*/
16050 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b  .struct Select {
16060 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c  .  ExprList *pEL
16070 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  ist;      /* The
16080 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72   fields of the r
16090 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70  esult */.  u8 op
160a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
160b0 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f    /* One of: TK_
160c0 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f  UNION TK_ALL TK_
160d0 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43  INTERSECT TK_EXC
160e0 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c  EPT */.  u16 sel
160f0 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
16100 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20  /* Various SF_* 
16110 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20  values */.  int 
16120 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b  iLimit, iOffset;
16130 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67     /* Memory reg
16140 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c  isters holding L
16150 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f  IMIT & OFFSET co
16160 75 6e 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20  unters */.  int 
16170 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 33 5d 3b  addrOpenEphm[3];
16180 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68     /* OP_OpenEph
16190 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74  em opcodes relat
161a0 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
161b0 74 20 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65  t */.  u64 nSele
161c0 63 74 52 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a  ctRow;        /*
161d0 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65   Estimated numbe
161e0 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  r of result rows
161f0 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
16200 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Src;         /* 
16210 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  The FROM clause 
16220 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
16230 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  e;          /* T
16240 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
16250 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
16260 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54  GroupBy;    /* T
16270 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  he GROUP BY clau
16280 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48  se */.  Expr *pH
16290 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f  aving;         /
162a0 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61  * The HAVING cla
162b0 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
162c0 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20  t *pOrderBy;    
162d0 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
162e0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65  clause */.  Sele
162f0 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20  ct *pPrior;     
16300 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65     /* Prior sele
16310 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ct in a compound
16320 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e   select statemen
16330 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  t */.  Select *p
16340 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
16350 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20   Next select to 
16360 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f  the left in a co
16370 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 53 65 6c 65  mpound */.  Sele
16380 63 74 20 2a 70 52 69 67 68 74 6d 6f 73 74 3b 20  ct *pRightmost; 
16390 20 20 20 2f 2a 20 52 69 67 68 74 2d 6d 6f 73 74     /* Right-most
163a0 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d   select in a com
163b0 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61  pound select sta
163c0 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 45 78 70 72  tement */.  Expr
163d0 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20   *pLimit;       
163e0 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72     /* LIMIT expr
163f0 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61  ession. NULL mea
16400 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a  ns not used. */.
16410 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b    Expr *pOffset;
16420 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53           /* OFFS
16430 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e  ET expression. N
16440 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73  ULL means not us
16450 65 64 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ed. */.};../*.**
16460 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
16470 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c  for Select.selFl
16480 61 67 73 2e 20 20 54 68 65 20 22 53 46 22 20 70  ags.  The "SF" p
16490 72 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72  refix stands for
164a0 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67  .** "Select Flag
164b0 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  "..*/.#define SF
164c0 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20 20  _Distinct       
164d0 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 75 74 70   0x0001  /* Outp
164e0 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53  ut should be DIS
164f0 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65  TINCT */.#define
16500 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20   SF_Resolved    
16510 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49      0x0002  /* I
16520 64 65 6e 74 69 66 69 65 72 73 20 68 61 76 65 20  dentifiers have 
16530 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f  been resolved */
16540 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72  .#define SF_Aggr
16550 65 67 61 74 65 20 20 20 20 20 20 20 30 78 30 30  egate       0x00
16560 30 34 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  04  /* Contains 
16570 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
16580 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ons */.#define S
16590 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20  F_UsesEphemeral 
165a0 20 20 30 78 30 30 30 38 20 20 2f 2a 20 55 73 65    0x0008  /* Use
165b0 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65  s the OpenEpheme
165c0 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64  ral opcode */.#d
165d0 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65  efine SF_Expande
165e0 64 20 20 20 20 20 20 20 20 30 78 30 30 31 30 20  d        0x0010 
165f0 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63   /* sqlite3Selec
16600 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64  tExpand() called
16610 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66   on this */.#def
16620 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e  ine SF_HasTypeIn
16630 66 6f 20 20 20 20 20 30 78 30 30 32 30 20 20 2f  fo     0x0020  /
16640 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65  * FROM subquerie
16650 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74  s have Table met
16660 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65  adata */.#define
16670 20 53 46 5f 55 73 65 53 6f 72 74 65 72 20 20 20   SF_UseSorter   
16680 20 20 20 20 30 78 30 30 34 30 20 20 2f 2a 20 53      0x0040  /* S
16690 6f 72 74 20 75 73 69 6e 67 20 61 20 73 6f 72 74  ort using a sort
166a0 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  er */.#define SF
166b0 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20  _Values         
166c0 20 30 78 30 30 38 30 20 20 2f 2a 20 53 79 6e 74   0x0080  /* Synt
166d0 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c  hesized from VAL
166e0 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  UES clause */.#d
166f0 65 66 69 6e 65 20 53 46 5f 4d 61 74 65 72 69 61  efine SF_Materia
16700 6c 69 7a 65 20 20 20 20 20 30 78 30 31 30 30 20  lize     0x0100 
16710 20 2f 2a 20 46 6f 72 63 65 20 6d 61 74 65 72 69   /* Force materi
16720 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 76 69 65  alization of vie
16730 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ws */.#define SF
16740 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20  _NestedFrom     
16750 20 30 78 30 32 30 30 20 20 2f 2a 20 50 61 72 74   0x0200  /* Part
16760 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73 69   of a parenthesi
16770 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  zed FROM clause 
16780 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61  */.#define SF_Ma
16790 79 62 65 43 6f 6e 76 65 72 74 20 20 20 20 30 78  ybeConvert    0x
167a0 30 34 30 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f  0400  /* Need co
167b0 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c  nvertCompoundSel
167c0 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20  ectToSubquery() 
167d0 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72  */.../*.** The r
167e0 65 73 75 6c 74 73 20 6f 66 20 61 20 73 65 6c 65  esults of a sele
167f0 63 74 20 63 61 6e 20 62 65 20 64 69 73 74 72 69  ct can be distri
16800 62 75 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c  buted in several
16810 20 77 61 79 73 2e 20 20 54 68 65 0a 2a 2a 20 22   ways.  The.** "
16820 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e  SRT" prefix mean
16830 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74  s "SELECT Result
16840 20 54 79 70 65 22 2e 0a 2a 2f 0a 23 64 65 66 69   Type"..*/.#defi
16850 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20  ne SRT_Union    
16860 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20      1  /* Store 
16870 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69  result as keys i
16880 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
16890 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74  efine SRT_Except
168a0 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d         2  /* Rem
168b0 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20  ove result from 
168c0 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f  a UNION index */
168d0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69  .#define SRT_Exi
168e0 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20  sts       3  /* 
168f0 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72  Store 1 if the r
16900 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70  esult is not emp
16910 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ty */.#define SR
16920 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34  T_Discard      4
16930 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65    /* Do not save
16940 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79   the results any
16950 77 68 65 72 65 20 2a 2f 0a 0a 2f 2a 20 54 68 65  where */../* The
16960 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
16970 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20   is ignored for 
16980 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  all of the above
16990 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f   */.#define Igno
169a0 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20  rableOrderby(X) 
169b0 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54  ((X->eDest)<=SRT
169c0 5f 44 69 73 63 61 72 64 29 0a 0a 23 64 65 66 69  _Discard)..#defi
169d0 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20  ne SRT_Output   
169e0 20 20 20 20 35 20 20 2f 2a 20 4f 75 74 70 75 74      5  /* Output
169f0 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73   each row of res
16a00 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ult */.#define S
16a10 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 20  RT_Mem          
16a20 36 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  6  /* Store resu
16a30 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63  lt in a memory c
16a40 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ell */.#define S
16a50 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 20  RT_Set          
16a60 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  7  /* Store resu
16a70 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61  lts as keys in a
16a80 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  n index */.#defi
16a90 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20  ne SRT_Table    
16aa0 20 20 20 20 38 20 20 2f 2a 20 53 74 6f 72 65 20      8  /* Store 
16ab0 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77  result as data w
16ac0 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63  ith an automatic
16ad0 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
16ae0 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20  e SRT_EphemTab  
16af0 20 20 20 39 20 20 2f 2a 20 43 72 65 61 74 65 20     9  /* Create 
16b00 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e  transient tab an
16b10 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54  d store like SRT
16b20 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e  _Table */.#defin
16b30 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20  e SRT_Coroutine 
16b40 20 20 31 30 20 20 2f 2a 20 47 65 6e 65 72 61 74    10  /* Generat
16b50 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  e a single row o
16b60 66 20 72 65 73 75 6c 74 20 2a 2f 0a 0a 2f 2a 0a  f result */../*.
16b70 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
16b80 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65  f this object de
16b90 73 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f  scribes where to
16ba0 20 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75   put of the resu
16bb0 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45  lts of.** a SELE
16bc0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f  CT statement..*/
16bd0 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65  .struct SelectDe
16be0 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b  st {.  u8 eDest;
16bf0 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20           /* How 
16c00 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68  to dispose of th
16c10 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f  e results.  On o
16c20 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a  f SRT_* above. *
16c30 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64 73 74  /.  char affSdst
16c40 3b 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74  ;     /* Affinit
16c50 79 20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73  y used when eDes
16c60 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20  t==SRT_Set */.  
16c70 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20  int iSDParm;    
16c80 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72    /* A parameter
16c90 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44 65   used by the eDe
16ca0 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68  st disposal meth
16cb0 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73  od */.  int iSds
16cc0 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73  t;        /* Bas
16cd0 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65  e register where
16ce0 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69   results are wri
16cf0 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  tten */.  int nS
16d00 64 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  dst;        /* N
16d10 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65  umber of registe
16d20 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a  rs allocated */.
16d30 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67  };../*.** During
16d40 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e   code generation
16d50 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74   of statements t
16d60 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69  hat do inserts i
16d70 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  nto AUTOINCREMEN
16d80 54 20 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68  T .** tables, th
16d90 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f  e following info
16da0 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63  rmation is attac
16db0 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65  hed to the Table
16dc0 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20  .u.autoInc.p.** 
16dd0 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20  pointer of each 
16de0 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61  autoincrement ta
16df0 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f  ble to record so
16e00 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74  me side informat
16e10 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ion that.** the 
16e20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e  code generator n
16e30 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74  eeds.  We have t
16e40 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65  o keep per-table
16e50 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a   autoincrement.*
16e60 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e  * information in
16e70 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72   case inserts ar
16e80 65 20 64 6f 77 6e 20 77 69 74 68 69 6e 20 74 72  e down within tr
16e90 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72  iggers.  Trigger
16ea0 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d  s do not.** norm
16eb0 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20  ally coordinate 
16ec0 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73  their activities
16ed0 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64  , but we do need
16ee0 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74   to coordinate t
16ef0 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e  he.** loading an
16f00 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f  d saving of auto
16f10 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d  increment inform
16f20 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
16f30 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20   AutoincInfo {. 
16f40 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e   AutoincInfo *pN
16f50 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69  ext;   /* Next i
16f60 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c  nfo block in a l
16f70 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20  ist of them all 
16f80 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
16f90 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ;          /* Ta
16fa0 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c  ble this info bl
16fb0 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f  ock refers to */
16fc0 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
16fd0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
16fe0 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62  x in sqlite3.aDb
16ff0 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  [] of database h
17000 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20  olding pTab */. 
17010 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20   int regCtr;    
17020 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
17030 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   register holdin
17040 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e  g the rowid coun
17050 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ter */.};../*.**
17060 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c   Size of the col
17070 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66  umn cache.*/.#if
17080 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  ndef SQLITE_N_CO
17090 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20  LCACHE.# define 
170a0 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
170b0 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E 10.#endif../*.
170c0 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20  ** At least one 
170d0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
170e0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
170f0 75 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ure is created f
17100 6f 72 20 65 61 63 68 20 0a 2a 2a 20 74 72 69 67  or each .** trig
17110 67 65 72 20 74 68 61 74 20 6d 61 79 20 62 65 20  ger that may be 
17120 66 69 72 65 64 20 77 68 69 6c 65 20 70 61 72 73  fired while pars
17130 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55  ing an INSERT, U
17140 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a  PDATE or DELETE.
17150 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c  ** statement. Al
17160 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61  l such objects a
17170 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  re stored in the
17180 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61   linked list hea
17190 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e  ded at.** Parse.
171a0 70 54 72 69 67 67 65 72 50 72 67 20 61 6e 64 20  pTriggerPrg and 
171b0 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61  deleted once sta
171c0 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69  tement compilati
171d0 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63  on has been.** c
171e0 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  ompleted..**.** 
171f0 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72  A Vdbe sub-progr
17200 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e  am that implemen
17210 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20  ts the body and 
17220 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
17230 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65  rigger.** Trigge
17240 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61  rPrg.pTrigger, a
17250 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c  ssuming a defaul
17260 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  t ON CONFLICT cl
17270 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67  ause of.** Trigg
17280 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73  erPrg.orconf, is
17290 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54   stored in the T
172a0 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72  riggerPrg.pProgr
172b0 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20  am variable..** 
172c0 54 68 65 20 50 61 72 73 65 2e 70 54 72 69 67 67  The Parse.pTrigg
172d0 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72  erPrg list never
172e0 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e   contains two en
172f0 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20 73  tries with the s
17300 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f  ame.** values fo
17310 72 20 62 6f 74 68 20 70 54 72 69 67 67 65 72 20  r both pTrigger 
17320 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a  and orconf..**.*
17330 2a 20 54 68 65 20 54 72 69 67 67 65 72 50 72 67  * The TriggerPrg
17340 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72  .aColmask[0] var
17350 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20  iable is set to 
17360 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  a mask of old.* 
17370 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73  columns.** acces
17380 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30  sed (or set to 0
17390 20 66 6f 72 20 74 72 69 67 67 65 72 73 20 66 69   for triggers fi
173a0 72 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  red as a result 
173b0 6f 66 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74  of INSERT .** st
173c0 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c  atements). Simil
173d0 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65  arly, the Trigge
173e0 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d  rPrg.aColmask[1]
173f0 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
17400 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66   to.** a mask of
17410 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75   new.* columns u
17420 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72  sed by the progr
17430 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72  am..*/.struct Tr
17440 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69  iggerPrg {.  Tri
17450 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
17460 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
17470 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73  this program was
17480 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20   coded from */. 
17490 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65   TriggerPrg *pNe
174a0 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
174b0 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e   entry in Parse.
174c0 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74  pTriggerPrg list
174d0 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d   */.  SubProgram
174e0 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a   *pProgram;   /*
174f0 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65   Program impleme
17500 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f  nting pTrigger/o
17510 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f  rconf */.  int o
17520 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
17530 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e     /* Default ON
17540 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79   CONFLICT policy
17550 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61   */.  u32 aColma
17560 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  sk[2];        /*
17570 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c   Masks of old.*,
17580 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61   new.* columns a
17590 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f  ccessed */.};../
175a0 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b  *.** The yDbMask
175b0 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68   datatype for th
175c0 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c  e bitmask of all
175d0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
175e0 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  ses..*/.#if SQLI
175f0 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e  TE_MAX_ATTACHED>
17600 33 30 0a 20 20 74 79 70 65 64 65 66 20 73 71 6c  30.  typedef sql
17610 69 74 65 33 5f 75 69 6e 74 36 34 20 79 44 62 4d  ite3_uint64 yDbM
17620 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ask;.#else.  typ
17630 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e  edef unsigned in
17640 74 20 79 44 62 4d 61 73 6b 3b 0a 23 65 6e 64 69  t yDbMask;.#endi
17650 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20  f../*.** An SQL 
17660 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  parser context. 
17670 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20   A copy of this 
17680 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73  structure is pas
17690 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  sed through.** t
176a0 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f  he parser and do
176b0 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20  wn into all the 
176c0 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f  parser action ro
176d0 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74  utine in order t
176e0 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e  o.** carry aroun
176f0 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  d information th
17700 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20  at is global to 
17710 74 68 65 20 65 6e 74 69 72 65 20 70 61 72 73 65  the entire parse
17720 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75  ..**.** The stru
17730 63 74 75 72 65 20 69 73 20 64 69 76 69 64 65 64  cture is divided
17740 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e   into two parts.
17750 20 20 57 68 65 6e 20 74 68 65 20 70 61 72 73 65    When the parse
17760 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65  r and code.** ge
17770 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d  nerate call them
17780 73 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 65  selves recursive
17790 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20 70 61  ly, the first pa
177a0 72 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74  rt of the struct
177b0 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61  ure.** is consta
177c0 6e 74 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e  nt but the secon
177d0 64 20 70 61 72 74 20 69 73 20 72 65 73 65 74 20  d part is reset 
177e0 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
177f0 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65   and end of.** e
17800 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a  ach recursion..*
17810 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c  *.** The nTableL
17820 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f  ock and aTableLo
17830 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72 65  ck variables are
17840 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68   only used if th
17850 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 0a  e shared-cache .
17860 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 65 6e  ** feature is en
17870 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65  abled (if sqlite
17880 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65  3Tsd()->useShare
17890 64 44 61 74 61 20 69 73 20 74 72 75 65 29 2e 20  dData is true). 
178a0 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64  They are.** used
178b0 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65   to store the se
178c0 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73  t of table-locks
178d0 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
178e0 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67   statement being
178f0 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75  .** compiled. Fu
17900 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61  nction sqlite3Ta
17910 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65  bleLock() is use
17920 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73  d to add entries
17930 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e   to the.** list.
17940 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65  .*/.struct Parse
17950 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
17960 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
17970 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 73   main database s
17980 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68  tructure */.  ch
17990 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20  ar *zErrMsg;    
179a0 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d     /* An error m
179b0 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65  essage */.  Vdbe
179c0 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
179d0 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f   /* An engine fo
179e0 72 20 65 78 65 63 75 74 69 6e 67 20 64 61 74 61  r executing data
179f0 62 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f  base bytecode */
17a00 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
17a10 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72          /* Retur
17a20 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63  n code from exec
17a30 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f  ution */.  u8 co
17a40 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20  lNamesSet;      
17a50 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f 50  /* TRUE after OP
17a60 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20  _ColumnName has 
17a70 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70  been issued to p
17a80 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65  Vdbe */.  u8 che
17a90 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f  ckSchema;      /
17aa0 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20  * Causes schema 
17ab0 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74  cookie check aft
17ac0 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20  er an error */. 
17ad0 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20   u8 nested;     
17ae0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
17af0 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20  of nested calls 
17b00 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f  to the parser/co
17b10 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a  de generator */.
17b20 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20    u8 nTempReg;  
17b30 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17b40 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65   of temporary re
17b50 67 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70  gisters in aTemp
17b60 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 6e 54  Reg[] */.  u8 nT
17b70 65 6d 70 49 6e 55 73 65 3b 20 20 20 20 20 20 20  empInUse;       
17b80 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 54 65  /* Number of aTe
17b90 6d 70 52 65 67 5b 5d 20 63 75 72 72 65 6e 74 6c  mpReg[] currentl
17ba0 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f  y checked out */
17bb0 0a 20 20 75 38 20 6e 43 6f 6c 43 61 63 68 65 3b  .  u8 nColCache;
17bc0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17bd0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
17be0 61 43 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a 20  aColCache[] */. 
17bf0 20 75 38 20 69 43 6f 6c 43 61 63 68 65 3b 20 20   u8 iColCache;  
17c00 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e        /* Next en
17c10 74 72 79 20 69 6e 20 61 43 6f 6c 43 61 63 68 65  try in aColCache
17c20 5b 5d 20 74 6f 20 72 65 70 6c 61 63 65 20 2a 2f  [] to replace */
17c30 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69  .  u8 isMultiWri
17c40 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20  te;     /* True 
17c50 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
17c60 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d   modify/insert m
17c70 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
17c80 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20    u8 mayAbort;  
17c90 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
17ca0 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
17cb0 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65  throw an ABORT e
17cc0 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  xception */.  u8
17cd0 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20   hasCompound;   
17ce0 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e     /* Need to in
17cf0 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70  voke convertComp
17d00 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
17d10 75 65 72 79 28 29 20 2a 2f 0a 20 20 69 6e 74 20  uery() */.  int 
17d20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20  aTempReg[8];    
17d30 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61   /* Holding area
17d40 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72   for temporary r
17d50 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e  egisters */.  in
17d60 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t nRangeReg;    
17d70 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68     /* Size of th
17d80 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  e temporary regi
17d90 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
17da0 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20  int iRangeReg;  
17db0 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65       /* First re
17dc0 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72  gister in tempor
17dd0 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
17de0 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  ck */.  int nErr
17df0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
17e00 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
17e10 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e   seen */.  int n
17e20 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
17e30 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65  /* Number of pre
17e40 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65  viously allocate
17e50 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a  d VDBE cursors *
17e60 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
17e70 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
17e80 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
17e90 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ls used so far *
17ea0 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20 20 20  /.  int nSet;   
17eb0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
17ec0 65 72 20 6f 66 20 73 65 74 73 20 75 73 65 64 20  er of sets used 
17ed0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
17ee0 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20 20 20 20  nOnce;          
17ef0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50   /* Number of OP
17f00 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63 74 69 6f  _Once instructio
17f10 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ns so far */.  i
17f20 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20  nt ckBase;      
17f30 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69      /* Base regi
17f40 73 74 65 72 20 6f 66 20 64 61 74 61 20 64 75 72  ster of data dur
17f50 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72  ing check constr
17f60 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69  aints */.  int i
17f70 50 61 72 74 49 64 78 54 61 62 3b 20 20 20 20 20  PartIdxTab;     
17f80 2f 2a 20 54 61 62 6c 65 20 63 6f 72 72 65 73 70  /* Table corresp
17f90 6f 6e 64 69 6e 67 20 74 6f 20 61 20 70 61 72 74  onding to a part
17fa0 69 61 6c 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ial index */.  i
17fb0 6e 74 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20  nt iCacheLevel; 
17fc0 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20      /* ColCache 
17fd0 76 61 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43  valid when aColC
17fe0 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69  ache[].iLevel<=i
17ff0 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20  CacheLevel */.  
18000 69 6e 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20  int iCacheCnt;  
18010 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20       /* Counter 
18020 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
18030 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75   aColCache[].lru
18040 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 73 74 72   values */.  str
18050 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a  uct yColCache {.
18060 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
18070 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
18080 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  le cursor number
18090 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c   */.    int iCol
180a0 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  umn;          /*
180b0 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75   Table column nu
180c0 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74  mber */.    u8 t
180d0 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
180e0 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74    /* iReg is a t
180f0 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61  emp register tha
18100 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72  t needs to be fr
18110 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  eed */.    int i
18120 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
18130 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65   /* Nesting leve
18140 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65  l */.    int iRe
18150 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
18160 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65  * Reg with value
18170 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e   of this column.
18180 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a   0 means none. *
18190 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20  /.    int lru;  
181a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
181b0 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73  east recently us
181c0 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65  ed entry has the
181d0 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20   smallest value 
181e0 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65  */.  } aColCache
181f0 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43  [SQLITE_N_COLCAC
18200 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72  HE];  /* One for
18210 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63   each column cac
18220 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 79 44  he entry */.  yD
18230 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b  bMask writeMask;
18240 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72     /* Start a wr
18250 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
18260 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62 61 73  on these databas
18270 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20  es */.  yDbMask 
18280 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20  cookieMask;  /* 
18290 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d  Bitmask of schem
182a0 61 20 76 65 72 69 66 69 65 64 20 64 61 74 61 62  a verified datab
182b0 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f  ases */.  int co
182c0 6f 6b 69 65 47 6f 74 6f 3b 20 20 20 20 20 20 2f  okieGoto;      /
182d0 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f  * Address of OP_
182e0 47 6f 74 6f 20 74 6f 20 63 6f 6f 6b 69 65 20 76  Goto to cookie v
182f0 65 72 69 66 69 65 72 20 73 75 62 72 6f 75 74 69  erifier subrouti
18300 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b  ne */.  int cook
18310 69 65 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d  ieValue[SQLITE_M
18320 41 58 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20  AX_ATTACHED+2]; 
18330 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f   /* Values of co
18340 6f 6b 69 65 73 20 74 6f 20 76 65 72 69 66 79 20  okies to verify 
18350 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69  */.  int regRowi
18360 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67  d;        /* Reg
18370 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f  ister holding ro
18380 77 69 64 20 6f 66 20 43 52 45 41 54 45 20 54 41  wid of CREATE TA
18390 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69  BLE entry */.  i
183a0 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20  nt regRoot;     
183b0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
183c0 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67  holding root pag
183d0 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77  e number for new
183e0 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e   objects */.  in
183f0 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20  t nMaxArg;      
18400 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70     /* Max args p
18410 61 73 73 65 64 20 74 6f 20 75 73 65 72 20 66 75  assed to user fu
18420 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72  nction by sub-pr
18430 6f 67 72 61 6d 20 2a 2f 0a 20 20 54 6f 6b 65 6e  ogram */.  Token
18440 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b   constraintName;
18450 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
18460 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e  onstraint curren
18470 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65 64  tly being parsed
18480 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
18490 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
184a0 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c  ACHE.  int nTabl
184b0 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a  eLock;        /*
184c0 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73   Number of locks
184d0 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a   in aTableLock *
184e0 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61  /.  TableLock *a
184f0 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65  TableLock; /* Re
18500 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63  quired table loc
18510 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61  ks for shared-ca
18520 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64  che mode */.#end
18530 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f  if.  AutoincInfo
18540 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66   *pAinc;  /* Inf
18550 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41  ormation about A
18560 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75  UTOINCREMENT cou
18570 6e 74 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49  nters */..  /* I
18580 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
18590 77 68 69 6c 65 20 63 6f 64 69 6e 67 20 74 72 69  while coding tri
185a0 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 20 2a  gger programs. *
185b0 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c  /.  Parse *pTopl
185c0 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73  evel;    /* Pars
185d0 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  e structure for 
185e0 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72  main program (or
185f0 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c   NULL) */.  Tabl
18600 65 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20  e *pTriggerTab; 
18610 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65   /* Table trigge
18620 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64  rs are being cod
18630 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20  ed for */.  int 
18640 61 64 64 72 43 72 54 61 62 3b 20 20 20 20 20 20  addrCrTab;      
18650 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f   /* Address of O
18660 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70  P_CreateTable op
18670 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45 20 54  code on CREATE T
18680 41 42 4c 45 20 2a 2f 0a 20 20 69 6e 74 20 61 64  ABLE */.  int ad
18690 64 72 53 6b 69 70 50 4b 3b 20 20 20 20 20 20 2f  drSkipPK;      /
186a0 2a 20 41 64 64 72 65 73 73 20 6f 66 20 69 6e 73  * Address of ins
186b0 74 72 75 63 74 69 6f 6e 20 74 6f 20 73 6b 69 70  truction to skip
186c0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64   PRIMARY KEY ind
186d0 65 78 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65  ex */.  u32 nQue
186e0 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20  ryLoop;      /* 
186f0 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69 74  Est number of it
18700 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75  erations of a qu
18710 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29  ery (10*log2(N))
18720 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73   */.  u32 oldmas
18730 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  k;         /* Ma
18740 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75  sk of old.* colu
18750 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a  mns referenced *
18760 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b  /.  u32 newmask;
18770 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
18780 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e   of new.* column
18790 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a  s referenced */.
187a0 20 20 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b    u8 eTriggerOp;
187b0 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44         /* TK_UPD
187c0 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f  ATE, TK_INSERT o
187d0 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20  r TK_DELETE */. 
187e0 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20   u8 eOrconf;    
187f0 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
18800 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c   ON CONFLICT pol
18810 69 63 79 20 66 6f 72 20 74 72 69 67 67 65 72 20  icy for trigger 
18820 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69  steps */.  u8 di
18830 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20  sableTriggers;  
18840 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61 62  /* True to disab
18850 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a  le triggers */..
18860 20 20 2f 2a 20 41 62 6f 76 65 20 69 73 20 63 6f    /* Above is co
18870 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72  nstant between r
18880 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f  ecursions.  Belo
18890 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f 72  w is reset befor
188a0 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a  e and after.  **
188b0 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 20   each recursion 
188c0 2a 2f 0a 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20  */..  int nVar; 
188d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188e0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27  /* Number of '?'
188f0 20 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20   variables seen 
18900 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61  in the SQL so fa
18910 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72  r */.  int nzVar
18920 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
18930 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 76   /* Number of av
18940 61 69 6c 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e  ailable slots in
18950 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38   azVar[] */.  u8
18960 20 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20   iPkSortOrder;  
18970 20 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f          /* ASC o
18980 72 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47  r DESC for INTEG
18990 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  ER PRIMARY KEY *
189a0 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20  /.  u8 explain; 
189b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
189c0 20 54 72 75 65 20 69 66 20 74 68 65 20 45 58 50   True if the EXP
189d0 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75  LAIN flag is fou
189e0 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20  nd on the query 
189f0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
18a00 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
18a10 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72 65  BLE.  u8 declare
18a20 56 74 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  Vtab;           
18a30 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69 64  /* True if insid
18a40 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  e sqlite3_declar
18a50 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e  e_vtab() */.  in
18a60 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20  t nVtabLock;    
18a70 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18a80 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62  r of virtual tab
18a90 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23  les to lock */.#
18aa0 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 41 6c 69  endif.  int nAli
18ab0 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  as;             
18ac0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
18ad0 6c 69 61 73 65 64 20 72 65 73 75 6c 74 20 73 65  liased result se
18ae0 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69  t columns */.  i
18af0 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20  nt nHeight;     
18b00 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
18b10 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67  ession tree heig
18b20 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75  ht of current su
18b30 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e  b-select */.#ifn
18b40 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
18b50 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53  EXPLAIN.  int iS
18b60 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20  electId;        
18b70 20 20 20 20 2f 2a 20 49 44 20 6f 66 20 63 75 72      /* ID of cur
18b80 72 65 6e 74 20 73 65 6c 65 63 74 20 66 6f 72 20  rent select for 
18b90 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a  EXPLAIN output *
18ba0 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74 53 65 6c  /.  int iNextSel
18bb0 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 2f 2a  ectId;        /*
18bc0 20 4e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20   Next available 
18bd0 73 65 6c 65 63 74 20 49 44 20 66 6f 72 20 45 58  select ID for EX
18be0 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a  PLAIN output */.
18bf0 23 65 6e 64 69 66 0a 20 20 63 68 61 72 20 2a 2a  #endif.  char **
18c00 61 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20 20  azVar;          
18c10 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 73 20 74     /* Pointers t
18c20 6f 20 6e 61 6d 65 73 20 6f 66 20 70 61 72 61 6d  o names of param
18c30 65 74 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20  eters */.  Vdbe 
18c40 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20 20 20  *pReprepare;    
18c50 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67       /* VM being
18c60 20 72 65 70 72 65 70 61 72 65 64 20 28 73 71 6c   reprepared (sql
18c70 69 74 65 33 52 65 70 72 65 70 61 72 65 28 29 29  ite3Reprepare())
18c80 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
18c90 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20 20   *zTail;        
18ca0 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20  /* All SQL text 
18cb0 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 73 65  past the last se
18cc0 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a  micolon parsed *
18cd0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54  /.  Table *pNewT
18ce0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  able;         /*
18cf0 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63   A table being c
18d00 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43 52  onstructed by CR
18d10 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20  EATE TABLE */.  
18d20 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69  Trigger *pNewTri
18d30 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69  gger;     /* Tri
18d40 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74  gger under const
18d50 72 75 63 74 20 62 79 20 61 20 43 52 45 41 54 45  ruct by a CREATE
18d60 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f   TRIGGER */.  co
18d70 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43  nst char *zAuthC
18d80 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36  ontext; /* The 6
18d90 74 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  th parameter to 
18da0 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61  db->xAuth callba
18db0 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73  cks */.  Token s
18dc0 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20  NameToken;      
18dd0 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68     /* Token with
18de0 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68   unqualified sch
18df0 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20  ema object name 
18e00 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74  */.  Token sLast
18e10 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f  Token;         /
18e20 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e  * The last token
18e30 20 70 61 72 73 65 64 20 2a 2f 0a 23 69 66 6e 64   parsed */.#ifnd
18e40 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
18e50 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f  IRTUALTABLE.  To
18e60 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20  ken sArg;       
18e70 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c          /* Compl
18e80 65 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f  ete text of a mo
18e90 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f  dule argument */
18ea0 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61  .  Table **apVta
18eb0 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20  bLock;       /* 
18ec0 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75  Pointer to virtu
18ed0 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e  al tables needin
18ee0 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e  g locking */.#en
18ef0 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f  dif.  Table *pZo
18f00 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20 20 20  mbieTab;        
18f10 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65  /* List of Table
18f20 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65   objects to dele
18f30 74 65 20 61 66 74 65 72 20 63 6f 64 65 20 67 65  te after code ge
18f40 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72  n */.  TriggerPr
18f50 67 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20  g *pTriggerPrg; 
18f60 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20   /* Linked list 
18f70 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67 65 72  of coded trigger
18f80 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52  s */.};../*.** R
18f90 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 63 75  eturn true if cu
18fa0 72 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61  rrently inside a
18fb0 6e 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  n sqlite3_declar
18fc0 65 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a  e_vtab() call..*
18fd0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
18fe0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
18ff0 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44  E.  #define IN_D
19000 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65  ECLARE_VTAB 0.#e
19010 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  lse.  #define IN
19020 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70  _DECLARE_VTAB (p
19030 50 61 72 73 65 2d 3e 64 65 63 6c 61 72 65 56 74  Parse->declareVt
19040 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ab).#endif../*.*
19050 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
19060 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
19070 74 72 75 63 74 75 72 65 20 63 61 6e 20 62 65 20  tructure can be 
19080 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74  declared on a st
19090 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ack and used.** 
190a0 74 6f 20 73 61 76 65 20 74 68 65 20 50 61 72 73  to save the Pars
190b0 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76  e.zAuthContext v
190c0 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74 20  alue so that it 
190d0 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20  can be restored 
190e0 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74  later..*/.struct
190f0 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20   AuthContext {. 
19100 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75   const char *zAu
19110 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20  thContext;   /* 
19120 50 75 74 20 73 61 76 65 64 20 50 61 72 73 65 2e  Put saved Parse.
19130 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72  zAuthContext her
19140 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50  e */.  Parse *pP
19150 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
19160 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20     /* The Parse 
19170 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a  structure */.};.
19180 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20  ./*.** Bitfield 
19190 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c  flags for P5 val
191a0 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70  ue in various op
191b0 63 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  codes..*/.#defin
191c0 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
191d0 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
191e0 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  * Set to update 
191f0 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 23  db->nChange */.#
19200 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41  define OPFLAG_LA
19210 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 30 32  STROWID     0x02
19220 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70      /* Set to up
19230 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77  date db->lastRow
19240 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  id */.#define OP
19250 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20 20  FLAG_ISUPDATE   
19260 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 68     0x04    /* Th
19270 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20  is OP_Insert is 
19280 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f  an sql UPDATE */
19290 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
192a0 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30 78  APPEND        0x
192b0 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73  08    /* This is
192c0 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e   likely to be an
192d0 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69   append */.#defi
192e0 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  ne OPFLAG_USESEE
192f0 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20 20  KRESULT 0x10    
19300 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64 20  /* Try to avoid 
19310 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65 49  a seek in BtreeI
19320 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66 69  nsert() */.#defi
19330 6e 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43  ne OPFLAG_CLEARC
19340 41 43 48 45 20 20 20 20 30 78 32 30 20 20 20 20  ACHE    0x20    
19350 2f 2a 20 43 6c 65 61 72 20 70 73 65 75 64 6f 2d  /* Clear pseudo-
19360 74 61 62 6c 65 20 63 61 63 68 65 20 69 6e 20 4f  table cache in O
19370 50 5f 43 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66  P_Column */.#def
19380 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54  ine OPFLAG_LENGT
19390 48 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20  HARG     0x40   
193a0 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
193b0 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67  ly used for leng
193c0 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  th() */.#define 
193d0 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
193e0 20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20       0x80    /* 
193f0 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75  OP_Column only u
19400 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29  sed for typeof()
19410 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
19420 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20  AG_BULKCSR      
19430 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x01    /* OP_O
19440 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70  pen** used to op
19450 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a  en bulk cursor *
19460 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
19470 5f 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30  _P2ISREG       0
19480 78 30 32 20 20 20 20 2f 2a 20 50 32 20 74 6f 20  x02    /* P2 to 
19490 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72  OP_Open** is a r
194a0 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a  egister number *
194b0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
194c0 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30  _PERMUTE       0
194d0 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d  x01    /* OP_Com
194e0 70 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65  pare: use the pe
194f0 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a  rmutation */../*
19500 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72  . * Each trigger
19510 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
19520 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
19530 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20  is stored as an 
19540 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73  instance of. * s
19550 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 0a  truct Trigger. .
19560 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74   *. * Pointers t
19570 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  o instances of s
19580 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72  truct Trigger ar
19590 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20  e stored in two 
195a0 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74  ways.. * 1. In t
195b0 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61  he "trigHash" ha
195c0 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f  sh table (part o
195d0 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74  f the sqlite3* t
195e0 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74  hat represents t
195f0 68 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62 61  he . *    databa
19600 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73  se). This allows
19610 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75   Trigger structu
19620 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65  res to be retrie
19630 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20  ved by name.. * 
19640 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  2. All triggers 
19650 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
19660 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66  a single table f
19670 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73  orm a linked lis
19680 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20  t, using the. * 
19690 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20     pNext member 
196a0 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
196b0 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  r. A pointer to 
196c0 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
196d0 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c  t of the. *    l
196e0 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74  inked list is st
196f0 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72  ored as the "pTr
19700 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66  igger" member of
19710 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a   the associated.
19720 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62   *    struct Tab
19730 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73  le.. *. * The "s
19740 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
19750 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
19760 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
19770 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a  a linked list. *
19780 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
19790 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73  SQL statements s
197a0 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20  pecified as the 
197b0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
197c0 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
197d0 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  ger {.  char *zN
197e0 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
197f0 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  /* The name of t
19800 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20  he trigger      
19810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19820 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62    */.  char *tab
19830 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
19840 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76  * The table or v
19850 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65  iew to which the
19860 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73   trigger applies
19870 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
19880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
19890 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
198a0 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
198b0 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20  _INSERT         
198c0 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20  */.  u8 tr_tm;  
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
198e0 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42  One of TRIGGER_B
198f0 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41  EFORE, TRIGGER_A
19900 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a  FTER */.  Expr *
19910 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20  pWhen;          
19920 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c    /* The WHEN cl
19930 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72  ause of the expr
19940 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e  ession (may be N
19950 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74  ULL) */.  IdList
19960 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20   *pColumns;     
19970 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20    /* If this is 
19980 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f  an UPDATE OF <co
19990 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67  lumn-list> trigg
199a0 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  er,.            
199b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199c0 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73   the <column-lis
199d0 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72  t> is stored her
199e0 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
199f0 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f  Schema;        /
19a00 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
19a10 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
19a20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61  */.  Schema *pTa
19a30 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  bSchema;     /* 
19a40 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
19a50 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  g the table */. 
19a60 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74   TriggerStep *st
19a70 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b  ep_list; /* Link
19a80 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   list of trigger
19a90 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20   program steps  
19aa0 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
19ab0 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20  Trigger *pNext; 
19ac0 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
19ad0 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74  trigger associat
19ae0 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c  ed with the tabl
19af0 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  e */.};../*.** A
19b00 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68   trigger is eith
19b10 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61  er a BEFORE or a
19b20 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e  n AFTER trigger.
19b30 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
19b40 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74  constants.** det
19b50 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a  ermine which. .*
19b60 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72  *.** If there ar
19b70 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67  e multiple trigg
19b80 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f  ers, you might o
19b90 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e  f some BEFORE an
19ba0 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a  d some AFTER..**
19bb0 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20   In that cases, 
19bc0 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65  the constants be
19bd0 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20  low can be ORed 
19be0 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65  together..*/.#de
19bf0 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46  fine TRIGGER_BEF
19c00 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54  ORE  1.#define T
19c10 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32  RIGGER_AFTER   2
19c20 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61  ../*. * An insta
19c30 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72  nce of struct Tr
19c40 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65  iggerStep is use
19c50 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e  d to store a sin
19c60 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  gle SQL statemen
19c70 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70  t. * that is a p
19c80 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72  art of a trigger
19c90 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a  -program. . *. *
19ca0 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   Instances of st
19cb0 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
19cc0 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
19cd0 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c   singly linked l
19ce0 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75  ist (linked. * u
19cf0 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22  sing the "pNext"
19d00 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e   member) referen
19d10 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70  ced by the "step
19d20 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66  _list" member of
19d30 20 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69 61   the . * associa
19d40 74 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67  ted struct Trigg
19d50 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65  er instance. The
19d60 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
19d70 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  f the linked lis
19d80 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73  t is. * the firs
19d90 74 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72  t step of the tr
19da0 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20  igger-program.. 
19db0 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d  * . * The "op" m
19dc0 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20  ember indicates 
19dd0 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20  whether this is 
19de0 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53  a "DELETE", "INS
19df0 45 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f  ERT", "UPDATE" o
19e00 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74  r. * "SELECT" st
19e10 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61  atement. The mea
19e20 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68  nings of the oth
19e30 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65  er members is de
19e40 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
19e50 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70  . * value of "op
19e60 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a  " as follows:. *
19e70 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e  . * (op == TK_IN
19e80 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20  SERT). * orconf 
19e90 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65     -> stores the
19ea0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
19eb0 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63  orithm. * pSelec
19ec0 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
19ed0 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
19ee0 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20   ... SELECT ... 
19ef0 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a  statement, then.
19f00 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
19f10 74 68 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f  this stores a po
19f20 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c  inter to the SEL
19f30 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f  ECT statement. O
19f40 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
19f50 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41  * target    -> A
19f60 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74   token holding t
19f70 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f  he quoted name o
19f80 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69  f the table to i
19f90 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70  nsert into.. * p
19fa0 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74  ExprList -> If t
19fb0 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
19fc0 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53   INTO ... VALUES
19fd0 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20   ... statement, 
19fe0 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20  then. *         
19ff0 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73       this stores
1a000 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e   values to be in
1a010 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73  serted. Otherwis
1a020 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69  e NULL.. * pIdLi
1a030 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  st   -> If this 
1a040 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
1a050 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e  O ... (<column-n
1a060 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e  ames>) VALUES ..
1a070 2e 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  . . *           
1a080 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68     statement, th
1a090 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74  en this stores t
1a0a0 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20  he column-names 
1a0b0 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20  to be. *        
1a0c0 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69        inserted i
1a0d0 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  nto.. *. * (op =
1a0e0 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20  = TK_DELETE). * 
1a0f0 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74  target    -> A t
1a100 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65  oken holding the
1a110 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20   quoted name of 
1a120 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c  the table to del
1a130 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68  ete from.. * pWh
1a140 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
1a150 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
1a160 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  e DELETE stateme
1a170 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
1a180 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
1a190 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
1a1a0 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28  e NULL.. * . * (
1a1b0 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29  op == TK_UPDATE)
1a1c0 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e  . * target    ->
1a1d0 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67   A token holding
1a1e0 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65   the quoted name
1a1f0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
1a200 20 75 70 64 61 74 65 20 72 6f 77 73 20 6f 66 2e   update rows of.
1a210 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e  . * pWhere    ->
1a220 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
1a230 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  e of the UPDATE 
1a240 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65  statement if one
1a250 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20   is specified.. 
1a260 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f  *              O
1a270 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
1a280 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41  * pExprList -> A
1a290 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c   list of the col
1a2a0 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61  umns to update a
1a2b0 6e 64 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  nd the expressio
1a2c0 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20  ns to update. * 
1a2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1a2e0 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65  m to. See sqlite
1a2f0 33 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65  3Update() docume
1a300 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61  ntation of "pCha
1a310 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20  nges". *        
1a320 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a        argument..
1a330 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54   * . */.struct T
1a340 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75  riggerStep {.  u
1a350 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
1a360 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
1a370 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
1a380 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54  TE, TK_INSERT, T
1a390 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38  K_SELECT */.  u8
1a3a0 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20   orconf;        
1a3b0 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63     /* OE_Rollbac
1a3c0 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67  k etc. */.  Trig
1a3d0 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20  ger *pTrig;     
1a3e0 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20   /* The trigger 
1a3f0 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69  that this step i
1a400 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20  s a part of */. 
1a410 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
1a420 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20  ;     /* SELECT 
1a430 73 74 61 74 6d 65 6e 74 20 6f 72 20 52 48 53 20  statment or RHS 
1a440 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  of INSERT INTO .
1a450 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a  . SELECT ... */.
1a460 20 20 54 6f 6b 65 6e 20 74 61 72 67 65 74 3b 20    Token target; 
1a470 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74         /* Target
1a480 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54   table for DELET
1a490 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52  E, UPDATE, INSER
1a4a0 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  T */.  Expr *pWh
1a4b0 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  ere;        /* T
1a4c0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
1a4d0 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50  for DELETE or UP
1a4e0 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20  DATE steps */.  
1a4f0 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c  ExprList *pExprL
1a500 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75  ist; /* SET clau
1a510 73 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20 20  se for UPDATE.  
1a520 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 66 6f  VALUES clause fo
1a530 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 49 64  r INSERT */.  Id
1a540 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20  List *pIdList;  
1a550 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d     /* Column nam
1a560 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f  es for INSERT */
1a570 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1a580 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20  pNext;  /* Next 
1a590 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74  in the link-list
1a5a0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65   */.  TriggerSte
1a5b0 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61  p *pLast;  /* La
1a5c0 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69  st element in li
1a5d0 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66  nk-list. Valid f
1a5e0 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79  or 1st elem only
1a5f0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
1a600 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1a610 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69  cture contains i
1a620 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
1a630 62 79 20 74 68 65 20 73 71 6c 69 74 65 46 69 78  by the sqliteFix
1a640 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20  ....** routines 
1a650 61 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65  as they walk the
1a660 20 70 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d   parse tree to m
1a670 61 6b 65 20 64 61 74 61 62 61 73 65 20 72 65 66  ake database ref
1a680 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69  erences.** expli
1a690 63 69 74 2e 20 20 0a 2a 2f 0a 74 79 70 65 64 65  cit.  .*/.typede
1a6a0 66 20 73 74 72 75 63 74 20 44 62 46 69 78 65 72  f struct DbFixer
1a6b0 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75 63 74   DbFixer;.struct
1a6c0 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50 61 72   DbFixer {.  Par
1a6d0 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
1a6e0 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e 67 20   /* The parsing 
1a6f0 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f 72 20  context.  Error 
1a700 6d 65 73 73 61 67 65 73 20 77 72 69 74 74 65 6e  messages written
1a710 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d   here */.  Schem
1a720 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 2f  a *pSchema;    /
1a730 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f 20 74  * Fix items to t
1a740 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20  his schema */.  
1a750 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20  int bVarOnly;   
1a760 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72      /* Check for
1a770 20 76 61 72 69 61 62 6c 65 20 72 65 66 65 72 65   variable refere
1a780 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63  nces only */.  c
1a790 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20  onst char *zDb; 
1a7a0 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20     /* Make sure 
1a7b0 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72 65 20  all objects are 
1a7c0 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 69  contained in thi
1a7d0 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
1a7e0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70  const char *zTyp
1a7f0 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74  e;  /* Type of t
1a800 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75  he container - u
1a810 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65  sed for error me
1a820 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73  ssages */.  cons
1a830 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20  t Token *pName; 
1a840 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
1a850 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20  ontainer - used 
1a860 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67  for error messag
1a870 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  es */.};../*.** 
1a880 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73 65 64  An objected used
1a890 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65 20 74   to accumulate t
1a8a0 68 65 20 74 65 78 74 20 6f 66 20 61 20 73 74 72  he text of a str
1a8b0 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a 2a 20  ing where we.** 
1a8c0 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69  do not necessari
1a8d0 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20  ly know how big 
1a8e0 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c 6c 20  the string will 
1a8f0 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a  be in the end..*
1a900 2f 0a 73 74 72 75 63 74 20 53 74 72 41 63 63 75  /.struct StrAccu
1a910 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  m {.  sqlite3 *d
1a920 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70  b;         /* Op
1a930 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20  tional database 
1a940 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20  for lookaside.  
1a950 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20  Can be NULL */. 
1a960 20 63 68 61 72 20 2a 7a 42 61 73 65 3b 20 20 20   char *zBase;   
1a970 20 20 20 20 20 20 2f 2a 20 41 20 62 61 73 65 20        /* A base 
1a980 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74  allocation.  Not
1a990 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f   from malloc. */
1a9a0 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 20  .  char *zText; 
1a9b0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73          /* The s
1a9c0 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20  tring collected 
1a9d0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1a9e0 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20 20 20   nChar;         
1a9f0 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68   /* Length of th
1aa00 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61 72 20  e string so far 
1aa10 2a 2f 0a 20 20 69 6e 74 20 20 6e 41 6c 6c 6f 63  */.  int  nAlloc
1aa20 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f  ;         /* Amo
1aa30 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c  unt of space all
1aa40 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20  ocated in zText 
1aa50 2a 2f 0a 20 20 69 6e 74 20 20 6d 78 41 6c 6c 6f  */.  int  mxAllo
1aa60 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78  c;        /* Max
1aa70 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 73 74 72  imum allowed str
1aa80 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20  ing length */.  
1aa90 75 38 20 20 20 75 73 65 4d 61 6c 6c 6f 63 3b 20  u8   useMalloc; 
1aaa0 20 20 20 20 20 2f 2a 20 30 3a 20 6e 6f 6e 65 2c       /* 0: none,
1aab0 20 20 31 3a 20 73 71 6c 69 74 65 33 44 62 4d 61    1: sqlite3DbMa
1aac0 6c 6c 6f 63 2c 20 20 32 3a 20 73 71 6c 69 74 65  lloc,  2: sqlite
1aad0 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 20 20 75 38  3_malloc */.  u8
1aae0 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20     accError;    
1aaf0 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e     /* STRACCUM_N
1ab00 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d  OMEM or STRACCUM
1ab10 5f 54 4f 4f 42 49 47 20 2a 2f 0a 7d 3b 0a 23 64  _TOOBIG */.};.#d
1ab20 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e  efine STRACCUM_N
1ab30 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69 6e 65  OMEM   1.#define
1ab40 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47   STRACCUM_TOOBIG
1ab50 20 20 32 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69    2../*.** A poi
1ab60 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
1ab70 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74  ucture is used t
1ab80 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e  o communicate in
1ab90 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f  formation.** fro
1aba0 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e  m sqlite3Init an
1abb0 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61  d OP_ParseSchema
1abc0 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65   into the sqlite
1abd0 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a  3InitCallback..*
1abe0 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
1abf0 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
1ac00 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
1ac10 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69  database being i
1ac20 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
1ac30 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b  char **pzErrMsg;
1ac40 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73      /* Error mes
1ac50 73 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65  sage stored here
1ac60 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20   */.  int iDb;  
1ac70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66            /* 0 f
1ac80 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  or main database
1ac90 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32  .  1 for TEMP, 2
1aca0 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20  .. for ATTACHed 
1acb0 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
1acc0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
1acd0 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68  lt code stored h
1ace0 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74  ere */.} InitDat
1acf0 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74  a;../*.** Struct
1ad00 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67  ure containing g
1ad10 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74  lobal configurat
1ad20 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65  ion data for the
1ad30 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
1ad40 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75  .**.** This stru
1ad50 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61  cture also conta
1ad60 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69  ins some state i
1ad70 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
1ad80 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
1ad90 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d  fig {.  int bMem
1ada0 73 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20  stat;           
1adb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1adc0 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f  e to enable memo
1add0 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69  ry status */.  i
1ade0 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20  nt bCoreMutex;  
1adf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae00 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
1ae10 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67  le core mutexing
1ae20 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d   */.  int bFullM
1ae30 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
1ae40 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1ae50 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d  to enable full m
1ae60 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
1ae70 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20   bOpenUri;      
1ae80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ae90 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70  * True to interp
1aea0 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73  ret filenames as
1aeb0 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62   URIs */.  int b
1aec0 55 73 65 43 69 73 3b 20 20 20 20 20 20 20 20 20  UseCis;         
1aed0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1aee0 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  Use covering ind
1aef0 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63  ices for full-sc
1af00 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53  ans */.  int mxS
1af10 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  trlen;          
1af20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
1af30 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e  ximum string len
1af40 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c  gth */.  int szL
1af50 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
1af60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
1af70 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20  fault lookaside 
1af80 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20  buffer size */. 
1af90 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b   int nLookaside;
1afa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afb0 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
1afc0 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 63  okaside buffer c
1afd0 6f 75 6e 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65  ount */.  sqlite
1afe0 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b  3_mem_methods m;
1aff0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
1b000 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20  ow-level memory 
1b010 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72  allocation inter
1b020 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  face */.  sqlite
1b030 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
1b040 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c  mutex;      /* L
1b050 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69  ow-level mutex i
1b060 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71  nterface */.  sq
1b070 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74  lite3_pcache_met
1b080 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20 20  hods2 pcache2;  
1b090 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67  /* Low-level pag
1b0a0 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61 63  e-cache interfac
1b0b0 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65  e */.  void *pHe
1b0c0 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
1b0d0 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70           /* Heap
1b0e0 20 73 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a   storage space *
1b0f0 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20  /.  int nHeap;  
1b100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b110 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
1b120 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e   pHeap[] */.  in
1b130 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20  t mnReq, mxReq; 
1b140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b150 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68  /* Min and max h
1b160 65 61 70 20 72 65 71 75 65 73 74 73 20 73 69 7a  eap requests siz
1b170 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  es */.  sqlite3_
1b180 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20  int64 szMmap;   
1b190 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61            /* mma
1b1a0 70 28 29 20 73 70 61 63 65 20 70 65 72 20 6f 70  p() space per op
1b1b0 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c  en file */.  sql
1b1c0 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61  ite3_int64 mxMma
1b1d0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  p;             /
1b1e0 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20  * Maximum value 
1b1f0 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20  for szMmap */.  
1b200 76 6f 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20  void *pScratch; 
1b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b220 20 20 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d    /* Scratch mem
1b230 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53  ory */.  int szS
1b240 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20  cratch;         
1b250 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
1b260 7a 65 20 6f 66 20 65 61 63 68 20 73 63 72 61 74  ze of each scrat
1b270 63 68 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69  ch buffer */.  i
1b280 6e 74 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20  nt nScratch;    
1b290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63   /* Number of sc
1b2b0 72 61 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f  ratch buffers */
1b2c0 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20  .  void *pPage; 
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2e0 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63       /* Page cac
1b2f0 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69  he memory */.  i
1b300 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20  nt szPage;      
1b310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b320 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68   /* Size of each
1b330 20 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d   page in pPage[]
1b340 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b   */.  int nPage;
1b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b360 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1b370 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50  r of pages in pP
1b380 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d  age[] */.  int m
1b390 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20  xParserStack;   
1b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b3b0 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66  maximum depth of
1b3c0 20 74 68 65 20 70 61 72 73 65 72 20 73 74 61 63   the parser stac
1b3d0 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65  k */.  int share
1b3e0 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20  dCacheEnabled;  
1b3f0 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65           /* true
1b400 20 69 66 20 73 68 61 72 65 64 2d 63 61 63 68 65   if shared-cache
1b410 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f   mode enabled */
1b420 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20  .  /* The above 
1b430 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c  might be initial
1b440 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f  ized to non-zero
1b450 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
1b460 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a   need to always.
1b470 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62    ** initially b
1b480 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e  e zero, however.
1b490 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74   */.  int isInit
1b4a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b4b0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1b4c0 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61  after initializa
1b4d0 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65  tion has finishe
1b4e0 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f  d */.  int inPro
1b4f0 67 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20  gress;          
1b500 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1b510 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a   while initializ
1b520 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
1b530 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74  s */.  int isMut
1b540 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  exInit;         
1b550 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1b560 20 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61   after mutexes a
1b570 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  re initialized *
1b580 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63  /.  int isMalloc
1b590 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
1b5a0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
1b5b0 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
1b5c0 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
1b5d0 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b  nt isPCacheInit;
1b5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5f0 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
1b600 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c  alloc is initial
1b610 69 7a 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65  ized */.  sqlite
1b620 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75  3_mutex *pInitMu
1b630 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  tex;        /* M
1b640 75 74 65 78 20 75 73 65 64 20 62 79 20 73 71 6c  utex used by sql
1b650 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28  ite3_initialize(
1b660 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49  ) */.  int nRefI
1b670 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20  nitMutex;       
1b680 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1b690 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70  er of users of p
1b6a0 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 76  InitMutex */.  v
1b6b0 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64  oid (*xLog)(void
1b6c0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
1b6d0 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20  *); /* Function 
1b6e0 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20  for logging */. 
1b6f0 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20   void *pLogArg; 
1b700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b710 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
1b720 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28  rgument to xLog(
1b730 29 20 2a 2f 0a 20 20 69 6e 74 20 62 4c 6f 63 61  ) */.  int bLoca
1b740 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20  ltimeFault;     
1b750 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1b760 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69   to fail localti
1b770 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 69  me() calls */.#i
1b780 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
1b790 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64  LE_SQLLOG.  void
1b7a0 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a  (*xSqllog)(void*
1b7b0 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  ,sqlite3*,const 
1b7c0 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  char*, int);.  v
1b7d0 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b  oid *pSqllogArg;
1b7e0 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
1b7f0 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65  * Context pointe
1b800 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68  r passed down th
1b810 72 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d 77  rough the tree-w
1b820 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57  alk..*/.struct W
1b830 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a  alker {.  int (*
1b840 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57  xExprCallback)(W
1b850 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20  alker*, Expr*); 
1b860 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20      /* Callback 
1b870 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20  for expressions 
1b880 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65  */.  int (*xSele
1b890 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b  ctCallback)(Walk
1b8a0 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f  er*,Select*);  /
1b8b0 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53  * Callback for S
1b8c0 45 4c 45 43 54 73 20 2a 2f 0a 20 20 50 61 72 73  ELECTs */.  Pars
1b8d0 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
1b8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8f0 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20        /* Parser 
1b900 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69  context.  */.  i
1b910 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20  nt walkerDepth; 
1b920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b930 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1b940 65 72 20 6f 66 20 73 75 62 71 75 65 72 69 65 73  er of subqueries
1b950 20 2a 2f 0a 20 20 75 38 20 62 53 65 6c 65 63 74   */.  u8 bSelect
1b960 44 65 70 74 68 46 69 72 73 74 3b 20 20 20 20 20  DepthFirst;     
1b970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b980 2f 2a 20 44 6f 20 73 75 62 71 75 65 72 69 65 73  /* Do subqueries
1b990 20 66 69 72 73 74 20 2a 2f 0a 20 20 75 6e 69 6f   first */.  unio
1b9a0 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  n {             
1b9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9c0 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64        /* Extra d
1b9d0 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b  ata for callback
1b9e0 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74   */.    NameCont
1b9f0 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20  ext *pNC;       
1ba00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba10 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e     /* Naming con
1ba20 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20  text */.    int 
1ba30 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
1ba40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba50 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65         /* Intege
1ba60 72 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 53  r value */.    S
1ba70 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74  rcList *pSrcList
1ba80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ba90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f            /* FRO
1baa0 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  M clause */.    
1bab0 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20  struct SrcCount 
1bac0 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20  *pSrcCount;     
1bad0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
1bae0 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65  unting column re
1baf0 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20  ferences */.  } 
1bb00 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72  u;.};../* Forwar
1bb10 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a  d declarations *
1bb20 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  /.int sqlite3Wal
1bb30 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45  kExpr(Walker*, E
1bb40 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
1bb50 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57  e3WalkExprList(W
1bb60 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  alker*, ExprList
1bb70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1bb80 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72  alkSelect(Walker
1bb90 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
1bba0 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
1bbb0 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  ctExpr(Walker*, 
1bbc0 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
1bbd0 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46  lite3WalkSelectF
1bbe0 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  rom(Walker*, Sel
1bbf0 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65  ect*);../*.** Re
1bc00 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74  turn code from t
1bc10 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61  he parse-tree wa
1bc20 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73  lking primitives
1bc30 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61   and their.** ca
1bc40 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66  llbacks..*/.#def
1bc50 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65  ine WRC_Continue
1bc60 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69      0   /* Conti
1bc70 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68  nue down into ch
1bc80 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  ildren */.#defin
1bc90 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20  e WRC_Prune     
1bca0 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68    1   /* Omit ch
1bcb0 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69  ildren but conti
1bcc0 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c  nue walking sibl
1bcd0 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ings */.#define 
1bce0 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20  WRC_Abort       
1bcf0 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74  2   /* Abandon t
1bd00 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a  he tree walk */.
1bd10 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20  ./*.** Assuming 
1bd20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  zIn points to th
1bd30 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
1bd40 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  a UTF-8 characte
1bd50 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49  r,.** advance zI
1bd60 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  n to point to th
1bd70 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
1bd80 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63  the next UTF-8 c
1bd90 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65  haracter..*/.#de
1bda0 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50  fine SQLITE_SKIP
1bdb0 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20  _UTF8(zIn) {    
1bdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdd0 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a      \.  if( (*(z
1bde0 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20  In++))>=0xc0 ){ 
1bdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be00 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
1be10 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20     while( (*zIn 
1be20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b  & 0xc0)==0x80 ){
1be30 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20   zIn++; }       
1be40 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20        \.  }     
1be50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
1be80 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  .}../*.** The SQ
1be90 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72  LITE_*_BKPT macr
1bea0 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74  os are substitut
1beb0 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72  es for the error
1bec0 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74   codes with.** t
1bed0 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74  he same name but
1bee0 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b   without the _BK
1bef0 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73  PT suffix.  Thes
1bf00 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a  e macros invoke.
1bf10 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74  ** routines that
1bf20 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65   report the line
1bf30 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68  -number on which
1bf40 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69   the error origi
1bf50 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73  nated.** using s
1bf60 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54  qlite3_log().  T
1bf70 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f  he routines also
1bf80 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65   provide a conve
1bf90 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74  nient place.** t
1bfa0 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72  o set a debugger
1bfb0 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a   breakpoint..*/.
1bfc0 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75  int sqlite3Corru
1bfd0 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e  ptError(int);.in
1bfe0 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45  t sqlite3MisuseE
1bff0 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
1c000 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
1c010 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e  ror(int);.#defin
1c020 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
1c030 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72  _BKPT sqlite3Cor
1c040 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  ruptError(__LINE
1c050 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
1c060 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73  TE_MISUSE_BKPT s
1c070 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
1c080 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
1c090 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f  ine SQLITE_CANTO
1c0a0 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  PEN_BKPT sqlite3
1c0b0 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f  CantopenError(__
1c0c0 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20  LINE__).../*.** 
1c0d0 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61  FTS4 is really a
1c0e0 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20  n extension for 
1c0f0 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61  FTS3.  It is ena
1c100 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a  bled using the.*
1c110 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
1c120 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74  FTS3 macro.  But
1c130 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73   to avoid confus
1c140 69 6f 6e 20 77 65 20 61 6c 73 6f 20 61 6c 6c 0a  ion we also all.
1c150 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  ** the SQLITE_EN
1c160 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20  ABLE_FTS4 macro 
1c170 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20 61  to serve as an a
1c180 6c 69 73 73 65 20 66 6f 72 20 53 51 4c 49 54 45  lisse for SQLITE
1c190 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f  _ENABLE_FTS3..*/
1c1a0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
1c1b0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29  ITE_ENABLE_FTS4)
1c1c0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
1c1d0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
1c1e0 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1c1f0 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23 65 6e  _ENABLE_FTS3.#en
1c200 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63  dif../*.** The c
1c210 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73  type.h header is
1c220 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d   needed for non-
1c230 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20  ASCII systems.  
1c240 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65  It is also.** ne
1c250 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65  eded by FTS3 whe
1c260 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64  n FTS3 is includ
1c270 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61  ed in the amalga
1c280 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21  mation..*/.#if !
1c290 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
1c2a0 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28  SCII) || \.    (
1c2b0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
1c2c0 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64  NABLE_FTS3) && d
1c2d0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d  efined(SQLITE_AM
1c2e0 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69  ALGAMATION)).# i
1c2f0 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e  nclude <ctype.h>
1c300 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
1c310 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
1c320 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74  ros mimic the st
1c330 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66  andard library f
1c340 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72  unctions toupper
1c350 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29  (),.** isspace()
1c360 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64  , isalnum(), isd
1c370 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69  igit() and isxdi
1c380 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76  git(), respectiv
1c390 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69  ely. The.** sqli
1c3a0 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79  te versions only
1c3b0 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20   work for ASCII 
1c3c0 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61  characters, rega
1c3d0 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65  rdless of locale
1c3e0 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
1c3f0 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e  TE_ASCII.# defin
1c400 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72  e sqlite3Toupper
1c410 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69  (x)  ((x)&~(sqli
1c420 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
1c430 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
1c440 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20  0x20)).# define 
1c450 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78  sqlite3Isspace(x
1c460 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
1c470 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1c480 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23  har)(x)]&0x01).#
1c490 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1c4a0 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c  salnum(x)   (sql
1c4b0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1c4c0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1c4d0 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20  &0x06).# define 
1c4e0 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
1c4f0 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
1c500 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1c510 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23  har)(x)]&0x02).#
1c520 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1c530 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c  sdigit(x)   (sql
1c540 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1c550 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1c560 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20  &0x04).# define 
1c570 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
1c580 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  x)  (sqlite3Ctyp
1c590 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1c5a0 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23  har)(x)]&0x08).#
1c5b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
1c5c0 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c  olower(x)   (sql
1c5d0 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72  ite3UpperToLower
1c5e0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
1c5f0 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64 65  (x)]).#else.# de
1c600 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
1c610 70 65 72 28 78 29 20 20 20 74 6f 75 70 70 65 72  per(x)   toupper
1c620 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
1c630 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
1c640 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20  lite3Isspace(x) 
1c650 20 20 69 73 73 70 61 63 65 28 28 75 6e 73 69 67    isspace((unsig
1c660 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
1c670 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1c680 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e  alnum(x)   isaln
1c690 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  um((unsigned cha
1c6a0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
1c6b0 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
1c6c0 29 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73  )   isalpha((uns
1c6d0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
1c6e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1c6f0 49 73 64 69 67 69 74 28 78 29 20 20 20 69 73 64  Isdigit(x)   isd
1c700 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
1c710 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
1c720 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
1c730 74 28 78 29 20 20 69 73 78 64 69 67 69 74 28 28  t(x)  isxdigit((
1c740 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1c750 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
1c760 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
1c770 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65  tolower((unsigne
1c780 64 20 63 68 61 72 29 28 78 29 29 0a 23 65 6e 64  d char)(x)).#end
1c790 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e  if../*.** Intern
1c7a0 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74  al function prot
1c7b0 6f 74 79 70 65 73 0a 2a 2f 0a 23 64 65 66 69 6e  otypes.*/.#defin
1c7c0 65 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  e sqlite3StrICmp
1c7d0 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70   sqlite3_stricmp
1c7e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c  .int sqlite3Strl
1c7f0 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a  en30(const char*
1c800 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  );.#define sqlit
1c810 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74  e3StrNICmp sqlit
1c820 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74  e3_strnicmp..int
1c830 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e   sqlite3MallocIn
1c840 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  it(void);.void s
1c850 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28  qlite3MallocEnd(
1c860 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  void);.void *sql
1c870 69 74 65 33 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b  ite3Malloc(int);
1c880 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
1c890 6c 6c 6f 63 5a 65 72 6f 28 69 6e 74 29 3b 0a 76  llocZero(int);.v
1c8a0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
1c8b0 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33  llocZero(sqlite3
1c8c0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  *, int);.void *s
1c8d0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
1c8e0 77 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  w(sqlite3*, int)
1c8f0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
1c900 62 53 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a  bStrDup(sqlite3*
1c910 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63  ,const char*);.c
1c920 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74  har *sqlite3DbSt
1c930 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63  rNDup(sqlite3*,c
1c940 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
1c950 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52  ;.void *sqlite3R
1c960 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 69 6e  ealloc(void*, in
1c970 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
1c980 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65  3DbReallocOrFree
1c990 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64  (sqlite3 *, void
1c9a0 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a   *, int);.void *
1c9b0 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63  sqlite3DbRealloc
1c9c0 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64  (sqlite3 *, void
1c9d0 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73   *, int);.void s
1c9e0 71 6c 69 74 65 33 44 62 46 72 65 65 28 73 71 6c  qlite3DbFree(sql
1c9f0 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69  ite3*, void*);.i
1ca00 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  nt sqlite3Malloc
1ca10 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74  Size(void*);.int
1ca20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
1ca30 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76  Size(sqlite3*, v
1ca40 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  oid*);.void *sql
1ca50 69 74 65 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f  ite3ScratchMallo
1ca60 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  c(int);.void sql
1ca70 69 74 65 33 53 63 72 61 74 63 68 46 72 65 65 28  ite3ScratchFree(
1ca80 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71  void*);.void *sq
1ca90 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28  lite3PageMalloc(
1caa0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1cab0 65 33 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a  e3PageFree(void*
1cac0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
1cad0 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69  emSetDefault(voi
1cae0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
1caf0 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b  BenignMallocHook
1cb00 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29  s(void (*)(void)
1cb10 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29  , void (*)(void)
1cb20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65  );.int sqlite3He
1cb30 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69  apNearlyFull(voi
1cb40 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79  d);../*.** On sy
1cb50 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65  stems with ample
1cb60 20 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64   stack space and
1cb70 20 74 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c   that support al
1cb80 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20  loca(), make.** 
1cb90 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20  use of alloca() 
1cba0 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20  to obtain space 
1cbb0 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61  for large automa
1cbc0 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79  tic objects.  By
1cbd0 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74   default,.** obt
1cbe0 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d  ain space from m
1cbf0 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54  alloc()..**.** T
1cc00 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74  he alloca() rout
1cc10 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e  ine never return
1cc20 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69  s NULL.  This wi
1cc30 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70 61  ll cause code pa
1cc40 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c  ths.** that deal
1cc50 20 77 69 74 68 20 73 71 6c 69 74 65 33 53 74 61   with sqlite3Sta
1cc60 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72  ckAlloc() failur
1cc70 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68  es to be unreach
1cc80 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  able..*/.#ifdef 
1cc90 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43  SQLITE_USE_ALLOC
1cca0 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  A.# define sqlit
1ccb0 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28  e3StackAllocRaw(
1ccc0 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29  D,N)   alloca(N)
1ccd0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1cce0 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28  3StackAllocZero(
1ccf0 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c  D,N)  memset(all
1cd00 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20  oca(N), 0, N).# 
1cd10 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
1cd20 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20  ackFree(D,P)    
1cd30 20 20 20 0a 23 65 6c 73 65 0a 23 20 64 65 66 69     .#else.# defi
1cd40 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
1cd50 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73  llocRaw(D,N)   s
1cd60 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
1cd70 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  w(D,N).# define 
1cd80 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
1cd90 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69  cZero(D,N)  sqli
1cda0 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
1cdb0 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  D,N).# define sq
1cdc0 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44  lite3StackFree(D
1cdd0 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69 74 65  ,P)       sqlite
1cde0 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e  3DbFree(D,P).#en
1cdf0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
1ce00 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
1ce10 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f  3.const sqlite3_
1ce20 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c  mem_methods *sql
1ce30 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73  ite3MemGetMemsys
1ce40 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  3(void);.#endif.
1ce50 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1ce60 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e  ABLE_MEMSYS5.con
1ce70 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  st sqlite3_mem_m
1ce80 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d  ethods *sqlite3M
1ce90 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69  emGetMemsys5(voi
1cea0 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66  d);.#endif...#if
1ceb0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45  ndef SQLITE_MUTE
1cec0 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33  X_OMIT.  sqlite3
1ced0 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
1cee0 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66  onst *sqlite3Def
1cef0 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b  aultMutex(void);
1cf00 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
1cf10 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a  _methods const *
1cf20 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78  sqlite3NoopMutex
1cf30 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65  (void);.  sqlite
1cf40 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33  3_mutex *sqlite3
1cf50 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b  MutexAlloc(int);
1cf60 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  .  int sqlite3Mu
1cf70 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20  texInit(void);. 
1cf80 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65   int sqlite3Mute
1cf90 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64  xEnd(void);.#end
1cfa0 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  if..int sqlite3S
1cfb0 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b  tatusValue(int);
1cfc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
1cfd0 74 75 73 41 64 64 28 69 6e 74 2c 20 69 6e 74 29  tusAdd(int, int)
1cfe0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
1cff0 61 74 75 73 53 65 74 28 69 6e 74 2c 20 69 6e 74  atusSet(int, int
1d000 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
1d010 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
1d020 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c  _POINT.  int sql
1d030 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65  ite3IsNaN(double
1d040 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
1d050 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58  e sqlite3IsNaN(X
1d060 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 76 6f 69  )  0.#endif..voi
1d070 64 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74  d sqlite3VXPrint
1d080 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 69 6e 74  f(StrAccum*, int
1d090 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76  , const char*, v
1d0a0 61 5f 6c 69 73 74 29 3b 0a 23 69 66 6e 64 65 66  a_list);.#ifndef
1d0b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41   SQLITE_OMIT_TRA
1d0c0 43 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58  CE.void sqlite3X
1d0d0 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a  Printf(StrAccum*
1d0e0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
1d0f0 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 63 68 61 72  ..);.#endif.char
1d100 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66   *sqlite3MPrintf
1d110 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
1d120 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61  char*, ...);.cha
1d130 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e  r *sqlite3VMPrin
1d140 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  tf(sqlite3*,cons
1d150 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74  t char*, va_list
1d160 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
1d170 4d 41 70 70 65 6e 64 66 28 73 71 6c 69 74 65 33  MAppendf(sqlite3
1d180 2a 2c 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  *,char*,const ch
1d190 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 69 66 20 64 65  ar*,...);.#if de
1d1a0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
1d1b0 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
1d1c0 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f  LITE_DEBUG).  vo
1d1d0 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50  id sqlite3DebugP
1d1e0 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72  rintf(const char
1d1f0 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a  *, ...);.#endif.
1d200 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1d210 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20  TE_TEST).  void 
1d220 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65 78 74  *sqlite3TestText
1d230 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72  ToPtr(const char
1d240 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  *);.#endif../* O
1d250 75 74 70 75 74 20 66 6f 72 6d 61 74 74 69 6e 67  utput formatting
1d260 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 53 54   for SQLITE_TEST
1d270 43 54 52 4c 5f 45 58 50 4c 41 49 4e 20 2a 2f 0a  CTRL_EXPLAIN */.
1d280 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1d290 54 45 5f 45 4e 41 42 4c 45 5f 54 52 45 45 5f 45  TE_ENABLE_TREE_E
1d2a0 58 50 4c 41 49 4e 29 0a 20 20 76 6f 69 64 20 73  XPLAIN).  void s
1d2b0 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 42 65 67  qlite3ExplainBeg
1d2c0 69 6e 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69  in(Vdbe*);.  voi
1d2d0 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
1d2e0 50 72 69 6e 74 66 28 56 64 62 65 2a 2c 20 63 6f  Printf(Vdbe*, co
1d2f0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
1d300 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
1d310 78 70 6c 61 69 6e 4e 4c 28 56 64 62 65 2a 29 3b  xplainNL(Vdbe*);
1d320 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
1d330 78 70 6c 61 69 6e 50 75 73 68 28 56 64 62 65 2a  xplainPush(Vdbe*
1d340 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1d350 33 45 78 70 6c 61 69 6e 50 6f 70 28 56 64 62 65  3ExplainPop(Vdbe
1d360 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
1d370 65 33 45 78 70 6c 61 69 6e 46 69 6e 69 73 68 28  e3ExplainFinish(
1d380 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Vdbe*);.  void s
1d390 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 53 65 6c  qlite3ExplainSel
1d3a0 65 63 74 28 56 64 62 65 2a 2c 20 53 65 6c 65 63  ect(Vdbe*, Selec
1d3b0 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
1d3c0 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72 28 56  te3ExplainExpr(V
1d3d0 64 62 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20  dbe*, Expr*);.  
1d3e0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
1d3f0 61 69 6e 45 78 70 72 4c 69 73 74 28 56 64 62 65  ainExprList(Vdbe
1d400 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20  *, ExprList*);. 
1d410 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c   const char *sql
1d420 69 74 65 33 56 64 62 65 45 78 70 6c 61 6e 61 74  ite3VdbeExplanat
1d430 69 6f 6e 28 56 64 62 65 2a 29 3b 0a 23 65 6c 73  ion(Vdbe*);.#els
1d440 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1d450 65 33 45 78 70 6c 61 69 6e 42 65 67 69 6e 28 58  e3ExplainBegin(X
1d460 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1d470 65 33 45 78 70 6c 61 69 6e 53 65 6c 65 63 74 28  e3ExplainSelect(
1d480 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
1d490 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72  lite3ExplainExpr
1d4a0 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
1d4b0 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70  qlite3ExplainExp
1d4c0 72 4c 69 73 74 28 41 2c 42 29 0a 23 20 64 65 66  rList(A,B).# def
1d4d0 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61  ine sqlite3Expla
1d4e0 69 6e 46 69 6e 69 73 68 28 58 29 0a 23 20 64 65  inFinish(X).# de
1d4f0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65  fine sqlite3Vdbe
1d500 45 78 70 6c 61 6e 61 74 69 6f 6e 28 58 29 20 30  Explanation(X) 0
1d510 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73  .#endif...void s
1d520 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
1d530 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33  char **, sqlite3
1d540 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
1d550 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
1d560 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65  e3ErrorMsg(Parse
1d570 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
1d580 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ...);.int sqlite
1d590 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b  3Dequote(char*);
1d5a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77  .int sqlite3Keyw
1d5b0 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e  ordCode(const un
1d5c0 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e  signed char*, in
1d5d0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  t);.int sqlite3R
1d5e0 75 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c  unParser(Parse*,
1d5f0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68   const char*, ch
1d600 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ar **);.void sql
1d610 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67  ite3FinishCoding
1d620 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71  (Parse*);.int sq
1d630 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65 67 28  lite3GetTempReg(
1d640 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
1d650 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70  lite3ReleaseTemp
1d660 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  Reg(Parse*,int);
1d670 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
1d680 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c  empRange(Parse*,
1d690 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1d6a0 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e  e3ReleaseTempRan
1d6b0 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e  ge(Parse*,int,in
1d6c0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1d6d0 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63 68  ClearTempRegCach
1d6e0 65 28 50 61 72 73 65 2a 29 3b 0a 45 78 70 72 20  e(Parse*);.Expr 
1d6f0 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f  *sqlite3ExprAllo
1d700 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  c(sqlite3*,int,c
1d710 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29  onst Token*,int)
1d720 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
1d730 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  xpr(sqlite3*,int
1d740 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
1d750 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
1d760 74 74 61 63 68 53 75 62 74 72 65 65 73 28 73 71  ttachSubtrees(sq
1d770 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70  lite3*,Expr*,Exp
1d780 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  r*,Expr*);.Expr 
1d790 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28 50 61  *sqlite3PExpr(Pa
1d7a0 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a  rse*, int, Expr*
1d7b0 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54  , Expr*, const T
1d7c0 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71  oken*);.Expr *sq
1d7d0 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c  lite3ExprAnd(sql
1d7e0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70  ite3*,Expr*, Exp
1d7f0 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
1d800 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50  e3ExprFunction(P
1d810 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
1d820 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
1d830 71 6c 69 74 65 33 45 78 70 72 41 73 73 69 67 6e  qlite3ExprAssign
1d840 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a  VarNumber(Parse*
1d850 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
1d860 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74 65  qlite3ExprDelete
1d870 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a  (sqlite3*, Expr*
1d880 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
1d890 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65  ite3ExprListAppe
1d8a0 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  nd(Parse*,ExprLi
1d8b0 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64  st*,Expr*);.void
1d8c0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
1d8d0 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45  SetName(Parse*,E
1d8e0 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c  xprList*,Token*,
1d8f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1d900 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 70 61  e3ExprListSetSpa
1d910 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  n(Parse*,ExprLis
1d920 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76  t*,ExprSpan*);.v
1d930 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
1d940 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
1d950 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  3*, ExprList*);.
1d960 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28  int sqlite3Init(
1d970 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a  sqlite3*, char**
1d980 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
1d990 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a  itCallback(void*
1d9a0 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63  , int, char**, c
1d9b0 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  har**);.void sql
1d9c0 69 74 65 33 50 72 61 67 6d 61 28 50 61 72 73 65  ite3Pragma(Parse
1d9d0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
1d9e0 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Token*,int);.voi
1d9f0 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c  d sqlite3ResetAl
1da00 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63  lSchemasOfConnec
1da10 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a  tion(sqlite3*);.
1da20 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65  void sqlite3Rese
1da30 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69 74  tOneSchema(sqlit
1da40 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
1da50 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44 61  qlite3CollapseDa
1da60 74 61 62 61 73 65 41 72 72 61 79 28 73 71 6c 69  tabaseArray(sqli
1da70 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
1da80 74 65 33 42 65 67 69 6e 50 61 72 73 65 28 50 61  te3BeginParse(Pa
1da90 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
1daa0 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74  sqlite3CommitInt
1dab0 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c  ernalChanges(sql
1dac0 69 74 65 33 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  ite3*);.Table *s
1dad0 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f  qlite3ResultSetO
1dae0 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53  fSelect(Parse*,S
1daf0 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71  elect*);.void sq
1db00 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54  lite3OpenMasterT
1db10 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e  able(Parse *, in
1db20 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  t);.Index *sqlit
1db30 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65  e3PrimaryKeyInde
1db40 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73  x(Table*);.i16 s
1db50 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e  qlite3ColumnOfIn
1db60 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31 36 29  dex(Index*, i16)
1db70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
1db80 61 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  artTable(Parse*,
1db90 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
1dba0 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a  t,int,int,int);.
1dbb0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
1dbc0 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b  olumn(Parse*,Tok
1dbd0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
1dbe0 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72  e3AddNotNull(Par
1dbf0 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
1dc00 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72  sqlite3AddPrimar
1dc10 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70  yKey(Parse*, Exp
1dc20 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
1dc30 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1dc40 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73  ite3AddCheckCons
1dc50 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45  traint(Parse*, E
1dc60 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
1dc70 74 65 33 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65  te3AddColumnType
1dc80 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b  (Parse*,Token*);
1dc90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
1dca0 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72  DefaultValue(Par
1dcb0 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a  se*,ExprSpan*);.
1dcc0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
1dcd0 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73 65  ollateType(Parse
1dce0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
1dcf0 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65   sqlite3EndTable
1dd00 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
1dd10 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a  oken*,u8,Select*
1dd20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61  );.int sqlite3Pa
1dd30 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61  rseUri(const cha
1dd40 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  r*,const char*,u
1dd50 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20  nsigned int*,.  
1dd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd70 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c    sqlite3_vfs**,
1dd80 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b  char**,char **);
1dd90 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44  .Btree *sqlite3D
1dda0 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c  bNameToBtree(sql
1ddb0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1ddc0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
1ddd0 6f 64 65 4f 6e 63 65 28 50 61 72 73 65 20 2a 29  odeOnce(Parse *)
1dde0 3b 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74  ;..Bitvec *sqlit
1ddf0 65 33 42 69 74 76 65 63 43 72 65 61 74 65 28 75  e3BitvecCreate(u
1de00 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  32);.int sqlite3
1de10 42 69 74 76 65 63 54 65 73 74 28 42 69 74 76 65  BitvecTest(Bitve
1de20 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71  c*, u32);.int sq
1de30 6c 69 74 65 33 42 69 74 76 65 63 53 65 74 28 42  lite3BitvecSet(B
1de40 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f  itvec*, u32);.vo
1de50 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  id sqlite3Bitvec
1de60 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75  Clear(Bitvec*, u
1de70 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  32, void*);.void
1de80 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 44 65   sqlite3BitvecDe
1de90 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a  stroy(Bitvec*);.
1dea0 75 33 32 20 73 71 6c 69 74 65 33 42 69 74 76 65  u32 sqlite3Bitve
1deb0 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a  cSize(Bitvec*);.
1dec0 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
1ded0 63 42 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74  cBuiltinTest(int
1dee0 2c 69 6e 74 2a 29 3b 0a 0a 52 6f 77 53 65 74 20  ,int*);..RowSet 
1def0 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e  *sqlite3RowSetIn
1df00 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  it(sqlite3*, voi
1df10 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  d*, unsigned int
1df20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1df30 6f 77 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65  owSetClear(RowSe
1df40 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
1df50 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f  3RowSetInsert(Ro
1df60 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74  wSet*, i64);.int
1df70 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65   sqlite3RowSetTe
1df80 73 74 28 52 6f 77 53 65 74 2a 2c 20 75 38 20 69  st(RowSet*, u8 i
1df90 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74  Batch, i64);.int
1dfa0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65   sqlite3RowSetNe
1dfb0 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a  xt(RowSet*, i64*
1dfc0 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
1dfd0 43 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65  CreateView(Parse
1dfe0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
1dff0 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69  Token*,Select*,i
1e000 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64  nt,int);..#if !d
1e010 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1e020 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66  IT_VIEW) || !def
1e030 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1e040 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20  _VIRTUALTABLE). 
1e050 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77   int sqlite3View
1e060 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50  GetColumnNames(P
1e070 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23  arse*,Table*);.#
1e080 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
1e090 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
1e0a0 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23  mnNames(A,B) 0.#
1e0b0 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69  endif..void sqli
1e0c0 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72  te3DropTable(Par
1e0d0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
1e0e0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1e0f0 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61  qlite3CodeDropTa
1e100 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ble(Parse*, Tabl
1e110 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
1e120 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
1e130 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
1e140 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65   Table*);.#ifnde
1e150 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
1e160 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f  TOINCREMENT.  vo
1e170 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
1e180 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72  crementBegin(Par
1e190 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76  se *pParse);.  v
1e1a0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69  oid sqlite3Autoi
1e1b0 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73  ncrementEnd(Pars
1e1c0 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73  e *pParse);.#els
1e1d0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1e1e0 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
1e1f0 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65  egin(X).# define
1e200 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
1e210 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64  ementEnd(X).#end
1e220 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  if.int sqlite3Co
1e230 64 65 43 6f 72 6f 75 74 69 6e 65 28 50 61 72 73  deCoroutine(Pars
1e240 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c  e*, Select*, Sel
1e250 65 63 74 44 65 73 74 2a 29 3b 0a 76 6f 69 64 20  ectDest*);.void 
1e260 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61  sqlite3Insert(Pa
1e270 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
1e280 45 78 70 72 4c 69 73 74 2a 2c 20 53 65 6c 65 63  ExprList*, Selec
1e290 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74  t*, IdList*, int
1e2a0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1e2b0 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71  ArrayAllocate(sq
1e2c0 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74  lite3*,void*,int
1e2d0 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c  ,int*,int*);.IdL
1e2e0 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
1e2f0 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33  stAppend(sqlite3
1e300 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65  *, IdList*, Toke
1e310 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
1e320 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69  IdListIndex(IdLi
1e330 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  st*,const char*)
1e340 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
1e350 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65  e3SrcListEnlarge
1e360 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
1e370 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
1e380 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
1e390 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71  SrcListAppend(sq
1e3a0 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
1e3b0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
1e3c0 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
1e3d0 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
1e3e0 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c  FromTerm(Parse*,
1e3f0 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
1e400 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  *, Token*,.     
1e410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e430 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a   Token*, Select*
1e440 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a  , Expr*, IdList*
1e450 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1e460 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28  rcListIndexedBy(
1e470 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
1e480 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e   *, Token *);.in
1e490 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64  t sqlite3Indexed
1e4a0 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a  ByLookup(Parse *
1e4b0 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  , struct SrcList
1e4c0 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73  _item *);.void s
1e4d0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
1e4e0 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69  ftJoinType(SrcLi
1e4f0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
1e500 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43  e3SrcListAssignC
1e510 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53  ursors(Parse*, S
1e520 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
1e530 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65  qlite3IdListDele
1e540 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c  te(sqlite3*, IdL
1e550 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
1e560 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65  te3SrcListDelete
1e570 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
1e580 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  st*);.Index *sql
1e590 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65  ite3AllocateInde
1e5a0 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a  xObject(sqlite3*
1e5b0 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29  ,i16,int,char**)
1e5c0 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
1e5d0 43 72 65 61 74 65 49 6e 64 65 78 28 50 61 72 73  CreateIndex(Pars
1e5e0 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
1e5f0 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ,SrcList*,ExprLi
1e600 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a  st*,int,Token*,.
1e610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e620 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
1e630 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1e640 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65   sqlite3DropInde
1e650 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  x(Parse*, SrcLis
1e660 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
1e670 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73  lite3Select(Pars
1e680 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c  e*, Select*, Sel
1e690 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63  ectDest*);.Selec
1e6a0 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
1e6b0 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  New(Parse*,ExprL
1e6c0 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  ist*,SrcList*,Ex
1e6d0 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20  pr*,ExprList*,. 
1e6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6f0 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78          Expr*,Ex
1e700 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78 70 72  prList*,u16,Expr
1e710 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  *,Expr*);.void s
1e720 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65  qlite3SelectDele
1e730 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c  te(sqlite3*, Sel
1e740 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  ect*);.Table *sq
1e750 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b  lite3SrcListLook
1e760 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  up(Parse*, SrcLi
1e770 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
1e780 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73  3IsReadOnly(Pars
1e790 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  e*, Table*, int)
1e7a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70  ;.void sqlite3Op
1e7b0 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  enTable(Parse*, 
1e7c0 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44  int iCur, int iD
1e7d0 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  b, Table*, int);
1e7e0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
1e7f0 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54  ITE_ENABLE_UPDAT
1e800 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20  E_DELETE_LIMIT) 
1e810 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1e820 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59  TE_OMIT_SUBQUERY
1e830 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c  ).Expr *sqlite3L
1e840 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a  imitWhere(Parse*
1e850 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
1e860 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
1e870 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65  Expr*,char*);.#e
1e880 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
1e890 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73  3DeleteFrom(Pars
1e8a0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
1e8b0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
1e8c0 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c  e3Update(Parse*,
1e8d0 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c   SrcList*, ExprL
1e8e0 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ist*, Expr*, int
1e8f0 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71  );.WhereInfo *sq
1e900 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28  lite3WhereBegin(
1e910 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c  Parse*,SrcList*,
1e920 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
1e930 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e  ExprList*,u16,in
1e940 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1e950 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e  WhereEnd(WhereIn
1e960 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69 74 65  fo*);.u64 sqlite
1e970 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43  3WhereOutputRowC
1e980 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  ount(WhereInfo*)
1e990 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
1e9a0 72 65 49 73 44 69 73 74 69 6e 63 74 28 57 68 65  reIsDistinct(Whe
1e9b0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
1e9c0 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72 64 65  lite3WhereIsOrde
1e9d0 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  red(WhereInfo*);
1e9e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
1e9f0 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57  eContinueLabel(W
1ea00 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
1ea10 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61  sqlite3WhereBrea
1ea20 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  kLabel(WhereInfo
1ea30 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1ea40 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68  hereOkOnePass(Wh
1ea50 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b  ereInfo*, int*);
1ea60 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1ea70 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61  CodeGetColumn(Pa
1ea80 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
1ea90 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  t, int, int, u8)
1eaa0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1eab0 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f  prCodeGetColumnO
1eac0 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61  fTable(Vdbe*, Ta
1ead0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
1eae0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1eaf0 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50  e3ExprCodeMove(P
1eb00 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
1eb10 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1eb20 74 65 33 45 78 70 72 43 61 63 68 65 53 74 6f 72  te3ExprCacheStor
1eb30 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
1eb40 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1eb50 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50  qlite3ExprCacheP
1eb60 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ush(Parse*);.voi
1eb70 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
1eb80 68 65 50 6f 70 28 50 61 72 73 65 2a 2c 20 69 6e  hePop(Parse*, in
1eb90 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1eba0 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28  ExprCacheRemove(
1ebb0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
1ebc0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1ebd0 78 70 72 43 61 63 68 65 43 6c 65 61 72 28 50 61  xprCacheClear(Pa
1ebe0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1ebf0 74 65 33 45 78 70 72 43 61 63 68 65 41 66 66 69  te3ExprCacheAffi
1ec00 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72 73 65  nityChange(Parse
1ec10 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  *, int, int);.in
1ec20 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
1ec30 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
1ec40 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
1ec50 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50  e3ExprCodeTemp(P
1ec60 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
1ec70 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1ec80 45 78 70 72 43 6f 64 65 54 61 72 67 65 74 28 50  ExprCodeTarget(P
1ec90 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
1eca0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
1ecb0 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28  xprCodeAndCache(
1ecc0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
1ecd0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1ece0 33 45 78 70 72 43 6f 64 65 43 6f 6e 73 74 61 6e  3ExprCodeConstan
1ecf0 74 73 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ts(Parse*, Expr*
1ed00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1ed10 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50  prCodeExprList(P
1ed20 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
1ed30 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1ed40 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 54  d sqlite3ExprIfT
1ed50 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  rue(Parse*, Expr
1ed60 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
1ed70 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
1ed80 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78  False(Parse*, Ex
1ed90 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
1eda0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69  Table *sqlite3Fi
1edb0 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  ndTable(sqlite3*
1edc0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
1edd0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c  nst char*);.Tabl
1ede0 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
1edf0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74  Table(Parse*,int
1ee00 20 69 73 56 69 65 77 2c 63 6f 6e 73 74 20 63 68   isView,const ch
1ee10 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
1ee20 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
1ee30 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d  3LocateTableItem
1ee40 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69  (Parse*,int isVi
1ee50 65 77 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73  ew,struct SrcLis
1ee60 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78  t_item *);.Index
1ee70 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64   *sqlite3FindInd
1ee80 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ex(sqlite3*,cons
1ee90 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
1eea0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
1eeb0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
1eec0 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
1eed0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
1eee0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
1eef0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
1ef00 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  dex(sqlite3*,int
1ef10 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
1ef20 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75  oid sqlite3Vacuu
1ef30 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73  m(Parse*);.int s
1ef40 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
1ef50 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a  char**, sqlite3*
1ef60 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
1ef70 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71  NameFromToken(sq
1ef80 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
1ef90 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1efa0 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45  Compare(Expr*, E
1efb0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
1efc0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43  sqlite3ExprListC
1efd0 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a  ompare(ExprList*
1efe0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
1eff0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1f000 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28 45 78  prImpliesExpr(Ex
1f010 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
1f020 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1f030 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61  prAnalyzeAggrega
1f040 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  tes(NameContext*
1f050 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
1f060 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
1f070 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e  eAggList(NameCon
1f080 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29  text*,ExprList*)
1f090 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e  ;.int sqlite3Fun
1f0a0 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63  ctionUsesThisSrc
1f0b0 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a  (Expr*, SrcList*
1f0c0 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33  );.Vdbe *sqlite3
1f0d0 47 65 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b  GetVdbe(Parse*);
1f0e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
1f0f0 67 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29  gSaveState(void)
1f100 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
1f110 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76  ngRestoreState(v
1f120 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
1f130 65 33 50 72 6e 67 52 65 73 65 74 53 74 61 74 65  e3PrngResetState
1f140 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
1f150 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
1f160 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
1f170 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56  oid sqlite3CodeV
1f180 65 72 69 66 79 53 63 68 65 6d 61 28 50 61 72 73  erifySchema(Pars
1f190 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
1f1a0 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
1f1b0 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73  NamedSchema(Pars
1f1c0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  e*, const char *
1f1d0 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  zDb);.void sqlit
1f1e0 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69  e3BeginTransacti
1f1f0 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  on(Parse*, int);
1f200 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
1f210 6d 69 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50  mitTransaction(P
1f220 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
1f230 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e  ite3RollbackTran
1f240 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b  saction(Parse*);
1f250 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76  .void sqlite3Sav
1f260 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  epoint(Parse*, i
1f270 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  nt, Token*);.voi
1f280 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61  d sqlite3CloseSa
1f290 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33  vepoints(sqlite3
1f2a0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
1f2b0 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c  3LeaveMutexAndCl
1f2c0 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65  oseZombie(sqlite
1f2d0 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
1f2e0 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45  ExprIsConstant(E
1f2f0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
1f300 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
1f310 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a  NotJoin(Expr*);.
1f320 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
1f330 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74  sConstantOrFunct
1f340 69 6f 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  ion(Expr*);.int 
1f350 73 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74  sqlite3ExprIsInt
1f360 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a  eger(Expr*, int*
1f370 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1f380 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73  prCanBeNull(cons
1f390 74 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  t Expr*);.void s
1f3a0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 49 73  qlite3ExprCodeIs
1f3b0 4e 75 6c 6c 4a 75 6d 70 28 56 64 62 65 2a 2c 20  NullJump(Vdbe*, 
1f3c0 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 69 6e 74  const Expr*, int
1f3d0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
1f3e0 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66  te3ExprNeedsNoAf
1f3f0 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e  finityChange(con
1f400 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b  st Expr*, char);
1f410 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f  .int sqlite3IsRo
1f420 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  wid(const char*)
1f430 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
1f440 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28  nerateRowDelete(
1f450 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72  Parse*,Table*,Tr
1f460 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69  igger*,int,int,i
1f470 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 29  nt,i16,u8,u8,u8)
1f480 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
1f490 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65  nerateRowIndexDe
1f4a0 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62  lete(Parse*, Tab
1f4b0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
1f4c0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
1f4d0 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65  3GenerateIndexKe
1f4e0 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  y(Parse*, Index*
1f4f0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
1f500 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c   int*);.void sql
1f510 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73  ite3GenerateCons
1f520 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72  traintChecks(Par
1f530 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c  se*,Table*,int*,
1f540 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  int,int,int,int,
1f550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f570 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c        u8,u8,int,
1f580 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  int*);.void sqli
1f590 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72  te3CompleteInser
1f5a0 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c  tion(Parse*,Tabl
1f5b0 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  e*,int,int,int,i
1f5c0 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29  nt*,int,int,int)
1f5d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65  ;.int sqlite3Ope
1f5e0 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73  nTableAndIndices
1f5f0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
1f600 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
1f610 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c   int*);.void sql
1f620 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70  ite3BeginWriteOp
1f630 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20  eration(Parse*, 
1f640 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1f650 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74  sqlite3MultiWrit
1f660 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  e(Parse*);.void 
1f670 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28  sqlite3MayAbort(
1f680 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
1f690 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61  lite3HaltConstra
1f6a0 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
1f6b0 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c   int, char*, i8,
1f6c0 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
1f6d0 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69  e3UniqueConstrai
1f6e0 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
1f6f0 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
1f700 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72  lite3RowidConstr
1f710 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
1f720 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20  , Table*);.Expr 
1f730 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28  *sqlite3ExprDup(
1f740 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69  sqlite3*,Expr*,i
1f750 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73  nt);.ExprList *s
1f760 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75  qlite3ExprListDu
1f770 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c  p(sqlite3*,ExprL
1f780 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69  ist*,int);.SrcLi
1f790 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
1f7a0 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53  stDup(sqlite3*,S
1f7b0 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64  rcList*,int);.Id
1f7c0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c  List *sqlite3IdL
1f7d0 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
1f7e0 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74  IdList*);.Select
1f7f0 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44   *sqlite3SelectD
1f800 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  up(sqlite3*,Sele
1f810 63 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ct*,int);.void s
1f820 71 6c 69 74 65 33 46 75 6e 63 44 65 66 49 6e 73  qlite3FuncDefIns
1f830 65 72 74 28 46 75 6e 63 44 65 66 48 61 73 68 2a  ert(FuncDefHash*
1f840 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e  , FuncDef*);.Fun
1f850 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e  cDef *sqlite3Fin
1f860 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
1f870 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  3*,const char*,i
1f880 6e 74 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76  nt,int,u8,u8);.v
1f890 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
1f8a0 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  terBuiltinFuncti
1f8b0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ons(sqlite3*);.v
1f8c0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
1f8d0 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74  terDateTimeFunct
1f8e0 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
1f8f0 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
1f900 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28  GlobalFunctions(
1f910 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74  void);.int sqlit
1f920 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28  e3SafetyCheckOk(
1f930 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
1f940 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
1f950 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65  kSickOrOk(sqlite
1f960 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
1f970 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61  3ChangeCookie(Pa
1f980 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66  rse*, int);..#if
1f990 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1f9a0 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21  _OMIT_VIEW) && !
1f9b0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1f9c0 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69  MIT_TRIGGER).voi
1f9d0 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61  d sqlite3Materia
1f9e0 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c  lizeView(Parse*,
1f9f0 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
1fa00 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  int);.#endif..#i
1fa10 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1fa20 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64  T_TRIGGER.  void
1fa30 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69   sqlite3BeginTri
1fa40 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b  gger(Parse*, Tok
1fa50 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
1fa60 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69  nt,IdList*,SrcLi
1fa70 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
1fa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa90 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b  Expr*,int, int);
1faa0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
1fab0 69 6e 69 73 68 54 72 69 67 67 65 72 28 50 61 72  inishTrigger(Par
1fac0 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  se*, TriggerStep
1fad0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f  *, Token*);.  vo
1fae0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
1faf0 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72  igger(Parse*, Sr
1fb00 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  cList*, int);.  
1fb10 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
1fb20 54 72 69 67 67 65 72 50 74 72 28 50 61 72 73 65  TriggerPtr(Parse
1fb30 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
1fb40 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33  Trigger *sqlite3
1fb50 54 72 69 67 67 65 72 73 45 78 69 73 74 28 50 61  TriggersExist(Pa
1fb60 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  rse *, Table*, i
1fb70 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  nt, ExprList*, i
1fb80 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72  nt *pMask);.  Tr
1fb90 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72  igger *sqlite3Tr
1fba0 69 67 67 65 72 4c 69 73 74 28 50 61 72 73 65 20  iggerList(Parse 
1fbb0 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76  *, Table *);.  v
1fbc0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
1fbd0 6f 77 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  owTrigger(Parse*
1fbe0 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74  , Trigger *, int
1fbf0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
1fc00 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20  , Table *,.     
1fc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc20 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c         int, int,
1fc30 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
1fc40 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
1fc50 67 65 72 44 69 72 65 63 74 28 50 61 72 73 65 20  gerDirect(Parse 
1fc60 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61  *, Trigger *, Ta
1fc70 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ble *, int, int,
1fc80 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
1fc90 6c 69 74 65 56 69 65 77 54 72 69 67 67 65 72 73  liteViewTriggers
1fca0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
1fcb0 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70   Expr*, int, Exp
1fcc0 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20  rList*);.  void 
1fcd0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
1fce0 67 67 65 72 53 74 65 70 28 73 71 6c 69 74 65 33  ggerStep(sqlite3
1fcf0 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29  *, TriggerStep*)
1fd00 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
1fd10 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 53  *sqlite3TriggerS
1fd20 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74 65  electStep(sqlite
1fd30 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54  3*,Select*);.  T
1fd40 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
1fd50 74 65 33 54 72 69 67 67 65 72 49 6e 73 65 72 74  te3TriggerInsert
1fd60 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
1fd70 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20  ken*, IdList*,. 
1fd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fda0 20 20 20 20 20 20 20 45 78 70 72 4c 69 73 74 2a         ExprList*
1fdb0 2c 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20  ,Select*,u8);.  
1fdc0 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
1fdd0 69 74 65 33 54 72 69 67 67 65 72 55 70 64 61 74  ite3TriggerUpdat
1fde0 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54  eStep(sqlite3*,T
1fdf0 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
1fe00 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54   Expr*, u8);.  T
1fe10 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
1fe20 74 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65  te3TriggerDelete
1fe30 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
1fe40 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20  ken*, Expr*);.  
1fe50 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
1fe60 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65  teTrigger(sqlite
1fe70 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20  3*, Trigger*);. 
1fe80 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c   void sqlite3Unl
1fe90 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
1fea0 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ger(sqlite3*,int
1feb0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
1fec0 20 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67   u32 sqlite3Trig
1fed0 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65  gerColmask(Parse
1fee0 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c  *,Trigger*,ExprL
1fef0 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62  ist*,int,int,Tab
1ff00 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69  le*,int);.# defi
1ff10 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54  ne sqlite3ParseT
1ff20 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d  oplevel(p) ((p)-
1ff30 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29  >pToplevel ? (p)
1ff40 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70  ->pToplevel : (p
1ff50 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  )).#else.# defin
1ff60 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
1ff70 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46  sExist(B,C,D,E,F
1ff80 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 0.# define sql
1ff90 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
1ffa0 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  r(A,B).# define 
1ffb0 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
1ffc0 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66  erPtr(A,B).# def
1ffd0 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  ine sqlite3Unlin
1ffe0 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
1fff0 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e  r(A,B,C).# defin
20000 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  e sqlite3CodeRow
20010 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c  Trigger(A,B,C,D,
20020 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66  E,F,G,H,I).# def
20030 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52  ine sqlite3CodeR
20040 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28  owTriggerDirect(
20050 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64  A,B,C,D,E,F).# d
20060 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
20070 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30  ggerList(X, Y) 0
20080 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20090 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70  3ParseToplevel(p
200a0 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) p.# define sql
200b0 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61  ite3TriggerColma
200c0 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47  sk(A,B,C,D,E,F,G
200d0 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  ) 0.#endif..int 
200e0 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28  sqlite3JoinType(
200f0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
20100 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
20110 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
20120 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61  ateForeignKey(Pa
20130 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
20140 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73   Token*, ExprLis
20150 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  t*, int);.void s
20160 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65 69  qlite3DeferForei
20170 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e  gnKey(Parse*, in
20180 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
20190 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a  TE_OMIT_AUTHORIZ
201a0 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c  ATION.  void sql
201b0 69 74 65 33 41 75 74 68 52 65 61 64 28 50 61 72  ite3AuthRead(Par
201c0 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61  se*,Expr*,Schema
201d0 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69  *,SrcList*);.  i
201e0 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 43 68  nt sqlite3AuthCh
201f0 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20  eck(Parse*,int, 
20200 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
20210 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
20220 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
20230 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
20240 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75  tPush(Parse*, Au
20250 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73  thContext*, cons
20260 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
20270 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
20280 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65  extPop(AuthConte
20290 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  xt*);.  int sqli
202a0 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50  te3AuthReadCol(P
202b0 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
202c0 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  r *, const char 
202d0 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23  *, int);.#else.#
202e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
202f0 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29  uthRead(a,b,c,d)
20300 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20310 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63  3AuthCheck(a,b,c
20320 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f  ,d,e)    SQLITE_
20330 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  OK.# define sqli
20340 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75  te3AuthContextPu
20350 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69  sh(a,b,c).# defi
20360 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  ne sqlite3AuthCo
20370 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28 28 76  ntextPop(a)  ((v
20380 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a  oid)(a)).#endif.
20390 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74 61  void sqlite3Atta
203a0 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
203b0 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b  , Expr*, Expr*);
203c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74  .void sqlite3Det
203d0 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
203e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
203f0 46 69 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a  FixInit(DbFixer*
20400 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63  , Parse*, int, c
20410 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
20420 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  t Token*);.int s
20430 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73 74  qlite3FixSrcList
20440 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69  (DbFixer*, SrcLi
20450 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
20460 33 46 69 78 53 65 6c 65 63 74 28 44 62 46 69 78  3FixSelect(DbFix
20470 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
20480 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70  nt sqlite3FixExp
20490 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72  r(DbFixer*, Expr
204a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
204b0 69 78 45 78 70 72 4c 69 73 74 28 44 62 46 69 78  ixExprList(DbFix
204c0 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  er*, ExprList*);
204d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54  .int sqlite3FixT
204e0 72 69 67 67 65 72 53 74 65 70 28 44 62 46 69 78  riggerStep(DbFix
204f0 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  er*, TriggerStep
20500 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
20510 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  toF(const char *
20520 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c  z, double*, int,
20530 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
20540 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20  3GetInt32(const 
20550 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69  char *, int*);.i
20560 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63  nt sqlite3Atoi(c
20570 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
20580 20 73 71 6c 69 74 65 33 55 74 66 31 36 42 79 74   sqlite3Utf16Byt
20590 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20  eLen(const void 
205a0 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61  *pData, int nCha
205b0 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55  r);.int sqlite3U
205c0 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74  tf8CharLen(const
205d0 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e   char *pData, in
205e0 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71  t nByte);.u32 sq
205f0 6c 69 74 65 33 55 74 66 38 52 65 61 64 28 63 6f  lite3Utf8Read(co
20600 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73  nst u8**);.LogEs
20610 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28  t sqlite3LogEst(
20620 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c  u64);.LogEst sql
20630 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f  ite3LogEstAdd(Lo
20640 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69  gEst,LogEst);.#i
20650 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
20660 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c  T_VIRTUALTABLE.L
20670 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
20680 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f  EstFromDouble(do
20690 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 75 36  uble);.#endif.u6
206a0 34 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54  4 sqlite3LogEstT
206b0 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 0a 2f  oInt(LogEst);../
206c0 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f  *.** Routines to
206d0 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
206e0 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
206f0 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65  integers.  These
20700 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64   used to.** be d
20710 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20  efined locally, 
20720 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74  but now we use t
20730 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e  he varint routin
20740 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63  es in the util.c
20750 0a 2a 2a 20 66 69 6c 65 2e 20 20 43 6f 64 65 20  .** file.  Code 
20760 73 68 6f 75 6c 64 20 75 73 65 20 74 68 65 20 4d  should use the M
20770 41 43 52 4f 20 66 6f 72 6d 73 20 62 65 6c 6f 77  ACRO forms below
20780 2c 20 61 73 20 74 68 65 20 56 61 72 69 6e 74 33  , as the Varint3
20790 32 20 76 65 72 73 69 6f 6e 73 0a 2a 2a 20 61 72  2 versions.** ar
207a0 65 20 63 6f 64 65 64 20 74 6f 20 61 73 73 75 6d  e coded to assum
207b0 65 20 74 68 65 20 73 69 6e 67 6c 65 20 62 79 74  e the single byt
207c0 65 20 63 61 73 65 20 69 73 20 61 6c 72 65 61 64  e case is alread
207d0 79 20 68 61 6e 64 6c 65 64 20 28 77 68 69 63 68  y handled (which
207e0 20 0a 2a 2a 20 74 68 65 20 4d 41 43 52 4f 20 66   .** the MACRO f
207f0 6f 72 6d 20 64 6f 65 73 29 2e 0a 2a 2f 0a 69 6e  orm does)..*/.in
20800 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69  t sqlite3PutVari
20810 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  nt(unsigned char
20820 2a 2c 20 75 36 34 29 3b 0a 69 6e 74 20 73 71 6c  *, u64);.int sql
20830 69 74 65 33 50 75 74 56 61 72 69 6e 74 33 32 28  ite3PutVarint32(
20840 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20  unsigned char*, 
20850 75 33 32 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  u32);.u8 sqlite3
20860 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20  GetVarint(const 
20870 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
20880 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69   u64 *);.u8 sqli
20890 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 63  te3GetVarint32(c
208a0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
208b0 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e  ar *, u32 *);.in
208c0 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  t sqlite3VarintL
208d0 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a  en(u64 v);../*.*
208e0 2a 20 54 68 65 20 68 65 61 64 65 72 20 6f 66 20  * The header of 
208f0 61 20 72 65 63 6f 72 64 20 63 6f 6e 73 69 73 74  a record consist
20900 73 20 6f 66 20 61 20 73 65 71 75 65 6e 63 65 20  s of a sequence 
20910 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
20920 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65  integers..** The
20930 73 65 20 69 6e 74 65 67 65 72 73 20 61 72 65 20  se integers are 
20940 61 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 73 6d  almost always sm
20950 61 6c 6c 20 61 6e 64 20 61 72 65 20 65 6e 63 6f  all and are enco
20960 64 65 64 20 61 73 20 61 20 73 69 6e 67 6c 65 20  ded as a single 
20970 62 79 74 65 2e 0a 2a 2a 20 54 68 65 20 66 6f 6c  byte..** The fol
20980 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 74 61  lowing macros ta
20990 6b 65 20 61 64 76 61 6e 74 61 67 65 20 74 68 69  ke advantage thi
209a0 73 20 66 61 63 74 20 74 6f 20 70 72 6f 76 69 64  s fact to provid
209b0 65 20 61 20 66 61 73 74 20 65 6e 63 6f 64 65 0a  e a fast encode.
209c0 2a 2a 20 61 6e 64 20 64 65 63 6f 64 65 20 6f 66  ** and decode of
209d0 20 74 68 65 20 69 6e 74 65 67 65 72 73 20 69 6e   the integers in
209e0 20 61 20 72 65 63 6f 72 64 20 68 65 61 64 65 72   a record header
209f0 2e 20 20 49 74 20 69 73 20 66 61 73 74 65 72 20  .  It is faster 
20a00 66 6f 72 20 74 68 65 20 63 6f 6d 6d 6f 6e 0a 2a  for the common.*
20a10 2a 20 63 61 73 65 20 77 68 65 72 65 20 74 68 65  * case where the
20a20 20 69 6e 74 65 67 65 72 20 69 73 20 61 20 73 69   integer is a si
20a30 6e 67 6c 65 20 62 79 74 65 2e 20 20 49 74 20 69  ngle byte.  It i
20a40 73 20 61 20 6c 69 74 74 6c 65 20 73 6c 6f 77 65  s a little slowe
20a50 72 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 69 6e  r when the.** in
20a60 74 65 67 65 72 20 69 73 20 74 77 6f 20 6f 72 20  teger is two or 
20a70 6d 6f 72 65 20 62 79 74 65 73 2e 20 20 42 75 74  more bytes.  But
20a80 20 6f 76 65 72 61 6c 6c 20 69 74 20 69 73 20 66   overall it is f
20a90 61 73 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  aster..**.** The
20aa0 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 72 65   following expre
20ab0 73 73 69 6f 6e 73 20 61 72 65 20 65 71 75 69 76  ssions are equiv
20ac0 61 6c 65 6e 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  alent:.**.**    
20ad0 20 78 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56   x = sqlite3GetV
20ae0 61 72 69 6e 74 33 32 28 20 41 2c 20 26 42 20 29  arint32( A, &B )
20af0 3b 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73 71 6c  ;.**     x = sql
20b00 69 74 65 33 50 75 74 56 61 72 69 6e 74 33 32 28  ite3PutVarint32(
20b10 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 20   A, B );.**.**  
20b20 20 20 20 78 20 3d 20 67 65 74 56 61 72 69 6e 74     x = getVarint
20b30 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 20 20  32( A, B );.**  
20b40 20 20 20 78 20 3d 20 70 75 74 56 61 72 69 6e 74     x = putVarint
20b50 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a  32( A, B );.**.*
20b60 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  /.#define getVar
20b70 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20  int32(A,B)  \.  
20b80 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30  (u8)((*(A)<(u8)0
20b90 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a  x80)?((B)=(u32)*
20ba0 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65  (A)),1:sqlite3Ge
20bb0 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75  tVarint32((A),(u
20bc0 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66  32 *)&(B))).#def
20bd0 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32 28  ine putVarint32(
20be0 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
20bf0 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30 78  (u32)(B)<(u32)0x
20c00 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67  80)?(*(A)=(unsig
20c10 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a  ned char)(B)),1:
20c20 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56 61  \.  sqlite3PutVa
20c30 72 69 6e 74 33 32 28 28 41 29 2c 28 42 29 29 29  rint32((A),(B)))
20c40 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69  .#define getVari
20c50 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65 74  nt    sqlite3Get
20c60 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70  Varint.#define p
20c70 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69  utVarint    sqli
20c80 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63  te3PutVarint...c
20c90 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
20ca0 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53  e3IndexAffinityS
20cb0 74 72 28 56 64 62 65 20 2a 2c 20 49 6e 64 65 78  tr(Vdbe *, Index
20cc0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
20cd0 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79 53 74  3TableAffinitySt
20ce0 72 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20  r(Vdbe *, Table 
20cf0 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  *);.char sqlite3
20d00 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28  CompareAffinity(
20d10 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
20d20 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c  r aff2);.int sql
20d30 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
20d40 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c  yOk(Expr *pExpr,
20d50 20 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69   char idx_affini
20d60 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  ty);.char sqlite
20d70 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45 78  3ExprAffinity(Ex
20d80 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20  pr *pExpr);.int 
20d90 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f  sqlite3Atoi64(co
20da0 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c  nst char*, i64*,
20db0 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20   int, u8);.void 
20dc0 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c  sqlite3Error(sql
20dd0 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
20de0 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f  t char*,...);.vo
20df0 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f  id *sqlite3HexTo
20e00 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63  Blob(sqlite3*, c
20e10 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e  onst char *z, in
20e20 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  t n);.u8 sqlite3
20e30 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b  HexToInt(int h);
20e40 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50  .int sqlite3TwoP
20e50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c  artName(Parse *,
20e60 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
20e70 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23  *, Token **);..#
20e80 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
20e90 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
20ea0 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
20eb0 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   || \.    define
20ec0 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 5f 4f  d(SQLITE_DEBUG_O
20ed0 53 5f 54 52 41 43 45 29 0a 63 6f 6e 73 74 20 63  S_TRACE).const c
20ee0 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e  har *sqlite3ErrN
20ef0 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66  ame(int);.#endif
20f00 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ..const char *sq
20f10 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29  lite3ErrStr(int)
20f20 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61  ;.int sqlite3Rea
20f30 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70  dSchema(Parse *p
20f40 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  Parse);.CollSeq 
20f50 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c  *sqlite3FindColl
20f60 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20  Seq(sqlite3*,u8 
20f70 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  enc, const char*
20f80 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  ,int);.CollSeq *
20f90 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c  sqlite3LocateCol
20fa0 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72  lSeq(Parse *pPar
20fb0 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a  se, const char*z
20fc0 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  Name);.CollSeq *
20fd0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53  sqlite3ExprCollS
20fe0 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
20ff0 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  , Expr *pExpr);.
21000 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
21010 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e  rAddCollateToken
21020 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
21030 45 78 70 72 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  Expr*, Token*);.
21040 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
21050 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e  rAddCollateStrin
21060 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63  g(Parse*,Expr*,c
21070 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70  onst char*);.Exp
21080 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b  r *sqlite3ExprSk
21090 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29  ipCollate(Expr*)
210a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
210b0 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  ckCollSeq(Parse 
210c0 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69  *, CollSeq *);.i
210d0 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f  nt sqlite3CheckO
210e0 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20  bjectName(Parse 
210f0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
21100 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  ;.void sqlite3Vd
21110 62 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c  beSetChanges(sql
21120 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e  ite3 *, int);.in
21130 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  t sqlite3AddInt6
21140 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
21150 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34   sqlite3SubInt64
21160 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
21170 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28  sqlite3MulInt64(
21180 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
21190 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69  qlite3AbsInt32(i
211a0 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nt);.#ifdef SQLI
211b0 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41  TE_ENABLE_8_3_NA
211c0 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  MES.void sqlite3
211d0 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73  FileSuffix3(cons
211e0 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b  t char*, char*);
211f0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
21200 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
21210 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75  x3(X,Y).#endif.u
21220 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  8 sqlite3GetBool
21230 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ean(const char *
21240 7a 2c 69 6e 74 29 3b 0a 0a 63 6f 6e 73 74 20 76  z,int);..const v
21250 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  oid *sqlite3Valu
21260 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61  eText(sqlite3_va
21270 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73  lue*, u8);.int s
21280 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73  qlite3ValueBytes
21290 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
212a0 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
212b0 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71  e3ValueSetStr(sq
212c0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e  lite3_value*, in
212d0 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c  t, const void *,
212e0 75 38 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  u8, .           
212f0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69               voi
21300 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f  d(*)(void*));.vo
21310 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  id sqlite3ValueF
21320 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ree(sqlite3_valu
21330 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c  e*);.sqlite3_val
21340 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  ue *sqlite3Value
21350 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a  New(sqlite3 *);.
21360 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66  char *sqlite3Utf
21370 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c  16to8(sqlite3 *,
21380 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
21390 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
213a0 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  te3ValueFromExpr
213b0 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72  (sqlite3 *, Expr
213c0 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69   *, u8, u8, sqli
213d0 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76  te3_value **);.v
213e0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
213f0 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71  ApplyAffinity(sq
21400 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75  lite3_value *, u
21410 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20  8, u8);.#ifndef 
21420 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
21430 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  ION.extern const
21440 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
21450 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70  qlite3OpcodeProp
21460 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  erty[];.extern c
21470 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
21480 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54  ar sqlite3UpperT
21490 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e  oLower[];.extern
214a0 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
214b0 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70  char sqlite3Ctyp
214c0 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  eMap[];.extern c
214d0 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74  onst Token sqlit
214e0 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65  e3IntTokens[];.e
214f0 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44  xtern SQLITE_WSD
21500 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43   struct Sqlite3C
21510 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e  onfig sqlite3Con
21520 66 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49  fig;.extern SQLI
21530 54 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48 61  TE_WSD FuncDefHa
21540 73 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  sh sqlite3Global
21550 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64  Functions;.#ifnd
21560 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
21570 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71  SD.extern int sq
21580 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65  lite3PendingByte
21590 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  ;.#endif.#endif.
215a0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74  void sqlite3Root
215b0 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65  PageMoved(sqlite
215c0 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  3*, int, int, in
215d0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
215e0 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  Reindex(Parse*, 
215f0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
21600 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
21610 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  erFunctions(void
21620 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
21630 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28  lterRenameTable(
21640 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
21650 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
21660 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63  qlite3GetToken(c
21670 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
21680 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f  ar *, int *);.vo
21690 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64  id sqlite3Nested
216a0 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f  Parse(Parse*, co
216b0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
216c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
216d0 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
216e0 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b  ments(sqlite3*);
216f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65  .int sqlite3Code
21700 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 20  Subselect(Parse 
21710 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20  *, Expr *, int, 
21720 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21730 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72  e3SelectPrep(Par
21740 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
21750 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74  meContext*);.int
21760 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61   sqlite3MatchSpa
21770 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72  nName(const char
21780 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
21790 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
217a0 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
217b0 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70  qlite3ResolveExp
217c0 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65  rNames(NameConte
217d0 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  xt*, Expr*);.voi
217e0 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
217f0 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73  SelectNames(Pars
21800 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d  e*, Select*, Nam
21810 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64  eContext*);.void
21820 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53   sqlite3ResolveS
21830 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61 72  elfReference(Par
21840 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45  se*,Table*,int,E
21850 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  xpr*,ExprList*);
21860 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f  .int sqlite3Reso
21870 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28  lveOrderGroupBy(
21880 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
21890 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
218a0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
218b0 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61  qlite3ColumnDefa
218c0 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c  ult(Vdbe *, Tabl
218d0 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  e *, int, int);.
218e0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
218f0 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e  rFinishAddColumn
21900 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
21910 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21920 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c  AlterBeginAddCol
21930 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63  umn(Parse *, Src
21940 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71  List *);.CollSeq
21950 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c   *sqlite3GetColl
21960 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20  Seq(Parse*, u8, 
21970 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74  CollSeq *, const
21980 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71   char*);.char sq
21990 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70  lite3AffinityTyp
219a0 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75  e(const char*, u
219b0 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
219c0 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c  3Analyze(Parse*,
219d0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
219e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76  ;.int sqlite3Inv
219f0 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42  okeBusyHandler(B
21a00 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e  usyHandler*);.in
21a10 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28  t sqlite3FindDb(
21a20 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
21a30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
21a40 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33  ndDbName(sqlite3
21a50 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
21a60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e  );.int sqlite3An
21a70 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74  alysisLoad(sqlit
21a80 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f  e3*,int iDB);.vo
21a90 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
21aa0 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c  IndexSamples(sql
21ab0 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76  ite3*,Index*);.v
21ac0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75  oid sqlite3Defau
21ad0 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29  ltRowEst(Index*)
21ae0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
21af0 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69  gisterLikeFuncti
21b00 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ons(sqlite3*, in
21b10 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  t);.int sqlite3I
21b20 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71  sLikeFunction(sq
21b30 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74  lite3*,Expr*,int
21b40 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  *,char*);.void s
21b50 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69 6c  qlite3MinimumFil
21b60 65 46 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c 20  eFormat(Parse*, 
21b70 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
21b80 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65  sqlite3SchemaCle
21b90 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65  ar(void *);.Sche
21ba0 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d  ma *sqlite3Schem
21bb0 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20  aGet(sqlite3 *, 
21bc0 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71  Btree *);.int sq
21bd0 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64  lite3SchemaToInd
21be0 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ex(sqlite3 *db, 
21bf0 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e  Schema *);.KeyIn
21c00 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
21c10 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a  foAlloc(sqlite3*
21c20 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
21c30 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e  sqlite3KeyInfoUn
21c40 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b  ref(KeyInfo*);.K
21c50 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
21c60 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66  eyInfoRef(KeyInf
21c70 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71  o*);.KeyInfo *sq
21c80 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e  lite3KeyInfoOfIn
21c90 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65  dex(Parse*, Inde
21ca0 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  x*);.#ifdef SQLI
21cb0 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c  TE_DEBUG.int sql
21cc0 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69  ite3KeyInfoIsWri
21cd0 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29  teable(KeyInfo*)
21ce0 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
21cf0 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73  ite3CreateFunc(s
21d00 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
21d10 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  char *, int, int
21d20 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f 69  , void *, .  voi
21d30 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
21d40 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
21d50 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20  e3_value **),.  
21d60 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
21d70 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
21d80 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
21d90 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
21da0 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46  3_context*),.  F
21db0 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70  uncDestructor *p
21dc0 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 69 6e  Destructor.);.in
21dd0 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  t sqlite3ApiExit
21de0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e  (sqlite3 *db, in
21df0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
21e00 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28  penTempDatabase(
21e10 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  Parse *);..void 
21e20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49  sqlite3StrAccumI
21e30 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 63  nit(StrAccum*, c
21e40 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  har*, int, int);
21e50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
21e60 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41  AccumAppend(StrA
21e70 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ccum*,const char
21e80 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
21e90 69 74 65 33 41 70 70 65 6e 64 53 70 61 63 65 28  ite3AppendSpace(
21ea0 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74 29 3b 0a  StrAccum*,int);.
21eb0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72  char *sqlite3Str
21ec0 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41  AccumFinish(StrA
21ed0 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ccum*);.void sql
21ee0 69 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65  ite3StrAccumRese
21ef0 74 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f  t(StrAccum*);.vo
21f00 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
21f10 44 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44  DestInit(SelectD
21f20 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45  est*,int,int);.E
21f30 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61  xpr *sqlite3Crea
21f40 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c  teColumnExpr(sql
21f50 69 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20  ite3 *, SrcList 
21f60 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76  *, int, int);..v
21f70 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75  oid sqlite3Backu
21f80 70 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33  pRestart(sqlite3
21f90 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64  _backup *);.void
21fa0 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70   sqlite3BackupUp
21fb0 64 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63  date(sqlite3_bac
21fc0 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e  kup *, Pgno, con
21fd0 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 64 65  st u8 *);..#ifde
21fe0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
21ff0 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76  STAT3_OR_STAT4.v
22000 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  oid sqlite3Analy
22010 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  zeFunctions(void
22020 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
22030 61 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65  at4ProbeSetValue
22040 28 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55  (Parse*,Index*,U
22050 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c  npackedRecord**,
22060 45 78 70 72 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74  Expr*,u8,int,int
22070 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22080 53 74 61 74 34 50 72 6f 62 65 46 72 65 65 28 55  Stat4ProbeFree(U
22090 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b  npackedRecord*);
220a0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
220b0 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  he interface to 
220c0 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61  the LEMON-genera
220d0 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76 6f  ted parser.*/.vo
220e0 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65  id *sqlite3Parse
220f0 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28  rAlloc(void*(*)(
22100 73 69 7a 65 5f 74 29 29 3b 0a 76 6f 69 64 20 73  size_t));.void s
22110 71 6c 69 74 65 33 50 61 72 73 65 72 46 72 65 65  qlite3ParserFree
22120 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28  (void*, void(*)(
22130 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71  void*));.void sq
22140 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69 64  lite3Parser(void
22150 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50  *, int, Token, P
22160 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59  arse*);.#ifdef Y
22170 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45  YTRACKMAXSTACKDE
22180 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  PTH.  int sqlite
22190 33 50 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b  3ParserStackPeak
221a0 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a  (void*);.#endif.
221b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74  .void sqlite3Aut
221c0 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28  oLoadExtensions(
221d0 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64  sqlite3*);.#ifnd
221e0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c  ef SQLITE_OMIT_L
221f0 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20  OAD_EXTENSION.  
22200 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
22210 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69  eExtensions(sqli
22220 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  te3*);.#else.# d
22230 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f  efine sqlite3Clo
22240 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a  seExtensions(X).
22250 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
22260 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
22270 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20  ED_CACHE.  void 
22280 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
22290 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69  (Parse *, int, i
222a0 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68  nt, u8, const ch
222b0 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  ar *);.#else.  #
222c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61  define sqlite3Ta
222d0 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c  bleLock(v,w,x,y,
222e0 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  z).#endif..#ifde
222f0 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
22300 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 54  int sqlite3Utf8T
22310 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  o8(unsigned char
22320 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  *);.#endif..#ifd
22330 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
22340 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64  IRTUALTABLE.#  d
22350 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
22360 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66  bClear(Y).#  def
22370 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53  ine sqlite3VtabS
22380 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f  ync(X,Y) SQLITE_
22390 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  OK.#  define sql
223a0 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
223b0 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
223c0 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28  lite3VtabCommit(
223d0 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
223e0 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64  ite3VtabInSync(d
223f0 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73  b) 0.#  define s
22400 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58  qlite3VtabLock(X
22410 29 20 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  ) .#  define sql
22420 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58  ite3VtabUnlock(X
22430 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
22440 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
22450 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
22460 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
22470 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c  int(X, Y, Z) SQL
22480 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
22490 20 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c   sqlite3GetVTabl
224a0 65 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65  e(X,Y)  ((VTable
224b0 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f  *)0).#else.   vo
224c0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c  id sqlite3VtabCl
224d0 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ear(sqlite3 *db,
224e0 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69   Table*);.   voi
224f0 64 20 73 71 6c 69 74 65 33 56 74 61 62 44 69 73  d sqlite3VtabDis
22500 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20  connect(sqlite3 
22510 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a  *db, Table *p);.
22520 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
22530 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a  abSync(sqlite3 *
22540 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69  db, Vdbe*);.   i
22550 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  nt sqlite3VtabRo
22560 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a  llback(sqlite3 *
22570 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  db);.   int sqli
22580 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71  te3VtabCommit(sq
22590 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76  lite3 *db);.   v
225a0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c  oid sqlite3VtabL
225b0 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20  ock(VTable *);. 
225c0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
225d0 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20  abUnlock(VTable 
225e0 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
225f0 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
22600 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20  t(sqlite3*);.   
22610 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53  int sqlite3VtabS
22620 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  avepoint(sqlite3
22630 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20   *, int, int);. 
22640 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
22650 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56  abImportErrmsg(V
22660 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74  dbe*, sqlite3_vt
22670 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20  ab*);.   VTable 
22680 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c  *sqlite3GetVTabl
22690 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c  e(sqlite3*, Tabl
226a0 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73  e*);.#  define s
226b0 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
226c0 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72  (db) ((db)->nVTr
226d0 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61  ans>0 && (db)->a
226e0 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69  VTrans==0).#endi
226f0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  f.void sqlite3Vt
22700 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50  abMakeWritable(P
22710 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76  arse*,Table*);.v
22720 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42  oid sqlite3VtabB
22730 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a  eginParse(Parse*
22740 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
22750 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a  , Token*, int);.
22760 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
22770 46 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73  FinishParse(Pars
22780 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  e*, Token*);.voi
22790 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
227a0 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f  Init(Parse*);.vo
227b0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72  id sqlite3VtabAr
227c0 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20  gExtend(Parse*, 
227d0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
227e0 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61  ite3VtabCallCrea
227f0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  te(sqlite3*, int
22800 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
22810 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71  char **);.int sq
22820 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e  lite3VtabCallCon
22830 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62  nect(Parse*, Tab
22840 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
22850 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79  3VtabCallDestroy
22860 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
22870 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69  const char *);.i
22880 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  nt sqlite3VtabBe
22890 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56  gin(sqlite3 *, V
228a0 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65  Table *);.FuncDe
228b0 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76  f *sqlite3VtabOv
228c0 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73  erloadFunction(s
228d0 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66  qlite3 *,FuncDef
228e0 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70  *, int nArg, Exp
228f0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
22900 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e  3InvalidFunction
22910 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
22920 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
22930 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f  lue**);.sqlite3_
22940 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d  int64 sqlite3Stm
22950 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c  tCurrentTime(sql
22960 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a  ite3_context*);.
22970 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50  int sqlite3VdbeP
22980 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64  arameterIndex(Vd
22990 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  be*, const char*
229a0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
229b0 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69  te3TransferBindi
229c0 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ngs(sqlite3_stmt
229d0 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74   *, sqlite3_stmt
229e0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
229f0 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29  Reprepare(Vdbe*)
22a00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
22a10 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74  prListCheckLengt
22a20 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  h(Parse*, ExprLi
22a30 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
22a40 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
22a50 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65  te3BinaryCompare
22a60 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
22a70 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29   Expr *, Expr *)
22a80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d  ;.int sqlite3Tem
22a90 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20  pInMemory(const 
22aa0 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74  sqlite3*);.const
22ab0 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f   char *sqlite3Jo
22ac0 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e  urnalModename(in
22ad0 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
22ae0 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
22af0 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f  t sqlite3Checkpo
22b00 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  int(sqlite3*, in
22b10 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
22b20 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
22b30 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b  e3WalDefaultHook
22b40 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
22b50 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
22b60 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63  ;.#endif../* Dec
22b70 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75  larations for fu
22b80 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e  nctions in fkey.
22b90 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20  c. All of these 
22ba0 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a  are replaced by.
22bb0 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20  ** no-op macros 
22bc0 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  if OMIT_FOREIGN_
22bd0 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20  KEY is defined. 
22be0 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20  In this case no 
22bf0 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66  foreign.** key f
22c00 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
22c10 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d  available. If OM
22c20 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64 65  IT_TRIGGER is de
22c30 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49  fined but.** OMI
22c40 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
22c50 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20   not, only some 
22c60 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73  of the functions
22c70 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e   are no-oped. In
22c80 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f  .** this case fo
22c90 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70  reign keys are p
22ca0 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74  arsed, but no ot
22cb0 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  her functionalit
22cc0 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64 65  y is .** provide
22cd0 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f  d (enforcement o
22ce0 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  f FK constraints
22cf0 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74 72   requires the tr
22d00 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74 65  iggers sub-syste
22d10 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  m)..*/.#if !defi
22d20 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
22d30 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20  FOREIGN_KEY) && 
22d40 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
22d50 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20  OMIT_TRIGGER).  
22d60 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68  void sqlite3FkCh
22d70 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  eck(Parse*, Tabl
22d80 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
22d90 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  t*, int);.  void
22da0 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
22db0 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
22dc0 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ist *, Table*);.
22dd0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
22de0 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20  Actions(Parse*, 
22df0 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74  Table*, ExprList
22e00 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  *, int, int*, in
22e10 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
22e20 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72 73  3FkRequired(Pars
22e30 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a  e*, Table*, int*
22e40 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71  , int);.  u32 sq
22e50 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50  lite3FkOldmask(P
22e60 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  arse*, Table*);.
22e70 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46    FKey *sqlite3F
22e80 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c  kReferences(Tabl
22e90 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  e *);.#else.  #d
22ea0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41  efine sqlite3FkA
22eb0 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65  ctions(a,b,c,d,e
22ec0 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,f).  #define sq
22ed0 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62  lite3FkCheck(a,b
22ee0 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66  ,c,d,e,f).  #def
22ef0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72 6f  ine sqlite3FkDro
22f00 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20  pTable(a,b,c).  
22f10 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
22f20 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20 20  kOldmask(a,b)   
22f30 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e        0.  #defin
22f40 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69  e sqlite3FkRequi
22f50 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20 20  red(a,b,c,d)    
22f60 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  0.#endif.#ifndef
22f70 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
22f80 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20  EIGN_KEY.  void 
22f90 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28  sqlite3FkDelete(
22fa0 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c 65  sqlite3 *, Table
22fb0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
22fc0 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 50  3FkLocateIndex(P
22fd0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65  arse*,Table*,FKe
22fe0 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a  y*,Index**,int**
22ff0 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
23000 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65  ne sqlite3FkDele
23010 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69 6e  te(a,b).  #defin
23020 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74  e sqlite3FkLocat
23030 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65  eIndex(a,b,c,d,e
23040 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a  ).#endif.../*.**
23050 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74   Available fault
23060 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f   injectors.  Sho
23070 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20  uld be numbered 
23080 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30  beginning with 0
23090 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
230a0 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f  ITE_FAULTINJECTO
230b0 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23  R_MALLOC     0.#
230c0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41  define SQLITE_FA
230d0 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e  ULTINJECTOR_COUN
230e0 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20  T      1../*.** 
230f0 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f  The interface to
23100 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75   the code in fau
23110 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64  lt.c used for id
23120 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67  entifying "benig
23130 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69  n".** malloc fai
23140 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f  lures. This is o
23150 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20 53  nly present if S
23160 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
23170 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e 6f  IN_TEST.** is no
23180 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69  t defined..*/.#i
23190 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
231a0 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20  T_BUILTIN_TEST. 
231b0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67   void sqlite3Beg
231c0 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76  inBenignMalloc(v
231d0 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  oid);.  void sql
231e0 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
231f0 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65  loc(void);.#else
23200 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
23210 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
23220 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20  loc().  #define 
23230 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
23240 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a  Malloc().#endif.
23250 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
23260 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20 20  X_ROWID         
23270 20 20 31 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49    1.#define IN_I
23280 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20 20  NDEX_EPH        
23290 20 20 20 20 20 32 0a 23 64 65 66 69 6e 65 20 49       2.#define I
232a0 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53  N_INDEX_INDEX_AS
232b0 43 20 20 20 20 20 20 20 33 0a 23 64 65 66 69 6e  C       3.#defin
232c0 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
232d0 5f 44 45 53 43 20 20 20 20 20 20 34 0a 69 6e 74  _DESC      4.int
232e0 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e   sqlite3FindInIn
232f0 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70  dex(Parse *, Exp
23300 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69 66  r *, int*);..#if
23310 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
23320 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20  E_ATOMIC_WRITE. 
23330 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
23340 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  nalOpen(sqlite3_
23350 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  vfs *, const cha
23360 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c  r *, sqlite3_fil
23370 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  e *, int, int);.
23380 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
23390 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33  rnalSize(sqlite3
233a0 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74 20 73  _vfs *);.  int s
233b0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65  qlite3JournalCre
233c0 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  ate(sqlite3_file
233d0 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74   *);.  int sqlit
233e0 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28  e3JournalExists(
233f0 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29  sqlite3_file *p)
23400 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
23410 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  e sqlite3Journal
23420 53 69 7a 65 28 70 56 66 73 29 20 28 28 70 56 66  Size(pVfs) ((pVf
23430 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a 20 20  s)->szOsFile).  
23440 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a  #define sqlite3J
23450 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 70 29 20  ournalExists(p) 
23460 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73  1.#endif..void s
23470 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c  qlite3MemJournal
23480 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c  Open(sqlite3_fil
23490 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e *);.int sqlite
234a0 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65 28  3MemJournalSize(
234b0 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74  void);.int sqlit
234c0 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73  e3IsMemJournal(s
234d0 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
234e0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
234f0 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 76  EXPR_DEPTH>0.  v
23500 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53  oid sqlite3ExprS
23510 65 74 48 65 69 67 68 74 28 50 61 72 73 65 20 2a  etHeight(Parse *
23520 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29  pParse, Expr *p)
23530 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53  ;.  int sqlite3S
23540 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28  electExprHeight(
23550 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74  Select *);.  int
23560 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
23570 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20  kHeight(Parse*, 
23580 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  int);.#else.  #d
23590 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
235a0 72 53 65 74 48 65 69 67 68 74 28 78 2c 79 29 0a  rSetHeight(x,y).
235b0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
235c0 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68  3SelectExprHeigh
235d0 74 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65  t(x) 0.  #define
235e0 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
235f0 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e  kHeight(x,y).#en
23600 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33  dif..u32 sqlite3
23610 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75  Get4byte(const u
23620 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
23630 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75  3Put4byte(u8*, u
23640 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  32);..#ifdef SQL
23650 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43  ITE_ENABLE_UNLOC
23660 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20  K_NOTIFY.  void 
23670 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
23680 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33  nBlocked(sqlite3
23690 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a   *, sqlite3 *);.
236a0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
236b0 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64  nnectionUnlocked
236c0 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
236d0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
236e0 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71  nectionClosed(sq
236f0 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73  lite3 *db);.#els
23700 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
23710 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f  te3ConnectionBlo
23720 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66  cked(x,y).  #def
23730 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
23740 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29  ctionUnlocked(x)
23750 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
23760 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73  e3ConnectionClos
23770 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ed(x).#endif..#i
23780 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
23790 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  G.  void sqlite3
237a0 50 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45  ParserTrace(FILE
237b0 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64  *, char *);.#end
237c0 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65  if../*.** If the
237d0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49   SQLITE_ENABLE I
237e0 4f 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68  OTRACE exists th
237f0 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  en the global va
23800 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65  riable.** sqlite
23810 33 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f  3IoTrace is a po
23820 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74  inter to a print
23830 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75  f-like routine u
23840 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20  sed to.** print 
23850 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73  I/O tracing mess
23860 61 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65 66  ages. .*/.#ifdef
23870 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49   SQLITE_ENABLE_I
23880 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20  OTRACE.# define 
23890 49 4f 54 52 41 43 45 28 41 29 20 20 69 66 28 20  IOTRACE(A)  if( 
238a0 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29  sqlite3IoTrace )
238b0 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  { sqlite3IoTrace
238c0 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c   A; }.  void sql
238d0 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
238e0 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54  ql(Vdbe*);.SQLIT
238f0 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 2a  E_EXTERN void (*
23900 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28  sqlite3IoTrace)(
23910 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
23920 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
23930 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65   IOTRACE(A).# de
23940 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65  fine sqlite3Vdbe
23950 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65  IOTraceSql(X).#e
23960 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  ndif../*.** Thes
23970 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61  e routines are a
23980 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65  vailable for the
23990 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69 6e   mem2.c debuggin
239a0 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  g memory allocat
239b0 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65  or.** only.  The
239c0 79 20 61 72 65 20 75 73 65 64 20 74 6f 20 76 65  y are used to ve
239d0 72 69 66 79 20 74 68 61 74 20 64 69 66 66 65 72  rify that differ
239e0 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20 6d  ent "types" of m
239f0 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  emory.** allocat
23a00 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72 6c  ions are properl
23a10 79 20 74 72 61 63 6b 65 64 20 62 79 20 74 68 65  y tracked by the
23a20 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73   system..**.** s
23a30 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
23a40 74 54 79 70 65 28 29 20 73 65 74 73 20 74 68 65  tType() sets the
23a50 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61 6c   "type" of an al
23a60 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20  location to one 
23a70 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50  of.** the MEMTYP
23a80 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e  E_* macros defin
23a90 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74  ed below.  The t
23aa0 79 70 65 20 6d 75 73 74 20 62 65 20 61 20 62 69  ype must be a bi
23ab0 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20  tmask with.** a 
23ac0 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e 0a  single bit set..
23ad0 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  **.** sqlite3Mem
23ae0 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20 72  debugHasType() r
23af0 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 61  eturns true if a
23b00 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73 20 69  ny of the bits i
23b10 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20  n its second.** 
23b20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74  argument match t
23b30 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74  he type set by t
23b40 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69  he previous sqli
23b50 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
23b60 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33  pe()..** sqlite3
23b70 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
23b80 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f  ) is intended fo
23b90 72 20 75 73 65 20 69 6e 73 69 64 65 20 61 73 73  r use inside ass
23ba0 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
23bb0 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  ..**.** sqlite3M
23bc0 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29 20  emdebugNoType() 
23bd0 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20  returns true if 
23be0 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74 73  none of the bits
23bf0 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a   in its second.*
23c00 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68  * argument match
23c10 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79   the type set by
23c20 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71   the previous sq
23c30 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
23c40 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65  Type()..**.** Pe
23c50 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20 69  rhaps the most i
23c60 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20 69  mportant point i
23c70 73 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65  s the difference
23c80 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50 45   between MEMTYPE
23c90 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d  _HEAP.** and MEM
23ca0 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20  TYPE_LOOKASIDE. 
23cb0 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f   If an allocatio
23cc0 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f  n is MEMTYPE_LOO
23cd0 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65 61  KASIDE, that mea
23ce0 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20 68  ns.** it might h
23cf0 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74  ave been allocat
23d00 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c  ed by lookaside,
23d10 20 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f   except the allo
23d20 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f  cation was.** to
23d30 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61  o large or looka
23d40 73 69 64 65 20 77 61 73 20 61 6c 72 65 61 64 79  side was already
23d50 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d   full.  It is im
23d60 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66  portant to verif
23d70 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61  y.** that alloca
23d80 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74  tions that might
23d90 20 68 61 76 65 20 62 65 65 6e 20 73 61 74 69 73   have been satis
23da0 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64  fied by lookasid
23db0 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73  e are not.** pas
23dc0 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d  sed back to non-
23dd0 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29  lookaside free()
23de0 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65   routines.  Asse
23df0 72 74 73 20 73 75 63 68 20 61 73 20 74 68 65 0a  rts such as the.
23e00 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65  ** example above
23e10 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20 74   are placed on t
23e20 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65  he non-lookaside
23e30 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73   free() routines
23e40 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68   to verify.** th
23e50 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a  is constraint. .
23e60 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69  **.** All of thi
23e70 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61  s is no-op for a
23e80 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c   production buil
23e90 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65  d.  It only come
23ea0 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77  s into.** play w
23eb0 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d  hen the SQLITE_M
23ec0 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d  EMDEBUG compile-
23ed0 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75  time option is u
23ee0 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  sed..*/.#ifdef S
23ef0 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20  QLITE_MEMDEBUG. 
23f00 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d   void sqlite3Mem
23f10 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f 69  debugSetType(voi
23f20 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71  d*,u8);.  int sq
23f30 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
23f40 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
23f50 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d    int sqlite3Mem
23f60 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64  debugNoType(void
23f70 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64  *,u8);.#else.# d
23f80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
23f90 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c 59  debugSetType(X,Y
23fa0 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23  )  /* no-op */.#
23fb0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
23fc0 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 58  emdebugHasType(X
23fd0 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20  ,Y)  1.# define 
23fe0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
23ff0 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23  oType(X,Y)   1.#
24000 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45  endif.#define ME
24010 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20 20  MTYPE_HEAP      
24020 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61   0x01  /* Genera
24030 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f  l heap allocatio
24040 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
24050 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20  MTYPE_LOOKASIDE 
24060 20 30 78 30 32 20 20 2f 2a 20 4d 69 67 68 74 20   0x02  /* Might 
24070 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73  have been lookas
24080 69 64 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 23 64  ide memory */.#d
24090 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43  efine MEMTYPE_SC
240a0 52 41 54 43 48 20 20 20 20 30 78 30 34 20 20 2f  RATCH    0x04  /
240b0 2a 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61  * Scratch alloca
240c0 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
240d0 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20   MEMTYPE_PCACHE 
240e0 20 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67      0x08  /* Pag
240f0 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69  e cache allocati
24100 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
24110 45 4d 54 59 50 45 5f 44 42 20 20 20 20 20 20 20  EMTYPE_DB       
24120 20 20 30 78 31 30 20 20 2f 2a 20 55 73 65 73 20    0x10  /* Uses 
24130 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c  sqlite3DbMalloc,
24140 20 6e 6f 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c   not sqlite_mall
24150 6f 63 20 2a 2f 0a 0a 23 65 6e 64 69 66 20 2f 2a  oc */..#endif /*
24160 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a   _SQLITEINT_H_ *
24170 2f 0a                                            /.