/ Hex Artifact Content
Login

Artifact b30bd95081be525b32551f180cf43ccfaff9f5bc:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 6e 63 6c  ite..**.*/.#incl
01b0: 75 64 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a  ude "sqlite3.h".
01c0: 23 69 66 6e 64 65 66 20 5f 53 51 4c 49 54 45 49  #ifndef _SQLITEI
01d0: 4e 54 5f 48 5f 0a 23 64 65 66 69 6e 65 20 5f 53  NT_H_.#define _S
01e0: 51 4c 49 54 45 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a  QLITEINT_H_../*.
01f0: 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69 6e 65  ** These #define
0200: 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c 65 20  s should enable 
0210: 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70 6f 72  >2GB file suppor
0220: 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20 74 68  t on POSIX if th
0230: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
0240: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
0250: 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20 20 49   supports it.  I
0260: 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73 0a 2a  f the OS lacks.*
0270: 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70  * large file sup
0280: 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68 65 20  port, or if the 
0290: 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c 20 74  OS is windows, t
02a0: 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65 20 6e  hese should be n
02b0: 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63  o-ops..**.** Tic
02c0: 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68 65 20  ket #2739:  The 
02d0: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
02e0: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70  E macro must app
02f0: 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79 0a 2a  ear before any.*
0300: 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c 75 64  * system #includ
0310: 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68 69 73  es.  Hence, this
0320: 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 20 6d   block of code m
0330: 75 73 74 20 62 65 20 74 68 65 20 76 65 72 79 20  ust be the very 
0340: 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20 69 6e  first.** code in
0350: 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69 6c 65   all source file
0360: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65 20 66  s..**.** Large f
0370: 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61 6e 20  ile support can 
0380: 62 65 20 64 69 73 61 62 6c 65 64 20 75 73 69 6e  be disabled usin
0390: 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 44  g the -DSQLITE_D
03a0: 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69 74 63  ISABLE_LFS switc
03b0: 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 70  h.** on the comp
03c0: 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  iler command lin
03d0: 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65  e.  This is nece
03e0: 73 73 61 72 79 20 69 66 20 79 6f 75 20 61 72 65  ssary if you are
03f0: 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e   compiling.** on
0400: 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68 69 6e   a recent machin
0410: 65 20 28 65 78 3a 20 52 65 64 20 48 61 74 20 37  e (ex: Red Hat 7
0420: 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61 6e 74  .2) but you want
0430: 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20 77 6f   your code to wo
0440: 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65  rk.** on an olde
0450: 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52  r machine (ex: R
0460: 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20 49 66  ed Hat 6.0).  If
0470: 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f 6e 20   you compile on 
0480: 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a 20 77  Red Hat 7.2.** w
0490: 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70 74 69  ithout this opti
04a0: 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61 62 6c  on, LFS is enabl
04b0: 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f 65 73  e.  But LFS does
04c0: 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 68   not exist in th
04d0: 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52  e kernel.** in R
04e0: 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f 20 74  ed Hat 6.0, so t
04f0: 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20 77 6f  he code won't wo
0500: 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f 72 20  rk.  Hence, for 
0510: 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79 0a 2a  maximum binary.*
0520: 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20 79 6f  * portability yo
0530: 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20 4c 46  u should omit LF
0540: 53 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72  S..**.** Similar
0550: 20 69 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63   is true for Mac
0560: 20 4f 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f   OS X.  LFS is o
0570: 6e 6c 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e  nly supported on
0580: 20 4d 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20   Mac OS X 9 and 
0590: 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65  later..*/.#ifnde
05a0: 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45  f SQLITE_DISABLE
05b0: 5f 4c 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c  _LFS.# define _L
05c0: 41 52 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20  ARGE_FILE       
05d0: 31 0a 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45  1.# ifndef _FILE
05e0: 5f 4f 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20  _OFFSET_BITS.#  
05f0: 20 64 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46   define _FILE_OF
0600: 46 53 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65  FSET_BITS 64.# e
0610: 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c  ndif.# define _L
0620: 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20  ARGEFILE_SOURCE 
0630: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
0640: 49 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66  Include the conf
0650: 69 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72  iguration header
0660: 20 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66   output by 'conf
0670: 69 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20  igure' if we're 
0680: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74  using the.** aut
0690: 6f 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c  oconf-based buil
06a0: 64 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 48 41 56  d.*/.#ifdef _HAV
06b0: 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  E_SQLITE_CONFIG_
06c0: 48 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66  H.#include "conf
06d0: 69 67 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23 69  ig.h".#endif..#i
06e0: 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 4c 69  nclude "sqliteLi
06f0: 6d 69 74 2e 68 22 0a 0a 2f 2a 20 44 69 73 61 62  mit.h"../* Disab
0700: 6c 65 20 6e 75 69 73 61 6e 63 65 20 77 61 72 6e  le nuisance warn
0710: 69 6e 67 73 20 6f 6e 20 42 6f 72 6c 61 6e 64 20  ings on Borland 
0720: 63 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 23 69 66  compilers */.#if
0730: 20 64 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c 41   defined(__BORLA
0740: 4e 44 43 5f 5f 29 0a 23 70 72 61 67 6d 61 20 77  NDC__).#pragma w
0750: 61 72 6e 20 2d 72 63 68 20 2f 2a 20 75 6e 72 65  arn -rch /* unre
0760: 61 63 68 61 62 6c 65 20 63 6f 64 65 20 2a 2f 0a  achable code */.
0770: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 63  #pragma warn -cc
0780: 63 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 20 69  c /* Condition i
0790: 73 20 61 6c 77 61 79 73 20 74 72 75 65 20 6f 72  s always true or
07a0: 20 66 61 6c 73 65 20 2a 2f 0a 23 70 72 61 67 6d   false */.#pragm
07b0: 61 20 77 61 72 6e 20 2d 61 75 73 20 2f 2a 20 41  a warn -aus /* A
07c0: 73 73 69 67 6e 65 64 20 76 61 6c 75 65 20 69 73  ssigned value is
07d0: 20 6e 65 76 65 72 20 75 73 65 64 20 2a 2f 0a 23   never used */.#
07e0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 73 75  pragma warn -csu
07f0: 20 2f 2a 20 43 6f 6d 70 61 72 69 6e 67 20 73 69   /* Comparing si
0800: 67 6e 65 64 20 61 6e 64 20 75 6e 73 69 67 6e 65  gned and unsigne
0810: 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  d */.#pragma war
0820: 6e 20 2d 73 70 61 20 2f 2a 20 53 75 73 70 69 63  n -spa /* Suspic
0830: 69 6f 75 73 20 70 6f 69 6e 74 65 72 20 61 72 69  ious pointer ari
0840: 74 68 6d 65 74 69 63 20 2a 2f 0a 23 65 6e 64 69  thmetic */.#endi
0850: 66 0a 0a 2f 2a 20 4e 65 65 64 65 64 20 66 6f 72  f../* Needed for
0860: 20 76 61 72 69 6f 75 73 20 64 65 66 69 6e 69 74   various definit
0870: 69 6f 6e 73 2e 2e 2e 20 2a 2f 0a 23 69 66 6e 64  ions... */.#ifnd
0880: 65 66 20 5f 47 4e 55 5f 53 4f 55 52 43 45 0a 23  ef _GNU_SOURCE.#
0890: 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f 53 4f 55   define _GNU_SOU
08a0: 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  RCE.#endif..#if 
08b0: 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53  defined(__OpenBS
08c0: 44 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  D__) && !defined
08d0: 28 5f 42 53 44 5f 53 4f 55 52 43 45 29 0a 23 20  (_BSD_SOURCE).# 
08e0: 64 65 66 69 6e 65 20 5f 42 53 44 5f 53 4f 55 52  define _BSD_SOUR
08f0: 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  CE.#endif../*.**
0900: 20 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72   Include standar
0910: 64 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61  d header files a
0920: 73 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23  s necessary.*/.#
0930: 69 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e  ifdef HAVE_STDIN
0940: 54 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  T_H.#include <st
0950: 64 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23  dint.h>.#endif.#
0960: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59  ifdef HAVE_INTTY
0970: 50 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c  PES_H.#include <
0980: 69 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64  inttypes.h>.#end
0990: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
09a0: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61  llowing macros a
09b0: 72 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20  re used to cast 
09c0: 70 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65  pointers to inte
09d0: 67 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65  gers and.** inte
09e0: 67 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73  gers to pointers
09f0: 2e 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64  .  The way you d
0a00: 6f 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72  o this varies fr
0a10: 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a  om one compiler.
0a20: 2a 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20  ** to the next, 
0a30: 73 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c  so we have devel
0a40: 6f 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69  oped the followi
0a50: 6e 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74  ng set of #if st
0a60: 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67  atements.** to g
0a70: 65 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69  enerate appropri
0a80: 61 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61  ate macros for a
0a90: 20 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63   wide range of c
0aa0: 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20  ompilers..**.** 
0ab0: 54 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53  The correct "ANS
0ac0: 49 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69  I" way to do thi
0ad0: 73 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20  s is to use the 
0ae0: 69 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 20 0a  intptr_t type. .
0af0: 2a 2a 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79  ** Unfortunately
0b00: 2c 20 74 68 61 74 20 74 79 70 65 64 65 66 20 69  , that typedef i
0b10: 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20  s not available 
0b20: 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73  on all compilers
0b30: 2c 20 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73  , or.** if it is
0b40: 20 61 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72   available, it r
0b50: 65 71 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c  equires an #incl
0b60: 75 64 65 20 6f 66 20 73 70 65 63 69 66 69 63 20  ude of specific 
0b70: 68 65 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20  headers.** that 
0b80: 76 61 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61  vary from one ma
0b90: 63 68 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78  chine to the nex
0ba0: 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  t..**.** Ticket 
0bb0: 23 33 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d  #3860:  The llvm
0bc0: 2d 67 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65  -gcc-4.2 compile
0bd0: 72 20 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f  r from Apple cho
0be0: 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28  kes on.** the ((
0bf0: 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30  void*)&((char*)0
0c00: 29 5b 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e  )[X]) construct.
0c10: 20 20 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65    But MSVC choke
0c20: 73 20 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29  s on ((void*)(X)
0c30: 29 2e 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65  )..** So we have
0c40: 20 74 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d   to define the m
0c50: 61 63 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65  acros in differe
0c60: 6e 74 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e  nt ways dependin
0c70: 67 20 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  g on the.** comp
0c80: 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  iler..*/.#if def
0c90: 69 6e 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54  ined(__PTRDIFF_T
0ca0: 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20  YPE__)  /* This 
0cb0: 63 61 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b  case should work
0cc0: 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65   for GCC */.# de
0cd0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f  fine SQLITE_INT_
0ce0: 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69  TO_PTR(X)  ((voi
0cf0: 64 2a 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59  d*)(__PTRDIFF_TY
0d00: 50 45 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69  PE__)(X)).# defi
0d10: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
0d20: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
0d30: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
0d40: 29 28 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66  )(X)).#elif !def
0d50: 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20  ined(__GNUC__)  
0d60: 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f       /* Works fo
0d70: 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65  r compilers othe
0d80: 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23  r than LLVM */.#
0d90: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
0da0: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
0db0: 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30  void*)&((char*)0
0dc0: 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53  )[X]).# define S
0dd0: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
0de0: 28 58 29 20 20 28 28 69 6e 74 29 28 28 28 63 68  (X)  ((int)(((ch
0df0: 61 72 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29  ar*)X)-(char*)0)
0e00: 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28  ).#elif defined(
0e10: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20  HAVE_STDINT_H)  
0e20: 20 2f 2a 20 55 73 65 20 74 68 69 73 20 63 61 73   /* Use this cas
0e30: 65 20 69 66 20 77 65 20 68 61 76 65 20 41 4e 53  e if we have ANS
0e40: 49 20 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64  I headers */.# d
0e50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
0e60: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
0e70: 69 64 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58  id*)(intptr_t)(X
0e80: 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  )).# define SQLI
0e90: 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29  TE_PTR_TO_INT(X)
0ea0: 20 20 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f    ((int)(intptr_
0eb0: 74 29 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20  t)(X)).#else    
0ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ed0: 20 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74        /* Generat
0ee0: 65 73 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62  es a warning - b
0ef0: 75 74 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72  ut it always wor
0f00: 6b 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  ks */.# define S
0f10: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
0f20: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29  (X)  ((void*)(X)
0f30: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
0f40: 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20  E_PTR_TO_INT(X) 
0f50: 20 28 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64   ((int)(X)).#end
0f60: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  if../*.** The SQ
0f70: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
0f80: 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65  macro must be de
0f90: 66 69 6e 65 64 20 61 73 20 30 2c 20 31 2c 20 6f  fined as 0, 1, o
0fa0: 72 20 32 2e 0a 2a 2a 20 30 20 6d 65 61 6e 73 20  r 2..** 0 means 
0fb0: 6d 75 74 65 78 65 73 20 61 72 65 20 70 65 72 6d  mutexes are perm
0fc0: 61 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c 65 20  anently disable 
0fd0: 61 6e 64 20 74 68 65 20 6c 69 62 72 61 72 79 20  and the library 
0fe0: 69 73 20 6e 65 76 65 72 0a 2a 2a 20 74 68 72 65  is never.** thre
0ff0: 61 64 73 61 66 65 2e 20 20 31 20 6d 65 61 6e 73  adsafe.  1 means
1000: 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20   the library is 
1010: 73 65 72 69 61 6c 69 7a 65 64 20 77 68 69 63 68  serialized which
1020: 20 69 73 20 74 68 65 20 68 69 67 68 65 73 74 0a   is the highest.
1030: 2a 2a 20 6c 65 76 65 6c 20 6f 66 20 74 68 72 65  ** level of thre
1040: 61 64 73 61 66 65 74 79 2e 20 20 32 20 6d 65 61  adsafety.  2 mea
1050: 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79 20 69  ns the library i
1060: 73 20 6d 75 6c 74 69 74 68 72 65 61 64 65 64 20  s multithreaded 
1070: 2d 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 74 68  - multiple.** th
1080: 72 65 61 64 73 20 63 61 6e 20 75 73 65 20 53 51  reads can use SQ
1090: 4c 69 74 65 20 61 73 20 6c 6f 6e 67 20 61 73 20  Lite as long as 
10a0: 6e 6f 20 74 77 6f 20 74 68 72 65 61 64 73 20 74  no two threads t
10b0: 72 79 20 74 6f 20 75 73 65 20 74 68 65 20 73 61  ry to use the sa
10c0: 6d 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  me.** database c
10d0: 6f 6e 6e 65 63 74 69 6f 6e 20 61 74 20 74 68 65  onnection at the
10e0: 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a   same time..**.*
10f0: 2a 20 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73  * Older versions
1100: 20 6f 66 20 53 51 4c 69 74 65 20 75 73 65 64 20   of SQLite used 
1110: 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 54 48 52 45  an optional THRE
1120: 41 44 53 41 46 45 20 6d 61 63 72 6f 2e 0a 2a 2a  ADSAFE macro..**
1130: 20 57 65 20 73 75 70 70 6f 72 74 20 74 68 61 74   We support that
1140: 20 66 6f 72 20 6c 65 67 61 63 79 2e 0a 2a 2f 0a   for legacy..*/.
1150: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1160: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a  ITE_THREADSAFE).
1170: 23 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52  # if defined(THR
1180: 45 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66  EADSAFE).#   def
1190: 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41  ine SQLITE_THREA
11a0: 44 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45  DSAFE THREADSAFE
11b0: 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69  .# else.#   defi
11c0: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
11d0: 53 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52  SAFE 1 /* IMP: R
11e0: 2d 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a  -07272-22309 */.
11f0: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a  # endif.#endif..
1200: 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20  /*.** Powersafe 
1210: 6f 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20  overwrite is on 
1220: 62 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74  by default.  But
1230: 20 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f   can be turned o
1240: 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20  ff using.** the 
1250: 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  -DSQLITE_POWERSA
1260: 46 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63  FE_OVERWRITE=0 c
1270: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69  ommand-line opti
1280: 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  on..*/.#ifndef S
1290: 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f  QLITE_POWERSAFE_
12a0: 4f 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69  OVERWRITE.# defi
12b0: 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53  ne SQLITE_POWERS
12c0: 41 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a  AFE_OVERWRITE 1.
12d0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
12e0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
12f0: 5f 4d 45 4d 53 54 41 54 55 53 20 6d 61 63 72 6f  _MEMSTATUS macro
1300: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
1310: 20 61 73 20 65 69 74 68 65 72 20 30 20 6f 72 20   as either 0 or 
1320: 31 2e 0a 2a 2a 20 49 74 20 64 65 74 65 72 6d 69  1..** It determi
1330: 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e  nes whether or n
1340: 6f 74 20 74 68 65 20 66 65 61 74 75 72 65 73 20  ot the features 
1350: 72 65 6c 61 74 65 64 20 74 6f 20 0a 2a 2a 20 53  related to .** S
1360: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d  QLITE_CONFIG_MEM
1370: 53 54 41 54 55 53 20 61 72 65 20 61 76 61 69 6c  STATUS are avail
1380: 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74 20  able by default 
1390: 6f 72 20 6e 6f 74 2e 20 54 68 69 73 20 76 61 6c  or not. This val
13a0: 75 65 20 63 61 6e 0a 2a 2a 20 62 65 20 6f 76 65  ue can.** be ove
13b0: 72 72 69 64 64 65 6e 20 61 74 20 72 75 6e 74 69  rridden at runti
13c0: 6d 65 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c  me using the sql
13d0: 69 74 65 33 5f 63 6f 6e 66 69 67 28 29 20 41 50  ite3_config() AP
13e0: 49 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  I..*/.#if !defin
13f0: 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ed(SQLITE_DEFAUL
1400: 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a 23 20 64  T_MEMSTATUS).# d
1410: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
1420: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 31  AULT_MEMSTATUS 1
1430: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
1440: 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68  xactly one of th
1450: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1460: 6f 73 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e  os must be defin
1470: 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ed in order to.*
1480: 2a 20 73 70 65 63 69 66 79 20 77 68 69 63 68 20  * specify which 
1490: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
14a0: 6e 20 73 75 62 73 79 73 74 65 6d 20 74 6f 20 75  n subsystem to u
14b0: 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51  se..**.**     SQ
14c0: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
14d0: 4f 43 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  OC          // U
14e0: 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d  se normal system
14f0: 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20   malloc().**    
1500: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
1510: 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20 2f  LLOC           /
1520: 2f 20 55 73 65 20 57 69 6e 33 32 20 6e 61 74 69  / Use Win32 nati
1530: 76 65 20 68 65 61 70 20 41 50 49 0a 2a 2a 20 20  ve heap API.**  
1540: 20 20 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d     SQLITE_ZERO_M
1550: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20  ALLOC           
1560: 20 2f 2f 20 55 73 65 20 61 20 73 74 75 62 20 61   // Use a stub a
1570: 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74 20 61 6c  llocator that al
1580: 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20  ways fails.**   
1590: 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55    SQLITE_MEMDEBU
15a0: 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  G               
15b0: 2f 2f 20 44 65 62 75 67 67 69 6e 67 20 76 65 72  // Debugging ver
15c0: 73 69 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d  sion of system m
15d0: 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e  alloc().**.** On
15e0: 20 57 69 6e 64 6f 77 73 2c 20 69 66 20 74 68 65   Windows, if the
15f0: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
1600: 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d 61  LLOC_VALIDATE ma
1610: 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 20 61  cro is defined a
1620: 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74  nd the.** assert
1630: 28 29 20 6d 61 63 72 6f 20 69 73 20 65 6e 61 62  () macro is enab
1640: 6c 65 64 2c 20 65 61 63 68 20 63 61 6c 6c 20 69  led, each call i
1650: 6e 74 6f 20 74 68 65 20 57 69 6e 33 32 20 6e 61  nto the Win32 na
1660: 74 69 76 65 20 68 65 61 70 20 73 75 62 73 79 73  tive heap subsys
1670: 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73  tem.** will caus
1680: 65 20 48 65 61 70 56 61 6c 69 64 61 74 65 20 74  e HeapValidate t
1690: 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20 20 49 66  o be called.  If
16a0: 20 68 65 61 70 20 76 61 6c 69 64 61 74 69 6f 6e   heap validation
16b0: 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e   should fail, an
16c0: 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e 20 77 69  .** assertion wi
16d0: 6c 6c 20 62 65 20 74 72 69 67 67 65 72 65 64 2e  ll be triggered.
16e0: 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f  .**.** If none o
16f0: 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20  f the above are 
1700: 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 73 65  defined, then se
1710: 74 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  t SQLITE_SYSTEM_
1720: 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65  MALLOC as.** the
1730: 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66   default..*/.#if
1740: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1750: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c  SYSTEM_MALLOC) \
1760: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
1770: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
1780: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
1790: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
17a0: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
17b0: 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  d(SQLITE_MEMDEBU
17c0: 47 29 3e 31 0a 23 20 65 72 72 6f 72 20 22 54 77  G)>1.# error "Tw
17d0: 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65  o or more of the
17e0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69   following compi
17f0: 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72  le-time configur
1800: 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20  ation options\. 
1810: 61 72 65 20 64 65 66 69 6e 65 64 20 62 75 74 20  are defined but 
1820: 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61  at most one is a
1830: 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45  llowed:\. SQLITE
1840: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20  _SYSTEM_MALLOC, 
1850: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
1860: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44  LOC, SQLITE_MEMD
1870: 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a  EBUG,\. SQLITE_Z
1880: 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64  ERO_MALLOC".#end
1890: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
18a0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
18b0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
18c0: 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  ed(SQLITE_WIN32_
18d0: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
18e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52  fined(SQLITE_ZER
18f0: 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  O_MALLOC) \.  + 
1900: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
1910: 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23 20 64 65  EMDEBUG)==0.# de
1920: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 59 53 54  fine SQLITE_SYST
1930: 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64  EM_MALLOC 1.#end
1940: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c  if../*.** If SQL
1950: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
1960: 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65 72  LIMIT is not zer
1970: 6f 2c 20 74 68 65 6e 20 74 72 79 20 74 6f 20 6b  o, then try to k
1980: 65 65 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73  eep the.** sizes
1990: 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
19a0: 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69  ations below thi
19b0: 73 20 76 61 6c 75 65 20 77 68 65 72 65 20 70 6f  s value where po
19c0: 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21  ssible..*/.#if !
19d0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
19e0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
19f0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1a00: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
1a10: 4d 49 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a  MIT 1024.#endif.
1a20: 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74  ./*.** We need t
1a30: 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f  o define _XOPEN_
1a40: 53 4f 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77  SOURCE as follow
1a50: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
1a60: 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76  able.** recursiv
1a70: 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73  e mutexes on mos
1a80: 74 20 55 6e 69 78 20 73 79 73 74 65 6d 73 20 61  t Unix systems a
1a90: 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f  nd fchmod() on O
1aa0: 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f  penBSD..** But _
1ab0: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 64 65 66  XOPEN_SOURCE def
1ac0: 69 6e 65 20 63 61 75 73 65 73 20 70 72 6f 62 6c  ine causes probl
1ad0: 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  ems for Mac OS X
1ae0: 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e  , so omit.** it.
1af0: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
1b00: 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20  (_XOPEN_SOURCE) 
1b10: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 44 41  && !defined(__DA
1b20: 52 57 49 4e 5f 5f 29 20 26 26 20 21 64 65 66 69  RWIN__) && !defi
1b30: 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23  ned(__APPLE__).#
1b40: 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f    define _XOPEN_
1b50: 53 4f 55 52 43 45 20 36 30 30 0a 23 65 6e 64 69  SOURCE 600.#endi
1b60: 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20  f../*.** NDEBUG 
1b70: 61 6e 64 20 53 51 4c 49 54 45 5f 44 45 42 55 47  and SQLITE_DEBUG
1b80: 20 61 72 65 20 6f 70 70 6f 73 69 74 65 73 2e 20   are opposites. 
1b90: 20 49 74 20 73 68 6f 75 6c 64 20 61 6c 77 61 79   It should alway
1ba0: 73 20 62 65 20 74 72 75 65 20 74 68 61 74 0a 2a  s be true that.*
1bb0: 2a 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47  * defined(NDEBUG
1bc0: 29 3d 3d 21 64 65 66 69 6e 65 64 28 53 51 4c 49  )==!defined(SQLI
1bd0: 54 45 5f 44 45 42 55 47 29 2e 20 20 49 66 20 74  TE_DEBUG).  If t
1be0: 68 69 73 20 69 73 20 6e 6f 74 20 63 75 72 72 65  his is not curre
1bf0: 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61  ntly true,.** ma
1c00: 6b 65 20 69 74 20 74 72 75 65 20 62 79 20 64 65  ke it true by de
1c10: 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66 69  fining or undefi
1c20: 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a  ning NDEBUG..**.
1c30: 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45 42 55  ** Setting NDEBU
1c40: 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f 64 65  G makes the code
1c50: 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61 73   smaller and fas
1c60: 74 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67  ter by disabling
1c70: 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29   the.** assert()
1c80: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
1c90: 68 65 20 63 6f 64 65 2e 20 20 53 6f 20 77 65 20  he code.  So we 
1ca0: 77 61 6e 74 20 74 68 65 20 64 65 66 61 75 6c 74  want the default
1cb0: 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65   action.** to be
1cc0: 20 66 6f 72 20 4e 44 45 42 55 47 20 74 6f 20 62   for NDEBUG to b
1cd0: 65 20 73 65 74 20 61 6e 64 20 4e 44 45 42 55 47  e set and NDEBUG
1ce0: 20 74 6f 20 62 65 20 75 6e 64 65 66 69 6e 65 64   to be undefined
1cf0: 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49 54 45 5f   only if SQLITE_
1d00: 44 45 42 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e  DEBUG.** is set.
1d10: 20 20 54 68 75 73 20 4e 44 45 42 55 47 20 62 65    Thus NDEBUG be
1d20: 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20  comes an opt-in 
1d30: 72 61 74 68 65 72 20 74 68 61 6e 20 61 6e 20 6f  rather than an o
1d40: 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72  pt-out.** featur
1d50: 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  e..*/.#if !defin
1d60: 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 21 64  ed(NDEBUG) && !d
1d70: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
1d80: 42 55 47 29 20 0a 23 20 64 65 66 69 6e 65 20 4e  BUG) .# define N
1d90: 44 45 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23  DEBUG 1.#endif.#
1da0: 69 66 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55  if defined(NDEBU
1db0: 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  G) && defined(SQ
1dc0: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e  LITE_DEBUG).# un
1dd0: 64 65 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69  def NDEBUG.#endi
1de0: 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20  f../*.** Enable 
1df0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
1e00: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
1e10: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69  f SQLITE_DEBUG i
1e20: 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a  s turned on..*/.
1e30: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1e40: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
1e50: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20  IN_COMMENTS) && 
1e60: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
1e70: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53  EBUG).# define S
1e80: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
1e90: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a  LAIN_COMMENTS 1.
1ea0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1eb0: 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63  e testcase() mac
1ec0: 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61 69  ro is used to ai
1ed0: 64 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65  d in coverage te
1ee0: 73 74 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a 2a  sting.  When .**
1ef0: 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20   doing coverage 
1f00: 74 65 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e  testing, the con
1f10: 64 69 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68  dition inside th
1f20: 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a  e argument to.**
1f30: 20 74 65 73 74 63 61 73 65 28 29 20 6d 75 73 74   testcase() must
1f40: 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f   be evaluated bo
1f50: 74 68 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73  th true and fals
1f60: 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
1f70: 20 67 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68   get full branch
1f80: 20 63 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20   coverage.  The 
1f90: 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f  testcase() macro
1fa0: 20 69 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20   is inserted.** 
1fb0: 74 6f 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61  to help ensure a
1fc0: 64 65 71 75 61 74 65 20 74 65 73 74 20 63 6f 76  dequate test cov
1fd0: 65 72 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20  erage in places 
1fe0: 77 68 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20  where simple.** 
1ff0: 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69  condition/decisi
2000: 6f 6e 20 63 6f 76 65 72 61 67 65 20 69 73 20 69  on coverage is i
2010: 6e 61 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20  nadequate.  For 
2020: 65 78 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73  example, testcas
2030: 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73  e().** can be us
2040: 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ed to make sure 
2050: 62 6f 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20  boundary values 
2060: 61 72 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72  are tested.  For
2070: 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74  .** bitmask test
2080: 73 2c 20 74 65 73 74 63 61 73 65 28 29 20 63 61  s, testcase() ca
2090: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b  n be used to mak
20a0: 65 20 73 75 72 65 20 65 61 63 68 20 62 69 74 0a  e sure each bit.
20b0: 2a 2a 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e  ** is significan
20c0: 74 20 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65  t and used at le
20d0: 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77  ast once.  On sw
20e0: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a  itch statements.
20f0: 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c  ** where multipl
2100: 65 20 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68  e cases go to th
2110: 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20  e same block of 
2120: 63 6f 64 65 2c 20 74 65 73 74 63 61 73 65 28 29  code, testcase()
2130: 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74  .** can insure t
2140: 68 61 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72  hat all cases ar
2150: 65 20 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a  e evaluated..**.
2160: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
2170: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20  _COVERAGE_TEST. 
2180: 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76   void sqlite3Cov
2190: 65 72 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65  erage(int);.# de
21a0: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
21b0: 20 20 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74    if( X ){ sqlit
21c0: 65 33 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e  e3Coverage(__LIN
21d0: 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20  E__); }.#else.# 
21e0: 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65 28  define testcase(
21f0: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2200: 20 54 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61   The TESTONLY ma
2210: 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65  cro is used to e
2220: 6e 63 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20  nclose variable 
2230: 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a  declarations or.
2240: 2a 2a 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66  ** other bits of
2250: 20 63 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e   code that are n
2260: 65 65 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74  eeded to support
2270: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a   the arguments.*
2280: 2a 20 77 69 74 68 69 6e 20 74 65 73 74 63 61 73  * within testcas
2290: 65 28 29 20 61 6e 64 20 61 73 73 65 72 74 28 29  e() and assert()
22a0: 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20   macros..*/.#if 
22b0: 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29  !defined(NDEBUG)
22c0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
22d0: 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54  TE_COVERAGE_TEST
22e0: 29 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f  ).# define TESTO
22f0: 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a  NLY(X)  X.#else.
2300: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
2310: 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  Y(X).#endif../*.
2320: 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20  ** Sometimes we 
2330: 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f  need a small amo
2340: 75 6e 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68  unt of code such
2350: 20 61 73 20 61 20 76 61 72 69 61 62 6c 65 20 69   as a variable i
2360: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a  nitialization.**
2370: 20 74 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20   to setup for a 
2380: 6c 61 74 65 72 20 61 73 73 65 72 74 28 29 20 73  later assert() s
2390: 74 61 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f  tatement.  We do
23a0: 20 6e 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63   not want this c
23b0: 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72  ode to.** appear
23c0: 20 77 68 65 6e 20 61 73 73 65 72 74 28 29 20 69   when assert() i
23d0: 73 20 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65  s disabled.  The
23e0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
23f0: 20 69 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a   is therefore.**
2400: 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e   used to contain
2410: 20 74 68 61 74 20 73 65 74 75 70 20 63 6f 64 65   that setup code
2420: 2e 20 20 54 68 65 20 22 56 56 41 22 20 61 63 72  .  The "VVA" acr
2430: 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a  onym stands for.
2440: 2a 2a 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e  ** "Verification
2450: 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e  , Validation, an
2460: 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22  d Accreditation"
2470: 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
2480: 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77  s, the.** code w
2490: 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29  ithin VVA_ONLY()
24a0: 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64   will only run d
24b0: 75 72 69 6e 67 20 76 65 72 69 66 69 63 61 74 69  uring verificati
24c0: 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f  on processes..*/
24d0: 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
24e0: 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c  # define VVA_ONL
24f0: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
2500: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
2510: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2520: 20 54 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20   The ALWAYS and 
2530: 4e 45 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72  NEVER macros sur
2540: 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78  round boolean ex
2550: 70 72 65 73 73 69 6f 6e 73 20 77 68 69 63 68 20  pressions which 
2560: 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64  .** are intended
2570: 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72   to always be tr
2580: 75 65 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73  ue or false, res
2590: 70 65 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68  pectively.  Such
25a0: 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20  .** expressions 
25b0: 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64  could be omitted
25c0: 20 66 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63   from the code c
25d0: 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20  ompletely.  But 
25e0: 74 68 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c  they.** are incl
25f0: 75 64 65 64 20 69 6e 20 61 20 66 65 77 20 63 61  uded in a few ca
2600: 73 65 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ses in order to 
2610: 65 6e 68 61 6e 63 65 20 74 68 65 20 72 65 73 69  enhance the resi
2620: 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c  lience.** of SQL
2630: 69 74 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65  ite to unexpecte
2640: 64 20 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20  d behavior - to 
2650: 6d 61 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73  make the code "s
2660: 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20  elf-healing".** 
2670: 6f 72 20 22 64 75 63 74 69 6c 65 22 20 72 61 74  or "ductile" rat
2680: 68 65 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22  her than being "
2690: 62 72 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61  brittle" and cra
26a0: 73 68 69 6e 67 20 61 74 20 74 68 65 20 66 69 72  shing at the fir
26b0: 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e  st.** hint of un
26c0: 70 6c 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72  planned behavior
26d0: 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ..**.** In other
26e0: 20 77 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61   words, ALWAYS a
26f0: 6e 64 20 4e 45 56 45 52 20 61 72 65 20 61 64 64  nd NEVER are add
2700: 65 64 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65  ed for defensive
2710: 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65   code..**.** Whe
2720: 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65  n doing coverage
2730: 20 74 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20   testing ALWAYS 
2740: 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 68 61  and NEVER are ha
2750: 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62  rd-coded to.** b
2760: 65 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65  e true and false
2770: 20 73 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72   so that the unr
2780: 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68  eachable code th
2790: 65 79 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a  ey specify will.
27a0: 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65  ** not be counte
27b0: 64 20 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f  d as untested co
27c0: 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  de..*/.#if defin
27d0: 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41  ed(SQLITE_COVERA
27e0: 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e  GE_TEST).# defin
27f0: 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20  e ALWAYS(X)     
2800: 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45   (1).# define NE
2810: 56 45 52 28 58 29 20 20 20 20 20 20 20 28 30 29  VER(X)       (0)
2820: 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
2830: 4e 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65  NDEBUG).# define
2840: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
2850: 28 28 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30  ((X)?1:(assert(0
2860: 29 2c 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e  ),0)).# define N
2870: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 28  EVER(X)       ((
2880: 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29  X)?(assert(0),1)
2890: 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  :0).#else.# defi
28a0: 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20  ne ALWAYS(X)    
28b0: 20 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e    (X).# define N
28c0: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 58  EVER(X)       (X
28d0: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
28e0: 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e  Return true (non
28f0: 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e  -zero) if the in
2900: 70 75 74 20 69 73 20 61 20 69 6e 74 65 67 65 72  put is a integer
2910: 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72   that is too lar
2920: 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20  ge.** to fit in 
2930: 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20 6d  32-bits.  This m
2940: 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73  acro is used ins
2950: 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20 74  ide of various t
2960: 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63  estcase().** mac
2970: 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74 68  ros to verify th
2980: 61 74 20 77 65 20 68 61 76 65 20 74 65 73 74 65  at we have teste
2990: 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61 72  d SQLite for lar
29a0: 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 2e  ge-file support.
29b0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f 42  .*/.#define IS_B
29c0: 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58 29  IG_INT(X)  (((X)
29d0: 26 7e 28 69 36 34 29 30 78 66 66 66 66 66 66 66  &~(i64)0xfffffff
29e0: 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  f)!=0)../*.** Th
29f0: 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79  e macro unlikely
2a00: 28 29 20 69 73 20 61 20 68 69 6e 74 20 74 68 61  () is a hint tha
2a10: 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62 6f  t surrounds a bo
2a20: 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73  olean.** express
2a30: 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61  ion that is usua
2a40: 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63 72  lly false.  Macr
2a50: 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72 6f  o likely() surro
2a60: 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61  unds.** a boolea
2a70: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  n expression tha
2a80: 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75  t is usually tru
2a90: 65 2e 20 20 54 68 65 73 65 20 68 69 6e 74 73 20  e.  These hints 
2aa0: 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68 65  could,.** in the
2ab0: 6f 72 79 2c 20 62 65 20 75 73 65 64 20 62 79 20  ory, be used by 
2ac0: 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20  the compiler to 
2ad0: 67 65 6e 65 72 61 74 65 20 62 65 74 74 65 72 20  generate better 
2ae0: 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75 72  code, but.** cur
2af0: 72 65 6e 74 6c 79 20 74 68 65 79 20 61 72 65 20  rently they are 
2b00: 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66 6f  just comments fo
2b10: 72 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 2e  r human readers.
2b20: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b 65  .*/.#define like
2b30: 6c 79 28 58 29 20 20 20 20 28 58 29 0a 23 64 65  ly(X)    (X).#de
2b40: 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29  fine unlikely(X)
2b50: 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65 20    (X)..#include 
2b60: 22 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75 64  "hash.h".#includ
2b70: 65 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e 63  e "parse.h".#inc
2b80: 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23  lude <stdio.h>.#
2b90: 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e  include <stdlib.
2ba0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72  h>.#include <str
2bb0: 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ing.h>.#include 
2bc0: 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c  <assert.h>.#incl
2bd0: 75 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a 0a  ude <stddef.h>..
2be0: 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c 69  /*.** If compili
2bf0: 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73 73  ng for a process
2c00: 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66 6c  or that lacks fl
2c10: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75 70  oating point sup
2c20: 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69 74  port,.** substit
2c30: 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72 20  ute integer for 
2c40: 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a  floating-point.*
2c50: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
2c60: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
2c70: 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f 75  INT.# define dou
2c80: 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  ble sqlite_int64
2c90: 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74 20  .# define float 
2ca0: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64  sqlite_int64.# d
2cb0: 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45  efine LONGDOUBLE
2cc0: 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e 74  _TYPE sqlite_int
2cd0: 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c 49  64.# ifndef SQLI
2ce0: 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20 64  TE_BIG_DBL.#   d
2cf0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
2d00: 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33 5f  _DBL (((sqlite3_
2d10: 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23 20  int64)1)<<50).# 
2d20: 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53  endif.# define S
2d30: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54  QLITE_OMIT_DATET
2d40: 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64 65  IME_FUNCS 1.# de
2d50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fine SQLITE_OMIT
2d60: 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65 66  _TRACE 1.# undef
2d70: 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45 4e   SQLITE_MIXED_EN
2d80: 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41 54  DIAN_64BIT_FLOAT
2d90: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
2da0: 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64 69  HAVE_ISNAN.#endi
2db0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
2dc0: 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69 6e  _BIG_DBL.# defin
2dd0: 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  e SQLITE_BIG_DBL
2de0: 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a 0a   (1e99).#endif..
2df0: 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50 44  /*.** OMIT_TEMPD
2e00: 42 20 69 73 20 73 65 74 20 74 6f 20 31 20 69 66  B is set to 1 if
2e10: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
2e20: 50 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c 20  PDB is defined, 
2e30: 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61 72  or 0.** afterwar
2e40: 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20 6d  d. Having this m
2e50: 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20 74  acro allows us t
2e60: 6f 20 63 61 75 73 65 20 74 68 65 20 43 20 63 6f  o cause the C co
2e70: 6d 70 69 6c 65 72 20 0a 2a 2a 20 74 6f 20 6f 6d  mpiler .** to om
2e80: 69 74 20 63 6f 64 65 20 75 73 65 64 20 62 79 20  it code used by 
2e90: 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74 68  TEMP tables with
2ea0: 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64 65  out messy #ifnde
2eb0: 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f  f statements..*/
2ec0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
2ed0: 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66 69  MIT_TEMPDB.#defi
2ee0: 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 31  ne OMIT_TEMPDB 1
2ef0: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f  .#else.#define O
2f00: 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65 6e  MIT_TEMPDB 0.#en
2f10: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22  dif../*.** The "
2f20: 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75 6d  file format" num
2f30: 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65  ber is an intege
2f40: 72 20 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d  r that is increm
2f50: 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a 2a  ented whenever.*
2f60: 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65 6c  * the VDBE-level
2f70: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68 61   file format cha
2f80: 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  nges.  The follo
2f90: 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66 69  wing macros defi
2fa0: 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64 65  ne the.** the de
2fb0: 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d 61  fault file forma
2fc0: 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62 61  t for new databa
2fd0: 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78 69  ses and the maxi
2fe0: 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a  mum file format.
2ff0: 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62 72  ** that the libr
3000: 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a 2f  ary can read..*/
3010: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
3020: 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  MAX_FILE_FORMAT 
3030: 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  4.#ifndef SQLITE
3040: 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
3050: 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53 51  RMAT.# define SQ
3060: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c  LITE_DEFAULT_FIL
3070: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64 69  E_FORMAT 4.#endi
3080: 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69  f../*.** Determi
3090: 6e 65 20 77 68 65 74 68 65 72 20 74 72 69 67 67  ne whether trigg
30a0: 65 72 73 20 61 72 65 20 72 65 63 75 72 73 69 76  ers are recursiv
30b0: 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54  e by default.  T
30c0: 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63 68  his can be.** ch
30d0: 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69 6d  anged at run-tim
30e0: 65 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d 61  e using a pragma
30f0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
3100: 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55  ITE_DEFAULT_RECU
3110: 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a 23  RSIVE_TRIGGERS.#
3120: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
3130: 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45  EFAULT_RECURSIVE
3140: 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e 64  _TRIGGERS 0.#end
3150: 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64  if../*.** Provid
3160: 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  e a default valu
3170: 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 4d  e for SQLITE_TEM
3180: 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65 20  P_STORE in case 
3190: 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66  it is not specif
31a0: 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f  ied.** on the co
31b0: 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69  mmand-line.*/.#i
31c0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45 4d  fndef SQLITE_TEM
31d0: 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e 65  P_STORE.# define
31e0: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
31f0: 52 45 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51  RE 1.# define SQ
3200: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 5f  LITE_TEMP_STORE_
3210: 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65  xc 1  /* Exclude
3220: 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f   from ctime.c */
3230: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 47  .#endif../*.** G
3240: 43 43 20 64 6f 65 73 20 6e 6f 74 20 64 65 66 69  CC does not defi
3250: 6e 65 20 74 68 65 20 6f 66 66 73 65 74 6f 66 28  ne the offsetof(
3260: 29 20 6d 61 63 72 6f 20 73 6f 20 77 65 27 6c 6c  ) macro so we'll
3270: 20 68 61 76 65 20 74 6f 20 64 6f 20 69 74 0a 2a   have to do it.*
3280: 2a 20 6f 75 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a  * ourselves..*/.
3290: 23 69 66 6e 64 65 66 20 6f 66 66 73 65 74 6f 66  #ifndef offsetof
32a0: 0a 23 64 65 66 69 6e 65 20 6f 66 66 73 65 74 6f  .#define offseto
32b0: 66 28 53 54 52 55 43 54 55 52 45 2c 46 49 45 4c  f(STRUCTURE,FIEL
32c0: 44 29 20 28 28 69 6e 74 29 28 28 63 68 61 72 2a  D) ((int)((char*
32d0: 29 26 28 28 53 54 52 55 43 54 55 52 45 2a 29 30  )&((STRUCTURE*)0
32e0: 29 2d 3e 46 49 45 4c 44 29 29 0a 23 65 6e 64 69  )->FIELD)).#endi
32f0: 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  f../*.** Macros 
3300: 74 6f 20 63 6f 6d 70 75 74 65 20 6d 69 6e 69 6d  to compute minim
3310: 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20 6f  um and maximum o
3320: 66 20 74 77 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a  f two numbers..*
3330: 2f 0a 23 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c  /.#define MIN(A,
3340: 42 29 20 28 28 41 29 3c 28 42 29 3f 28 41 29 3a  B) ((A)<(B)?(A):
3350: 28 42 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 58  (B)).#define MAX
3360: 28 41 2c 42 29 20 28 28 41 29 3e 28 42 29 3f 28  (A,B) ((A)>(B)?(
3370: 41 29 3a 28 42 29 29 0a 0a 2f 2a 0a 2a 2a 20 43  A):(B))../*.** C
3380: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
3390: 68 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73  his machine uses
33a0: 20 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20   EBCDIC.  (Yes, 
33b0: 62 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a  believe it or.**
33c0: 20 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20   not, there are 
33d0: 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f  still machines o
33e0: 75 74 20 74 68 65 72 65 20 74 68 61 74 20 75 73  ut there that us
33f0: 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69  e EBCDIC.).*/.#i
3400: 66 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a  f 'A' == '\301'.
3410: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3420: 45 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23  EBCDIC 1.#else.#
3430: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41   define SQLITE_A
3440: 53 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  SCII 1.#endif../
3450: 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66  *.** Integers of
3460: 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54   known sizes.  T
3470: 68 65 73 65 20 74 79 70 65 64 65 66 73 20 6d 69  hese typedefs mi
3480: 67 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61  ght change for a
3490: 72 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20  rchitectures.** 
34a0: 77 68 65 72 65 20 74 68 65 20 73 69 7a 65 73 20  where the sizes 
34b0: 76 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73  very.  Preproces
34c0: 73 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61  sor macros are a
34d0: 76 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74  vailable so that
34e0: 20 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61   the.** types ca
34f0: 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c  n be convenientl
3500: 79 20 72 65 64 65 66 69 6e 65 64 20 61 74 20 63  y redefined at c
3510: 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69  ompile-type.  Li
3520: 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20  ke this:.**.**  
3530: 20 20 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e         cc '-DUIN
3540: 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c  TPTR_TYPE=long l
3550: 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a  ong int' ....*/.
3560: 23 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54  #ifndef UINT32_T
3570: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
3580: 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66  _UINT32_T.#  def
3590: 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20  ine UINT32_TYPE 
35a0: 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a  uint32_t.# else.
35b0: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32  #  define UINT32
35c0: 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69  _TYPE unsigned i
35d0: 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  nt.# endif.#endi
35e0: 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36  f.#ifndef UINT16
35f0: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
3600: 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64  VE_UINT16_T.#  d
3610: 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50  efine UINT16_TYP
3620: 45 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73  E uint16_t.# els
3630: 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  e.#  define UINT
3640: 31 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  16_TYPE unsigned
3650: 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64   short int.# end
3660: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
3670: 66 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69  f INT16_TYPE.# i
3680: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f  fdef HAVE_INT16_
3690: 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31  T.#  define INT1
36a0: 36 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23  6_TYPE int16_t.#
36b0: 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20   else.#  define 
36c0: 49 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74  INT16_TYPE short
36d0: 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e   int.# endif.#en
36e0: 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54  dif.#ifndef UINT
36f0: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
3700: 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64  AVE_UINT8_T.#  d
3710: 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45  efine UINT8_TYPE
3720: 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a   uint8_t.# else.
3730: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f  #  define UINT8_
3740: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68  TYPE unsigned ch
3750: 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  ar.# endif.#endi
3760: 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54  f.#ifndef INT8_T
3770: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
3780: 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e  _INT8_T.#  defin
3790: 65 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38  e INT8_TYPE int8
37a0: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
37b0: 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69  ine INT8_TYPE si
37c0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
37d0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
37e0: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
37f0: 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f  .# define LONGDO
3800: 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64  UBLE_TYPE long d
3810: 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70  ouble.#endif.typ
3820: 65 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36  edef sqlite_int6
3830: 34 20 69 36 34 3b 20 20 20 20 20 20 20 20 20 20  4 i64;          
3840: 2f 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64  /* 8-byte signed
3850: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
3860: 64 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36  def sqlite_uint6
3870: 34 20 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f  4 u64;         /
3880: 2a 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 8-byte unsigne
3890: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
38a0: 65 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45  edef UINT32_TYPE
38b0: 20 75 33 32 3b 20 20 20 20 20 20 20 20 20 20 20   u32;           
38c0: 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 4-byte unsign
38d0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
38e0: 70 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50  pedef UINT16_TYP
38f0: 45 20 75 31 36 3b 20 20 20 20 20 20 20 20 20 20  E u16;          
3900: 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67   /* 2-byte unsig
3910: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
3920: 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50  ypedef INT16_TYP
3930: 45 20 69 31 36 3b 20 20 20 20 20 20 20 20 20 20  E i16;          
3940: 20 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e    /* 2-byte sign
3950: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
3960: 70 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45  pedef UINT8_TYPE
3970: 20 75 38 3b 20 20 20 20 20 20 20 20 20 20 20 20   u8;            
3980: 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67   /* 1-byte unsig
3990: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
39a0: 79 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45  ypedef INT8_TYPE
39b0: 20 69 38 3b 20 20 20 20 20 20 20 20 20 20 20 20   i8;            
39c0: 20 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e    /* 1-byte sign
39d0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f  ed integer */../
39e0: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f  *.** SQLITE_MAX_
39f0: 55 33 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e  U32 is a u64 con
3a00: 73 74 61 6e 74 20 74 68 61 74 20 69 73 20 74 68  stant that is th
3a10: 65 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61  e maximum u64 va
3a20: 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20  lue.** that can 
3a30: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75  be stored in a u
3a40: 33 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20  32 without loss 
3a50: 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 76 61  of data.  The va
3a60: 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30  lue.** is 0x0000
3a70: 30 30 30 30 66 66 66 66 66 66 66 66 2e 20 20 42  0000ffffffff.  B
3a80: 75 74 20 62 65 63 61 75 73 65 20 6f 66 20 71 75  ut because of qu
3a90: 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d  irks of some com
3aa0: 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61  pilers, we.** ha
3ab0: 76 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68  ve to specify th
3ac0: 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c  e value in the l
3ad0: 65 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61  ess intuitive ma
3ae0: 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23  nner shown:.*/.#
3af0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
3b00: 58 5f 55 33 32 20 20 28 28 28 28 75 36 34 29 31  X_U32  ((((u64)1
3b10: 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a  )<<32)-1)../*.**
3b20: 20 54 68 65 20 64 61 74 61 74 79 70 65 20 75 73   The datatype us
3b30: 65 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69  ed to store esti
3b40: 6d 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d  mates of the num
3b50: 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61  ber of rows in a
3b60: 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
3b70: 65 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20  ex.  This is an 
3b80: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
3b90: 20 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39   type.  For 99.9
3ba0: 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c  % of.** the worl
3bb0: 64 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65  d, a 32-bit inte
3bc0: 67 65 72 20 69 73 20 73 75 66 66 69 63 69 65 6e  ger is sufficien
3bd0: 74 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69 74  t.  But a 64-bit
3be0: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20   integer.** can 
3bf0: 62 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69  be used at compi
3c00: 6c 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72  le-time if desir
3c10: 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ed..*/.#ifdef SQ
3c20: 4c 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53  LITE_64BIT_STATS
3c30: 0a 20 74 79 70 65 64 65 66 20 75 36 34 20 74 52  . typedef u64 tR
3c40: 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d  owcnt;    /* 64-
3c50: 62 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75  bit only if requ
3c60: 65 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65  ested at compile
3c70: 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20  -time */.#else. 
3c80: 74 79 70 65 64 65 66 20 75 33 32 20 74 52 6f 77  typedef u32 tRow
3c90: 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69  cnt;    /* 32-bi
3ca0: 74 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74  t is the default
3cb0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
3cc0: 2a 20 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e  * Estimated quan
3cd0: 74 69 74 69 65 73 20 75 73 65 64 20 66 6f 72 20  tities used for 
3ce0: 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61  query planning a
3cf0: 72 65 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d  re stored as 16-
3d00: 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d  bit.** logarithm
3d10: 73 2e 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79  s.  For quantity
3d20: 20 58 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74   X, the value st
3d30: 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28  ored is 10*log2(
3d40: 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76  X).  This.** giv
3d50: 65 73 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61  es a possible ra
3d60: 6e 67 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66  nge of values of
3d70: 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31   approximately 1
3d80: 2e 30 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36  .0e986 to 1e-986
3d90: 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c  ..** But the all
3da0: 6f 77 65 64 20 76 61 6c 75 65 73 20 61 72 65 20  owed values are 
3db0: 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65  "grainy".  Not e
3dc0: 76 65 72 79 20 76 61 6c 75 65 20 69 73 20 72 65  very value is re
3dd0: 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20  presentable..** 
3de0: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61  For example, qua
3df0: 6e 74 69 74 69 65 73 20 31 36 20 61 6e 64 20 31  ntities 16 and 1
3e00: 37 20 61 72 65 20 62 6f 74 68 20 72 65 70 72 65  7 are both repre
3e10: 73 65 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45  sented by a LogE
3e20: 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f  st.** of 40.  Ho
3e30: 77 65 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67  wever, since Log
3e40: 45 73 74 20 71 75 61 6e 74 61 74 69 74 65 73 20  Est quantatites 
3e50: 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f 20 62  are suppose to b
3e60: 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20  e estimates,.** 
3e70: 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75 65 73  not exact values
3e80: 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69 73 69  , this imprecisi
3e90: 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62  on is not a prob
3ea0: 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45  lem..**.** "LogE
3eb0: 73 74 22 20 69 73 20 73 68 6f 72 74 20 66 6f 72  st" is short for
3ec0: 20 22 4c 6f 67 61 72 69 74 68 69 6d 69 63 20 45   "Logarithimic E
3ed0: 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20  stimate"..**.** 
3ee0: 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20  Examples:.**    
3ef0: 20 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20 20    1 -> 0        
3f00: 20 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20 20        20 -> 43  
3f10: 20 20 20 20 20 20 20 20 31 30 30 30 30 20 2d 3e          10000 ->
3f20: 20 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d   132.**      2 -
3f30: 3e 20 31 30 20 20 20 20 20 20 20 20 20 20 20 20  > 10            
3f40: 20 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20 20   25 -> 46       
3f50: 20 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36 0a     25000 -> 146.
3f60: 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36 20  **      3 -> 16 
3f70: 20 20 20 20 20 20 20 20 20 20 20 31 30 30 20 2d             100 -
3f80: 3e 20 36 36 20 20 20 20 20 20 20 20 31 30 30 30  > 66        1000
3f90: 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20  000 -> 199.**   
3fa0: 20 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20 20     4 -> 20      
3fb0: 20 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39 20       1000 -> 99 
3fc0: 20 20 20 20 20 20 20 31 30 34 38 35 37 36 20 2d         1048576 -
3fd0: 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30 20  > 200.**     10 
3fe0: 2d 3e 20 33 33 20 20 20 20 20 20 20 20 20 20 20  -> 33           
3ff0: 31 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20 34  1024 -> 100    4
4000: 32 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32 30  294967296 -> 320
4010: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73  .**.** The LogEs
4020: 74 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69 76  t can be negativ
4030: 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66 72  e to indicate fr
4040: 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e  actional values.
4050: 20 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a   .** Examples:.*
4060: 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20 2d  *.**    0.5 -> -
4070: 31 30 20 20 20 20 20 20 20 20 20 20 20 30 2e 31  10           0.1
4080: 20 2d 3e 20 2d 33 33 20 20 20 20 20 20 20 20 30   -> -33        0
4090: 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a  .0625 -> -40.*/.
40a0: 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59  typedef INT16_TY
40b0: 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a  PE LogEst;../*.*
40c0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
40d0: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68  rmine whether th
40e0: 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62 69 67  e machine is big
40f0: 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64 69 61   or little endia
4100: 6e 2c 0a 2a 2a 20 65 76 61 6c 75 61 74 65 64 20  n,.** evaluated 
4110: 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2f 0a 23  at runtime..*/.#
4120: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  ifdef SQLITE_AMA
4130: 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e 73 74 20  LGAMATION.const 
4140: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d  int sqlite3one =
4150: 20 31 3b 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e   1;.#else.extern
4160: 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74   const int sqlit
4170: 65 33 6f 6e 65 3b 0a 23 65 6e 64 69 66 0a 23 69  e3one;.#endif.#i
4180: 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29 20  f defined(i386) 
4190: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
41a0: 36 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  6__) || defined(
41b0: 5f 4d 5f 49 58 38 36 29 5c 0a 20 20 20 20 20 20  _M_IX86)\.      
41c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
41d0: 20 20 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65         || define
41e0: 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64  d(__x86_64) || d
41f0: 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f  efined(__x86_64_
4200: 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  _).# define SQLI
4210: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
4220: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
4230: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31  E_LITTLEENDIAN 1
4240: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4250: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51  _UTF16NATIVE  SQ
4260: 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6c  LITE_UTF16LE.#el
4270: 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  se.# define SQLI
4280: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
4290: 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69  (*(char *)(&sqli
42a0: 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65  te3one)==0).# de
42b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
42c0: 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72  LEENDIAN (*(char
42d0: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
42e0: 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==1).# define SQ
42f0: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
4300: 20 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49   (SQLITE_BIGENDI
4310: 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42  AN?SQLITE_UTF16B
4320: 45 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  E:SQLITE_UTF16LE
4330: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4340: 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68  Constants for th
4350: 65 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d  e largest and sm
4360: 61 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20  allest possible 
4370: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
4380: 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65  tegers..** These
4390: 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69   macros are desi
43a0: 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72  gned to work cor
43b0: 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33  rectly on both 3
43c0: 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74  2-bit and 64-bit
43d0: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a  .** compilers..*
43e0: 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53  /.#define LARGES
43f0: 54 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66  T_INT64  (0xffff
4400: 66 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66  ffff|(((i64)0x7f
4410: 66 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64  ffffff)<<32)).#d
4420: 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49  efine SMALLEST_I
4430: 4e 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20  NT64 (((i64)-1) 
4440: 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29  - LARGEST_INT64)
4450: 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64 20 75  ../* .** Round u
4460: 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68  p a number to th
4470: 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75  e next larger mu
4480: 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68  ltiple of 8.  Th
4490: 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f  is is used.** to
44a0: 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c   force 8-byte al
44b0: 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69  ignment on 64-bi
44c0: 74 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2e  t architectures.
44d0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
44e0: 44 38 28 78 29 20 20 20 20 20 28 28 28 78 29 2b  D8(x)     (((x)+
44f0: 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f  7)&~7)../*.** Ro
4500: 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20  und down to the 
4510: 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65  nearest multiple
4520: 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65   of 8.*/.#define
4530: 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28   ROUNDDOWN8(x) (
4540: 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41  (x)&~7)../*.** A
4550: 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
4560: 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67  ointer X is alig
4570: 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65  ned to an 8-byte
4580: 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73   boundary.  This
4590: 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65  .** macro is use
45a0: 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73  d only within as
45b0: 73 65 72 74 28 29 20 74 6f 20 76 65 72 69 66 79  sert() to verify
45c0: 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67   that the code g
45d0: 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e  ets.** all align
45e0: 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e  ment restriction
45f0: 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a  s correct..**.**
4600: 20 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49   Except, if SQLI
4610: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
4620: 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69  D_MALLOC is defi
4630: 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ned, then the.**
4640: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c   underlying mall
4650: 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 69 6f  oc() implementio
4660: 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75  n might return u
4670: 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64  s 4-byte aligned
4680: 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49  .** pointers.  I
4690: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c  n that case, onl
46a0: 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20  y verify 4-byte 
46b0: 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69  alignment..*/.#i
46c0: 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  fdef SQLITE_4_BY
46d0: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
46e0: 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54  C.# define EIGHT
46f0: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
4700: 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28  X)   ((((char*)(
4710: 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33  X) - (char*)0)&3
4720: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  )==0).#else.# de
4730: 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f  fine EIGHT_BYTE_
4740: 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28  ALIGNMENT(X)   (
4750: 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28  (((char*)(X) - (
4760: 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a  char*)0)&7)==0).
4770: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69  #endif../*.** Di
4780: 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c  sable MMAP on pl
4790: 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74  atforms where it
47a0: 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74   is known to not
47b0: 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66   work.*/.#if def
47c0: 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f  ined(__OpenBSD__
47d0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51  ) || defined(__Q
47e0: 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66  NXNTO__).# undef
47f0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
4800: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
4810: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
4820: 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  IZE 0.#endif../*
4830: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69  .** Default maxi
4840: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f  mum size of memo
4850: 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72  ry used by memor
4860: 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20  y-mapped I/O in 
4870: 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65  the VFS.*/.#ifde
4880: 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e  f __APPLE__.# in
4890: 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e  clude <TargetCon
48a0: 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 20 69  ditionals.h>.# i
48b0: 66 20 54 41 52 47 45 54 5f 4f 53 5f 49 50 48 4f  f TARGET_OS_IPHO
48c0: 4e 45 0a 23 20 20 20 75 6e 64 65 66 20 53 51 4c  NE.#   undef SQL
48d0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
48e0: 45 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  E.#   define SQL
48f0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
4900: 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  E 0.# endif.#end
4910: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
4920: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
4930: 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c  # if defined(__l
4940: 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64  inux__) \.  || d
4950: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c  efined(_WIN32) \
4960: 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f  .  || (defined(_
4970: 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66  _APPLE__) && def
4980: 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20  ined(__MACH__)) 
4990: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
49a0: 5f 73 75 6e 29 0a 23 20 20 20 64 65 66 69 6e 65  _sun).#   define
49b0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
49c0: 5f 53 49 5a 45 20 30 78 37 66 66 66 30 30 30 30  _SIZE 0x7fff0000
49d0: 20 20 2f 2a 20 32 31 34 37 34 31 38 31 31 32 20    /* 2147418112 
49e0: 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65  */.# else.#   de
49f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
4a00: 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e  MMAP_SIZE 0.# en
4a10: 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  dif.# define SQL
4a20: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
4a30: 45 5f 78 63 20 31 20 2f 2a 20 65 78 63 6c 75 64  E_xc 1 /* exclud
4a40: 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a  e from ctime.c *
4a50: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
4a60: 54 68 65 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  The default MMAP
4a70: 5f 53 49 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e  _SIZE is zero on
4a80: 20 61 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20   all platforms. 
4a90: 20 4f 72 2c 20 65 76 65 6e 20 69 66 20 61 20 6c   Or, even if a l
4aa0: 61 72 67 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74  arger.** default
4ab0: 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 73 70   MMAP_SIZE is sp
4ac0: 65 63 69 66 69 65 64 20 61 74 20 63 6f 6d 70 69  ecified at compi
4ad0: 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75  le-time, make su
4ae0: 72 65 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a  re that it does.
4af0: 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 20 74 68  ** not exceed th
4b00: 65 20 6d 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73  e maximum mmap s
4b10: 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ize..*/.#ifndef 
4b20: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
4b30: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
4b40: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
4b50: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 64  _MMAP_SIZE 0.# d
4b60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
4b70: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78  AULT_MMAP_SIZE_x
4b80: 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20  c 1  /* Exclude 
4b90: 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a  from ctime.c */.
4ba0: 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
4bb0: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
4bc0: 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  IZE>SQLITE_MAX_M
4bd0: 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66  MAP_SIZE.# undef
4be0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
4bf0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69  MMAP_SIZE.# defi
4c00: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
4c10: 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49  T_MMAP_SIZE SQLI
4c20: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
4c30: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f  .#endif../*.** O
4c40: 6e 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54  nly one of SQLIT
4c50: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f  E_ENABLE_STAT3 o
4c60: 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  r SQLITE_ENABLE_
4c70: 53 54 41 54 34 20 63 61 6e 20 62 65 20 64 65 66  STAT4 can be def
4c80: 69 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74  ined..** Priorit
4c90: 79 20 69 73 20 67 69 76 65 6e 20 74 6f 20 53 51  y is given to SQ
4ca0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
4cb0: 34 2e 20 20 49 66 20 65 69 74 68 65 72 20 61 72  4.  If either ar
4cc0: 65 20 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a  e defined, also.
4cd0: 2a 2a 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ** define SQLITE
4ce0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
4cf0: 5f 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66  _STAT4.*/.#ifdef
4d00: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
4d10: 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c  TAT4.# undef SQL
4d20: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
4d30: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4d40: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
4d50: 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53  _STAT4 1.#elif S
4d60: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
4d70: 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  T3.# define SQLI
4d80: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
4d90: 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66  OR_STAT4 1.#elif
4da0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
4db0: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20  TAT3_OR_STAT4.# 
4dc0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
4dd0: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
4de0: 54 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  T4.#endif../*.**
4df0: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
4e00: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
4e10: 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
4e20: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75 73  to store the bus
4e30: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
4e40: 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65  lback for a give
4e50: 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e  n sqlite handle.
4e60: 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69   .**.** The sqli
4e70: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
4e80: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
4e90: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
4ea0: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
4eb0: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
4ec0: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
4ed0: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
4ee0: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
4ef0: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
4f00: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
4f10: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
4f20: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
4f30: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
4f40: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
4f50: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
4f60: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
4f70: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
4f80: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
4f90: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
4fa0: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
4fb0: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e  r {.  int (*xFun
4fc0: 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20  c)(void *,int); 
4fd0: 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c   /* The busy cal
4fe0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
4ff0: 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  *pArg;          
5000: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
5010: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
5020: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
5030: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
5040: 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74      /* Increment
5050: 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75 73  ed with each bus
5060: 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  y call */.};../*
5070: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
5080: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
5090: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
50a0: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
50b0: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
50c0: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
50d0: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
50e0: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
50f0: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
5100: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
5110: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
5120: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
5130: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
5140: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
5150: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
5160: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
5170: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
5180: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
5190: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
51a0: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
51b0: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
51c0: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
51d0: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
51e0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
51f0: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
5200: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
5210: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
5220: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
5230: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
5240: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
5250: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
5260: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
5270: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
5280: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
5290: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
52a0: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
52b0: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
52c0: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
52d0: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
52e0: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
52f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
5300: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
5310: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
5320: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
5330: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
5340: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
5350: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
5360: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
5370: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
5380: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
5390: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
53a0: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a 2a  nstead of the .*
53b0: 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20  * one parameter 
53c0: 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73  that destructors
53d0: 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20   normally want. 
53e0: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69   So we have to i
53f0: 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68 69  ntroduce .** thi
5400: 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68  s magic value th
5410: 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77  at the code know
5420: 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66  s to handle diff
5430: 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a 2a  erently.  Any .*
5440: 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77  * pointer will w
5450: 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67  ork here as long
5460: 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69 6e   as it is distin
5470: 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53  ct from SQLITE_S
5480: 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c  TATIC.** and SQL
5490: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a  ITE_TRANSIENT..*
54a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
54b0: 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c  _DYNAMIC   ((sql
54c0: 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f  ite3_destructor_
54d0: 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c  type)sqlite3Mall
54e0: 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57  ocSize)../*.** W
54f0: 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  hen SQLITE_OMIT_
5500: 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20  WSD is defined, 
5510: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
5520: 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72  e target platfor
5530: 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75  m does.** not su
5540: 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53  pport Writable S
5550: 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44 29  tatic Data (WSD)
5560: 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20   such as global 
5570: 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69 61  and static varia
5580: 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72  bles..** All var
5590: 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68  iables must eith
55a0: 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61  er be on the sta
55b0: 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c  ck or dynamicall
55c0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d  y allocated from
55d0: 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57  .** the heap.  W
55e0: 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70  hen WSD is unsup
55f0: 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72 69  ported, the vari
5600: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
5610: 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74  s scattered.** t
5620: 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51  hroughout the SQ
5630: 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62  Lite code must b
5640: 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20  ecome constants 
5650: 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53 51  instead.  The SQ
5660: 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72  LITE_WSD.** macr
5670: 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68  o is used for th
5680: 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64  is purpose.  And
5690: 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65   instead of refe
56a0: 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69  rencing the vari
56b0: 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79  able.** directly
56c0: 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e  , we use its con
56d0: 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74  stant as a key t
56e0: 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e  o lookup the run
56f0: 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a  -time allocated.
5700: 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20 68  ** buffer that h
5710: 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61 62  olds real variab
5720: 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e  le.  The constan
5730: 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e  t is also the in
5740: 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72  itializer.** for
5750: 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c   the run-time al
5760: 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a  located buffer..
5770: 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75  **.** In the usu
5780: 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57 53  al case where WS
5790: 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20  D is supported, 
57a0: 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61  the SQLITE_WSD a
57b0: 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63  nd GLOBAL.** mac
57c0: 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70  ros become no-op
57d0: 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20  s and have zero 
57e0: 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61  performance impa
57f0: 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ct..*/.#ifdef SQ
5800: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
5810: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
5820: 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69  SD const.  #defi
5830: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28  ne GLOBAL(t,v) (
5840: 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64  *(t*)sqlite3_wsd
5850: 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76  _find((void*)&(v
5860: 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20  ), sizeof(v))). 
5870: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
5880: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f  GlobalConfig GLO
5890: 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74  BAL(struct Sqlit
58a0: 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65  e3Config, sqlite
58b0: 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73  3Config).  int s
58c0: 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28  qlite3_wsd_init(
58d0: 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20  int N, int J);. 
58e0: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77   void *sqlite3_w
58f0: 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c  sd_find(void *K,
5900: 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20   int L);.#else. 
5910: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
5920: 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20 47  WSD .  #define G
5930: 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23  LOBAL(t,v) v.  #
5940: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
5950: 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74  obalConfig sqlit
5960: 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a  e3Config.#endif.
5970: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
5980: 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20  wing macros are 
5990: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
59a0: 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
59b0: 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b  gs and to.** mak
59c0: 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75  e it clear to hu
59d0: 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e  man readers when
59e0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
59f0: 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72  meter is deliber
5a00: 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20 75  ately .** left u
5a10: 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65  nused within the
5a20: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
5a30: 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c  ion. This usuall
5a40: 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a  y happens when.*
5a50: 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  * a function is 
5a60: 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e  called via a fun
5a70: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46  ction pointer. F
5a80: 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20 0a  or example the .
5a90: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
5aa0: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72  n of an SQL aggr
5ab0: 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62  egate step callb
5ac0: 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20  ack may not use 
5ad0: 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  the.** parameter
5ae0: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
5af0: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
5b00: 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  nts passed to th
5b10: 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20  e aggregate,.** 
5b20: 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74  if it knows that
5b30: 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65   this is enforce
5b40: 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a  d elsewhere..**.
5b50: 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69  ** When a functi
5b60: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
5b70: 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20  not used at all 
5b80: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
5b90: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a  of a function,.*
5ba0: 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c  * it is generall
5bb0: 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64  y named "NotUsed
5bc0: 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20  " or "NotUsed2" 
5bd0: 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65  to make things e
5be0: 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20  ven clearer..** 
5bf0: 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d  However, these m
5c00: 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62  acros may also b
5c10: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
5c20: 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61  ss warnings rela
5c30: 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65  ted to.** parame
5c40: 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72  ters that may or
5c50: 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64   may not be used
5c60: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f   depending on co
5c70: 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
5c80: 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c  s..** For exampl
5c90: 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65  e those paramete
5ca0: 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20  rs only used in 
5cb0: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
5cc0: 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a  nts. In these.**
5cd0: 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61 6d   cases the param
5ce0: 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20  eters are named 
5cf0: 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61 6c  as per the usual
5d00: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f   conventions..*/
5d10: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
5d20: 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f  PARAMETER(x) (vo
5d30: 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55  id)(x).#define U
5d40: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32  NUSED_PARAMETER2
5d50: 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52  (x,y) UNUSED_PAR
5d60: 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44  AMETER(x),UNUSED
5d70: 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f  _PARAMETER(y)../
5d80: 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66  *.** Forward ref
5d90: 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63  erences to struc
5da0: 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66  tures.*/.typedef
5db0: 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20   struct AggInfo 
5dc0: 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  AggInfo;.typedef
5dd0: 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74   struct AuthCont
5de0: 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b  ext AuthContext;
5df0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5e00: 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f  AutoincInfo Auto
5e10: 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  incInfo;.typedef
5e20: 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20 42   struct Bitvec B
5e30: 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73  itvec;.typedef s
5e40: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f  truct CollSeq Co
5e50: 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73  llSeq;.typedef s
5e60: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c  truct Column Col
5e70: 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  umn;.typedef str
5e80: 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64  uct Db Db;.typed
5e90: 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61  ef struct Schema
5ea0: 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66   Schema;.typedef
5eb0: 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78 70   struct Expr Exp
5ec0: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
5ed0: 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c  t ExprList ExprL
5ee0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
5ef0: 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78 70  uct ExprSpan Exp
5f00: 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20 73  rSpan;.typedef s
5f10: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
5f20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5f30: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
5f40: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
5f50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
5f60: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
5f70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
5f80: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
5f90: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
5fa0: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
5fb0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
5fc0: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
5fd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5fe0: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
5ff0: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
6000: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
6010: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
6020: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
6030: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
6040: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
6050: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
6060: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
6070: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
6080: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
6090: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
60a0: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
60b0: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
60c0: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
60d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
60e0: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
60f0: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 69 6e  edef struct Prin
6100: 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e  tfArguments Prin
6110: 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70  tfArguments;.typ
6120: 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77 53  edef struct RowS
6130: 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64  et RowSet;.typed
6140: 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70 6f  ef struct Savepo
6150: 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74  int Savepoint;.t
6160: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
6170: 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70  lect Select;.typ
6180: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
6190: 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65 73  ctDest SelectDes
61a0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
61b0: 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73  t SrcList SrcLis
61c0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
61d0: 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41 63  t StrAccum StrAc
61e0: 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72  cum;.typedef str
61f0: 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b  uct Table Table;
6200: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6210: 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c  TableLock TableL
6220: 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ock;.typedef str
6230: 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b  uct Token Token;
6240: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6250: 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b  Trigger Trigger;
6260: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6270: 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67  TriggerPrg Trigg
6280: 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73  erPrg;.typedef s
6290: 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
62a0: 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74  p TriggerStep;.t
62b0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e  ypedef struct Un
62c0: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70  packedRecord Unp
62d0: 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70  ackedRecord;.typ
62e0: 65 64 65 66 20 73 74 72 75 63 74 20 56 54 61 62  edef struct VTab
62f0: 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64  le VTable;.typed
6300: 65 66 20 73 74 72 75 63 74 20 56 74 61 62 43 74  ef struct VtabCt
6310: 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64  x VtabCtx;.typed
6320: 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72  ef struct Walker
6330: 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66   Walker;.typedef
6340: 20 73 74 72 75 63 74 20 57 68 65 72 65 49 6e 66   struct WhereInf
6350: 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70  o WhereInfo;.typ
6360: 65 64 65 66 20 73 74 72 75 63 74 20 57 69 74 68  edef struct With
6370: 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65   With;../*.** De
6380: 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62  fer sourcing vdb
6390: 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20  e.h and btree.h 
63a0: 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65 20  until after the 
63b0: 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75  "u8" and .** "Bu
63c0: 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64  syHandler" typed
63d0: 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f  efs. vdbe.h also
63e0: 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77 20   requires a few 
63f0: 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a  of the opaque.**
6400: 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28   pointer types (
6410: 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65  i.e. FuncDef) de
6420: 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a  fined above..*/.
6430: 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e  #include "btree.
6440: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62  h".#include "vdb
6450: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  e.h".#include "p
6460: 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65  ager.h".#include
6470: 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e   "pcache.h"..#in
6480: 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e  clude "os.h".#in
6490: 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a  clude "mutex.h".
64a0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
64b0: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65  abase file to be
64c0: 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65   accessed by the
64d0: 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e   system is an in
64e0: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65  stance.** of the
64f0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
6500: 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65  ture.  There are
6510: 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66   normally two of
6520: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
6530: 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69  s.** in the sqli
6540: 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20  te.aDb[] array. 
6550: 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d   aDb[0] is the m
6560: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
6570: 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20  e and.** aDb[1] 
6580: 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
6590: 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c  file used to hol
65a0: 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  d temporary tabl
65b0: 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  es.  Additional.
65c0: 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79  ** databases may
65d0: 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f   be attached..*/
65e0: 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63  .struct Db {.  c
65f0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
6600: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
6610: 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
6620: 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
6630: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a         /* The B*
6640: 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66  Tree structure f
6650: 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65  or this database
6660: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61   file */.  u8 sa
6670: 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20  fety_level;     
6680: 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76  /* How aggressiv
6690: 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74  e at syncing dat
66a0: 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53  a to disk */.  S
66b0: 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
66c0: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
66d0: 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  o database schem
66e0: 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72  a (possibly shar
66f0: 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ed) */.};../*.**
6700: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
6710: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
6720: 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20 61  ructure stores a
6730: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
6740: 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68  ..**.** Most Sch
6750: 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ema objects are 
6760: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
6770: 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65 78  a Btree.  The ex
6780: 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68  ception is.** th
6790: 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65  e Schema for the
67a0: 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20 28   TEMP databaes (
67b0: 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20  sqlite3.aDb[1]) 
67c0: 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73 74  which is free-st
67d0: 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68  anding..** In sh
67e0: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c  ared cache mode,
67f0: 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61   a single Schema
6800: 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73   object can be s
6810: 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c  hared by multipl
6820: 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74  e.** Btrees that
6830: 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 61   refer to the sa
6840: 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74  me underlying Bt
6850: 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a  Shared object..*
6860: 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a  * .** Schema obj
6870: 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74  ects are automat
6880: 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74  ically deallocat
6890: 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74  ed when the last
68a0: 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72   Btree that.** r
68b0: 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69  eferences them i
68c0: 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54  s destroyed.   T
68d0: 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69  he TEMP Schema i
68e0: 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64  s manually freed
68f0: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63   by.** sqlite3_c
6900: 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74  lose()..*.** A t
6910: 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f  hread must be ho
6920: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
6930: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
6940: 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65  ng Btree in orde
6950: 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53  r.** to access S
6960: 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20  chema content.  
6970: 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61  This implies tha
6980: 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73  t the thread mus
6990: 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c  t also be.** hol
69a0: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
69b0: 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e  the sqlite3 conn
69c0: 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74  ection pointer t
69d0: 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72  hat owns the Btr
69e0: 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d  ee..** For a TEM
69f0: 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74  P Schema, only t
6a00: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  he connection mu
6a10: 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e  tex is required.
6a20: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d  .*/.struct Schem
6a30: 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61  a {.  int schema
6a40: 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61  _cookie;   /* Da
6a50: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65  tabase schema ve
6a60: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  rsion number for
6a70: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
6a80: 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b  int iGeneration;
6a90: 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69       /* Generati
6aa0: 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63  on counter.  Inc
6ab0: 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61  remented with ea
6ac0: 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48  ch change */.  H
6ad0: 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20  ash tblHash;    
6ae0: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65      /* All table
6af0: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
6b00: 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48  e */.  Hash idxH
6b10: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
6b20: 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63  ll (named) indic
6b30: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
6b40: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69  me */.  Hash tri
6b50: 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  gHash;       /* 
6b60: 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64  All triggers ind
6b70: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
6b80: 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b    Hash fkeyHash;
6b90: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f         /* All fo
6ba0: 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65  reign keys by re
6bb0: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e  ferenced table n
6bc0: 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ame */.  Table *
6bd0: 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a  pSeqTab;      /*
6be0: 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   The sqlite_sequ
6bf0: 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20  ence table used 
6c00: 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  by AUTOINCREMENT
6c10: 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f   */.  u8 file_fo
6c20: 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63  rmat;      /* Sc
6c30: 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73  hema format vers
6c40: 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ion for this fil
6c50: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  e */.  u8 enc;  
6c60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
6c70: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65  ext encoding use
6c80: 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61  d by this databa
6c90: 73 65 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  se */.  u16 flag
6ca0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
6cb0: 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  Flags associated
6cc0: 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d   with this schem
6cd0: 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65  a */.  int cache
6ce0: 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e  _size;      /* N
6cf0: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
6d00: 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63  o use in the cac
6d10: 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  he */.};../*.** 
6d20: 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
6d30: 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
6d40: 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
6d50: 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20  bits in the .** 
6d60: 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  Db.pSchema->flag
6d70: 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
6d80: 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74  ine DbHasPropert
6d90: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28  y(D,I,P)     (((
6da0: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
6db0: 6d 61 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d  ma->flags&(P))==
6dc0: 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48  (P)).#define DbH
6dd0: 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c  asAnyProperty(D,
6de0: 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62  I,P)  (((D)->aDb
6df0: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61  [I].pSchema->fla
6e00: 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
6e10: 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74  ine DbSetPropert
6e20: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29  y(D,I,P)     (D)
6e30: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
6e40: 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  ->flags|=(P).#de
6e50: 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70  fine DbClearProp
6e60: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44  erty(D,I,P)   (D
6e70: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
6e80: 61 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a  a->flags&=~(P)..
6e90: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
6ea0: 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e  lues for the DB.
6eb0: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66  pSchema->flags f
6ec0: 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ield..**.** The 
6ed0: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20  DB_SchemaLoaded 
6ee0: 66 6c 61 67 20 69 73 20 73 65 74 20 61 66 74 65  flag is set afte
6ef0: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  r the database s
6f00: 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a  chema has been.*
6f10: 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65  * read into inte
6f20: 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73  rnal hash tables
6f30: 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73  ..**.** DB_Unres
6f40: 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68  etViews means th
6f50: 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76  at one or more v
6f60: 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e  iews have column
6f70: 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68   names that.** h
6f80: 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20  ave been filled 
6f90: 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73 63 68  out.  If the sch
6fa0: 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65  ema changes, the
6fb0: 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  se column names 
6fc0: 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73  might.** changes
6fd0: 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77   and so the view
6fe0: 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65   will need to be
6ff0: 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69   reset..*/.#defi
7000: 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  ne DB_SchemaLoad
7010: 65 64 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a  ed    0x0001  /*
7020: 20 54 68 65 20 73 63 68 65 6d 61 20 68 61 73 20   The schema has 
7030: 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23  been loaded */.#
7040: 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65  define DB_Unrese
7050: 74 56 69 65 77 73 20 20 20 20 30 78 30 30 30 32  tViews    0x0002
7060: 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20    /* Some views 
7070: 68 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c  have defined col
7080: 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65  umn names */.#de
7090: 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20  fine DB_Empty   
70a0: 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
70b0: 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20 65  /* The file is e
70c0: 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62  mpty (length 0 b
70d0: 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ytes) */../*.** 
70e0: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69  The number of di
70f0: 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66  fferent kinds of
7100: 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e   things that can
7110: 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75   be limited.** u
7120: 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33  sing the sqlite3
7130: 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61  _limit() interfa
7140: 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ce..*/.#define S
7150: 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53  QLITE_N_LIMIT (S
7160: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47  QLITE_LIMIT_TRIG
7170: 47 45 52 5f 44 45 50 54 48 2b 31 29 0a 0a 2f 2a  GER_DEPTH+1)../*
7180: 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** Lookaside ma
7190: 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66  lloc is a set of
71a0: 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66   fixed-size buff
71b0: 65 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ers that can be 
71c0: 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73  used.** to satis
71d0: 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65  fy small transie
71e0: 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  nt memory alloca
71f0: 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f  tion requests fo
7200: 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73  r objects.** ass
7210: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70  ociated with a p
7220: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
7230: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
7240: 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f  The use of.** lo
7250: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70  okaside malloc p
7260: 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66  rovides a signif
7270: 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63  icant performanc
7280: 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a  e enhancement.**
7290: 20 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79   (approx 10%) by
72a0: 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f   avoiding numero
72b0: 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72  us malloc/free r
72c0: 65 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61  equests while pa
72d0: 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61  rsing.** SQL sta
72e0: 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54  tements..**.** T
72f0: 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72  he Lookaside str
7300: 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e  ucture holds con
7310: 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72  figuration infor
7320: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
7330: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** lookaside ma
7340: 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20  lloc subsystem. 
7350: 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20   Each available 
7360: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
7370: 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b  n in.** the look
7380: 61 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20  aside subsystem 
7390: 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c  is stored on a l
73a0: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f  inked list of Lo
73b0: 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f  okasideSlot.** o
73c0: 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f  bjects..**.** Lo
73d0: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
73e0: 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c  ons are only all
73f0: 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73  owed for objects
7400: 20 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69   that are associ
7410: 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70  ated.** with a p
7420: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
7430: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
7440: 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e  Hence, schema in
7450: 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74  formation cannot
7460: 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e  .** be stored in
7470: 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75   lookaside becau
7480: 73 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63  se in shared cac
7490: 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65  he mode the sche
74a0: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  ma information.*
74b0: 2a 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d  * is shared by m
74c0: 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65  ultiple database
74d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54   connections.  T
74e0: 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20  herefore, while 
74f0: 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d  parsing.** schem
7500: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74  a information, t
7510: 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e  he Lookaside.bEn
7520: 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c  abled flag is cl
7530: 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a  eared so that.**
7540: 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   lookaside alloc
7550: 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75  ations are not u
7560: 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74  sed to construct
7570: 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65   the schema obje
7580: 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c  cts..*/.struct L
7590: 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31 36  ookaside {.  u16
75a0: 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20   sz;            
75b0: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
75c0: 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62  each buffer in b
75d0: 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e  ytes */.  u8 bEn
75e0: 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  abled;          
75f0: 20 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64 69    /* False to di
7600: 73 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73  sable new lookas
7610: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
7620: 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65  */.  u8 bMalloce
7630: 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
7640: 54 72 75 65 20 69 66 20 70 53 74 61 72 74 20 6f  True if pStart o
7650: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c  btained from sql
7660: 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f  ite3_malloc() */
7670: 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20  .  int nOut;    
7680: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
7690: 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72 73 20  mber of buffers 
76a0: 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65  currently checke
76b0: 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d  d out */.  int m
76c0: 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  xOut;           
76d0: 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72 20     /* Highwater 
76e0: 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f  mark for nOut */
76f0: 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d  .  int anStat[3]
7700: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a  ;          /* 0:
7710: 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20   hits.  1: size 
7720: 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c  misses.  2: full
7730: 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f   misses */.  Loo
7740: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65  kasideSlot *pFre
7750: 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  e;   /* List of 
7760: 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72  available buffer
7770: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74  s */.  void *pSt
7780: 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  art;           /
7790: 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f 66 20  * First byte of 
77a0: 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79  available memory
77b0: 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64   space */.  void
77c0: 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
77d0: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
77e0: 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76  e past end of av
77f0: 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f  ailable space */
7800: 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61  .};.struct Looka
7810: 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f  sideSlot {.  Loo
7820: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78  kasideSlot *pNex
7830: 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75  t;    /* Next bu
7840: 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74  ffer in the list
7850: 20 6f 66 20 66 72 65 65 20 62 75 66 66 65 72 73   of free buffers
7860: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
7870: 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66  hash table for f
7880: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
7890: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20  ons..**.** Hash 
78a0: 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72  each FuncDef str
78b0: 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20  ucture into one 
78c0: 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61  of the FuncDefHa
78d0: 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a  sh.a[] slots..**
78e0: 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20   Collisions are 
78f0: 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 70  on the FuncDef.p
7900: 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73  Hash chain..*/.s
7910: 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73  truct FuncDefHas
7920: 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61  h {.  FuncDef *a
7930: 5b 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48  [23];       /* H
7940: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
7950: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f  nctions */.};../
7960: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
7970: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  se connection is
7980: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
7990: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
79a0: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
79b0: 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73  ct sqlite3 {.  s
79c0: 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73  qlite3_vfs *pVfs
79d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
79e0: 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a  OS Interface */.
79f0: 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70    struct Vdbe *p
7a00: 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20  Vdbe;           
7a10: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76  /* List of activ
7a20: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
7a30: 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  es */.  CollSeq 
7a40: 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20  *pDfltColl;     
7a50: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66        /* The def
7a60: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ault collating s
7a70: 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29  equence (BINARY)
7a80: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
7a90: 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20  tex *mutex;     
7aa0: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
7ab0: 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20  n mutex */.  Db 
7ac0: 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20  *aDb;           
7ad0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
7ae0: 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  l backends */.  
7af0: 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20  int nDb;        
7b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7b10: 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65   Number of backe
7b20: 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  nds currently in
7b30: 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c   use */.  int fl
7b40: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
7b50: 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65          /* Misce
7b60: 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20  llaneous flags. 
7b70: 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  See below */.  i
7b80: 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20  64 lastRowid;   
7b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7ba0: 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65  ROWID of most re
7bb0: 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65  cent insert (see
7bc0: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34   above) */.  i64
7bd0: 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
7be0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
7bf0: 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20  fault mmap_size 
7c00: 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73  setting */.  uns
7c10: 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c  igned int openFl
7c20: 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c  ags;       /* Fl
7c30: 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71  ags passed to sq
7c40: 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28  lite3_vfs.xOpen(
7c50: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f  ) */.  int errCo
7c60: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
7c70: 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63       /* Most rec
7c80: 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28  ent error code (
7c90: 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69  SQLITE_*) */.  i
7ca0: 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20  nt errMask;     
7cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7cc0: 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77  & result codes w
7cd0: 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20  ith this before 
7ce0: 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75  returning */.  u
7cf0: 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20  16 dbOptFlags;  
7d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7d10: 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f  Flags to enable/
7d20: 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61  disable optimiza
7d30: 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 61 75  tions */.  u8 au
7d40: 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20  toCommit;       
7d50: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
7d60: 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
7d70: 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73  . */.  u8 temp_s
7d80: 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20  tore;           
7d90: 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20       /* 1: file 
7da0: 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66  2: memory 0: def
7db0: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c  ault */.  u8 mal
7dc0: 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20  locFailed;      
7dd0: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
7de0: 69 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20  if we have seen 
7df0: 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  a malloc failure
7e00: 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63   */.  u8 dfltLoc
7e10: 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  kMode;          
7e20: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
7e30: 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20  ocking-mode for 
7e40: 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a  attached dbs */.
7e50: 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65    signed char ne
7e60: 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20  xtAutovac;      
7e70: 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69  /* Autovac setti
7e80: 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20  ng after VACUUM 
7e90: 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73  if >=0 */.  u8 s
7ea0: 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20  uppressErr;     
7eb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
7ec0: 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20  not issue error 
7ed0: 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65  messages if true
7ee0: 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43   */.  u8 vtabOnC
7ef0: 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20  onflict;        
7f00: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
7f10: 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74  return for s3_vt
7f20: 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29  ab_on_conflict()
7f30: 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73   */.  u8 isTrans
7f40: 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
7f50: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
7f60: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76  he outermost sav
7f70: 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a  epoint is a TS *
7f80: 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65  /.  int nextPage
7f90: 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20  size;           
7fa0: 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66    /* Pagesize af
7fb0: 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30  ter VACUUM if >0
7fc0: 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b   */.  u32 magic;
7fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fe0: 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d      /* Magic num
7ff0: 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c  ber for detect l
8000: 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f  ibrary misuse */
8010: 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20  .  int nChange; 
8020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
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 63 68  ed by sqlite3_ch
8050: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
8060: 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20   nTotalChange;  
8070: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
8080: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
8090: 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
80a0: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
80b0: 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e   aLimit[SQLITE_N
80c0: 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69  _LIMIT];   /* Li
80d0: 6d 69 74 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  mits */.  struct
80e0: 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f   sqlite3InitInfo
80f0: 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72   {      /* Infor
8100: 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69  mation used duri
8110: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
8120: 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77  n */.    int new
8130: 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  Tnum;           
8140: 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65       /* Rootpage
8150: 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20   of table being 
8160: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
8170: 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20     u8 iDb;      
8180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8190: 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20  * Which db file 
81a0: 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  is being initial
81b0: 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62  ized */.    u8 b
81c0: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
81d0: 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20          /* TRUE 
81e0: 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69  if currently ini
81f0: 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20  tializing */.   
8200: 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65   u8 orphanTrigge
8210: 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
8220: 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69  Last statement i
8230: 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20  s orphaned TEMP 
8240: 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69  trigger */.  } i
8250: 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65  nit;.  int nVdbe
8260: 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20 20  Active;         
8270: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
8280: 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c  f VDBEs currentl
8290: 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69  y running */.  i
82a0: 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20  nt nVdbeRead;   
82b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
82c0: 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65  Number of active
82d0: 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64   VDBEs that read
82e0: 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69   or write */.  i
82f0: 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20  nt nVdbeWrite;  
8300: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8310: 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65  Number of active
8320: 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64   VDBEs that read
8330: 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20   and write */.  
8340: 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20  int nVdbeExec;  
8350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8360: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
8370: 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45  d calls to VdbeE
8380: 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  xec() */.  int n
8390: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
83a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
83b0: 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74  er of loaded ext
83c0: 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69  ensions */.  voi
83d0: 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20  d **aExtension; 
83e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
83f0: 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69  ray of shared li
8400: 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f  brary handles */
8410: 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65  .  void (*xTrace
8420: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
8430: 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a 20  ar*);        /* 
8440: 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  Trace function *
8450: 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65  /.  void *pTrace
8460: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
8470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8480: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
8490: 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   trace function 
84a0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f  */.  void (*xPro
84b0: 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  file)(void*,cons
84c0: 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f  t char*,u64);  /
84d0: 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63  * Profiling func
84e0: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
84f0: 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20  pProfileArg;    
8500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8510: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
8520: 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74  to profile funct
8530: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
8540: 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20  CommitArg;      
8550: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
8560: 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69  gument to xCommi
8570: 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20  tCallback() */  
8580: 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69   .  int (*xCommi
8590: 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a  tCallback)(void*
85a0: 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64  );    /* Invoked
85b0: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
85c0: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f  . */.  void *pRo
85d0: 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20  llbackArg;      
85e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
85f0: 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63  ment to xRollbac
8600: 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20  kCallback() */  
8610: 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c   .  void (*xRoll
8620: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f  backCallback)(vo
8630: 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64  id*); /* Invoked
8640: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
8650: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70  . */.  void *pUp
8660: 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20  dateArg;.  void 
8670: 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  (*xUpdateCallbac
8680: 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  k)(void*,int, co
8690: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
86a0: 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74  char*,sqlite_int
86b0: 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  64);.#ifndef SQL
86c0: 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
86d0: 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63  nt (*xWalCallbac
86e0: 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74  k)(void *, sqlit
86f0: 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
8700: 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64   *, int);.  void
8710: 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69   *pWalArg;.#endi
8720: 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  f.  void(*xCollN
8730: 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c  eeded)(void*,sql
8740: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
8750: 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  ep,const char*);
8760: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
8770: 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71  eded16)(void*,sq
8780: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
8790: 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29  Rep,const void*)
87a0: 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e  ;.  void *pCollN
87b0: 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69  eededArg;.  sqli
87c0: 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b  te3_value *pErr;
87d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
87e0: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d  t recent error m
87f0: 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f  essage */.  unio
8800: 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65  n {.    volatile
8810: 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74   int isInterrupt
8820: 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73  ed; /* True if s
8830: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
8840: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
8850: 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e   */.    double n
8860: 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20  otUsed1;        
8870: 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f      /* Spacer */
8880: 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61  .  } u1;.  Looka
8890: 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20  side lookaside; 
88a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b           /* Look
88b0: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e  aside malloc con
88c0: 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69  figuration */.#i
88d0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
88e0: 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
88f0: 20 20 69 6e 74 20 28 2a 78 41 75 74 68 29 28 76    int (*xAuth)(v
8900: 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
8910: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
8920: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
8930: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 20 20 20  st char*);.     
8940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8950: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63             /* Ac
8960: 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69  cess authorizati
8970: 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  on function */. 
8980: 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b   void *pAuthArg;
8990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
89a0: 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74  * 1st argument t
89b0: 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74  o the access aut
89c0: 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65  h function */.#e
89d0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
89e0: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
89f0: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74  S_CALLBACK.  int
8a00: 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f   (*xProgress)(vo
8a10: 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68  id *);     /* Th
8a20: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
8a30: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
8a40: 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20  ProgressArg;    
8a50: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
8a60: 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65  nt to the progre
8a70: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ss callback */. 
8a80: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
8a90: 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f  essOps;        /
8aa0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f  * Number of opco
8ab0: 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73  des for progress
8ac0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e   callback */.#en
8ad0: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
8ae0: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
8af0: 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61  ABLE.  int nVTra
8b00: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
8b10: 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65       /* Allocate
8b20: 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e  d size of aVTran
8b30: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64  s */.  Hash aMod
8b40: 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ule;            
8b50: 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65       /* populate
8b60: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65  d by sqlite3_cre
8b70: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
8b80: 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62    VtabCtx *pVtab
8b90: 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ctx;            
8ba0: 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61  /* Context for a
8bb0: 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65  ctive vtab conne
8bc0: 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56  ct/create */.  V
8bd0: 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b  Table **aVTrans;
8be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8bf0: 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77  Virtual tables w
8c00: 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63  ith open transac
8c10: 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c  tions */.  VTabl
8c20: 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20  e *pDisconnect; 
8c30: 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74     /* Disconnect
8c40: 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73   these in next s
8c50: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
8c60: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e   */.#endif.  Fun
8c70: 63 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b 20  cDefHash aFunc; 
8c80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61             /* Ha
8c90: 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e  sh table of conn
8ca0: 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  ection functions
8cb0: 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c   */.  Hash aColl
8cc0: 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Seq;            
8cd0: 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61      /* All colla
8ce0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a  ting sequences *
8cf0: 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20  /.  BusyHandler 
8d00: 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20  busyHandler;    
8d10: 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61    /* Busy callba
8d20: 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74  ck */.  Db aDbSt
8d30: 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20  atic[2];        
8d40: 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20        /* Static 
8d50: 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20  space for the 2 
8d60: 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73  default backends
8d70: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
8d80: 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20  *pSavepoint;    
8d90: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
8da0: 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73  ctive savepoints
8db0: 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69   */.  int busyTi
8dc0: 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20  meout;          
8dd0: 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64      /* Busy hand
8de0: 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20  ler timeout, in 
8df0: 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  msec */.  int nS
8e00: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
8e10: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
8e20: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
8e30: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
8e40: 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d  */.  int nStatem
8e50: 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ent;            
8e60: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8e70: 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74  nested statement
8e80: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a  -transactions  *
8e90: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
8ea0: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
8eb0: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
8ec0: 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68  d constraints th
8ed0: 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  is transaction. 
8ee0: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
8ef0: 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
8f00: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
8f10: 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e  ed immediate con
8f20: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  straints */.  in
8f30: 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b  t *pnBytesFreed;
8f40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
8f50: 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72  f not NULL, incr
8f60: 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62  ement this in Db
8f70: 46 72 65 65 28 29 20 2a 2f 0a 0a 23 69 66 64 65  Free() */..#ifde
8f80: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
8f90: 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
8fa0: 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
8fb0: 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61   variables are a
8fc0: 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20  ll protected by 
8fd0: 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45  the STATIC_MASTE
8fe0: 52 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e  R .  ** mutex, n
8ff0: 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75  ot by sqlite3.mu
9000: 74 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73  tex. They are us
9010: 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f  ed by code in no
9020: 74 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20  tify.c. .  **.  
9030: 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63  ** When X.pUnloc
9040: 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20  kConnection==Y, 
9050: 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20  that means that 
9060: 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72  X is waiting for
9070: 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63   Y to.  ** unloc
9080: 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  k so that it can
9090: 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20   proceed..  **. 
90a0: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63   ** When X.pBloc
90b0: 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d  kingConnection==
90c0: 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  Y, that means th
90d0: 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61  at something tha
90e0: 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74  t X tried.  ** t
90f0: 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e  ried to do recen
9100: 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68 20  tly failed with 
9110: 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  an SQLITE_LOCKED
9120: 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f   error due to lo
9130: 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79  cks.  ** held by
9140: 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74   Y..  */.  sqlit
9150: 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e  e3 *pBlockingCon
9160: 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e  nection; /* Conn
9170: 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73  ection that caus
9180: 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  ed SQLITE_LOCKED
9190: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
91a0: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
91b0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ;           /* C
91c0: 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74  onnection to wat
91d0: 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f  ch for unlock */
91e0: 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b  .  void *pUnlock
91f0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
9200: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
9210: 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e  ment to xUnlockN
9220: 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20  otify */.  void 
9230: 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29  (*xUnlockNotify)
9240: 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20  (void **, int); 
9250: 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66   /* Unlock notif
9260: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
9270: 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c  sqlite3 *pNextBl
9280: 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a  ocked;        /*
9290: 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66   Next in list of
92a0: 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e   all blocked con
92b0: 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64  nections */.#end
92c0: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d  if.};../*.** A m
92d0: 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72  acro to discover
92e0: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
92f0: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a   a database..*/.
9300: 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20  #define ENC(db) 
9310: 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53  ((db)->aDb[0].pS
9320: 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a  chema->enc)../*.
9330: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
9340: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
9350: 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65  e3.flags..*/.#de
9360: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
9370: 54 72 61 63 65 20 20 20 20 20 20 30 78 30 30 30  Trace      0x000
9380: 30 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74  00001  /* True t
9390: 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65  o trace VDBE exe
93a0: 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  cution */.#defin
93b0: 65 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  e SQLITE_InternC
93c0: 68 61 6e 67 65 73 20 20 30 78 30 30 30 30 30 30  hanges  0x000000
93d0: 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74  02  /* Uncommitt
93e0: 65 64 20 48 61 73 68 20 74 61 62 6c 65 20 63 68  ed Hash table ch
93f0: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
9400: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e   SQLITE_FullFSyn
9410: 63 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30  c      0x0000000
9420: 34 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66  4  /* Use full f
9430: 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b  sync on the back
9440: 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  end */.#define S
9450: 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53  QLITE_CkptFullFS
9460: 79 6e 63 20 20 30 78 30 30 30 30 30 30 30 38 20  ync  0x00000008 
9470: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
9480: 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e  nc for checkpoin
9490: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
94a0: 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20  ITE_CacheSpill  
94b0: 20 20 20 30 78 30 30 30 30 30 30 31 30 20 20 2f     0x00000010  /
94c0: 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61  * OK to spill pa
94d0: 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65  ger cache */.#de
94e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
94f0: 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30  ColNames   0x000
9500: 30 30 30 32 30 20 20 2f 2a 20 53 68 6f 77 20 66  00020  /* Show f
9510: 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ull column names
9520: 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64   on SELECT */.#d
9530: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f  efine SQLITE_Sho
9540: 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30  rtColNames  0x00
9550: 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20  000040  /* Show 
9560: 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61  short columns na
9570: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  mes */.#define S
9580: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
9590: 20 20 20 20 20 30 78 30 30 30 30 30 30 38 30 20       0x00000080 
95a0: 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63   /* Count rows c
95b0: 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54  hanged by INSERT
95c0: 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  , */.           
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 2f                 /
95f0: 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  *   DELETE, or U
9600: 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e  PDATE and return
9610: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
9620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9640: 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69     the count usi
9650: 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ng a callback. *
9660: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9670: 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20  _NullCallback   
9680: 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49  0x00000100  /* I
9690: 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61  nvoke the callba
96a0: 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a  ck once if the *
96b0: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
96c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
96e0: 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
96f0: 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
9700: 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20  SQLITE_SqlTrace 
9710: 20 20 20 20 20 20 30 78 30 30 30 30 30 32 30 30        0x00000200
9720: 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74    /* Debug print
9730: 20 53 51 4c 20 61 73 20 69 74 20 65 78 65 63 75   SQL as it execu
9740: 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  tes */.#define S
9750: 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e  QLITE_VdbeListin
9760: 67 20 20 20 20 30 78 30 30 30 30 30 34 30 30 20  g    0x00000400 
9770: 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e   /* Debug listin
9780: 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72  gs of VDBE progr
9790: 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ams */.#define S
97a0: 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d  QLITE_WriteSchem
97b0: 61 20 20 20 20 30 78 30 30 30 30 30 38 30 30 20  a    0x00000800 
97c0: 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65   /* OK to update
97d0: 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a   SQLITE_MASTER *
97e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
97f0: 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65 20  _VdbeAddopTrace 
9800: 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 54  0x00001000  /* T
9810: 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62 65  race sqlite3Vdbe
9820: 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f  AddOp() calls */
9830: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9840: 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30  IgnoreChecks   0
9850: 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20 44 6f  x00002000  /* Do
9860: 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65   not enforce che
9870: 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ck constraints *
9880: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9890: 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64  _ReadUncommitted
98a0: 20 30 78 30 30 30 34 30 30 30 20 20 2f 2a 20 46   0x0004000  /* F
98b0: 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
98c0: 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mode */.#define 
98d0: 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c  SQLITE_LegacyFil
98e0: 65 46 6d 74 20 20 30 78 30 30 30 30 38 30 30 30  eFmt  0x00008000
98f0: 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20    /* Create new 
9900: 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72  databases in for
9910: 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65  mat 1 */.#define
9920: 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79   SQLITE_Recovery
9930: 4d 6f 64 65 20 20 20 30 78 30 30 30 31 30 30 30  Mode   0x0001000
9940: 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68  0  /* Ignore sch
9950: 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64  ema errors */.#d
9960: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76  efine SQLITE_Rev
9970: 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30  erseOrder   0x00
9980: 30 32 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72  020000  /* Rever
9990: 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c  se unordered SEL
99a0: 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ECTs */.#define 
99b0: 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65  SQLITE_RecTrigge
99c0: 72 73 20 20 20 20 30 78 30 30 30 34 30 30 30 30  rs    0x00040000
99d0: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75    /* Enable recu
99e0: 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a  rsive triggers *
99f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9a00: 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20  _ForeignKeys    
9a10: 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45  0x00080000  /* E
9a20: 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b  nforce foreign k
9a30: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20  ey constraints  
9a40: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9a50: 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20  E_AutoIndex     
9a60: 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20   0x00100000  /* 
9a70: 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63  Enable automatic
9a80: 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66   indexes */.#def
9a90: 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65  ine SQLITE_Prefe
9aa0: 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30 32 30  rBuiltin  0x0020
9ab0: 30 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65  0000  /* Prefere
9ac0: 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20  nce to built-in 
9ad0: 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65  funcs */.#define
9ae0: 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65   SQLITE_LoadExte
9af0: 6e 73 69 6f 6e 20 20 30 78 30 30 34 30 30 30 30  nsion  0x0040000
9b00: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61  0  /* Enable loa
9b10: 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23  d_extension */.#
9b20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
9b30: 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 30  ableTrigger  0x0
9b40: 30 38 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65  0800000  /* True
9b50: 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67   to enable trigg
9b60: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
9b70: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20  QLITE_DeferFKs  
9b80: 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30 20       0x01000000 
9b90: 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b   /* Defer all FK
9ba0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
9bb0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
9bc0: 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78  ueryOnly      0x
9bd0: 30 32 30 30 30 30 30 30 20 20 2f 2a 20 44 69 73  02000000  /* Dis
9be0: 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63 68  able database ch
9bf0: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
9c00: 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20   SQLITE_VdbeEQP 
9c10: 20 20 20 20 20 20 20 30 78 30 34 30 30 30 30 30         0x0400000
9c20: 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c  0  /* Debug EXPL
9c30: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a  AIN QUERY PLAN *
9c40: 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f  /.../*.** Bits o
9c50: 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62  f the sqlite3.db
9c60: 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74  OptFlags field t
9c70: 68 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20  hat are used by 
9c80: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74  the.** sqlite3_t
9c90: 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
9ca0: 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49  TE_TESTCTRL_OPTI
9cb0: 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69  MIZATIONS,...) i
9cc0: 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73  nterface to.** s
9cd0: 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62  electively disab
9ce0: 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d  le various optim
9cf0: 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65  izations..*/.#de
9d00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
9d10: 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30  yFlattener 0x000
9d20: 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61  1   /* Query fla
9d30: 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69  ttening */.#defi
9d40: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e  ne SQLITE_Column
9d50: 43 61 63 68 65 20 20 20 20 30 78 30 30 30 32 20  Cache    0x0002 
9d60: 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68    /* Column cach
9d70: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
9d80: 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72  ITE_GroupByOrder
9d90: 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47     0x0004   /* G
9da0: 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20  ROUPBY cover of 
9db0: 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69  ORDERBY */.#defi
9dc0: 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72  ne SQLITE_Factor
9dd0: 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20  OutConst 0x0008 
9de0: 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61    /* Constant fa
9df0: 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20  ctoring */./*   
9e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 74               not
9e10: 20 75 73 65 64 20 20 20 20 30 78 30 30 31 30 20   used    0x0010 
9e20: 20 20 2f 2f 20 57 61 73 3a 20 53 51 4c 49 54 45    // Was: SQLITE
9e30: 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20 2a 2f  _IdxRealAsInt */
9e40: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9e50: 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30  DistinctOpt    0
9e60: 78 30 30 32 30 20 20 20 2f 2a 20 44 49 53 54 49  x0020   /* DISTI
9e70: 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65  NCT using indexe
9e80: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
9e90: 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e  ITE_CoverIdxScan
9ea0: 20 20 20 30 78 30 30 34 30 20 20 20 2f 2a 20 43     0x0040   /* C
9eb0: 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63  overing index sc
9ec0: 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ans */.#define S
9ed0: 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78  QLITE_OrderByIdx
9ee0: 4a 6f 69 6e 20 30 78 30 30 38 30 20 20 20 2f 2a  Join 0x0080   /*
9ef0: 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69   ORDER BY of joi
9f00: 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a  ns via index */.
9f10: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
9f20: 75 62 71 43 6f 72 6f 75 74 69 6e 65 20 20 30 78  ubqCoroutine  0x
9f30: 30 31 30 30 20 20 20 2f 2a 20 45 76 61 6c 75 61  0100   /* Evalua
9f40: 74 65 20 73 75 62 71 75 65 72 69 65 73 20 61 73  te subqueries as
9f50: 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23   coroutines */.#
9f60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72  define SQLITE_Tr
9f70: 61 6e 73 69 74 69 76 65 20 20 20 20 20 30 78 30  ansitive     0x0
9f80: 32 30 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74  200   /* Transit
9f90: 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ive constraints 
9fa0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9fb0: 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20  E_OmitNoopJoin  
9fc0: 20 30 78 30 34 30 30 20 20 20 2f 2a 20 4f 6d 69   0x0400   /* Omi
9fd0: 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20  t unused tables 
9fe0: 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66  in joins */.#def
9ff0: 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61 74 33  ine SQLITE_Stat3
a000: 20 20 20 20 20 20 20 20 20 20 30 78 30 38 30 30            0x0800
a010: 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20 53 51     /* Use the SQ
a020: 4c 49 54 45 5f 53 54 41 54 33 20 74 61 62 6c 65  LITE_STAT3 table
a030: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a040: 54 45 5f 41 64 6a 75 73 74 4f 75 74 45 73 74 20  TE_AdjustOutEst 
a050: 20 20 30 78 31 30 30 30 20 20 20 2f 2a 20 41 64    0x1000   /* Ad
a060: 6a 75 73 74 20 6f 75 74 70 75 74 20 65 73 74 69  just output esti
a070: 6d 61 74 65 73 20 75 73 69 6e 67 20 57 48 45 52  mates using WHER
a080: 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  E */.#define SQL
a090: 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20  ITE_AllOpts     
a0a0: 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41     0xffff   /* A
a0b0: 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ll optimizations
a0c0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f   */../*.** Macro
a0d0: 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68  s for testing wh
a0e0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74  ether or not opt
a0f0: 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65  imizations are e
a100: 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c  nabled or disabl
a110: 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ed..*/.#ifndef S
a120: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
a130: 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e 65 20  IN_TEST.#define 
a140: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61  OptimizationDisa
a150: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
a160: 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61  (((db)->dbOptFla
a170: 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23  gs&(mask))!=0).#
a180: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
a190: 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d  ionEnabled(db, m
a1a0: 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64  ask)   (((db)->d
a1b0: 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29  bOptFlags&(mask)
a1c0: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65 66  )==0).#else.#def
a1d0: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
a1e0: 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  Disabled(db, mas
a1f0: 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20 4f 70  k)  0.#define Op
a200: 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65  timizationEnable
a210: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 31 0a  d(db, mask)   1.
a220: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
a230: 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74 20  turn true if it 
a240: 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e  OK to factor con
a250: 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
a260: 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69  s into the initi
a270: 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64  alization.** cod
a280: 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  e. The argument 
a290: 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63  is a Parse objec
a2a0: 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67  t for the code g
a2b0: 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65  enerator..*/.#de
a2c0: 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72  fine ConstFactor
a2d0: 4f 6b 28 50 29 20 5c 0a 20 20 28 28 50 29 2d 3e  Ok(P) \.  ((P)->
a2e0: 63 6f 6f 6b 69 65 47 6f 74 6f 3e 30 20 26 26 20  cookieGoto>0 && 
a2f0: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
a300: 6c 65 64 28 28 50 29 2d 3e 64 62 2c 53 51 4c 49  led((P)->db,SQLI
a310: 54 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73  TE_FactorOutCons
a320: 74 29 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  t))../*.** Possi
a330: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ble values for t
a340: 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20  he sqlite.magic 
a350: 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75  field..** The nu
a360: 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e  mbers are obtain
a370: 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64  ed at random and
a380: 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c   have no special
a390: 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a   meaning, other.
a3a0: 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69  ** than being di
a3b0: 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20  stinct from one 
a3c0: 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  another..*/.#def
a3d0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
a3e0: 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39  _OPEN     0xa029
a3f0: 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73  a697  /* Databas
a400: 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65  e is open */.#de
a410: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
a420: 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33  C_CLOSED   0x9f3
a430: 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61  c2d33  /* Databa
a440: 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a  se is closed */.
a450: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
a460: 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78  AGIC_SICK     0x
a470: 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72  4b771290  /* Err
a480: 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20  or and awaiting 
a490: 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  close */.#define
a4a0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55   SQLITE_MAGIC_BU
a4b0: 53 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30  SY     0xf03b790
a4c0: 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63  6  /* Database c
a4d0: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20  urrently in use 
a4e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a4f0: 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20  E_MAGIC_ERROR   
a500: 20 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20   0xb5357930  /* 
a510: 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  An SQLITE_MISUSE
a520: 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20   error occurred 
a530: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a540: 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20  E_MAGIC_ZOMBIE  
a550: 20 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20   0x64cffc7f  /* 
a560: 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20  Close with last 
a570: 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20  statement close 
a580: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  */../*.** Each S
a590: 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64  QL function is d
a5a0: 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73  efined by an ins
a5b0: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
a5c0: 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74  lowing.** struct
a5d0: 75 72 65 2e 20 20 41 20 70 6f 69 6e 74 65 72 20  ure.  A pointer 
a5e0: 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
a5f0: 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  e is stored in t
a600: 68 65 20 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a  he sqlite.aFunc.
a610: 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20  ** hash table.  
a620: 57 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75  When multiple fu
a630: 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 74 68 65  nctions have the
a640: 20 73 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20   same name, the 
a650: 68 61 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f  hash table.** po
a660: 69 6e 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64  ints to a linked
a670: 20 6c 69 73 74 20 6f 66 20 74 68 65 73 65 20 73   list of these s
a680: 74 72 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74  tructures..*/.st
a690: 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20  ruct FuncDef {. 
a6a0: 20 69 31 36 20 6e 41 72 67 3b 20 20 20 20 20 20   i16 nArg;      
a6b0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
a6c0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d  of arguments.  -
a6d0: 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65  1 means unlimite
a6e0: 64 20 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63 46  d */.  u16 funcF
a6f0: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53  lags;       /* S
a700: 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  ome combination 
a710: 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a  of SQLITE_FUNC_*
a720: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
a730: 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73  rData;     /* Us
a740: 65 72 20 64 61 74 61 20 70 61 72 61 6d 65 74 65  er data paramete
a750: 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a  r */.  FuncDef *
a760: 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e  pNext;      /* N
a770: 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ext function wit
a780: 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20  h same name */. 
a790: 20 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73   void (*xFunc)(s
a7a0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
a7b0: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
a7c0: 65 2a 2a 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72  e**); /* Regular
a7d0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
a7e0: 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c  oid (*xStep)(sql
a7f0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
a800: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
a810: 2a 29 3b 20 2f 2a 20 41 67 67 72 65 67 61 74 65  *); /* Aggregate
a820: 20 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20   step */.  void 
a830: 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c  (*xFinalize)(sql
a840: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20  ite3_context*); 
a850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a860: 2a 20 41 67 67 72 65 67 61 74 65 20 66 69 6e 61  * Aggregate fina
a870: 6c 69 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72 20  lizer */.  char 
a880: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
a890: 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74  /* SQL name of t
a8a0: 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a  he function. */.
a8b0: 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68    FuncDef *pHash
a8c0: 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77  ;      /* Next w
a8d0: 69 74 68 20 61 20 64 69 66 66 65 72 65 6e 74 20  ith a different 
a8e0: 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d  name but the sam
a8f0: 65 20 68 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63  e hash */.  Func
a900: 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
a910: 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65  tructor;   /* Re
a920: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20  ference counted 
a930: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
a940: 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ion */.};../*.**
a950: 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
a960: 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75  encapsulates a u
a970: 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73  ser-function des
a980: 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b  tructor callback
a990: 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72   (as.** configur
a9a0: 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f  ed using create_
a9b0: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61  function_v2()) a
a9c0: 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63  nd a reference c
a9d0: 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20  ounter. When.** 
a9e0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
a9f0: 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74  v2() is called t
aa00: 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74  o create a funct
aa10: 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72  ion with a destr
aa20: 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67  uctor,.** a sing
aa30: 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  le object of thi
aa40: 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61  s type is alloca
aa50: 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63  ted. FuncDestruc
aa60: 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20  tor.nRef is set 
aa70: 74 6f 20 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65  to .** the numbe
aa80: 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a  r of FuncDef obj
aa90: 65 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69  ects created (ei
aaa0: 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70  ther 1 or 3, dep
aab0: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
aac0: 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20  r.** or not the 
aad0: 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69  specified encodi
aae0: 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59  ng is SQLITE_ANY
aaf0: 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70  ). The FuncDef.p
ab00: 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65  Destructor.** me
ab10: 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20  mber of each of 
ab20: 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20  the new FuncDef 
ab30: 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74  objects is set t
ab40: 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61  o point to the a
ab50: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63  llocated.** Func
ab60: 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a  Destructor..**.*
ab70: 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68  * Thereafter, wh
ab80: 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75  en one of the Fu
ab90: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73  ncDef objects is
aba0: 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65   deleted, the re
abb0: 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74  ference.** count
abc0: 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20   on this object 
abd0: 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20  is decremented. 
abe0: 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20  When it reaches 
abf0: 30 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f  0, the destructo
ac00: 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20  r.** is invoked 
ac10: 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74  and the FuncDest
ac20: 72 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65  ructor structure
ac30: 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63   freed..*/.struc
ac40: 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  t FuncDestructor
ac50: 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20   {.  int nRef;. 
ac60: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
ac70: 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69  )(void *);.  voi
ac80: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b  d *pUserData;.};
ac90: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
aca0: 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63   values for Func
acb0: 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65  Def.flags.  Note
acc0: 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54   that the _LENGT
acd0: 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a  H and _TYPEOF.**
ace0: 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72   values must cor
acf0: 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41  respond to OPFLA
ad00: 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20  G_LENGTHARG and 
ad10: 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
ad20: 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20  .  There.** are 
ad30: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
ad40: 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20  nts in the code 
ad50: 74 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a  to verify this..
ad60: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ad70: 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20  E_FUNC_ENCMASK  
ad80: 30 78 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f  0x003 /* SQLITE_
ad90: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46  UTF8, SQLITE_UTF
ada0: 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20  16BE or UTF16LE 
adb0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
adc0: 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20  E_FUNC_LIKE     
add0: 30 78 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61  0x004 /* Candida
ade0: 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20  te for the LIKE 
adf0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a  optimization */.
ae00: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
ae10: 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78 30  UNC_CASE     0x0
ae20: 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69  08 /* Case-sensi
ae30: 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66  tive LIKE-type f
ae40: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
ae50: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45  ne SQLITE_FUNC_E
ae60: 50 48 45 4d 20 20 20 20 30 78 30 31 30 20 2f 2a  PHEM    0x010 /*
ae70: 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c   Ephemeral.  Del
ae80: 65 74 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f  ete with VDBE */
ae90: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
aea0: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78  FUNC_NEEDCOLL 0x
aeb0: 30 32 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65  020 /* sqlite3Ge
aec0: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d  tFuncCollSeq() m
aed0: 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64 20 2a  ight be called *
aee0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
aef0: 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30  _FUNC_LENGTH   0
af00: 78 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  x040 /* Built-in
af10: 20 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69   length() functi
af20: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
af30: 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46  LITE_FUNC_TYPEOF
af40: 20 20 20 30 78 30 38 30 20 2f 2a 20 42 75 69 6c     0x080 /* Buil
af50: 74 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75  t-in typeof() fu
af60: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
af70: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
af80: 55 4e 54 20 20 20 20 30 78 31 30 30 20 2f 2a 20  UNT    0x100 /* 
af90: 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a  Built-in count(*
afa0: 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23  ) aggregate */.#
afb0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
afc0: 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 32 30  NC_COALESCE 0x20
afd0: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f  0 /* Built-in co
afe0: 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75  alesce() or ifnu
aff0: 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ll() */.#define 
b000: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49  SQLITE_FUNC_UNLI
b010: 4b 45 4c 59 20 30 78 34 30 30 20 2f 2a 20 42 75  KELY 0x400 /* Bu
b020: 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28  ilt-in unlikely(
b030: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
b040: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
b050: 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 38 30 30  C_CONSTANT 0x800
b060: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70   /* Constant inp
b070: 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74  uts give a const
b080: 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 0a 2f  ant output */../
b090: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
b0a0: 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c  ng three macros,
b0b0: 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b   FUNCTION(), LIK
b0c0: 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52  EFUNC() and AGGR
b0d0: 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75  EGATE() are.** u
b0e0: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68  sed to create th
b0f0: 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66  e initializers f
b100: 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73  or the FuncDef s
b110: 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a  tructures..**.**
b120: 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d     FUNCTION(zNam
b130: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
b140: 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
b150: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
b160: 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69   a scalar functi
b170: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  on definition of
b180: 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d   a function zNam
b190: 65 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d  e .**     implem
b1a0: 65 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74  ented by C funct
b1b0: 69 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61  ion xFunc that a
b1c0: 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75  ccepts nArg argu
b1d0: 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20  ments. The.**   
b1e0: 20 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61    value passed a
b1f0: 73 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74  s iArg is cast t
b200: 6f 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20  o a (void*) and 
b210: 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a  made available.*
b220: 2a 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65  *     as the use
b230: 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f  r-data (sqlite3_
b240: 75 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72  user_data()) for
b250: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49   the function. I
b260: 66 20 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65  f .**     argume
b270: 6e 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20  nt bNC is true, 
b280: 74 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  then the SQLITE_
b290: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c  FUNC_NEEDCOLL fl
b2a0: 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  ag is set..**.**
b2b0: 20 20 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61     VFUNCTION(zNa
b2c0: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
b2d0: 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20  bNC, xFunc).**  
b2e0: 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e     Like FUNCTION
b2f0: 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73   except it omits
b300: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
b310: 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a  _CONSTANT flag..
b320: 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54  **.**   AGGREGAT
b330: 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  E(zName, nArg, i
b340: 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c  Arg, bNC, xStep,
b350: 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20   xFinal).**     
b360: 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
b370: 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  n aggregate func
b380: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
b390: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a  implemented by.*
b3a0: 2a 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63  *     the C func
b3b0: 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20  tions xStep and 
b3c0: 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73  xFinal. The firs
b3d0: 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72  t four parameter
b3e0: 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74  s.**     are int
b3f0: 65 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20  erpreted in the 
b400: 73 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20  same way as the 
b410: 66 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65  first 4 paramete
b420: 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e  rs to.**     FUN
b430: 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20  CTION()..**.**  
b440: 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
b450: 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61   nArg, pArg, fla
b460: 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  gs).**     Used 
b470: 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c  to create a scal
b480: 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  ar function defi
b490: 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63  nition of a func
b4a0: 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20  tion zName .**  
b4b0: 20 20 20 74 68 61 74 20 61 63 63 65 70 74 73 20     that accepts 
b4c0: 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61  nArg arguments a
b4d0: 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  nd is implemente
b4e0: 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43  d by a call to C
b4f0: 20 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f   .**     functio
b500: 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75  n likeFunc. Argu
b510: 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73  ment pArg is cas
b520: 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20  t to a (void *) 
b530: 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20  and made.**     
b540: 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65  available as the
b550: 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64   function user-d
b560: 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65  ata (sqlite3_use
b570: 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a  r_data()). The.*
b580: 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c  *     FuncDef.fl
b590: 61 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20  ags variable is 
b5a0: 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
b5b0: 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
b5c0: 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61  lags.**     para
b5d0: 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  meter..*/.#defin
b5e0: 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  e FUNCTION(zName
b5f0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
b600: 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
b610: 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
b620: 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
b630: 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
b640: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
b650: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
b660: 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
b670: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
b680: 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64  #zName, 0, 0}.#d
b690: 65 66 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28  efine VFUNCTION(
b6a0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
b6b0: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
b6c0: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
b6d0: 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
b6e0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
b6f0: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
b700: 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
b710: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
b720: 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64  #zName, 0, 0}.#d
b730: 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28  efine FUNCTION2(
b740: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
b750: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65  g, bNC, xFunc, e
b760: 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b  xtraFlags) \.  {
b770: 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43  nArg,SQLITE_FUNC
b780: 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
b790: 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
b7a0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
b7b0: 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20  |extraFlags,\.  
b7c0: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
b7d0: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
b7e0: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
b7f0: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
b800: 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  STR_FUNCTION(zNa
b810: 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20  me, nArg, pArg, 
b820: 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
b830: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
b840: 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
b850: 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
b860: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
b870: 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30  L), \.   pArg, 0
b880: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  , xFunc, 0, 0, #
b890: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
b8a0: 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e  fine LIKEFUNC(zN
b8b0: 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20  ame, nArg, arg, 
b8c0: 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  flags) \.  {nArg
b8d0: 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  , SQLITE_FUNC_CO
b8e0: 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
b8f0: 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28  F8|flags, \.   (
b900: 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c  void *)arg, 0, l
b910: 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  ikeFunc, 0, 0, #
b920: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
b930: 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a  fine AGGREGATE(z
b940: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
b950: 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e   nc, xStep, xFin
b960: 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  al) \.  {nArg, S
b970: 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53  QLITE_UTF8|(nc*S
b980: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
b990: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
b9a0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67  E_INT_TO_PTR(arg
b9b0: 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70 2c 78  ), 0, 0, xStep,x
b9c0: 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30  Final,#zName,0,0
b9d0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72  }../*.** All cur
b9e0: 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20  rent savepoints 
b9f0: 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
ba00: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72  linked list star
ba10: 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74  ting at.** sqlit
ba20: 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54  e3.pSavepoint. T
ba30: 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
ba40: 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20   in the list is 
ba50: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c  the most recentl
ba60: 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65  y.** opened save
ba70: 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74  point. Savepoint
ba80: 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 74  s are added to t
ba90: 68 65 20 6c 69 73 74 20 62 79 20 74 68 65 20 76  he list by the v
baa0: 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f  dbe.** OP_Savepo
bab0: 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  int instruction.
bac0: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70  .*/.struct Savep
bad0: 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a  oint {.  char *z
bae0: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
baf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bb00: 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28  Savepoint name (
bb10: 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20  nul-terminated) 
bb20: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
bb30: 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  edCons;         
bb40: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
bb50: 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 66  er of deferred f
bb60: 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a  k violations */.
bb70: 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49    i64 nDeferredI
bb80: 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  mmCons;         
bb90: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
bba0: 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d 20  of deferred imm 
bbb0: 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69  fk. */.  Savepoi
bbc0: 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  nt *pNext;      
bbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bbe0: 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  Parent savepoint
bbf0: 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a   (if any) */.};.
bc00: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
bc10: 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61 73  wing are used as
bc20: 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61   the second para
bc30: 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  meter to sqlite3
bc40: 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20  Savepoint(),.** 
bc50: 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61 72  and as the P1 ar
bc60: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50  gument to the OP
bc70: 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
bc80: 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69  uction..*/.#defi
bc90: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  ne SAVEPOINT_BEG
bca0: 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e  IN      0.#defin
bcb0: 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  e SAVEPOINT_RELE
bcc0: 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65  ASE    1.#define
bcd0: 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42   SAVEPOINT_ROLLB
bce0: 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20  ACK   2.../*.** 
bcf0: 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75  Each SQLite modu
bd00: 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c  le (virtual tabl
bd10: 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73  e definition) is
bd20: 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a   defined by an.*
bd30: 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
bd40: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
bd50: 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e  cture, stored in
bd60: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f   the sqlite3.aMo
bd70: 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62  dule.** hash tab
bd80: 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f  le..*/.struct Mo
bd90: 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73  dule {.  const s
bda0: 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
bdb0: 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a  Module;       /*
bdc0: 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65   Callback pointe
bdd0: 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  rs */.  const ch
bde0: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
bdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
be00: 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63  Name passed to c
be10: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
be20: 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20  /.  void *pAux; 
be30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be40: 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78           /* pAux
be50: 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
be60: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
be70: 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
be80: 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20  (void *);       
be90: 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64       /* Module d
bea0: 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69  estructor functi
beb0: 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  on */.};../*.** 
bec0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
bed0: 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66  t each column of
bee0: 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73   an SQL table is
bef0: 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74   held in an inst
bf00: 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
bf10: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
bf20: 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20  ruct Column {.  
bf30: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
bf40: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
bf50: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70   column */.  Exp
bf60: 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a  r *pDflt;     /*
bf70: 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   Default value o
bf80: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  f this column */
bf90: 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b 20  .  char *zDflt; 
bfa0: 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20      /* Original 
bfb0: 74 65 78 74 20 6f 66 20 74 68 65 20 64 65 66 61  text of the defa
bfc0: 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 63  ult value */.  c
bfd0: 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 20 20 20  har *zType;     
bfe0: 2f 2a 20 44 61 74 61 20 74 79 70 65 20 66 6f 72  /* Data type for
bff0: 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   this column */.
c000: 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20    char *zColl;  
c010: 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
c020: 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55  sequence.  If NU
c030: 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66 61  LL, use the defa
c040: 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e  ult */.  u8 notN
c050: 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  ull;      /* An 
c060: 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e  OE_ code for han
c070: 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c  dling a NOT NULL
c080: 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20   constraint */. 
c090: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
c0a0: 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20    /* One of the 
c0b0: 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76  SQLITE_AFF_... v
c0c0: 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a  alues */.  u8 sz
c0d0: 45 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 45  Est;        /* E
c0e0: 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66  stimated size of
c0f0: 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 20 49   this column.  I
c100: 4e 54 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f  NT==1 */.  u8 co
c110: 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 42  lFlags;     /* B
c120: 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65  oolean propertie
c130: 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f  s.  See COLFLAG_
c140: 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a   defines below *
c150: 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  /.};../* Allowed
c160: 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75   values for Colu
c170: 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a  mn.colFlags:.*/.
c180: 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
c190: 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20  PRIMKEY  0x0001 
c1a0: 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20     /* Column is 
c1b0: 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d  part of the prim
c1c0: 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  ary key */.#defi
c1d0: 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45  ne COLFLAG_HIDDE
c1e0: 4e 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a  N   0x0002    /*
c1f0: 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e   A hidden column
c200: 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61   in a virtual ta
c210: 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  ble */../*.** A 
c220: 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65  "Collating Seque
c230: 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65 64 20  nce" is defined 
c240: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
c250: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
c260: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f  ** structure. Co
c270: 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f  nceptually, a co
c280: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
c290: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e   consists of a n
c2a0: 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d  ame and.** a com
c2b0: 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20  parison routine 
c2c0: 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
c2d0: 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20 73   order of that s
c2e0: 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49  equence..**.** I
c2f0: 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69  f CollSeq.xCmp i
c300: 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73  s NULL, it means
c310: 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c   that the.** col
c320: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
c330: 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 49  is undefined.  I
c340: 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e 20  ndices built on 
c350: 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20  an undefined.** 
c360: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
c370: 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 65  ce may not be re
c380: 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a  ad or written..*
c390: 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71  /.struct CollSeq
c3a0: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
c3b0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  ;          /* Na
c3c0: 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74  me of the collat
c3d0: 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55 54  ing sequence, UT
c3e0: 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20  F-8 encoded */. 
c3f0: 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
c400: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
c410: 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20  ncoding handled 
c420: 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76  by xCmp() */.  v
c430: 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20  oid *pUser;     
c440: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
c450: 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29  gument to xCmp()
c460: 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70   */.  int (*xCmp
c470: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
c480: 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  st void*, int, c
c490: 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76  onst void*);.  v
c4a0: 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64  oid (*xDel)(void
c4b0: 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74  *);  /* Destruct
c4c0: 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a  or for pUser */.
c4d0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74  };../*.** A sort
c4e0: 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65 69   order can be ei
c4f0: 74 68 65 72 20 41 53 43 20 6f 72 20 44 45 53 43  ther ASC or DESC
c500: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
c510: 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20 20  ITE_SO_ASC      
c520: 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61   0  /* Sort in a
c530: 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a  scending order *
c540: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c550: 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31 20  _SO_DESC      1 
c560: 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65   /* Sort in asce
c570: 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 0a  nding order */..
c580: 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66  /*.** Column aff
c590: 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a  inity types..**.
c5a0: 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74 6f  ** These used to
c5b0: 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e   have mnemonic n
c5c0: 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f 72  ame like 'i' for
c5d0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
c5e0: 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66  GER and.** 't' f
c5f0: 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  or SQLITE_AFF_TE
c600: 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e 20  XT.  But we can 
c610: 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73 70  save a little sp
c620: 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a  ace and improve.
c630: 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20 6c  ** the speed a l
c640: 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72 69  ittle by numberi
c650: 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f  ng the values co
c660: 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20 0a 2a  nsecutively.  .*
c670: 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72 20  *.** But rather 
c680: 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68 20  than start with 
c690: 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69 6e  0 or 1, we begin
c6a0: 20 77 69 74 68 20 27 61 27 2e 20 20 54 68 61 74   with 'a'.  That
c6b0: 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75   way,.** when mu
c6c0: 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79 20  ltiple affinity 
c6d0: 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61 74  types are concat
c6e0: 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73 74  enated into a st
c6f0: 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64  ring and.** used
c700: 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72 61   as the P4 opera
c710: 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62 65  nd, they will be
c720: 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e 0a   more readable..
c730: 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20  **.** Note also 
c740: 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69 63  that the numeric
c750: 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75 70   types are group
c760: 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20 74  ed together so t
c770: 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66  hat testing.** f
c780: 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79 70  or a numeric typ
c790: 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f  e is a single co
c7a0: 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f 0a 23 64 65  mparison..*/.#de
c7b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
c7c0: 54 45 58 54 20 20 20 20 20 27 61 27 0a 23 64 65  TEXT     'a'.#de
c7d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
c7e0: 4e 4f 4e 45 20 20 20 20 20 27 62 27 0a 23 64 65  NONE     'b'.#de
c7f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
c800: 4e 55 4d 45 52 49 43 20 20 27 63 27 0a 23 64 65  NUMERIC  'c'.#de
c810: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
c820: 49 4e 54 45 47 45 52 20 20 27 64 27 0a 23 64 65  INTEGER  'd'.#de
c830: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
c840: 52 45 41 4c 20 20 20 20 20 27 65 27 0a 0a 23 64  REAL     'e'..#d
c850: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
c860: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58  umericAffinity(X
c870: 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f  )  ((X)>=SQLITE_
c880: 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a  AFF_NUMERIC)../*
c890: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
c8a0: 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d  FF_MASK values m
c8b0: 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67  asks off the sig
c8c0: 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66  nificant bits of
c8d0: 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20   an.** affinity 
c8e0: 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69  value. .*/.#defi
c8f0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  ne SQLITE_AFF_MA
c900: 53 4b 20 20 20 20 20 30 78 36 37 0a 0a 2f 2a 0a  SK     0x67../*.
c910: 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69  ** Additional bi
c920: 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63 61  t values that ca
c930: 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20 61  n be ORed with a
c940: 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f  n affinity witho
c950: 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74  ut.** changing t
c960: 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2f 0a  he affinity..*/.
c970: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a  #define SQLITE_J
c980: 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 30 38  UMPIFNULL   0x08
c990: 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69    /* jumps if ei
c9a0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
c9b0: 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
c9c0: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20  SQLITE_STOREP2  
c9d0: 20 20 20 20 30 78 31 30 20 20 2f 2a 20 53 74 6f      0x10  /* Sto
c9e0: 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  re result in reg
c9f0: 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e  [P2] rather than
ca00: 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65   jump */.#define
ca10: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20   SQLITE_NULLEQ  
ca20: 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55       0x80  /* NU
ca30: 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a  LL=NULL */../*.*
ca40: 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74  * An object of t
ca50: 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65 61  his type is crea
ca60: 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69 72  ted for each vir
ca70: 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65  tual table prese
ca80: 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74  nt in.** the dat
ca90: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 0a 2a  abase schema. .*
caa0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61  *.** If the data
cab0: 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73  base schema is s
cac0: 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72  hared, then ther
cad0: 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63  e is one instanc
cae0: 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72  e of this.** str
caf0: 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68 20  ucture for each 
cb00: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
cb10: 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74  ion (sqlite3*) t
cb20: 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68 61  hat uses the sha
cb30: 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54  red.** schema. T
cb40: 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20 65  his is because e
cb50: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
cb60: 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73  nection requires
cb70: 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a   its own unique.
cb80: 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
cb90: 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  he sqlite3_vtab*
cba0: 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20   handle used to 
cbb0: 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75  access the virtu
cbc0: 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20 69 6d 70  al table .** imp
cbd0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c  lementation. sql
cbe0: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
cbf0: 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68  es can not be sh
cc00: 61 72 65 64 20 62 65 74 77 65 65 6e 20 0a 2a 2a  ared between .**
cc10: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
cc20: 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e  tions, even when
cc30: 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65   the rest of the
cc40: 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62   in-memory datab
cc50: 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d 61 20 69  ase .** schema i
cc60: 73 20 73 68 61 72 65 64 2c 20 61 73 20 74 68 65  s shared, as the
cc70: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
cc80: 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65  often stores the
cc90: 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
cca0: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70  nection handle p
ccb0: 61 73 73 65 64 20 74 6f 20 69 74 20 76 69 61 20  assed to it via 
ccc0: 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f  the xConnect() o
ccd0: 72 20 78 43 72 65 61 74 65 28 29 20 6d 65 74 68  r xCreate() meth
cce0: 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69  od.** during ini
ccf0: 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65  tialization inte
cd00: 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74  rnally. This dat
cd10: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
cd20: 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74   handle may.** t
cd30: 68 65 6e 20 62 65 20 75 73 65 64 20 62 79 20 74  hen be used by t
cd40: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
cd50: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
cd60: 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20 74  to access real t
cd70: 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74 68 69 6e  ables .** within
cd80: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 53   the database. S
cd90: 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70 65  o that they appe
cda0: 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ar as part of th
cdb0: 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a 20 74 72  e callers .** tr
cdc0: 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73 65  ansaction, these
cdd0: 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20 74   accesses need t
cde0: 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74 68  o be made via th
cdf0: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
ce00: 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  .** connection a
ce10: 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20 65  s that used to e
ce20: 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61  xecute SQL opera
ce30: 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72  tions on the vir
ce40: 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  tual table..**.*
ce50: 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a  * All VTable obj
ce60: 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65 73  ects that corres
ce70: 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65  pond to a single
ce80: 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72   table in a shar
ce90: 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73  ed.** database s
cea0: 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61  chema are initia
ceb0: 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20  lly stored in a 
cec0: 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e  linked-list poin
ced0: 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65  ted to by.** the
cee0: 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d   Table.pVTable m
cef0: 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f  ember variable o
cf00: 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  f the correspond
cf10: 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74  ing Table object
cf20: 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c  ..** When an sql
cf30: 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f  ite3_prepare() o
cf40: 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75  peration is requ
cf50: 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  ired to access t
cf60: 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  he virtual.** ta
cf70: 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65 73  ble, it searches
cf80: 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68   the list for th
cf90: 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f  e VTable that co
cfa0: 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
cfb0: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
cfc0: 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68  nection doing th
cfd0: 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61  e preparing so a
cfe0: 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72  s to use the cor
cff0: 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  rect.** sqlite3_
d000: 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20  vtab* handle in 
d010: 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65  the compiled que
d020: 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61  ry..**.** When a
d030: 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c  n in-memory Tabl
d040: 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65  e object is dele
d050: 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65  ted (for example
d060: 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68   when the.** sch
d070: 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c  ema is being rel
d080: 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72  oaded for some r
d090: 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62  eason), the VTab
d0a0: 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e  le objects are n
d0b0: 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61  ot .** deleted a
d0c0: 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  nd the sqlite3_v
d0d0: 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65  tab* handles are
d0e0: 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74   not xDisconnect
d0f0: 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65 64 69 61  ()ed .** immedia
d100: 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74  tely. Instead, t
d110: 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72  hey are moved fr
d120: 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54  om the Table.pVT
d130: 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20  able list to.** 
d140: 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c  another linked l
d150: 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74 68  ist headed by th
d160: 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f  e sqlite3.pDisco
d170: 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20  nnect member of 
d180: 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
d190: 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72  ding sqlite3 str
d1a0: 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72 65  ucture. They are
d1b0: 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44   then deleted/xD
d1c0: 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a 20  isconnected .** 
d1d0: 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61 74  next time a stat
d1e0: 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65  ement is prepare
d1f0: 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c  d using said sql
d200: 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64  ite3*. This is d
d210: 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20  one.** to avoid 
d220: 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20  deadlock issues 
d230: 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70  involving multip
d240: 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  le sqlite3.mutex
d250: 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66   mutexes..** Ref
d260: 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61  er to comments a
d270: 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71  bove function sq
d280: 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
d290: 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20  ist() for an.** 
d2a0: 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74  explanation as t
d2b0: 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66 65  o why it is safe
d2c0: 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79   to add an entry
d2d0: 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70   to an sqlite3.p
d2e0: 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69  Disconnect.** li
d2f0: 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69  st without holdi
d300: 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ng the correspon
d310: 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74  ding sqlite3.mut
d320: 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20  ex mutex..**.** 
d330: 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f  The memory for o
d340: 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20 74  bjects of this t
d350: 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c  ype is always al
d360: 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a 20 73  located by .** s
d370: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29  qlite3DbMalloc()
d380: 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e  , using the conn
d390: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74  ection handle st
d3a0: 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64  ored in VTable.d
d3b0: 62 20 61 73 20 0a 2a 2a 20 74 68 65 20 66 69 72  b as .** the fir
d3c0: 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  st argument..*/.
d3d0: 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a  struct VTable {.
d3e0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
d400: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
d410: 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  on associated wi
d420: 74 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  th this table */
d430: 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b  .  Module *pMod;
d440: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d450: 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c  Pointer to modul
d460: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
d470: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   */.  sqlite3_vt
d480: 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20  ab *pVtab;      
d490: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74  /* Pointer to vt
d4a0: 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20  ab instance */. 
d4b0: 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
d4c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
d4d0: 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73  mber of pointers
d4e0: 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
d4f0: 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73  re */.  u8 bCons
d500: 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20  traint;         
d510: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e    /* True if con
d520: 73 74 72 61 69 6e 74 73 20 61 72 65 20 73 75 70  straints are sup
d530: 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20  ported */.  int 
d540: 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  iSavepoint;     
d550: 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f        /* Depth o
d560: 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20  f the SAVEPOINT 
d570: 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c  stack */.  VTabl
d580: 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  e *pNext;       
d590: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20       /* Next in 
d5a0: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65  linked list (see
d5b0: 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f   above) */.};../
d5c0: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 74 61  *.** Each SQL ta
d5d0: 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e 74  ble is represent
d5e0: 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
d5f0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
d600: 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20  he.** following 
d610: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
d620: 20 54 61 62 6c 65 2e 7a 4e 61 6d 65 20 69 73 20   Table.zName is 
d630: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
d640: 74 61 62 6c 65 2e 20 20 54 68 65 20 63 61 73 65  table.  The case
d650: 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   of the original
d660: 0a 2a 2a 20 43 52 45 41 54 45 20 54 41 42 4c 45  .** CREATE TABLE
d670: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 74   statement is st
d680: 6f 72 65 64 2c 20 62 75 74 20 63 61 73 65 20 69  ored, but case i
d690: 73 20 6e 6f 74 20 73 69 67 6e 69 66 69 63 61 6e  s not significan
d6a0: 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72 69  t for.** compari
d6b0: 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c  sons..**.** Tabl
d6c0: 65 2e 6e 43 6f 6c 20 69 73 20 74 68 65 20 6e 75  e.nCol is the nu
d6d0: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
d6e0: 69 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 20  in this table.  
d6f0: 54 61 62 6c 65 2e 61 43 6f 6c 20 69 73 20 61 0a  Table.aCol is a.
d700: 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e  ** pointer to an
d710: 20 61 72 72 61 79 20 6f 66 20 43 6f 6c 75 6d 6e   array of Column
d720: 20 73 74 72 75 63 74 75 72 65 73 2c 20 6f 6e 65   structures, one
d730: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
d740: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 74  ..**.** If the t
d750: 61 62 6c 65 20 68 61 73 20 61 6e 20 49 4e 54 45  able has an INTE
d760: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
d770: 20 74 68 65 6e 20 54 61 62 6c 65 2e 69 50 4b 65   then Table.iPKe
d780: 79 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  y is the index o
d790: 66 0a 2a 2a 20 74 68 65 20 63 6f 6c 75 6d 6e 20  f.** the column 
d7a0: 74 68 61 74 20 69 73 20 74 68 61 74 20 6b 65 79  that is that key
d7b0: 2e 20 20 20 4f 74 68 65 72 77 69 73 65 20 54 61  .   Otherwise Ta
d7c0: 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 6e 65 67  ble.iPKey is neg
d7d0: 61 74 69 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a 20  ative.  Note.** 
d7e0: 74 68 61 74 20 74 68 65 20 64 61 74 61 74 79 70  that the datatyp
d7f0: 65 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59  e of the PRIMARY
d800: 20 4b 45 59 20 6d 75 73 74 20 62 65 20 49 4e 54   KEY must be INT
d810: 45 47 45 52 20 66 6f 72 20 74 68 69 73 20 66 69  EGER for this fi
d820: 65 6c 64 20 74 6f 0a 2a 2a 20 62 65 20 73 65 74  eld to.** be set
d830: 2e 20 20 41 6e 20 49 4e 54 45 47 45 52 20 50 52  .  An INTEGER PR
d840: 49 4d 41 52 59 20 4b 45 59 20 69 73 20 75 73 65  IMARY KEY is use
d850: 64 20 61 73 20 74 68 65 20 72 6f 77 69 64 20 66  d as the rowid f
d860: 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 0a 2a  or each row of.*
d870: 2a 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66  * the table.  If
d880: 20 61 20 74 61 62 6c 65 20 68 61 73 20 6e 6f 20   a table has no 
d890: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
d8a0: 4b 45 59 2c 20 74 68 65 6e 20 61 20 72 61 6e 64  KEY, then a rand
d8b0: 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20 69 73 20 67  om rowid.** is g
d8c0: 65 6e 65 72 61 74 65 64 20 66 6f 72 20 65 61 63  enerated for eac
d8d0: 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74 61 62  h row of the tab
d8e0: 6c 65 2e 20 20 54 46 5f 48 61 73 50 72 69 6d 61  le.  TF_HasPrima
d8f0: 72 79 4b 65 79 20 69 73 20 73 65 74 20 69 66 0a  ryKey is set if.
d900: 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 68 61 73  ** the table has
d910: 20 61 6e 79 20 50 52 49 4d 41 52 59 20 4b 45 59   any PRIMARY KEY
d920: 2c 20 49 4e 54 45 47 45 52 20 6f 72 20 6f 74 68  , INTEGER or oth
d930: 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 61  erwise..**.** Ta
d940: 62 6c 65 2e 74 6e 75 6d 20 69 73 20 74 68 65 20  ble.tnum is the 
d950: 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
d960: 74 68 65 20 72 6f 6f 74 20 42 54 72 65 65 20 70  the root BTree p
d970: 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  age of the table
d980: 20 69 6e 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   in the.** datab
d990: 61 73 65 20 66 69 6c 65 2e 20 20 49 66 20 54 61  ase file.  If Ta
d9a0: 62 6c 65 2e 69 44 62 20 69 73 20 74 68 65 20 69  ble.iDb is the i
d9b0: 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
d9c0: 62 61 73 65 20 74 61 62 6c 65 20 62 61 63 6b 65  base table backe
d9d0: 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c 69 74 65 2e  nd.** in sqlite.
d9e0: 61 44 62 5b 5d 2e 20 20 30 20 69 73 20 66 6f 72  aDb[].  0 is for
d9f0: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
da00: 73 65 20 61 6e 64 20 31 20 69 73 20 66 6f 72 20  se and 1 is for 
da10: 74 68 65 20 66 69 6c 65 20 74 68 61 74 0a 2a 2a  the file that.**
da20: 20 68 6f 6c 64 73 20 74 65 6d 70 6f 72 61 72 79   holds temporary
da30: 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69   tables and indi
da40: 63 65 73 2e 20 20 49 66 20 54 46 5f 45 70 68 65  ces.  If TF_Ephe
da50: 6d 65 72 61 6c 20 69 73 20 73 65 74 0a 2a 2a 20  meral is set.** 
da60: 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69  then the table i
da70: 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 66 69  s stored in a fi
da80: 6c 65 20 74 68 61 74 20 69 73 20 61 75 74 6f 6d  le that is autom
da90: 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64  atically deleted
daa0: 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20 56 44 42  .** when the VDB
dab0: 45 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20  E cursor to the 
dac0: 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64 2e  table is closed.
dad0: 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 54    In this case T
dae0: 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72 65  able.tnum .** re
daf0: 66 65 72 73 20 56 44 42 45 20 63 75 72 73 6f 72  fers VDBE cursor
db00: 20 6e 75 6d 62 65 72 20 74 68 61 74 20 68 6f 6c   number that hol
db10: 64 73 20 74 68 65 20 74 61 62 6c 65 20 6f 70 65  ds the table ope
db20: 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65 20 72 6f  n, not to the ro
db30: 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75 6d 62 65  ot.** page numbe
db40: 72 2e 20 20 54 72 61 6e 73 69 65 6e 74 20 74 61  r.  Transient ta
db50: 62 6c 65 73 20 61 72 65 20 75 73 65 64 20 74 6f  bles are used to
db60: 20 68 6f 6c 64 20 74 68 65 20 72 65 73 75 6c 74   hold the result
db70: 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62 2d 71 75  s of a.** sub-qu
db80: 65 72 79 20 74 68 61 74 20 61 70 70 65 61 72 73  ery that appears
db90: 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 72 65   instead of a re
dba0: 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e  al table name in
dbb0: 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
dbc0: 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c 45 43 54   .** of a SELECT
dbd0: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73   statement..*/.s
dbe0: 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20  truct Table {.  
dbf0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
dc00: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
dc10: 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65  the table or vie
dc20: 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61  w */.  Column *a
dc30: 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49  Col;        /* I
dc40: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
dc50: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
dc60: 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b    Index *pIndex;
dc70: 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
dc80: 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e  f SQL indexes on
dc90: 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a   this table. */.
dca0: 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
dcb0: 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66  t;     /* NULL f
dcc0: 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e  or tables.  Poin
dcd0: 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e  ts to definition
dce0: 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20   if a view. */. 
dcf0: 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20   FKey *pFKey;   
dd00: 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20        /* Linked 
dd10: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65  list of all fore
dd20: 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73  ign keys in this
dd30: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72   table */.  char
dd40: 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20   *zColAff;      
dd50: 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e   /* String defin
dd60: 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79  ing the affinity
dd70: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
dd80: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
dd90: 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20 45  E_OMIT_CHECK.  E
dda0: 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b  xprList *pCheck;
ddb0: 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b      /* All CHECK
ddc0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
ddd0: 23 65 6e 64 69 66 0a 20 20 74 52 6f 77 63 6e 74  #endif.  tRowcnt
dde0: 20 6e 52 6f 77 45 73 74 3b 20 20 20 20 20 2f 2a   nRowEst;     /*
ddf0: 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20   Estimated rows 
de00: 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20  in table - from 
de10: 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
de20: 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d  le */.  int tnum
de30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
de40: 52 6f 6f 74 20 42 54 72 65 65 20 6e 6f 64 65 20  Root BTree node 
de50: 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 28  for this table (
de60: 73 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 29 20  see note above) 
de70: 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20  */.  i16 iPKey; 
de80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20            /* If 
de90: 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73  not negative, us
dea0: 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73  e aCol[iPKey] as
deb0: 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
dec0: 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20   */.  i16 nCol; 
ded0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
dee0: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
def0: 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
df00: 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20  .  u16 nRef;    
df10: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
df20: 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
df30: 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20   this Table */. 
df40: 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f 77   LogEst szTabRow
df50: 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74  ;     /* Estimat
df60: 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20  ed size of each 
df70: 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79 74  table row in byt
df80: 65 73 20 2a 2f 0a 20 20 75 38 20 74 61 62 46 6c  es */.  u8 tabFl
df90: 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ags;         /* 
dfa0: 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c  Mask of TF_* val
dfb0: 75 65 73 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43  ues */.  u8 keyC
dfc0: 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
dfd0: 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63   What to do in c
dfe0: 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73  ase of uniquenes
dff0: 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50  s conflict on iP
e000: 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  Key */.#ifndef S
e010: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
e020: 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43  TABLE.  int addC
e030: 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20  olOffset;    /* 
e040: 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45  Offset in CREATE
e050: 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61   TABLE stmt to a
e060: 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20  dd a new column 
e070: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
e080: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
e090: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
e0a0: 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20   nModuleArg;    
e0b0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
e0c0: 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20  rguments to the 
e0d0: 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72  module */.  char
e0e0: 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20   **azModuleArg; 
e0f0: 20 2f 2a 20 54 65 78 74 20 6f 66 20 61 6c 6c 20   /* Text of all 
e100: 6d 6f 64 75 6c 65 20 61 72 67 73 2e 20 5b 30 5d  module args. [0]
e110: 20 69 73 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 20   is module name 
e120: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54  */.  VTable *pVT
e130: 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73  able;     /* Lis
e140: 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65  t of VTable obje
e150: 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  cts. */.#endif. 
e160: 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
e170: 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  er;   /* List of
e180: 20 74 72 69 67 67 65 72 73 20 73 74 6f 72 65 64   triggers stored
e190: 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20   in pSchema */. 
e1a0: 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
e1b0: 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20  ;     /* Schema 
e1c0: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
e1d0: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61  is table */.  Ta
e1e0: 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65  ble *pNextZombie
e1f0: 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68  ;  /* Next on th
e200: 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54  e Parse.pZombieT
e210: 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  ab list */.};../
e220: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
e230: 75 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61  ues for Table.ta
e240: 62 46 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69  bFlags..*/.#defi
e250: 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20  ne TF_Readonly  
e260: 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
e270: 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65   Read-only syste
e280: 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  m table */.#defi
e290: 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20  ne TF_Ephemeral 
e2a0: 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a        0x02    /*
e2b0: 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61   An ephemeral ta
e2c0: 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
e2d0: 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20  F_HasPrimaryKey 
e2e0: 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 61 62    0x04    /* Tab
e2f0: 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61 72 79  le has a primary
e300: 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
e310: 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  TF_Autoincrement
e320: 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 49 6e     0x08    /* In
e330: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
e340: 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65  y is autoincreme
e350: 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  nt */.#define TF
e360: 5f 56 69 72 74 75 61 6c 20 20 20 20 20 20 20 20  _Virtual        
e370: 20 30 78 31 30 20 20 20 20 2f 2a 20 49 73 20 61   0x10    /* Is a
e380: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
e390: 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74  /.#define TF_Wit
e3a0: 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 32  houtRowid    0x2
e3b0: 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64  0    /* No rowid
e3c0: 20 75 73 65 64 2e 20 50 52 49 4d 41 52 59 20 4b   used. PRIMARY K
e3d0: 45 59 20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f  EY is the key */
e3e0: 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65 63 75  .#define TF_Recu
e3f0: 72 73 69 76 65 20 20 20 20 20 20 20 30 78 34 30  rsive       0x40
e400: 20 20 20 20 2f 2a 20 52 65 63 75 72 73 69 76 65      /* Recursive
e410: 20 72 65 66 65 72 65 6e 63 65 20 77 69 74 68 69   reference withi
e420: 6e 20 43 54 45 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  n CTE */.../*.**
e430: 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65   Test to see whe
e440: 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61  ther or not a ta
e450: 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c  ble is a virtual
e460: 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73   table.  This is
e470: 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61  .** done as a ma
e480: 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77  cro so that it w
e490: 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64  ill be optimized
e4a0: 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61   out when virtua
e4b0: 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f  l.** table suppo
e4c0: 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  rt is omitted fr
e4d0: 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f  om the build..*/
e4e0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
e4f0: 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
e500: 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  E.#  define IsVi
e510: 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28  rtual(X)      ((
e520: 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
e530: 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29 0a  TF_Virtual)!=0).
e540: 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
e550: 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58  enColumn(X) (((X
e560: 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
e570: 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
e580: 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  ).#else.#  defin
e590: 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20  e IsVirtual(X)  
e5a0: 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20      0.#  define 
e5b0: 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
e5c0: 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44  ) 0.#endif../* D
e5d0: 6f 65 73 20 74 68 65 20 74 61 62 6c 65 20 68 61  oes the table ha
e5e0: 76 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64  ve a rowid */.#d
e5f0: 65 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58  efine HasRowid(X
e600: 29 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62  )     (((X)->tab
e610: 46 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f  Flags & TF_Witho
e620: 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a  utRowid)==0)../*
e630: 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e  .** Each foreign
e640: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
e650: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
e660: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
e670: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
e680: 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69   A foreign key i
e690: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
e6a0: 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54  h two tables.  T
e6b0: 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20  he "from" table 
e6c0: 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  is.** the table 
e6d0: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
e6e0: 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
e6f0: 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73  use that creates
e700: 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
e710: 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74  key.  The "to" t
e720: 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c  able is the tabl
e730: 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20  e that is named 
e740: 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  in the REFERENCE
e750: 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e  S clause..** Con
e760: 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70  sider this examp
e770: 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  le:.**.**     CR
e780: 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a  EATE TABLE ex1(.
e790: 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47  **       a INTEG
e7a0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
e7b0: 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47  **       b INTEG
e7c0: 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b  ER CONSTRAINT fk
e7d0: 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32  1 REFERENCES ex2
e7e0: 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a  (x).**     );.**
e7f0: 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20  .** For foreign 
e800: 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66  key "fk1", the f
e810: 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78  rom-table is "ex
e820: 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61  1" and the to-ta
e830: 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a  ble is "ex2"..**
e840: 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65   Equivalent name
e850: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f  s:.**.**     fro
e860: 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64  m-table == child
e870: 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  -table.**       
e880: 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65  to-table == pare
e890: 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45  nt-table.**.** E
e8a0: 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63  ach REFERENCES c
e8b0: 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20  lause generates 
e8c0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
e8d0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
e8e0: 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20  ucture.** which 
e8f0: 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
e900: 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20  he from-table.  
e910: 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65  The to-table nee
e920: 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e  d not exist when
e930: 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  .** the from-tab
e940: 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20  le is created.  
e950: 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66  The existence of
e960: 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
e970: 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a   not checked..**
e980: 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20  .** The list of 
e990: 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20  all parents for 
e9a0: 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73  child Table X is
e9b0: 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79   held at X.pFKey
e9c0: 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ..**.** A list o
e9d0: 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66  f all children f
e9e0: 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64  or a table named
e9f0: 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20   Z (which might 
ea00: 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a  not even exist).
ea10: 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63  ** is held in Sc
ea20: 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69  hema.fkeyHash wi
ea30: 74 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66  th a hash key of
ea40: 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b   Z..*/.struct FK
ea50: 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46  ey {.  Table *pF
ea60: 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c  rom;     /* Tabl
ea70: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
ea80: 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
ea90: 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20  se (aka: Child) 
eaa0: 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
eab0: 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46  From;  /* Next F
eac0: 4b 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d  Key with the sam
ead0: 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74  e in pFrom. Next
eae0: 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d   parent of pFrom
eaf0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b   */.  char *zTo;
eb00: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
eb10: 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  of table that th
eb20: 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20  e key points to 
eb30: 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f  (aka: Parent) */
eb40: 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f  .  FKey *pNextTo
eb50: 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74  ;    /* Next wit
eb60: 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20  h the same zTo. 
eb70: 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54  Next child of zT
eb80: 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50  o. */.  FKey *pP
eb90: 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65  revTo;    /* Pre
eba0: 76 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73  vious with the s
ebb0: 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74  ame zTo */.  int
ebc0: 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f   nCol;         /
ebd0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
ebe0: 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20  mns in this key 
ebf0: 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30  */.  /* EV: R-30
ec00: 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75  323-21917 */.  u
ec10: 38 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20  8 isDeferred;   
ec20: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
ec30: 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69  onstraint checki
ec40: 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74  ng is deferred t
ec50: 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20  ill COMMIT */.  
ec60: 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20  u8 aAction[2];  
ec70: 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45        /* ON DELE
ec80: 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45  TE and ON UPDATE
ec90: 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63   actions, respec
eca0: 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67  tively */.  Trig
ecb0: 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32  ger *apTrigger[2
ecc0: 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f  ];/* Triggers fo
ecd0: 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69  r aAction[] acti
ece0: 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ons */.  struct 
ecf0: 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f  sColMap {      /
ed00: 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c  * Mapping of col
ed10: 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f  umns in pFrom to
ed20: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20   columns in zTo 
ed30: 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d  */.    int iFrom
ed40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
ed50: 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20  Index of column 
ed60: 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20  in pFrom */.    
ed70: 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20  char *zCol;     
ed80: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
ed90: 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20   column in zTo. 
eda0: 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49   If NULL use PRI
edb0: 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20  MARY KEY */.  } 
edc0: 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20  aCol[1];        
edd0: 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
ede0: 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f   for each of nCo
edf0: 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a  l columns */.};.
ee00: 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75  ./*.** SQLite su
ee10: 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66  pports many diff
ee20: 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65  erent ways to re
ee30: 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69  solve a constrai
ee40: 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f  nt.** error.  RO
ee50: 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e  LLBACK processin
ee60: 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63  g means that a c
ee70: 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
ee80: 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68  ion.** causes th
ee90: 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
eea0: 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61  rocess to fail a
eeb0: 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  nd for the curre
eec0: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
eed0: 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  * to be rolled b
eee0: 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63  ack.  ABORT proc
eef0: 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65  essing means the
ef00: 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
ef10: 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61  ocess.** fails a
ef20: 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61  nd any prior cha
ef30: 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f  nges from that o
ef40: 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  ne operation are
ef50: 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20   backed out,.** 
ef60: 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74  but the transact
ef70: 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65  ion is not rolle
ef80: 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72  d back.  FAIL pr
ef90: 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
efa0: 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61  hat.** the opera
efb0: 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
efc0: 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72   stops and retur
efd0: 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65  ns an error code
efe0: 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20  .  But prior.** 
eff0: 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74  changes due to t
f000: 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
f010: 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64  n are not backed
f020: 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c   out and no roll
f030: 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20  back.** occurs. 
f040: 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68   IGNORE means th
f050: 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61  at the particula
f060: 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65  r row that cause
f070: 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  d the constraint
f080: 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74  .** error is not
f090: 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64   inserted or upd
f0a0: 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ated.  Processin
f0b0: 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
f0c0: 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72  no error.** is r
f0d0: 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43  eturned.  REPLAC
f0e0: 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65  E means that pre
f0f0: 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
f100: 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73  e rows that caus
f110: 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63  ed.** a UNIQUE c
f120: 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
f130: 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ion are removed 
f140: 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20  so that the new 
f150: 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64  insert or.** upd
f160: 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e  ate can proceed.
f170: 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
f180: 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
f190: 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e  ror is reported.
f1a0: 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c  .**.** RESTRICT,
f1b0: 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41   SETNULL, and CA
f1c0: 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70  SCADE actions ap
f1d0: 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65  ply only to fore
f1e0: 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53  ign keys..** RES
f1f0: 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d  TRICT is the sam
f200: 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49  e as ABORT for I
f210: 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e  MMEDIATE foreign
f220: 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a   keys and the.**
f230: 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43   same as ROLLBAC
f240: 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b  K for DEFERRED k
f250: 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65  eys.  SETNULL me
f260: 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72  ans that the for
f270: 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73  eign.** key is s
f280: 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53  et to NULL.  CAS
f290: 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20  CADE means that 
f2a0: 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  a DELETE or UPDA
f2b0: 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66  TE of the.** ref
f2c0: 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f  erenced table ro
f2d0: 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20  w is propagated 
f2e0: 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61  into the row tha
f2f0: 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66  t holds the.** f
f300: 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a  oreign key..** .
f310: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
f320: 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73   symbolic values
f330: 20 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63   are used to rec
f340: 6f 72 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a  ord which type.*
f350: 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74  * of action to t
f360: 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ake..*/.#define 
f370: 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20  OE_None     0   
f380: 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63  /* There is no c
f390: 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65  onstraint to che
f3a0: 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  ck */.#define OE
f3b0: 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a  _Rollback 1   /*
f3c0: 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74   Fail the operat
f3d0: 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b  ion and rollback
f3e0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
f3f0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41   */.#define OE_A
f400: 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42  bort    2   /* B
f410: 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20  ack out changes 
f420: 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61  but do no rollba
f430: 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  ck transaction *
f440: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69  /.#define OE_Fai
f450: 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f  l     3   /* Sto
f460: 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  p the operation 
f470: 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72  but leave all pr
f480: 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ior changes */.#
f490: 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65  define OE_Ignore
f4a0: 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65     4   /* Ignore
f4b0: 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e   the error. Do n
f4c0: 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54  ot do the INSERT
f4d0: 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64   or UPDATE */.#d
f4e0: 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65  efine OE_Replace
f4f0: 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20    5   /* Delete 
f500: 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c  existing record,
f510: 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20   then do INSERT 
f520: 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64  or UPDATE */..#d
f530: 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63  efine OE_Restric
f540: 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72  t 6   /* OE_Abor
f550: 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c  t for IMMEDIATE,
f560: 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72   OE_Rollback for
f570: 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65   DEFERRED */.#de
f580: 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20  fine OE_SetNull 
f590: 20 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   7   /* Set the 
f5a0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
f5b0: 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65  e to NULL */.#de
f5c0: 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20  fine OE_SetDflt 
f5d0: 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   8   /* Set the 
f5e0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
f5f0: 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74  e to its default
f600: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43   */.#define OE_C
f610: 61 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43  ascade  9   /* C
f620: 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67  ascade the chang
f630: 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f  es */..#define O
f640: 45 5f 44 65 66 61 75 6c 74 20 20 31 30 20 20 2f  E_Default  10  /
f650: 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20 74 68  * Do whatever th
f660: 65 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e  e default action
f670: 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41   is */.../*.** A
f680: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
f690: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
f6a0: 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20  cture is passed 
f6b0: 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  as the first.** 
f6c0: 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69  argument to sqli
f6d0: 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72  te3VdbeKeyCompar
f6e0: 65 20 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f  e and is used to
f6f0: 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a   control the .**
f700: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74   comparison of t
f710: 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79  he two index key
f720: 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68  s..**.** Note th
f730: 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20  at aSortOrder[] 
f740: 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65  and aColl[] have
f750: 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e   nField+1 slots.
f760: 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e    There.** are n
f770: 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20  Field slots for 
f780: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61  the columns of a
f790: 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65  n index then one
f7a0: 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66   extra slot.** f
f7b0: 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 74 20  or the rowid at 
f7c0: 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
f7d0: 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75  ct KeyInfo {.  u
f7e0: 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  32 nRef;        
f7f0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
f800: 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68  references to th
f810: 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63  is KeyInfo objec
f820: 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  t */.  u8 enc;  
f830: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
f840: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e  xt encoding - on
f850: 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f  e of the SQLITE_
f860: 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  UTF* values */. 
f870: 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20   u16 nField;    
f880: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
f890: 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e  f key columns in
f8a0: 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20   the index */.  
f8b0: 75 31 36 20 6e 58 46 69 65 6c 64 3b 20 20 20 20  u16 nXField;    
f8c0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
f8d0: 20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20   columns beyond 
f8e0: 74 68 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20  the key columns 
f8f0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
f900: 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
f910: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
f920: 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  ion */.  u8 *aSo
f930: 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20  rtOrder;     /* 
f940: 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65  Sort order for e
f950: 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20  ach column. */. 
f960: 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b   CollSeq *aColl[
f970: 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e  1];  /* Collatin
f980: 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65  g sequence for e
f990: 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20  ach term of the 
f9a0: 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  key */.};../*.**
f9b0: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
f9c0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
f9d0: 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e  ructure holds in
f9e0: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
f9f0: 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65  a.** single inde
fa00: 78 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61  x record that ha
fa10: 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 70  s already been p
fa20: 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69  arsed out into i
fa30: 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c  ndividual.** val
fa40: 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63  ues..**.** A rec
fa50: 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74  ord is an object
fa60: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f   that contains o
fa70: 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64  ne or more field
fa80: 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65  s of data..** Re
fa90: 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20 74  cords are used t
faa0: 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74  o store the cont
fab0: 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72  ent of a table r
fac0: 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a  ow and to store.
fad0: 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e  ** the key of an
fae0: 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20   index.  A blob 
faf0: 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65  encoding of a re
fb00: 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64 20  cord is created 
fb10: 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b  by.** the OP_Mak
fb20: 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f  eRecord opcode o
fb30: 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20 69  f the VDBE and i
fb40: 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62  s disassembled b
fb50: 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75  y the.** OP_Colu
fb60: 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  mn opcode..**.**
fb70: 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
fb80: 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20 74  holds a record t
fb90: 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79 20  hat has already 
fba0: 62 65 65 6e 20 64 69 73 61 73 73 65 6d 62 6c 65  been disassemble
fbb0: 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f  d.** into its co
fbc0: 6e 73 74 69 74 75 65 6e 74 20 66 69 65 6c 64 73  nstituent fields
fbd0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61  ..*/.struct Unpa
fbe0: 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b  ckedRecord {.  K
fbf0: 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
fc00: 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20  ;  /* Collation 
fc10: 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69  and sort-order i
fc20: 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20  nformation */.  
fc30: 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  u16 nField;     
fc40: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
fc50: 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65   entries in apMe
fc60: 6d 5b 5d 20 2a 2f 0a 20 20 75 38 20 66 6c 61 67  m[] */.  u8 flag
fc70: 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
fc80: 42 6f 6f 6c 65 61 6e 20 73 65 74 74 69 6e 67 73  Boolean settings
fc90: 2e 20 20 55 4e 50 41 43 4b 45 44 5f 2e 2e 2e 20  .  UNPACKED_... 
fca0: 62 65 6c 6f 77 20 2a 2f 0a 20 20 4d 65 6d 20 2a  below */.  Mem *
fcb0: 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  aMem;          /
fcc0: 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a  * Values */.};..
fcd0: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
fce0: 6c 75 65 73 20 6f 66 20 55 6e 70 61 63 6b 65 64  lues of Unpacked
fcf0: 52 65 63 6f 72 64 2e 66 6c 61 67 73 0a 2a 2f 0a  Record.flags.*/.
fd00: 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b 45 44  #define UNPACKED
fd10: 5f 49 4e 43 52 4b 45 59 20 20 20 20 20 20 20 30  _INCRKEY       0
fd20: 78 30 31 20 20 2f 2a 20 4d 61 6b 65 20 74 68 69  x01  /* Make thi
fd30: 73 20 6b 65 79 20 61 6e 20 65 70 73 69 6c 6f 6e  s key an epsilon
fd40: 20 6c 61 72 67 65 72 20 2a 2f 0a 23 64 65 66 69   larger */.#defi
fd50: 6e 65 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46  ne UNPACKED_PREF
fd60: 49 58 5f 4d 41 54 43 48 20 20 30 78 30 32 20 20  IX_MATCH  0x02  
fd70: 2f 2a 20 41 20 70 72 65 66 69 78 20 6d 61 74 63  /* A prefix matc
fd80: 68 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  h is considered 
fd90: 4f 4b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  OK */../*.** Eac
fda0: 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72  h SQL index is r
fdb0: 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
fdc0: 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  mory by an.** in
fdd0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
fde0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
fdf0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c  e..**.** The col
fe00: 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c  umns of the tabl
fe10: 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65  e that are to be
fe20: 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73   indexed are des
fe30: 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65  cribed.** by the
fe40: 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c   aiColumn[] fiel
fe50: 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  d of this struct
fe60: 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ure.  For exampl
fe70: 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65  e, suppose.** we
fe80: 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77   have the follow
fe90: 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e  ing table and in
fea0: 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  dex:.**.**     C
feb0: 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28  REATE TABLE Ex1(
fec0: 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20  c1 int, c2 int, 
fed0: 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20  c3 text);.**    
fee0: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78   CREATE INDEX Ex
fef0: 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b  2 ON Ex1(c3,c1);
ff00: 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61  .**.** In the Ta
ff10: 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65  ble structure de
ff20: 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43  scribing Ex1, nC
ff30: 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68  ol==3 because th
ff40: 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65  ere are.** three
ff50: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
ff60: 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49  table.  In the I
ff70: 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64  ndex structure d
ff80: 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32  escribing.** Ex2
ff90: 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e  , nColumn==2 sin
ffa0: 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f  ce 2 of the 3 co
ffb0: 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65  lumns of Ex1 are
ffc0: 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65   indexed..** The
ffd0: 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75   value of aiColu
ffe0: 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61  mn is {2, 0}.  a
fff0: 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65  iColumn[0]==2 be
10000 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69  cause the .** fi
10010 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  rst column to be
10020 20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68 61   indexed (c3) ha
10030 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20  s an index of 2 
10040 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a  in Ex1.aCol[]..*
10050 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c  * The second col
10060 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65  umn to be indexe
10070 64 20 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e  d (c1) has an in
10080 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45  dex of 0 in.** E
10090 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65  x1.aCol[], hence
100a0 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d   Ex2.aiColumn[1]
100b0 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ==0..**.** The I
100c0 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65  ndex.onError fie
100d0 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  ld determines wh
100e0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
100f0 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73   indexed columns
10100 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71  .** must be uniq
10110 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64  ue and what to d
10120 6f 20 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f  o if they are no
10130 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f  t.  When Index.o
10140 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a  nError=OE_None,.
10150 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73  ** it means this
10160 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65   is not a unique
10170 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69   index.  Otherwi
10180 73 65 20 69 74 20 69 73 20 61 20 75 6e 69 71 75  se it is a uniqu
10190 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74  e index.** and t
101a0 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65  he value of Inde
101b0 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61  x.onError indica
101c0 74 65 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e  te the which con
101d0 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
101e0 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74   .** algorithm t
101f0 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65  o employ wheneve
10200 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  r an attempt is 
10210 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61  made to insert a
10220 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65   non-unique.** e
10230 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  lement..*/.struc
10240 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72  t Index {.  char
10250 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
10260 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
10270 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
10280 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20  i16 *aiColumn;  
10290 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
102a0 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  h columns are us
102b0 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78  ed by this index
102c0 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20  .  1st is 0 */. 
102d0 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45   tRowcnt *aiRowE
102e0 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 72 6f  st;       /* Fro
102f0 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20  m ANALYZE: Est. 
10300 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79  rows selected by
10310 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
10320 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b    Table *pTable;
10330 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
10340 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e  e SQL table bein
10350 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63  g indexed */.  c
10360 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
10370 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e          /* Strin
10380 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
10390 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
103a0 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
103b0 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  x *pNext;       
103c0 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74       /* The next
103d0 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65   index associate
103e0 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  d with the same 
103f0 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d  table */.  Schem
10400 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
10410 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
10420 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e  ntaining this in
10430 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  dex */.  u8 *aSo
10440 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
10450 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f    /* for each co
10460 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43  lumn: True==DESC
10470 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a  , False==ASC */.
10480 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b    char **azColl;
10490 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
104a0 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e  ray of collation
104b0 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20   sequence names 
104c0 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45  for index */.  E
104d0 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68 65  xpr *pPartIdxWhe
104e0 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45  re;     /* WHERE
104f0 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74   clause for part
10500 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20  ial indices */. 
10510 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
10520 66 6f 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 4b  fo;       /* A K
10530 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 73 75  eyInfo object su
10540 69 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73 20  itable for this 
10550 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 74  index */.  int t
10560 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
10570 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63      /* DB Page c
10580 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f  ontaining root o
10590 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
105a0 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52 6f    LogEst szIdxRo
105b0 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73  w;         /* Es
105c0 74 69 6d 61 74 65 64 20 61 76 65 72 61 67 65 20  timated average 
105d0 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74 65  row size in byte
105e0 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43  s */.  u16 nKeyC
105f0 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ol;             
10600 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
10610 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68 65  umns forming the
10620 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43   key */.  u16 nC
10630 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
10640 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
10650 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20 69  columns stored i
10660 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  n the index */. 
10670 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20   u8 onError;    
10680 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f            /* OE_
10690 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65  Abort, OE_Ignore
106a0 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72  , OE_Replace, or
106b0 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e   OE_None */.  un
106c0 73 69 67 6e 65 64 20 61 75 74 6f 49 6e 64 65 78  signed autoIndex
106d0 3a 32 3b 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49  :2;    /* 1==UNI
106e0 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20  QUE, 2==PRIMARY 
106f0 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49  KEY, 0==CREATE I
10700 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  NDEX */.  unsign
10710 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b  ed bUnordered:1;
10720 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69     /* Use this i
10730 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49  ndex for == or I
10740 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a  N queries only *
10750 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69  /.  unsigned uni
10760 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20  qNotNull:1;  /* 
10770 54 72 75 65 20 69 66 20 55 4e 49 51 55 45 20 61  True if UNIQUE a
10780 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20  nd NOT NULL for 
10790 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  all columns */. 
107a0 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73 69   unsigned isResi
107b0 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75  zed:1;    /* Tru
107c0 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65 78  e if resizeIndex
107d0 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62 65 65  Object() has bee
107e0 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e  n called */.  un
107f0 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69 6e  signed isCoverin
10800 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69  g:1;   /* True i
10810 66 20 74 68 69 73 20 69 73 20 61 20 63 6f 76 65  f this is a cove
10820 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 23 69  ring index */.#i
10830 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
10840 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
10850 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b  4.  int nSample;
10860 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10870 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  Number of elemen
10880 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20  ts in aSample[] 
10890 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  */.  int nSample
108a0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Col;          /*
108b0 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61   Size of IndexSa
108c0 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20  mple.anEq[] and 
108d0 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63  so on */.  tRowc
108e0 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20  nt *aAvgEq;     
108f0 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e      /* Average n
10900 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65  Eq values for ke
10910 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c  ys not in aSampl
10920 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70  e */.  IndexSamp
10930 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20  le *aSample;    
10940 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68  /* Samples of th
10950 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20  e left-most key 
10960 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
10970 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20  .** Each sample 
10980 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
10990 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65  lite_stat3 table
109a0 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
109b0 69 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75 73  in memory .** us
109c0 69 6e 67 20 61 20 73 74 72 75 63 74 75 72 65 20  ing a structure 
109d0 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20 20 53  of this type.  S
109e0 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ee documentation
109f0 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74   at the top of t
10a00 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20  he.** analyze.c 
10a10 73 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20  source file for 
10a20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
10a30 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
10a40 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a  t IndexSample {.
10a50 20 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20    void *p;      
10a60 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
10a70 6f 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64  o sampled record
10a80 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20   */.  int n;    
10a90 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
10aa0 6f 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74  of record in byt
10ab0 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  es */.  tRowcnt 
10ac0 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74  *anEq;    /* Est
10ad0 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  . number of rows
10ae0 20 77 68 65 72 65 20 74 68 65 20 6b 65 79 20 65   where the key e
10af0 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c  quals this sampl
10b00 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  e */.  tRowcnt *
10b10 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e  anLt;    /* Est.
10b20 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
10b30 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73  where key is les
10b40 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70  s than this samp
10b50 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  le */.  tRowcnt 
10b60 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74  *anDLt;   /* Est
10b70 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74  . number of dist
10b80 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74  inct keys less t
10b90 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20  han this sample 
10ba0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  */.};../*.** Eac
10bb0 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f  h token coming o
10bc0 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20  ut of the lexer 
10bd0 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
10be0 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74  f.** this struct
10bf0 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65  ure.  Tokens are
10c00 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61   also used as pa
10c10 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  rt of an express
10c20 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  ion..**.** Note 
10c30 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68  if Token.z==0 th
10c40 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64  en Token.dyn and
10c50 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64   Token.n are und
10c60 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61  efined and.** ma
10c70 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d  y contain random
10c80 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74   values.  Do not
10c90 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70   make any assump
10ca0 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65  tions about Toke
10cb0 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b  n.dyn.** and Tok
10cc0 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e  en.n when Token.
10cd0 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  z==0..*/.struct 
10ce0 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20  Token {.  const 
10cf0 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20  char *z;     /* 
10d00 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65  Text of the toke
10d10 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72  n.  Not NULL-ter
10d20 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e  minated! */.  un
10d30 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20  signed int n;   
10d40 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68   /* Number of ch
10d50 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73  aracters in this
10d60 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   token */.};../*
10d70 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
10d80 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
10d90 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  e contains infor
10da0 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f  mation needed to
10db0 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64   generate.** cod
10dc0 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74  e for a SELECT t
10dd0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67  hat contains agg
10de0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
10df0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e  ..**.** If Expr.
10e00 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d  op==TK_AGG_COLUM
10e10 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43  N or TK_AGG_FUNC
10e20 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70  TION then Expr.p
10e30 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20  AggInfo is a.** 
10e40 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
10e50 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 20  structure.  The 
10e60 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65  Expr.iColumn fie
10e70 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  ld is the index 
10e80 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43  in.** AggInfo.aC
10e90 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e  ol[] or AggInfo.
10ea0 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72  aFunc[] of infor
10eb0 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f  mation needed to
10ec0 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64   generate.** cod
10ed0 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e  e for that node.
10ee0 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70  .**.** AggInfo.p
10ef0 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49  GroupBy and AggI
10f00 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20  nfo.aFunc.pExpr 
10f10 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20  point to fields 
10f20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72  within the.** or
10f30 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74  iginal Select st
10f40 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65 73  ructure that des
10f50 63 72 69 62 65 73 20 74 68 65 20 53 45 4c 45 43  cribes the SELEC
10f60 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  T statement.  Th
10f70 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f  ese.** fields do
10f80 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20   not need to be 
10f90 66 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c  freed when deall
10fa0 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67 67 49  ocating the AggI
10fb0 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  nfo structure..*
10fc0 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  /.struct AggInfo
10fd0 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f   {.  u8 directMo
10fe0 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  de;          /* 
10ff0 44 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67  Direct rendering
11000 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65   mode means take
11010 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20   data directly. 
11020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11030 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d           ** from
11040 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72   source tables r
11050 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20  ather than from 
11060 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a  accumulators */.
11070 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49    u8 useSortingI
11080 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20  dx;       /* In 
11090 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66  direct mode, ref
110a0 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69  erence the sorti
110b0 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a  ng index rather.
110c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110d0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61            ** tha
110e0 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  n the source tab
110f0 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74  le */.  int sort
11100 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20 20  ingIdx;         
11110 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
11120 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20   of the sorting 
11130 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73  index */.  int s
11140 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20  ortingIdxPTab;  
11150 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
11160 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61  ber of pseudo-ta
11170 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f  ble */.  int nSo
11180 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20  rtingColumn;    
11190 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
111a0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72  lumns in the sor
111b0 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
111c0 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67  int mnReg, mxReg
111d0 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65  ;       /* Range
111e0 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c   of registers al
111f0 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c  located for aCol
11200 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20   and aFunc */.  
11210 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
11220 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67  By;     /* The g
11230 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a  roup by clause *
11240 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e  /.  struct AggIn
11250 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46  fo_col {    /* F
11260 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75  or each column u
11270 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61  sed in source ta
11280 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c  bles */.    Tabl
11290 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
112a0 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74       /* Source t
112b0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
112c0 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
112d0 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
112e0 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75  umber of the sou
112f0 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
11300 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20   int iColumn;   
11310 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c            /* Col
11320 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69  umn number withi
11330 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  n the source tab
11340 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53  le */.    int iS
11350 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20  orterColumn;    
11360 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
11370 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69  ber in the sorti
11380 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20  ng index */.    
11390 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20  int iMem;       
113a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
113b0 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
113c0 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c   acts as accumul
113d0 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72  ator */.    Expr
113e0 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
113f0 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67       /* The orig
11400 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20  inal expression 
11410 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20  */.  } *aCol;.  
11420 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  int nColumn;    
11430 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
11440 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65  r of used entrie
11450 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20  s in aCol[] */. 
11460 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f   int nAccumulato
11470 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  r;       /* Numb
11480 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68  er of columns th
11490 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20  at show through 
114a0 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20  to the output.. 
114b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114c0 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69           ** Addi
114d0 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61  tional columns a
114e0 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20  re used only as 
114f0 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20  parameters to.  
11500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11510 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65          ** aggre
11520 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
11530 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e  /.  struct AggIn
11540 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46  fo_func {   /* F
11550 6f 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74  or each aggregat
11560 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
11570 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
11580 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
11590 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e  pression encodin
115a0 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a  g the function *
115b0 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70  /.    FuncDef *p
115c0 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f  Func;          /
115d0 2a 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20  * The aggregate 
115e0 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  function impleme
115f0 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  ntation */.    i
11600 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
11610 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
11620 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
11630 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61  acts as accumula
11640 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  tor */.    int i
11650 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20  Distinct;       
11660 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c      /* Ephemeral
11670 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65   table used to e
11680 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20  nforce DISTINCT 
11690 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20  */.  } *aFunc;. 
116a0 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20   int nFunc;     
116b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
116c0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
116d0 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a   aFunc[] */.};..
116e0 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79  /*.** The dataty
116f0 70 65 20 79 6e 56 61 72 20 69 73 20 61 20 73 69  pe ynVar is a si
11700 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69  gned integer, ei
11710 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33  ther 16-bit or 3
11720 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c  2-bit..** Usuall
11730 79 20 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e  y it is 16-bits.
11740 20 20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f    But if SQLITE_
11750 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
11760 42 45 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a  BER is greater.*
11770 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77 65 20  * than 32767 we 
11780 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20  have to make it 
11790 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20  32-bit.  16-bit 
117a0 69 73 20 70 72 65 66 65 72 72 65 64 20 62 65 63  is preferred bec
117b0 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20  ause.** it uses 
117c0 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74  less memory in t
117d0 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20  he Expr object, 
117e0 77 68 69 63 68 20 69 73 20 61 20 62 69 67 20 6d  which is a big m
117f0 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e  emory user.** in
11800 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f   systems with lo
11810 74 73 20 6f 66 20 70 72 65 70 61 72 65 64 20 73  ts of prepared s
11820 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20  tatements.  And 
11830 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  few applications
11840 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68  .** need more th
11850 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32  an about 10 or 2
11860 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75  0 variables.  Bu
11870 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75  t some extreme u
11880 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20  sers want.** to 
11890 68 61 76 65 20 70 72 65 70 61 72 65 64 20 73 74  have prepared st
118a0 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76  atements with ov
118b0 65 72 20 33 32 37 36 37 20 76 61 72 69 61 62 6c  er 32767 variabl
118c0 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d  es, and for them
118d0 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69  .** the option i
118e0 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20  s available (at 
118f0 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a  compile-time)..*
11900 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
11910 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
11920 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66 20  <=32767.typedef 
11930 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65  i16 ynVar;.#else
11940 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56  .typedef int ynV
11950 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ar;.#endif../*.*
11960 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61  * Each node of a
11970 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  n expression in 
11980 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 69  the parse tree i
11990 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  s an instance.**
119a0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
119b0 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f  re..**.** Expr.o
119c0 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e  p is the opcode.
119d0 20 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 72   The integer par
119e0 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20  ser token codes 
119f0 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73  are reused.** as
11a00 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46   opcodes here. F
11a10 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20  or example, the 
11a20 70 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54  parser defines T
11a30 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e  K_GE to be an in
11a40 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65  teger.** code re
11a50 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22  presenting the "
11a60 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68  >=" operator. Th
11a70 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20  is same integer 
11a80 63 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a  code is reused.*
11a90 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74  * to represent t
11aa0 68 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d  he greater-than-
11ab0 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72  or-equal-to oper
11ac0 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72  ator in the expr
11ad0 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a  ession.** tree..
11ae0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
11af0 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
11b00 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e  L literal (TK_IN
11b10 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c  TEGER, TK_FLOAT,
11b20 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20 6f 72   TK_BLOB, .** or
11b30 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65   TK_STRING), the
11b40 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
11b50 74 61 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f  tains the text o
11b60 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61  f the SQL litera
11b70 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70  l. If.** the exp
11b80 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72  ression is a var
11b90 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42  iable (TK_VARIAB
11ba0 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  LE), then Expr.t
11bb0 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
11bc0 65 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e  e .** variable n
11bd0 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66  ame. Finally, if
11be0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
11bf0 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  is an SQL functi
11c00 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29  on (TK_FUNCTION)
11c10 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74  ,.** then Expr.t
11c20 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
11c30 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  e name of the fu
11c40 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78  nction..**.** Ex
11c50 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78  pr.pRight and Ex
11c60 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65  pr.pLeft are the
11c70 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20   left and right 
11c80 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f  subexpressions o
11c90 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70  f a.** binary op
11ca0 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f  erator. Either o
11cb0 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55  r both may be NU
11cc0 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78  LL..**.** Expr.x
11cd0 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74  .pList is a list
11ce0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66   of arguments if
11cf0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
11d00 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  is an SQL functi
11d10 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78  on,.** a CASE ex
11d20 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49  pression or an I
11d30 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  N expression of 
11d40 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20  the form "<lhs> 
11d50 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29  IN (<y>, <z>...)
11d60 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65  "..** Expr.x.pSe
11d70 6c 65 63 74 20 69 73 20 75 73 65 64 20 69 66 20  lect is used if 
11d80 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
11d90 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f  s a sub-select o
11da0 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  r an expression 
11db0 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22  of.** the form "
11dc0 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54  <lhs> IN (SELECT
11dd0 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45   ...)". If the E
11de0 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74 20  P_xIsSelect bit 
11df0 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a  is set in the.**
11e00 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
11e10 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53  , then Expr.x.pS
11e20 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20  elect is valid. 
11e30 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e  Otherwise, Expr.
11e40 78 2e 70 4c 69 73 74 20 69 73 20 0a 2a 2a 20 76  x.pList is .** v
11e50 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65  alid..**.** An e
11e60 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
11e70 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49   form ID or ID.I
11e80 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f  D refers to a co
11e90 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e  lumn in a table.
11ea0 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70  .** For such exp
11eb0 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f  ressions, Expr.o
11ec0 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43  p is set to TK_C
11ed0 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69  OLUMN and Expr.i
11ee0 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  Table is.** the 
11ef0 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e  integer cursor n
11f00 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45 20  umber of a VDBE 
11f10 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
11f20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e  to that table an
11f30 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d  d.** Expr.iColum
11f40 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  n is the column 
11f50 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73  number for the s
11f60 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20  pecific column. 
11f70 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65   If the.** expre
11f80 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73  ssion is used as
11f90 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20   a result in an 
11fa0 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43 54  aggregate SELECT
11fb0 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61  , then the.** va
11fc0 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72  lue is also stor
11fd0 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69  ed in the Expr.i
11fe0 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  Agg column in th
11ff0 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20 74  e aggregate so t
12000 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65  hat.** it can be
12010 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72 20   accessed after 
12020 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20 61  all aggregates a
12030 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a  re computed..**.
12040 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
12050 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75  sion is an unbou
12060 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b  nd variable mark
12070 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d  er (a question m
12080 61 72 6b 20 0a 2a 2a 20 63 68 61 72 61 63 74 65  ark .** characte
12090 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69  r '?' in the ori
120a0 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20  ginal SQL) then 
120b0 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20  the Expr.iTable 
120c0 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 20  holds the index 
120d0 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  .** number for t
120e0 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a  hat variable..**
120f0 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
12100 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75  ssion is a subqu
12110 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43  ery then Expr.iC
12120 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69  olumn holds an i
12130 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74  nteger.** regist
12140 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69  er number contai
12150 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20  ning the result 
12160 6f 66 20 74 68 65 20 73 75 62 71 75 65 72 79 2e  of the subquery.
12170 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71    If the.** subq
12180 75 65 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e  uery gives a con
12190 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68  stant result, th
121a0 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e  en iTable is -1.
121b0 20 20 49 66 20 74 68 65 20 73 75 62 71 75 65 72    If the subquer
121c0 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66  y.** gives a dif
121d0 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74  ferent answer at
121e0 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73   different times
121f0 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e   during statemen
12200 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20  t processing.** 
12210 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74  then iTable is t
12220 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20  he address of a 
12230 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20  subroutine that 
12240 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75 62  computes the sub
12250 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  query..**.** If 
12260 74 68 65 20 45 78 70 72 20 69 73 20 6f 66 20 74  the Expr is of t
12270 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61  ype OP_Column, a
12280 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 74 20  nd the table it 
12290 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f  is selecting fro
122a0 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74  m.** is a disk t
122b0 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64  able or the "old
122c0 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  .*" pseudo-table
122d0 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e  , then pTab poin
122e0 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72  ts to the.** cor
122f0 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65  responding table
12300 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a   definition..**.
12310 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f  ** ALLOCATION NO
12320 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20  TES:.**.** Expr 
12330 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20  objects can use 
12340 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20  a lot of memory 
12350 73 70 61 63 65 20 69 6e 20 64 61 74 61 62 61 73  space in databas
12360 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a  e schema.  To.**
12370 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d   help reduce mem
12380 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73  ory requirements
12390 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45  , sometimes an E
123a0 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20  xpr object will 
123b0 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e  be.** truncated.
123c0 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20    And to reduce 
123d0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65  the number of me
123e0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  mory allocations
123f0 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74  , sometimes.** t
12400 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20  wo or more Expr 
12410 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20  objects will be 
12420 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67  stored in a sing
12430 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  le memory alloca
12440 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65  tion,.** togethe
12450 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b  r with Expr.zTok
12460 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a  en strings..**.*
12470 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
12480 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e  ced and EP_Token
12490 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73  Only flags are s
124a0 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78  et when.** an Ex
124b0 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75  pr object is tru
124c0 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50  ncated.  When EP
124d0 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2c  _Reduced is set,
124e0 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65   then all.** the
124f0 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65   child Expr obje
12500 63 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  cts in the Expr.
12510 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70  pLeft and Expr.p
12520 52 69 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a  Right subtrees.*
12530 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  * are contained 
12540 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
12550 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
12560 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65  n.  Note, howeve
12570 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73  r, that.** the s
12580 75 62 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e  ubtrees in Expr.
12590 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e  x.pList or Expr.
125a0 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c  x.pSelect are al
125b0 77 61 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a  ways separately.
125c0 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65  ** allocated, re
125d0 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
125e0 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65  her or not EP_Re
125f0 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f  duced is set..*/
12600 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20  .struct Expr {. 
12610 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
12620 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61          /* Opera
12630 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62  tion performed b
12640 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20  y this node */. 
12650 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
12660 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
12670 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63  ffinity of the c
12680 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f  olumn or 0 if no
12690 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  t a column */.  
126a0 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20  u32 flags;      
126b0 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75         /* Variou
126c0 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53  s flags.  EP_* S
126d0 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e  ee below */.  un
126e0 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  ion {.    char *
126f0 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20  zToken;         
12700 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e   /* Token value.
12710 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64   Zero terminated
12720 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f   and dequoted */
12730 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b  .    int iValue;
12740 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
12750 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65  on-negative inte
12760 67 65 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f  ger value if EP_
12770 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20  IntValue */.  } 
12780 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  u;..  /* If the 
12790 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
127a0 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20  g is set in the 
127b0 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
127c0 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70   then no.  ** sp
127d0 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ace is allocated
127e0 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20   for the fields 
127f0 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74  below this point
12800 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a  . An attempt to.
12810 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d    ** access them
12820 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20   will result in 
12830 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61  a segfault or ma
12840 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a 20 20 2a 2a  lfunction. .  **
12850 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12860 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12870 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12880 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12890 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c  ***/..  Expr *pL
128a0 65 66 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  eft;           /
128b0 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a  * Left subnode *
128c0 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68 74  /.  Expr *pRight
128d0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69  ;          /* Ri
128e0 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20  ght subnode */. 
128f0 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70   union {.    Exp
12900 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20  rList *pList;   
12910 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58    /* op = IN, EX
12920 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41  ISTS, SELECT, CA
12930 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45  SE, FUNCTION, BE
12940 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c  TWEEN */.    Sel
12950 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
12960 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63    /* EP_xIsSelec
12970 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45  t and op = IN, E
12980 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f  XISTS, SELECT */
12990 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66  .  } x;..  /* If
129a0 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
129b0 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74  flag is set in t
129c0 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  he Expr.flags ma
129d0 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a  sk, then no.  **
129e0 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61   space is alloca
129f0 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c  ted for the fiel
12a00 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f  ds below this po
12a10 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  int. An attempt 
12a20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74  to.  ** access t
12a30 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  hem will result 
12a40 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72  in a segfault or
12a50 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20   malfunction..  
12a60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12a70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12a80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12a90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12aa0 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49  *****/..#if SQLI
12ab0 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
12ac0 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68  H>0.  int nHeigh
12ad0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
12ae0 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74 72  Height of the tr
12af0 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68 69  ee headed by thi
12b00 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  s node */.#endif
12b10 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20  .  int iTable;  
12b20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
12b30 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e  COLUMN: cursor n
12b40 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68  umber of table h
12b50 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20  olding column.  
12b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b70 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47         ** TK_REG
12b80 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72 20  ISTER: register 
12b90 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20  number.         
12ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bb0 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31  ** TK_TRIGGER: 1
12bc0 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c   -> new, 0 -> ol
12bd0 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d.              
12be0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50             ** EP
12bf0 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 30 30 30  _Unlikely:  1000
12c00 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f   times likelihoo
12c10 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f  d */.  ynVar iCo
12c20 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  lumn;         /*
12c30 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75   TK_COLUMN: colu
12c40 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f  mn index.  -1 fo
12c50 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20  r rowid..       
12c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c70 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45    ** TK_VARIABLE
12c80 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65  : variable numbe
12c90 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e  r (always >= 1).
12ca0 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20   */.  i16 iAgg; 
12cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12cc0 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70  Which entry in p
12cd0 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20  AggInfo->aCol[] 
12ce0 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a  or ->aFunc[] */.
12cf0 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e    i16 iRightJoin
12d00 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45  Table;   /* If E
12d10 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20  P_FromJoin, the 
12d20 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74  right table of t
12d30 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20  he join */.  u8 
12d40 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20  op2;            
12d50 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54      /* TK_REGIST
12d60 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c  ER: original val
12d70 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20  ue of Expr.op.  
12d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d90 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c         ** TK_COL
12da0 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f  UMN: the value o
12db0 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75  f p5 for OP_Colu
12dc0 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
12dd0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
12de0 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20  K_AGG_FUNCTION: 
12df0 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f  nesting depth */
12e00 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67  .  AggInfo *pAgg
12e10 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65  Info;     /* Use
12e20 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55  d by TK_AGG_COLU
12e30 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55  MN and TK_AGG_FU
12e40 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c  NCTION */.  Tabl
12e50 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
12e60 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20     /* Table for 
12e70 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73  TK_COLUMN expres
12e80 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  sions. */.};../*
12e90 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
12ea0 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e  g are the meanin
12eb0 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68  gs of bits in th
12ec0 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65  e Expr.flags fie
12ed0 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ld..*/.#define E
12ee0 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30  P_FromJoin  0x00
12ef0 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74  0001 /* Originat
12f00 65 64 20 69 6e 20 4f 4e 20 6f 72 20 55 53 49 4e  ed in ON or USIN
12f10 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  G clause of a jo
12f20 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  in */.#define EP
12f30 5f 41 67 67 20 20 20 20 20 20 20 30 78 30 30 30  _Agg       0x000
12f40 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  002 /* Contains 
12f50 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  one or more aggr
12f60 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
12f70 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65  */.#define EP_Re
12f80 73 6f 6c 76 65 64 20 20 30 78 30 30 30 30 30 34  solved  0x000004
12f90 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65 65   /* IDs have bee
12fa0 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f  n resolved to CO
12fb0 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  LUMNs */.#define
12fc0 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20 30 78   EP_Error     0x
12fd0 30 30 30 30 30 38 20 2f 2a 20 45 78 70 72 65 73  000008 /* Expres
12fe0 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  sion contains on
12ff0 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73  e or more errors
13000 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
13010 69 73 74 69 6e 63 74 20 20 30 78 30 30 30 30 31  istinct  0x00001
13020 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66  0 /* Aggregate f
13030 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53  unction with DIS
13040 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f  TINCT keyword */
13050 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53  .#define EP_VarS
13060 65 6c 65 63 74 20 30 78 30 30 30 30 32 30 20 2f  elect 0x000020 /
13070 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72  * pSelect is cor
13080 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e  related, not con
13090 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  stant */.#define
130a0 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78   EP_DblQuoted 0x
130b0 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e  000040 /* token.
130c0 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79  z was originally
130d0 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65   in "..." */.#de
130e0 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e  fine EP_InfixFun
130f0 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72  c 0x000080 /* Tr
13100 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20  ue for an infix 
13110 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20  function: LIKE, 
13120 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65  GLOB, etc */.#de
13130 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20  fine EP_Collate 
13140 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72    0x000100 /* Tr
13150 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b  ee contains a TK
13160 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 61 72 74 6f  _COLLATE opearto
13170 72 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 75 6e  r */.      /* un
13180 75 73 65 64 20 20 20 20 20 20 30 78 30 30 30 32  used      0x0002
13190 30 30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  00 */.#define EP
131a0 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30  _IntValue  0x000
131b0 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76  400 /* Integer v
131c0 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69  alue contained i
131d0 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64  n u.iValue */.#d
131e0 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65  efine EP_xIsSele
131f0 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78  ct 0x000800 /* x
13200 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
13210 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70  d (otherwise x.p
13220 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66  List is) */.#def
13230 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20  ine EP_Skip     
13240 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c   0x001000 /* COL
13250 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c  LATE, AS, or UNL
13260 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65  IKELY */.#define
13270 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78   EP_Reduced   0x
13280 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73  002000 /* Expr s
13290 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43  truct EXPR_REDUC
132a0 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  EDSIZE bytes onl
132b0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
132c0 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30  TokenOnly 0x0040
132d0 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
132e0 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  t EXPR_TOKENONLY
132f0 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20  SIZE bytes only 
13300 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74  */.#define EP_St
13310 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30 30  atic    0x008000
13320 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f   /* Held in memo
13330 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20  ry not obtained 
13340 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f  from malloc() */
13350 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54  .#define EP_MemT
13360 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f  oken  0x010000 /
13370 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65  * Need to sqlite
13380 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a  3DbFree() Expr.z
13390 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  Token */.#define
133a0 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78   EP_NoReduce  0x
133b0 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74  020000 /* Cannot
133c0 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
133d0 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65  this Expr */.#de
133e0 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79  fine EP_Unlikely
133f0 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e    0x040000 /* un
13400 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65  likely() or like
13410 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f  lihood() functio
13420 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
13430 43 6f 6e 73 74 61 6e 74 20 20 30 78 30 38 30 30  Constant  0x0800
13440 30 30 20 2f 2a 20 4e 6f 64 65 20 69 73 20 61 20  00 /* Node is a 
13450 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 0a 2f 2a 0a  constant */../*.
13460 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
13470 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
13480 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
13490 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a  ar bits in the .
134a0 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  ** Expr.flags fi
134b0 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
134c0 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28  ExprHasProperty(
134d0 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e  E,P)     (((E)->
134e0 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  flags&(P))!=0).#
134f0 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c  define ExprHasAl
13500 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  lProperty(E,P)  
13510 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
13520 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
13530 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
13540 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c  E,P)     (E)->fl
13550 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65  ags|=(P).#define
13560 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72   ExprClearProper
13570 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66  ty(E,P)   (E)->f
13580 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54  lags&=~(P)../* T
13590 68 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  he ExprSetVVAPro
135a0 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73  perty() macro is
135b0 20 75 73 65 64 20 66 6f 72 20 56 65 72 69 66 69   used for Verifi
135c0 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69  cation, Validati
135d0 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65  on,.** and Accre
135e0 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20  ditation only.  
135f0 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78  It works like Ex
13600 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 29 20  prSetProperty() 
13610 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72  during VVA.** pr
13620 6f 63 65 73 73 65 73 20 62 75 74 20 69 73 20 61  ocesses but is a
13630 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76   no-op for deliv
13640 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ery..*/.#ifdef S
13650 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65  QLITE_DEBUG.# de
13660 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50  fine ExprSetVVAP
13670 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 45  roperty(E,P)  (E
13680 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65  )->flags|=(P).#e
13690 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70  lse.# define Exp
136a0 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
136b0 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E,P).#endif../*.
136c0 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
136d0 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65  ermine the numbe
136e0 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69  r of bytes requi
136f0 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20  red by a normal 
13700 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c  Expr .** struct,
13710 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
13720 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75  with the EP_Redu
13730 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20  ced flag set in 
13740 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61  Expr.flags .** a
13750 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  nd an Expr struc
13760 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f  t with the EP_To
13770 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74  kenOnly flag set
13780 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
13790 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20  R_FULLSIZE      
137a0 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72       sizeof(Expr
137b0 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  )           /* F
137c0 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66  ull size */.#def
137d0 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44  ine EXPR_REDUCED
137e0 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73  SIZE        offs
137f0 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65  etof(Expr,iTable
13800 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61  )  /* Common fea
13810 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tures */.#define
13820 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
13830 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f  IZE      offseto
13840 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20  f(Expr,pLeft)   
13850 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65  /* Fewer feature
13860 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67  s */../*.** Flag
13870 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
13880 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
13890 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74   function. See t
138a0 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e  he header commen
138b0 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69  t .** above sqli
138c0 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72  te3ExprDup() for
138d0 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65   details..*/.#de
138e0 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44  fine EXPRDUP_RED
138f0 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30  UCE         0x00
13900 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75  01  /* Used redu
13910 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f  ced-size Expr no
13920 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  des */../*.** A 
13930 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
13940 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65  ons.  Each expre
13950 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e  ssion may option
13960 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e  ally have a.** n
13970 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61  ame.  An expr/na
13980 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63  me combination c
13990 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65  an be used in se
139a0 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68  veral ways, such
139b0 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20  .** as the list 
139c0 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20  of "expr AS ID" 
139d0 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67  fields following
139e0 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69   a "SELECT" or i
139f0 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66  n the.** list of
13a00 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65   "ID = expr" ite
13a10 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e  ms in an UPDATE.
13a20 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72    A list of expr
13a30 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61  essions can.** a
13a40 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74  lso be used as t
13a50 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61  he argument to a
13a60 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68   function, in wh
13a70 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a  ich case the a.z
13a80 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73  Name.** field is
13a90 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
13aa0 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20   By default the 
13ab0 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64  Expr.zSpan field
13ac0 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72   holds a human-r
13ad0 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74  eadable descript
13ae0 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78  ion of.** the ex
13af0 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
13b00 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
13b10 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72  eration of error
13b20 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a   messages and.**
13b30 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20   column labels. 
13b40 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45   In this case, E
13b50 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70  xpr.zSpan is typ
13b60 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20  ically the text 
13b70 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65  of a.** column e
13b80 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20  xpression as it 
13b90 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45  exists in a SELE
13ba0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48  CT statement.  H
13bb0 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68  owever, if.** th
13bc0 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61  e bSpanIsTab fla
13bd0 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a  g is set, then z
13be0 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64  Span is overload
13bf0 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e  ed to mean the n
13c00 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65  ame.** of the re
13c10 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  sult column in t
13c20 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53  he form: DATABAS
13c30 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20  E.TABLE.COLUMN. 
13c40 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66   This later.** f
13c50 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20  orm is used for 
13c60 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20  name resolution 
13c70 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d  with nested FROM
13c80 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72   clauses..*/.str
13c90 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20  uct ExprList {. 
13ca0 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20   int nExpr;     
13cb0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13cc0 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  r of expressions
13cd0 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
13ce0 20 20 69 6e 74 20 69 45 43 75 72 73 6f 72 3b 20    int iECursor; 
13cf0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 44 42 45           /* VDBE
13d00 20 43 75 72 73 6f 72 20 61 73 73 6f 63 69 61 74   Cursor associat
13d10 65 64 20 77 69 74 68 20 74 68 69 73 20 45 78 70  ed with this Exp
13d20 72 4c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63  rList */.  struc
13d30 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20  t ExprList_item 
13d40 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78  { /* For each ex
13d50 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
13d60 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72  list */.    Expr
13d70 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
13d80 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20      /* The list 
13d90 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  of expressions *
13da0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
13db0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
13dc0 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65   Token associate
13dd0 64 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72  d with this expr
13de0 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68  ession */.    ch
13df0 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20  ar *zSpan;      
13e00 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61        /* Origina
13e10 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78  l text of the ex
13e20 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
13e30 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20  u8 sortOrder;   
13e40 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72          /* 1 for
13e50 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41   DESC or 0 for A
13e60 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  SC */.    unsign
13e70 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20  ed done :1;     
13e80 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69    /* A flag to i
13e90 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f  ndicate when pro
13ea0 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73  cessing is finis
13eb0 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  hed */.    unsig
13ec0 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a  ned bSpanIsTab :
13ed0 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64  1; /* zSpan hold
13ee0 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d  s DB.TABLE.COLUM
13ef0 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  N */.    unsigne
13f00 64 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20  d reusable :1;  
13f10 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70   /* Constant exp
13f20 72 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61  ression is reusa
13f30 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e  ble */.    union
13f40 20 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74 20   {.      struct 
13f50 7b 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 4f  {.        u16 iO
13f60 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20  rderByCol;      
13f70 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c  /* For ORDER BY,
13f80 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69   column number i
13f90 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a  n result set */.
13fa0 20 20 20 20 20 20 20 20 75 31 36 20 69 41 6c 69          u16 iAli
13fb0 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  as;           /*
13fc0 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73   Index into Pars
13fd0 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a  e.aAlias[] for z
13fe0 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20  Name */.      } 
13ff0 78 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f  x;.      int iCo
14000 6e 73 74 45 78 70 72 52 65 67 3b 20 20 20 20 20  nstExprReg;     
14010 20 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20   /* Register in 
14020 77 68 69 63 68 20 45 78 70 72 20 76 61 6c 75 65  which Expr value
14030 20 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20   is cached */.  
14040 20 20 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20    } u;.  } *a;  
14050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14060 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72  /* Alloc a power
14070 20 6f 66 20 74 77 6f 20 67 72 65 61 74 65 72 20   of two greater 
14080 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70  or equal to nExp
14090 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  r */.};../*.** A
140a0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
140b0 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
140c0 75 73 65 64 20 62 79 20 74 68 65 20 70 61 72 73  used by the pars
140d0 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74  er to record bot
140e0 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74  h.** the parse t
140f0 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65  ree for an expre
14100 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70  ssion and the sp
14110 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  an of input text
14120 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65   for an.** expre
14130 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ssion..*/.struct
14140 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78   ExprSpan {.  Ex
14150 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
14160 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65      /* The expre
14170 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65  ssion parse tree
14180 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
14190 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46   *zStart;   /* F
141a0 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f  irst character o
141b0 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a  f input text */.
141c0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
141d0 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63  nd;     /* One c
141e0 68 61 72 61 63 74 65 72 20 70 61 73 74 20 74 68  haracter past th
141f0 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74  e end of input t
14200 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ext */.};../*.**
14210 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
14220 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
14230 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65  an hold a simple
14240 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66   list of identif
14250 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73  iers,.** such as
14260 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63   the list "a,b,c
14270 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  " in the followi
14280 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a  ng statements:.*
14290 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54  *.**      INSERT
142a0 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56   INTO t(a,b,c) V
142b0 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20  ALUES ...;.**   
142c0 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
142d0 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b  idx ON t(a,b,c);
142e0 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
142f0 54 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46  TRIGGER trig BEF
14300 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28  ORE UPDATE ON t(
14310 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a  a,b,c) ...;.**.*
14320 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69  * The IdList.a.i
14330 64 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  dx field is used
14340 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74   when the IdList
14350 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
14360 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d  list of.** colum
14370 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20  n names after a 
14380 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e  table name in an
14390 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
143a0 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65  t.  In the state
143b0 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49  ment.**.**     I
143c0 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
143d0 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66  ,c) ....**.** If
143e0 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68   "a" is the k-th
143f0 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65   column of table
14400 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73   "t", then IdLis
14410 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a  t.a[0].idx==k..*
14420 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20  /.struct IdList 
14430 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73  {.  struct IdLis
14440 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61  t_item {.    cha
14450 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
14460 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64  * Name of the id
14470 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20  entifier */.    
14480 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20  int idx;        
14490 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f    /* Index in so
144a0 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20  me Table.aCol[] 
144b0 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  of a column name
144c0 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a  d zName */.  } *
144d0 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20  a;.  int nId;   
144e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
144f0 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f  of identifiers o
14500 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
14510 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d  ../*.** The bitm
14520 61 73 6b 20 64 61 74 61 74 79 70 65 20 64 65 66  ask datatype def
14530 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73  ined below is us
14540 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f  ed for various o
14550 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a  ptimizations..**
14560 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69  .** Changing thi
14570 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20  s from a 64-bit 
14580 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70 65  to a 32-bit type
14590 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62   limits the numb
145a0 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20  er of.** tables 
145b0 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20  in a join to 32 
145c0 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20  instead of 64.  
145d0 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75  But it also redu
145e0 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20  ces the size.** 
145f0 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 62  of the library b
14600 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69  y 738 bytes on i
14610 78 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  x86..*/.typedef 
14620 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a  u64 Bitmask;../*
14630 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  .** The number o
14640 66 20 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d  f bits in a Bitm
14650 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e  ask.  "BMS" mean
14660 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22  s "BitMask Size"
14670 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53  ..*/.#define BMS
14680 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28    ((int)(sizeof(
14690 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a  Bitmask)*8))../*
146a0 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20 61 20 42  .** A bit in a B
146b0 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e  itmask.*/.#defin
146c0 65 20 4d 41 53 4b 42 49 54 28 6e 29 20 20 20 28  e MASKBIT(n)   (
146d0 28 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e  ((Bitmask)1)<<(n
146e0 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  ))../*.** The fo
146f0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
14700 65 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  e describes the 
14710 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61  FROM clause of a
14720 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
14730 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65  t..** Each table
14740 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20   or subquery in 
14750 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
14760 69 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c  is a separate el
14770 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20  ement of.** the 
14780 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61  SrcList.a[] arra
14790 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68  y..**.** With th
147a0 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75  e addition of mu
147b0 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
147c0 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c  support, the fol
147d0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
147e0 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20  .** can also be 
147f0 75 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65  used to describe
14800 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61   a particular ta
14810 62 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20  ble such as the 
14820 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73  table that.** is
14830 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20   modified by an 
14840 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20  INSERT, DELETE, 
14850 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
14860 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72  ent.  In standar
14870 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61  d SQL,.** such a
14880 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61   table must be a
14890 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44   simple name: ID
148a0 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65  .  But in SQLite
148b0 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a  , the table can.
148c0 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69  ** now be identi
148d0 66 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61  fied by a databa
148e0 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20  se name, a dot, 
148f0 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e  then the table n
14900 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a  ame: ID.ID..**.*
14910 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73  * The jointype s
14920 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e  tarts out showin
14930 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20  g the join type 
14940 62 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72  between the curr
14950 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64  ent table.** and
14960 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20   the next table 
14970 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68  on the list.  Th
14980 65 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20  e parser builds 
14990 74 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61  the list this wa
149a0 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65  y..** But sqlite
149b0 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
149c0 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68  nType() later sh
149d0 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70  ifts the jointyp
149e0 65 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a  es so that each.
149f0 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72  ** jointype expr
14a00 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62  esses the join b
14a10 65 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65  etween the table
14a20 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
14a30 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  s table..**.** I
14a40 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69  n the colUsed fi
14a50 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72  eld, the high-or
14a60 64 65 72 20 62 69 74 20 28 62 69 74 20 36 33 29  der bit (bit 63)
14a70 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20 74   is set if the t
14a80 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  able.** contains
14a90 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f   more than 63 co
14aa0 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34  lumns and the 64
14ab0 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c  -th or later col
14ac0 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  umn is used..*/.
14ad0 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b  struct SrcList {
14ae0 0a 20 20 75 38 20 6e 53 72 63 3b 20 20 20 20 20  .  u8 nSrc;     
14af0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14b00 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65  tables or subque
14b10 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d  ries in the FROM
14b20 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 38 20   clause */.  u8 
14b30 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20  nAlloc;      /* 
14b40 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
14b50 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61  s allocated in a
14b60 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74  [] below */.  st
14b70 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
14b80 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a  m {.    Schema *
14b90 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68  pSchema;  /* Sch
14ba0 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68 69  ema to which thi
14bb0 73 20 69 74 65 6d 20 69 73 20 66 69 78 65 64 20  s item is fixed 
14bc0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61  */.    char *zDa
14bd0 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65  tabase;  /* Name
14be0 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c   of database hol
14bf0 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  ding this table 
14c00 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  */.    char *zNa
14c10 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  me;      /* Name
14c20 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f   of the table */
14c30 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61  .    char *zAlia
14c40 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42  s;     /* The "B
14c50 22 20 70 61 72 74 20 6f 66 20 61 20 22 41 20 41  " part of a "A A
14c60 53 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e  S B" phrase.  zN
14c70 61 6d 65 20 69 73 20 74 68 65 20 22 41 22 20 2a  ame is the "A" *
14c80 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
14c90 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51  b;      /* An SQ
14ca0 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f  L table correspo
14cb0 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a  nding to zName *
14cc0 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
14cd0 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c  elect;  /* A SEL
14ce0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73  ECT statement us
14cf0 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61  ed in place of a
14d00 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20   table name */. 
14d10 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53     int addrFillS
14d20 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20  ub;  /* Address 
14d30 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f  of subroutine to
14d40 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62 71   manifest a subq
14d50 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20  uery */.    int 
14d60 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a  regReturn;    /*
14d70 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
14d80 67 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73  g return address
14d90 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20   of addrFillSub 
14da0 2a 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e 74 79  */.    u8 jointy
14db0 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65  pe;      /* Type
14dc0 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e   of join between
14dd0 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64 20 74   this able and t
14de0 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20  he previous */. 
14df0 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49     unsigned notI
14e00 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a  ndexed :1;    /*
14e10 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69   True if there i
14e20 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20  s a NOT INDEXED 
14e30 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 75 6e  clause */.    un
14e40 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61  signed isCorrela
14e50 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65  ted :1;  /* True
14e60 20 69 66 20 73 75 62 2d 71 75 65 72 79 20 69 73   if sub-query is
14e70 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20   correlated */. 
14e80 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43     unsigned viaC
14e90 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a  oroutine :1;  /*
14ea0 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20   Implemented as 
14eb0 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a  a co-routine */.
14ec0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52      unsigned isR
14ed0 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f  ecursive :1;   /
14ee0 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75 72  * True for recur
14ef0 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20 69  sive reference i
14f00 6e 20 57 49 54 48 20 2a 2f 0a 23 69 66 6e 64 65  n WITH */.#ifnde
14f10 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
14f20 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65  PLAIN.    u8 iSe
14f30 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49  lectId;     /* I
14f40 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68  f pSelect!=0, th
14f50 65 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d  e id of the sub-
14f60 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f  select in EQP */
14f70 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20  .#endif.    int 
14f80 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a  iCursor;      /*
14f90 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   The VDBE cursor
14fa0 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20   number used to 
14fb0 61 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c  access this tabl
14fc0 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  e */.    Expr *p
14fd0 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  On;        /* Th
14fe0 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61  e ON clause of a
14ff0 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c   join */.    IdL
15000 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f  ist *pUsing;   /
15010 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75  * The USING clau
15020 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a  se of a join */.
15030 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55      Bitmask colU
15040 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28  sed;  /* Bit N (
15050 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c  1<<N) set if col
15060 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73  umn N of pTab is
15070 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 63 68 61   used */.    cha
15080 72 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f  r *zIndex;     /
15090 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f  * Identifier fro
150a0 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a  m "INDEXED BY <z
150b0 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a  Index>" clause *
150c0 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 6e  /.    Index *pIn
150d0 64 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78  dex;    /* Index
150e0 20 73 74 72 75 63 74 75 72 65 20 63 6f 72 72 65   structure corre
150f0 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64  sponding to zInd
15100 65 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20  ex, if any */.  
15110 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  } a[1];         
15120 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
15130 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69   for each identi
15140 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74  fier on the list
15150 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65   */.};../*.** Pe
15160 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f  rmitted values o
15170 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e  f the SrcList.a.
15180 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a  jointype field.*
15190 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e  /.#define JT_INN
151a0 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20  ER     0x0001   
151b0 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20   /* Any kind of 
151c0 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a  inner or cross j
151d0 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
151e0 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30  T_CROSS     0x00
151f0 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69  02    /* Explici
15200 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f  t use of the CRO
15210 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  SS keyword */.#d
15220 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c  efine JT_NATURAL
15230 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20     0x0004    /* 
15240 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75  True for a "natu
15250 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ral" join */.#de
15260 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20  fine JT_LEFT    
15270 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c    0x0008    /* L
15280 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  eft outer join *
15290 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47  /.#define JT_RIG
152a0 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20  HT     0x0010   
152b0 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20   /* Right outer 
152c0 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
152d0 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30  JT_OUTER     0x0
152e0 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f  020    /* The "O
152f0 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73  UTER" keyword is
15300 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66   present */.#def
15310 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20  ine JT_ERROR    
15320 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e   0x0040    /* un
15330 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f  known or unsuppo
15340 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a  rted join type *
15350 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20  /.../*.** Flags 
15360 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20  appropriate for 
15370 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70  the wctrlFlags p
15380 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69  arameter of sqli
15390 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a  te3WhereBegin().
153a0 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72 65  ** and the Where
153b0 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20  Info.wctrlFlags 
153c0 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  member..*/.#defi
153d0 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
153e0 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30  _NORMAL   0x0000
153f0 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65   /* No-op */.#de
15400 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
15410 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30  BY_MIN      0x00
15420 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70  01 /* ORDER BY p
15430 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69  rocessing for mi
15440 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  n() func */.#def
15450 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
15460 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30  Y_MAX      0x000
15470 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  2 /* ORDER BY pr
15480 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78  ocessing for max
15490 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
154a0 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53  ne WHERE_ONEPASS
154b0 5f 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34  _DESIRED  0x0004
154c0 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f   /* Want to do o
154d0 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44  ne-pass UPDATE/D
154e0 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  ELETE */.#define
154f0 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45   WHERE_DUPLICATE
15500 53 5f 4f 4b 20 20 20 20 30 78 30 30 30 38 20 2f  S_OK    0x0008 /
15510 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61  * Ok to return a
15520 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f   row more than o
15530 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  nce */.#define W
15540 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43  HERE_OMIT_OPEN_C
15550 4c 4f 53 45 20 20 30 78 30 30 31 30 20 2f 2a 20  LOSE  0x0010 /* 
15560 54 61 62 6c 65 20 63 75 72 73 6f 72 73 20 61 72  Table cursors ar
15570 65 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a  e already open *
15580 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
15590 46 4f 52 43 45 5f 54 41 42 4c 45 20 20 20 20 20  FORCE_TABLE     
155a0 20 30 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f   0x0020 /* Do no
155b0 74 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f  t use an index-o
155c0 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a 23 64  nly search */.#d
155d0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54  efine WHERE_ONET
155e0 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30  ABLE_ONLY    0x0
155f0 30 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65  040 /* Only code
15600 20 74 68 65 20 31 73 74 20 74 61 62 6c 65 20 69   the 1st table i
15610 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64  n pTabList */.#d
15620 65 66 69 6e 65 20 57 48 45 52 45 5f 41 4e 44 5f  efine WHERE_AND_
15630 4f 4e 4c 59 20 20 20 20 20 20 20 20 20 30 78 30  ONLY         0x0
15640 30 38 30 20 2f 2a 20 44 6f 6e 27 74 20 75 73 65  080 /* Don't use
15650 20 69 6e 64 69 63 65 73 20 66 6f 72 20 4f 52 20   indices for OR 
15660 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65  terms */.#define
15670 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20   WHERE_GROUPBY  
15680 20 20 20 20 20 20 20 20 30 78 30 31 30 30 20 2f          0x0100 /
15690 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20 72 65  * pOrderBy is re
156a0 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20  ally a GROUP BY 
156b0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
156c0 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20 20 20  _DISTINCTBY     
156d0 20 20 30 78 30 32 30 30 20 2f 2a 20 70 4f 72 64    0x0200 /* pOrd
156e0 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61  erby is really a
156f0 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65   DISTINCT clause
15700 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
15710 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20  E_WANT_DISTINCT 
15720 20 20 20 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c     0x0400 /* All
15730 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f   output needs to
15740 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a   be distinct */.
15750 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75  ./* Allowed retu
15760 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73  rn values from s
15770 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73  qlite3WhereIsDis
15780 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69  tinct().*/.#defi
15790 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
157a0 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f  T_NOOP      0  /
157b0 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  * DISTINCT keywo
157c0 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23  rd not used */.#
157d0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
157e0 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20  TINCT_UNIQUE    
157f0 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61  1  /* No duplica
15800 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  tes */.#define W
15810 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52  HERE_DISTINCT_OR
15820 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c  DERED   2  /* Al
15830 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65  l duplicates are
15840 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65   adjacent */.#de
15850 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
15860 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20  NCT_UNORDERED 3 
15870 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61   /* Duplicates a
15880 72 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a  re scattered */.
15890 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e  ./*.** A NameCon
158a0 74 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63  text defines a c
158b0 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20  ontext in which 
158c0 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65  to resolve table
158d0 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e   and column.** n
158e0 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65  ames.  The conte
158f0 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  xt consists of a
15900 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20   list of tables 
15910 28 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66  (the pSrcList) f
15920 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69  ield and.** a li
15930 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72  st of named expr
15940 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e  ession (pEList).
15950 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72    The named expr
15960 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a  ession list may.
15970 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65  ** be NULL.  The
15980 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64   pSrc correspond
15990 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c  s to the FROM cl
159a0 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
159b0 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61   or.** to the ta
159c0 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74  ble being operat
159d0 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c  ed on by INSERT,
159e0 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45   UPDATE, or DELE
159f0 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69  TE.  The.** pELi
15a00 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  st corresponds t
15a10 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  o the result set
15a20 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64   of a SELECT and
15a30 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20   is NULL for.** 
15a40 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73  other statements
15a50 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74  ..**.** NameCont
15a60 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74  exts can be nest
15a70 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76  ed.  When resolv
15a80 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69  ing names, the i
15a90 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f  nner-most .** co
15aa0 6e 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65  ntext is searche
15ab0 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20  d first.  If no 
15ac0 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
15ad0 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a  the next outer.*
15ae0 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65  * context is che
15af0 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20  cked.  If there 
15b00 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63  is still no matc
15b10 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74  h, the next cont
15b20 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65  ext.** is checke
15b30 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73  d.  This process
15b40 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c   continues until
15b50 20 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20   either a match 
15b60 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61  is found.** or a
15b70 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20  ll contexts are 
15b80 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d  check.  When a m
15b90 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
15ba0 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f  he nRef member o
15bb0 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74  f.** the context
15bc0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
15bd0 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65  match is increme
15be0 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63  nted. .**.** Eac
15bf0 68 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20  h subquery gets 
15c00 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78  a new NameContex
15c10 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69  t.  The pNext fi
15c20 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  eld points to th
15c30 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  e.** NameContext
15c40 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71   in the parent q
15c50 75 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20  uery.  Thus the 
15c60 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e  process of scann
15c70 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43  ing the.** NameC
15c80 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72  ontext list corr
15c90 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63  esponds to searc
15ca0 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63  hing through suc
15cb0 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a  cessively outer.
15cc0 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f  ** subqueries lo
15cd0 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63  oking for a matc
15ce0 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d  h..*/.struct Nam
15cf0 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72  eContext {.  Par
15d00 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
15d10 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20    /* The parser 
15d20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53  */.  SrcList *pS
15d30 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65  rcList;   /* One
15d40 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20   or more tables 
15d50 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20  used to resolve 
15d60 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c  names */.  ExprL
15d70 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20  ist *pEList;    
15d80 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74  /* Optional list
15d90 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63   of result-set c
15da0 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49  olumns */.  AggI
15db0 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20  nfo *pAggInfo;  
15dc0 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
15dd0 61 62 6f 75 74 20 61 67 67 72 65 67 61 74 65 73  about aggregates
15de0 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a   at this level *
15df0 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  /.  NameContext 
15e00 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74  *pNext;  /* Next
15e10 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74   outer name cont
15e20 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f  ext.  NULL for o
15e30 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e  utermost */.  in
15e40 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  t nRef;         
15e50 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15e60 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62  names resolved b
15e70 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a  y this context *
15e80 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
15e90 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15ea0 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63  er of errors enc
15eb0 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72  ountered while r
15ec0 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a  esolving names *
15ed0 2f 0a 20 20 75 38 20 6e 63 46 6c 61 67 73 3b 20  /.  u8 ncFlags; 
15ee0 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f           /* Zero
15ef0 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c   or more NC_* fl
15f00 61 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ags defined belo
15f10 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  w */.};../*.** A
15f20 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
15f30 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78  r the NameContex
15f40 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64  t, ncFlags field
15f50 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  ..*/.#define NC_
15f60 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 31 20 20  AllowAgg  0x01  
15f70 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66    /* Aggregate f
15f80 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c  unctions are all
15f90 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65  owed here */.#de
15fa0 66 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20  fine NC_HasAgg  
15fb0 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 6e 65    0x02    /* One
15fc0 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61   or more aggrega
15fd0 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65  te functions see
15fe0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  n */.#define NC_
15ff0 49 73 43 68 65 63 6b 20 20 20 30 78 30 34 20 20  IsCheck   0x04  
16000 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
16010 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20  olving names in 
16020 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  a CHECK constrai
16030 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  nt */.#define NC
16040 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30 38 20  _InAggFunc 0x08 
16050 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e     /* True if an
16060 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74  alyzing argument
16070 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63  s to an agg func
16080 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50   */.#define NC_P
16090 61 72 74 49 64 78 20 20 20 30 78 31 30 20 20 20  artIdx   0x10   
160a0 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
160b0 6c 76 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20  lving a partial 
160c0 69 6e 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 0a  index WHERE */..
160d0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
160e0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
160f0 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
16100 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d  tains all inform
16110 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20  ation.** needed 
16120 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65  to generate code
16130 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45   for a single SE
16140 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
16150 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20  **.** nLimit is 
16160 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65  set to -1 if the
16170 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63  re is no LIMIT c
16180 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20  lause.  nOffset 
16190 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20  is set to 0..** 
161a0 49 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49  If there is a LI
161b0 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20  MIT clause, the 
161c0 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d  parser sets nLim
161d0 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  it to the value 
161e0 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20  of the.** limit 
161f0 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74  and nOffset to t
16200 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
16210 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20  offset (or 0 if 
16220 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20  there is not.** 
16230 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61  offset).  But la
16240 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61  ter on, nLimit a
16250 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d  nd nOffset becom
16260 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  e the memory loc
16270 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65  ations.** in the
16280 20 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72   VDBE that recor
16290 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20  d the limit and 
162a0 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e  offset counters.
162b0 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45  .**.** addrOpenE
162c0 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f  phm[] entries co
162d0 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73  ntain the addres
162e0 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65  s of OP_OpenEphe
162f0 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a  meral opcodes..*
16300 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65  * These addresse
16310 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64  s must be stored
16320 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20   so that we can 
16330 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c  go back and fill
16340 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45   in.** the P4_KE
16350 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72  YINFO and P2 par
16360 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20  ameters later.  
16370 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49  Neither the KeyI
16380 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e  nfo nor.** the n
16390 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
163a0 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f   in P2 can be co
163b0 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61  mputed at the sa
163c0 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68  me time.** as th
163d0 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e  e OP_OpenEphm in
163e0 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64  struction is cod
163f0 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a  ed because not.*
16400 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61  * enough informa
16410 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63  tion about the c
16420 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73  ompound query is
16430 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70   known at that p
16440 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79  oint..** The Key
16450 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
16460 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d  nTran[0] and [1]
16470 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74   contains collat
16480 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a  ing sequences.**
16490 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20   for the result 
164a0 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  set.  The KeyInf
164b0 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70  o for addrOpenEp
164c0 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63  hm[2] contains c
164d0 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75  ollating.** sequ
164e0 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52  ences for the OR
164f0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
16500 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  /.struct Select 
16510 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  {.  ExprList *pE
16520 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68  List;      /* Th
16530 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20  e fields of the 
16540 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f  result */.  u8 o
16550 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
16560 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b     /* One of: TK
16570 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b  _UNION TK_ALL TK
16580 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58  _INTERSECT TK_EX
16590 43 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65  CEPT */.  u16 se
165a0 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  lFlags;         
165b0 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a   /* Various SF_*
165c0 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74   values */.  int
165d0 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74   iLimit, iOffset
165e0 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65  ;   /* Memory re
165f0 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
16600 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63  LIMIT & OFFSET c
16610 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74  ounters */.  int
16620 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 33 5d   addrOpenEphm[3]
16630 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70  ;   /* OP_OpenEp
16640 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61  hem opcodes rela
16650 74 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  ted to this sele
16660 63 74 20 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c  ct */.  u64 nSel
16670 65 63 74 52 6f 77 3b 20 20 20 20 20 20 20 20 2f  ectRow;        /
16680 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62  * Estimated numb
16690 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  er of result row
166a0 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  s */.  SrcList *
166b0 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  pSrc;         /*
166c0 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   The FROM clause
166d0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
166e0 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  re;          /* 
166f0 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
16700 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
16710 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20  pGroupBy;    /* 
16720 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  The GROUP BY cla
16730 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  use */.  Expr *p
16740 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20  Having;         
16750 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c  /* The HAVING cl
16760 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ause */.  ExprLi
16770 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20  st *pOrderBy;   
16780 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59   /* The ORDER BY
16790 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c   clause */.  Sel
167a0 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20  ect *pPrior;    
167b0 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c      /* Prior sel
167c0 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  ect in a compoun
167d0 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65  d select stateme
167e0 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  nt */.  Select *
167f0 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
16800 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f  * Next select to
16810 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63   the left in a c
16820 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 53 65 6c  ompound */.  Sel
16830 65 63 74 20 2a 70 52 69 67 68 74 6d 6f 73 74 3b  ect *pRightmost;
16840 20 20 20 20 2f 2a 20 52 69 67 68 74 2d 6d 6f 73      /* Right-mos
16850 74 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f  t select in a co
16860 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74  mpound select st
16870 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 45 78 70  atement */.  Exp
16880 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20  r *pLimit;      
16890 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70      /* LIMIT exp
168a0 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65  ression. NULL me
168b0 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f  ans not used. */
168c0 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74  .  Expr *pOffset
168d0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46  ;         /* OFF
168e0 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  SET expression. 
168f0 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75  NULL means not u
16900 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a  sed. */.  With *
16910 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20  pWith;          
16920 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20   /* WITH clause 
16930 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73  attached to this
16940 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c   select. Or NULL
16950 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  . */.};../*.** A
16960 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
16970 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67  r Select.selFlag
16980 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65  s.  The "SF" pre
16990 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a  fix stands for.*
169a0 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e  * "Select Flag".
169b0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44  .*/.#define SF_D
169c0 69 73 74 69 6e 63 74 20 20 20 20 20 20 20 20 30  istinct        0
169d0 78 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74  x0001  /* Output
169e0 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49   should be DISTI
169f0 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NCT */.#define S
16a00 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20  F_Resolved      
16a10 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 64 65    0x0002  /* Ide
16a20 6e 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65  ntifiers have be
16a30 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23  en resolved */.#
16a40 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67  define SF_Aggreg
16a50 61 74 65 20 20 20 20 20 20 20 30 78 30 30 30 34  ate       0x0004
16a60 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67    /* Contains ag
16a70 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
16a80 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
16a90 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20  UsesEphemeral   
16aa0 30 78 30 30 30 38 20 20 2f 2a 20 55 73 65 73 20  0x0008  /* Uses 
16ab0 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61  the OpenEphemera
16ac0 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66  l opcode */.#def
16ad0 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20  ine SF_Expanded 
16ae0 20 20 20 20 20 20 20 30 78 30 30 31 30 20 20 2f         0x0010  /
16af0 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  * sqlite3SelectE
16b00 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f  xpand() called o
16b10 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e  n this */.#defin
16b20 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f  e SF_HasTypeInfo
16b30 20 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20       0x0020  /* 
16b40 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20  FROM subqueries 
16b50 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64  have Table metad
16b60 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ata */.#define S
16b70 46 5f 55 73 65 53 6f 72 74 65 72 20 20 20 20 20  F_UseSorter     
16b80 20 20 30 78 30 30 34 30 20 20 2f 2a 20 53 6f 72    0x0040  /* Sor
16b90 74 20 75 73 69 6e 67 20 61 20 73 6f 72 74 65 72  t using a sorter
16ba0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56   */.#define SF_V
16bb0 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 20 30  alues          0
16bc0 78 30 30 38 30 20 20 2f 2a 20 53 79 6e 74 68 65  x0080  /* Synthe
16bd0 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45  sized from VALUE
16be0 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  S clause */.#def
16bf0 69 6e 65 20 53 46 5f 4d 61 74 65 72 69 61 6c 69  ine SF_Materiali
16c00 7a 65 20 20 20 20 20 30 78 30 31 30 30 20 20 2f  ze     0x0100  /
16c10 2a 20 46 6f 72 63 65 20 6d 61 74 65 72 69 61 6c  * Force material
16c20 69 7a 61 74 69 6f 6e 20 6f 66 20 76 69 65 77 73  ization of views
16c30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e   */.#define SF_N
16c40 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20 20 30  estedFrom      0
16c50 78 30 32 30 30 20 20 2f 2a 20 50 61 72 74 20 6f  x0200  /* Part o
16c60 66 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65  f a parenthesize
16c70 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  d FROM clause */
16c80 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62  .#define SF_Mayb
16c90 65 43 6f 6e 76 65 72 74 20 20 20 20 30 78 30 34  eConvert    0x04
16ca0 30 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76  00  /* Need conv
16cb0 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63  ertCompoundSelec
16cc0 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f  tToSubquery() */
16cd0 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75  .#define SF_Recu
16ce0 72 73 69 76 65 20 20 20 20 20 20 20 30 78 30 38  rsive       0x08
16cf0 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72  00  /* The recur
16d00 73 69 76 65 20 70 61 72 74 20 6f 66 20 61 20 72  sive part of a r
16d10 65 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a  ecursive CTE */.
16d20 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75  ../*.** The resu
16d30 6c 74 73 20 6f 66 20 61 20 73 65 6c 65 63 74 20  lts of a select 
16d40 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74  can be distribut
16d50 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61  ed in several wa
16d60 79 73 2e 20 20 54 68 65 0a 2a 2a 20 22 53 52 54  ys.  The.** "SRT
16d70 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22  " prefix means "
16d80 53 45 4c 45 43 54 20 52 65 73 75 6c 74 20 54 79  SELECT Result Ty
16d90 70 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  pe"..*/.#define 
16da0 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20  SRT_Union       
16db0 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   1  /* Store res
16dc0 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61  ult as keys in a
16dd0 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  n index */.#defi
16de0 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20 20  ne SRT_Except   
16df0 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65      2  /* Remove
16e00 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55   result from a U
16e10 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  NION index */.#d
16e20 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73  efine SRT_Exists
16e30 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f         3  /* Sto
16e40 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73 75  re 1 if the resu
16e50 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20  lt is not empty 
16e60 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44  */.#define SRT_D
16e70 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20 2f  iscard      4  /
16e80 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68  * Do not save th
16e90 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65  e results anywhe
16ea0 72 65 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52  re */../* The OR
16eb0 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73  DER BY clause is
16ec0 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c   ignored for all
16ed0 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f   of the above */
16ee0 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62  .#define Ignorab
16ef0 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58  leOrderby(X) ((X
16f00 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69  ->eDest)<=SRT_Di
16f10 73 63 61 72 64 29 0a 0a 23 64 65 66 69 6e 65 20  scard)..#define 
16f20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
16f30 20 35 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61   5  /* Output ea
16f40 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  ch row of result
16f50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
16f60 4d 65 6d 20 20 20 20 20 20 20 20 20 20 36 20 20  Mem          6  
16f70 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
16f80 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  in a memory cell
16f90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
16fa0 53 65 74 20 20 20 20 20 20 20 20 20 20 37 20 20  Set          7  
16fb0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73  /* Store results
16fc0 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
16fd0 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
16fe0 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20  SRT_Table       
16ff0 20 38 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   8  /* Store res
17000 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68  ult as data with
17010 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f   an automatic ro
17020 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wid */.#define S
17030 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 20  RT_EphemTab     
17040 39 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61  9  /* Create tra
17050 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73  nsient tab and s
17060 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61  tore like SRT_Ta
17070 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ble */.#define S
17080 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31  RT_Coroutine   1
17090 30 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61  0  /* Generate a
170a0 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72   single row of r
170b0 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esult */.#define
170c0 20 53 52 54 5f 44 69 73 74 54 61 62 6c 65 20 20   SRT_DistTable  
170d0 20 31 31 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54   11  /* Like SRT
170e0 5f 54 41 42 4c 45 2c 20 62 75 74 20 75 6e 69 71  _TABLE, but uniq
170f0 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20  ue results only 
17100 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
17110 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62  tance of this ob
17120 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20 77  ject describes w
17130 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74  here to put of t
17140 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a  he results of.**
17150 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
17160 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ent..*/.struct S
17170 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38  electDest {.  u8
17180 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20 20   eDest;         
17190 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73  /* How to dispos
171a0 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  e of the results
171b0 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61  .  On of SRT_* a
171c0 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20  bove. */.  char 
171d0 61 66 66 53 64 73 74 3b 20 20 20 20 20 2f 2a 20  affSdst;     /* 
171e0 41 66 66 69 6e 69 74 79 20 75 73 65 64 20 77 68  Affinity used wh
171f0 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65  en eDest==SRT_Se
17200 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61  t */.  int iSDPa
17210 72 6d 3b 20 20 20 20 20 20 2f 2a 20 41 20 70 61  rm;      /* A pa
17220 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79 20  rameter used by 
17230 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f 73  the eDest dispos
17240 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69  al method */.  i
17250 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20 20  nt iSdst;       
17260 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65   /* Base registe
17270 72 20 77 68 65 72 65 20 72 65 73 75 6c 74 73 20  r where results 
17280 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20  are written */. 
17290 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20   int nSdst;     
172a0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
172b0 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61  registers alloca
172c0 74 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ted */.};../*.**
172d0 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e   During code gen
172e0 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65  eration of state
172f0 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e  ments that do in
17300 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49  serts into AUTOI
17310 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62  NCREMENT .** tab
17320 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69  les, the followi
17330 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ng information i
17340 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
17350 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e  e Table.u.autoIn
17360 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f  c.p.** pointer o
17370 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65  f each autoincre
17380 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65  ment table to re
17390 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69  cord some side i
173a0 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a  nformation that.
173b0 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  ** the code gene
173c0 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65  rator needs.  We
173d0 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65   have to keep pe
173e0 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72  r-table autoincr
173f0 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ement.** informa
17400 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73  tion in case ins
17410 65 72 74 73 20 61 72 65 20 64 6f 77 6e 20 77 69  erts are down wi
17420 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20  thin triggers.  
17430 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a  Triggers do not.
17440 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72  ** normally coor
17450 64 69 6e 61 74 65 20 74 68 65 69 72 20 61 63 74  dinate their act
17460 69 76 69 74 69 65 73 2c 20 62 75 74 20 77 65 20  ivities, but we 
17470 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64  do need to coord
17480 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61  inate the.** loa
17490 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20  ding and saving 
174a0 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  of autoincrement
174b0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
174c0 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49  .struct AutoincI
174d0 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49  nfo {.  AutoincI
174e0 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a  nfo *pNext;   /*
174f0 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b   Next info block
17500 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68   in a list of th
17510 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c  em all */.  Tabl
17520 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
17530 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20    /* Table this 
17540 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72  info block refer
17550 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44  s to */.  int iD
17560 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
17570 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69  /* Index in sqli
17580 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74  te3.aDb[] of dat
17590 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54  abase holding pT
175a0 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43  ab */.  int regC
175b0 74 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  tr;           /*
175c0 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   Memory register
175d0 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77   holding the row
175e0 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b  id counter */.};
175f0 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20  ../*.** Size of 
17600 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65  the column cache
17610 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
17620 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20  TE_N_COLCACHE.# 
17630 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f  define SQLITE_N_
17640 43 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64  COLCACHE 10.#end
17650 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61  if../*.** At lea
17660 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20  st one instance 
17670 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
17680 20 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72   structure is cr
17690 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 0a  eated for each .
176a0 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61 74 20  ** trigger that 
176b0 6d 61 79 20 62 65 20 66 69 72 65 64 20 77 68 69  may be fired whi
176c0 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e  le parsing an IN
176d0 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20  SERT, UPDATE or 
176e0 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d  DELETE.** statem
176f0 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62  ent. All such ob
17700 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72 65 64  jects are stored
17710 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c   in the linked l
17720 69 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a  ist headed at.**
17730 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
17740 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f  rg and deleted o
17750 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  nce statement co
17760 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65  mpilation has be
17770 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e  en.** completed.
17780 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75  .**.** A Vdbe su
17790 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69  b-program that i
177a0 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f  mplements the bo
177b0 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75  dy and WHEN clau
177c0 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a  se of trigger.**
177d0 20 54 72 69 67 67 65 72 50 72 67 2e 70 54 72 69   TriggerPrg.pTri
177e0 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61  gger, assuming a
177f0 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   default ON CONF
17800 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a  LICT clause of.*
17810 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63  * TriggerPrg.orc
17820 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69  onf, is stored i
17830 6e 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67  n the TriggerPrg
17840 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62  .pProgram variab
17850 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65  le..** The Parse
17860 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73  .pTriggerPrg lis
17870 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73  t never contains
17880 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74   two entries wit
17890 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61  h the same.** va
178a0 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54  lues for both pT
178b0 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e  rigger and orcon
178c0 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69  f..**.** The Tri
178d0 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b  ggerPrg.aColmask
178e0 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20  [0] variable is 
178f0 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66  set to a mask of
17900 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a   old.* columns.*
17910 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72 20 73  * accessed (or s
17920 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67  et to 0 for trig
17930 67 65 72 73 20 66 69 72 65 64 20 61 73 20 61 20  gers fired as a 
17940 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54  result of INSERT
17950 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29   .** statements)
17960 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65  . Similarly, the
17970 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
17980 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65  mask[1] variable
17990 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20   is set to.** a 
179a0 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  mask of new.* co
179b0 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68  lumns used by th
179c0 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74  e program..*/.st
179d0 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20  ruct TriggerPrg 
179e0 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  {.  Trigger *pTr
179f0 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54  igger;      /* T
17a00 72 69 67 67 65 72 20 74 68 69 73 20 70 72 6f 67  rigger this prog
17a10 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72  ram was coded fr
17a20 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50  om */.  TriggerP
17a30 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  rg *pNext;      
17a40 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e  /* Next entry in
17a50 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
17a60 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62  rg list */.  Sub
17a70 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
17a80 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20  m;   /* Program 
17a90 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72  implementing pTr
17aa0 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a  igger/orconf */.
17ab0 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20    int orconf;   
17ac0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
17ad0 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
17ae0 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32   policy */.  u32
17af0 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20   aColmask[2];   
17b00 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66       /* Masks of
17b10 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f   old.*, new.* co
17b20 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a  lumns accessed *
17b30 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
17b40 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65  yDbMask datatype
17b50 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b   for the bitmask
17b60 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64   of all attached
17b70 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
17b80 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  if SQLITE_MAX_AT
17b90 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65  TACHED>30.  type
17ba0 64 65 66 20 73 71 6c 69 74 65 33 5f 75 69 6e 74  def sqlite3_uint
17bb0 36 34 20 79 44 62 4d 61 73 6b 3b 0a 23 65 6c 73  64 yDbMask;.#els
17bc0 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69  e.  typedef unsi
17bd0 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b  gned int yDbMask
17be0 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
17bf0 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f  An SQL parser co
17c00 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f  ntext.  A copy o
17c10 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
17c20 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75   is passed throu
17c30 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72  gh.** the parser
17c40 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61   and down into a
17c50 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63  ll the parser ac
17c60 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20  tion routine in 
17c70 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72  order to.** carr
17c80 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61  y around informa
17c90 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f  tion that is glo
17ca0 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72  bal to the entir
17cb0 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  e parse..**.** T
17cc0 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20  he structure is 
17cd0 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f  divided into two
17ce0 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68   parts.  When th
17cf0 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64  e parser and cod
17d00 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61  e.** generate ca
17d10 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65  ll themselves re
17d20 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66  cursively, the f
17d30 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65  irst part of the
17d40 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73   structure.** is
17d50 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68   constant but th
17d60 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73  e second part is
17d70 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65   reset at the be
17d80 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20  ginning and end 
17d90 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72  of.** each recur
17da0 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sion..**.** The 
17db0 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61  nTableLock and a
17dc0 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62  TableLock variab
17dd0 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65  les are only use
17de0 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d  d if the shared-
17df0 63 61 63 68 65 20 0a 2a 2a 20 66 65 61 74 75 72  cache .** featur
17e00 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66  e is enabled (if
17e10 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75   sqlite3Tsd()->u
17e20 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20  seSharedData is 
17e30 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a  true). They are.
17e40 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
17e50 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c   the set of tabl
17e60 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64  e-locks required
17e70 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e   by the statemen
17e80 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69  t being.** compi
17e90 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71  led. Function sq
17ea0 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29  lite3TableLock()
17eb0 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20   is used to add 
17ec0 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a  entries to the.*
17ed0 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63  * list..*/.struc
17ee0 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69  t Parse {.  sqli
17ef0 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
17f00 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74   /* The main dat
17f10 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20  abase structure 
17f20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  */.  char *zErrM
17f30 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  sg;       /* An 
17f40 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f  error message */
17f50 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20  .  Vdbe *pVdbe; 
17f60 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e          /* An en
17f70 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69  gine for executi
17f80 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65  ng database byte
17f90 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63  code */.  int rc
17fa0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
17fb0 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72  * Return code fr
17fc0 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  om execution */.
17fd0 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74    u8 colNamesSet
17fe0 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61  ;      /* TRUE a
17ff0 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61  fter OP_ColumnNa
18000 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75  me has been issu
18010 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20  ed to pVdbe */. 
18020 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b   u8 checkSchema;
18030 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20        /* Causes 
18040 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68  schema cookie ch
18050 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72  eck after an err
18060 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65  or */.  u8 neste
18070 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
18080 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
18090 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61   calls to the pa
180a0 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61  rser/code genera
180b0 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d  tor */.  u8 nTem
180c0 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
180d0 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f   Number of tempo
180e0 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69  rary registers i
180f0 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a  n aTempReg[] */.
18100 20 20 75 38 20 6e 54 65 6d 70 49 6e 55 73 65 3b    u8 nTempInUse;
18110 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
18120 20 6f 66 20 61 54 65 6d 70 52 65 67 5b 5d 20 63   of aTempReg[] c
18130 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64  urrently checked
18140 20 6f 75 74 20 2a 2f 0a 20 20 75 38 20 6e 43 6f   out */.  u8 nCo
18150 6c 43 61 63 68 65 3b 20 20 20 20 20 20 20 20 2f  lCache;        /
18160 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
18170 69 65 73 20 69 6e 20 61 43 6f 6c 43 61 63 68 65  ies in aColCache
18180 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 43 6f 6c 43  [] */.  u8 iColC
18190 61 63 68 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  ache;        /* 
181a0 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 61 43  Next entry in aC
181b0 6f 6c 43 61 63 68 65 5b 5d 20 74 6f 20 72 65 70  olCache[] to rep
181c0 6c 61 63 65 20 2a 2f 0a 20 20 75 38 20 69 73 4d  lace */.  u8 isM
181d0 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f  ultiWrite;     /
181e0 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d  * True if statem
181f0 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69  ent may modify/i
18200 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72  nsert multiple r
18210 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41  ows */.  u8 mayA
18220 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  bort;         /*
18230 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65   True if stateme
18240 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20  nt may throw an 
18250 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20  ABORT exception 
18260 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f  */.  u8 hasCompo
18270 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65  und;      /* Nee
18280 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76  d to invoke conv
18290 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63  ertCompoundSelec
182a0 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f  tToSubquery() */
182b0 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b  .  int aTempReg[
182c0 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69  8];     /* Holdi
182d0 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70  ng area for temp
182e0 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
182f0 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52  */.  int nRangeR
18300 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a  eg;       /* Siz
18310 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  e of the tempora
18320 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63  ry register bloc
18330 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67  k */.  int iRang
18340 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46  eReg;       /* F
18350 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e  irst register in
18360 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
18370 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69  ter block */.  i
18380 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
18390 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
183a0 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a   errors seen */.
183b0 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20    int nTab;     
183c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
183d0 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61   of previously a
183e0 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75  llocated VDBE cu
183f0 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  rsors */.  int n
18400 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
18410 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  /* Number of mem
18420 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73  ory cells used s
18430 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
18440 53 65 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Set;            
18450 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65 74  /* Number of set
18460 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
18470 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20 20  .  int nOnce;   
18480 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18490 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e 73  r of OP_Once ins
184a0 74 72 75 63 74 69 6f 6e 73 20 73 6f 20 66 61 72  tructions so far
184b0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c   */.  int nOpAll
184c0 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  oc;        /* Nu
184d0 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c  mber of slots al
184e0 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65  located for Vdbe
184f0 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  .aOp[] */.  int 
18500 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20  nLabel;         
18510 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61   /* Number of la
18520 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69  bels used */.  i
18530 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20  nt *aLabel;     
18540 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20      /* Space to 
18550 68 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20  hold the labels 
18560 2a 2f 0a 20 20 69 6e 74 20 69 46 69 78 65 64 4f  */.  int iFixedO
18570 70 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 76  p;        /* Nev
18580 65 72 20 62 61 63 6b 20 6f 75 74 20 6f 70 63 6f  er back out opco
18590 64 65 73 20 69 46 69 78 65 64 4f 70 2d 31 20 6f  des iFixedOp-1 o
185a0 72 20 65 61 72 6c 69 65 72 20 2a 2f 0a 20 20 69  r earlier */.  i
185b0 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20  nt ckBase;      
185c0 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69      /* Base regi
185d0 73 74 65 72 20 6f 66 20 64 61 74 61 20 64 75 72  ster of data dur
185e0 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72  ing check constr
185f0 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69  aints */.  int i
18600 50 61 72 74 49 64 78 54 61 62 3b 20 20 20 20 20  PartIdxTab;     
18610 2f 2a 20 54 61 62 6c 65 20 63 6f 72 72 65 73 70  /* Table corresp
18620 6f 6e 64 69 6e 67 20 74 6f 20 61 20 70 61 72 74  onding to a part
18630 69 61 6c 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ial index */.  i
18640 6e 74 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20  nt iCacheLevel; 
18650 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20      /* ColCache 
18660 76 61 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43  valid when aColC
18670 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69  ache[].iLevel<=i
18680 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20  CacheLevel */.  
18690 69 6e 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20  int iCacheCnt;  
186a0 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20       /* Counter 
186b0 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
186c0 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75   aColCache[].lru
186d0 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 73 74 72   values */.  str
186e0 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a  uct yColCache {.
186f0 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
18700 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
18710 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  le cursor number
18720 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c   */.    int iCol
18730 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  umn;          /*
18740 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75   Table column nu
18750 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74  mber */.    u8 t
18760 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
18770 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74    /* iReg is a t
18780 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61  emp register tha
18790 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72  t needs to be fr
187a0 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  eed */.    int i
187b0 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
187c0 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65   /* Nesting leve
187d0 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65  l */.    int iRe
187e0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
187f0 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65  * Reg with value
18800 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e   of this column.
18810 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a   0 means none. *
18820 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20  /.    int lru;  
18830 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
18840 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73  east recently us
18850 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65  ed entry has the
18860 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20   smallest value 
18870 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65  */.  } aColCache
18880 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43  [SQLITE_N_COLCAC
18890 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72  HE];  /* One for
188a0 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63   each column cac
188b0 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45 78  he entry */.  Ex
188c0 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78  prList *pConstEx
188d0 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65  pr;/* Constant e
188e0 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
188f0 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73  yDbMask writeMas
18900 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20  k;   /* Start a 
18910 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
18920 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62  n on these datab
18930 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73  ases */.  yDbMas
18940 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f  k cookieMask;  /
18950 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68  * Bitmask of sch
18960 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61 74  ema verified dat
18970 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20  abases */.  int 
18980 63 6f 6f 6b 69 65 47 6f 74 6f 3b 20 20 20 20 20  cookieGoto;     
18990 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f   /* Address of O
189a0 50 5f 47 6f 74 6f 20 74 6f 20 63 6f 6f 6b 69 65  P_Goto to cookie
189b0 20 76 65 72 69 66 69 65 72 20 73 75 62 72 6f 75   verifier subrou
189c0 74 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 63 6f  tine */.  int co
189d0 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49 54 45  okieValue[SQLITE
189e0 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 32 5d  _MAX_ATTACHED+2]
189f0 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20  ;  /* Values of 
18a00 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72 69 66  cookies to verif
18a10 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  y */.  int regRo
18a20 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52  wid;        /* R
18a30 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
18a40 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45 20  rowid of CREATE 
18a50 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20  TABLE entry */. 
18a60 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20   int regRoot;   
18a70 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
18a80 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70  r holding root p
18a90 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e  age number for n
18aa0 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20  ew objects */.  
18ab0 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20  int nMaxArg;    
18ac0 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73       /* Max args
18ad0 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72 20   passed to user 
18ae0 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d  function by sub-
18af0 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 54 6f 6b  program */.  Tok
18b00 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d  en constraintNam
18b10 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  e;/* Name of the
18b20 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72   constraint curr
18b30 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73  ently being pars
18b40 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ed */.#ifndef SQ
18b50 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
18b60 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61  _CACHE.  int nTa
18b70 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20  bleLock;        
18b80 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63  /* Number of loc
18b90 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b  ks in aTableLock
18ba0 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20   */.  TableLock 
18bb0 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20  *aTableLock; /* 
18bc0 52 65 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c  Required table l
18bd0 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d  ocks for shared-
18be0 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65  cache mode */.#e
18bf0 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e  ndif.  AutoincIn
18c00 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49  fo *pAinc;  /* I
18c10 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
18c20 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63   AUTOINCREMENT c
18c30 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a  ounters */..  /*
18c40 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   Information use
18c50 64 20 77 68 69 6c 65 20 63 6f 64 69 6e 67 20 74  d while coding t
18c60 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e  rigger programs.
18c70 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f   */.  Parse *pTo
18c80 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61  plevel;    /* Pa
18c90 72 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  rse structure fo
18ca0 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28  r main program (
18cb0 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61  or NULL) */.  Ta
18cc0 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62  ble *pTriggerTab
18cd0 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67  ;  /* Table trig
18ce0 67 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63  gers are being c
18cf0 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e  oded for */.  in
18d00 74 20 61 64 64 72 43 72 54 61 62 3b 20 20 20 20  t addrCrTab;    
18d10 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66     /* Address of
18d20 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20   OP_CreateTable 
18d30 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45  opcode on CREATE
18d40 20 54 41 42 4c 45 20 2a 2f 0a 20 20 69 6e 74 20   TABLE */.  int 
18d50 61 64 64 72 53 6b 69 70 50 4b 3b 20 20 20 20 20  addrSkipPK;     
18d60 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 69   /* Address of i
18d70 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 73 6b  nstruction to sk
18d80 69 70 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69  ip PRIMARY KEY i
18d90 6e 64 65 78 20 2a 2f 0a 20 20 75 33 32 20 6e 51  ndex */.  u32 nQ
18da0 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f  ueryLoop;      /
18db0 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20  * Est number of 
18dc0 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20  iterations of a 
18dd0 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e  query (10*log2(N
18de0 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d  )) */.  u32 oldm
18df0 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
18e00 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  Mask of old.* co
18e10 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
18e20 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73   */.  u32 newmas
18e30 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  k;         /* Ma
18e40 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
18e50 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a  mns referenced *
18e60 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f  /.  u8 eTriggerO
18e70 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55  p;       /* TK_U
18e80 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
18e90 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f   or TK_DELETE */
18ea0 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20  .  u8 eOrconf;  
18eb0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
18ec0 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
18ed0 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65  olicy for trigge
18ee0 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20  r steps */.  u8 
18ef0 64 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b  disableTriggers;
18f00 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73    /* True to dis
18f10 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
18f20 0a 0a 20 20 2f 2a 20 41 62 6f 76 65 20 69 73 20  ..  /* Above is 
18f30 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e  constant between
18f40 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65   recursions.  Be
18f50 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66  low is reset bef
18f60 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20  ore and after.  
18f70 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f  ** each recursio
18f80 6e 20 2a 2f 0a 0a 20 20 69 6e 74 20 6e 56 61 72  n */..  int nVar
18f90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
18fa0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27    /* Number of '
18fb0 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73 65 65  ?' variables see
18fc0 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20  n in the SQL so 
18fd0 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56  far */.  int nzV
18fe0 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ar;             
18ff0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
19000 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f 74 73 20  available slots 
19010 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20  in azVar[] */.  
19020 75 38 20 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b  u8 iPkSortOrder;
19030 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 53 43            /* ASC
19040 20 6f 72 20 44 45 53 43 20 66 6f 72 20 49 4e 54   or DESC for INT
19050 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
19060 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e   */.  u8 explain
19070 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
19080 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 45  /* True if the E
19090 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66  XPLAIN flag is f
190a0 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72  ound on the quer
190b0 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  y */.#ifndef SQL
190c0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
190d0 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61  TABLE.  u8 decla
190e0 72 65 56 74 61 62 3b 20 20 20 20 20 20 20 20 20  reVtab;         
190f0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73    /* True if ins
19100 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c  ide sqlite3_decl
19110 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20  are_vtab() */.  
19120 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20  int nVtabLock;  
19130 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
19140 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74  ber of virtual t
19150 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f  ables to lock */
19160 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 41  .#endif.  int nA
19170 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20  lias;           
19180 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
19190 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c 74 20   aliased result 
191a0 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  set columns */. 
191b0 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20   int nHeight;   
191c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
191d0 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65  pression tree he
191e0 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20  ight of current 
191f0 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69  sub-select */.#i
19200 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
19210 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20  T_EXPLAIN.  int 
19220 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20  iSelectId;      
19230 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66 20 63        /* ID of c
19240 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20 66 6f  urrent select fo
19250 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
19260 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74 53   */.  int iNextS
19270 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20  electId;        
19280 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61 62 6c  /* Next availabl
19290 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f 72 20  e select ID for 
192a0 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a  EXPLAIN output *
192b0 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68 61 72 20  /.#endif.  char 
192c0 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20 20 20 20  **azVar;        
192d0 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 73       /* Pointers
192e0 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70 61 72   to names of par
192f0 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56 64 62  ameters */.  Vdb
19300 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20  e *pReprepare;  
19310 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69         /* VM bei
19320 6e 67 20 72 65 70 72 65 70 61 72 65 64 20 28 73  ng reprepared (s
19330 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28  qlite3Reprepare(
19340 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  )) */.  const ch
19350 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20  ar *zTail;      
19360 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78    /* All SQL tex
19370 74 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20  t past the last 
19380 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64  semicolon parsed
19390 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65   */.  Table *pNe
193a0 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  wTable;         
193b0 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67  /* A table being
193c0 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
193d0 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a  CREATE TABLE */.
193e0 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54    Trigger *pNewT
193f0 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54  rigger;     /* T
19400 72 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e  rigger under con
19410 73 74 72 75 63 74 20 62 79 20 61 20 43 52 45 41  struct by a CREA
19420 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20  TE TRIGGER */.  
19430 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74  const char *zAut
19440 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65  hContext; /* The
19450 20 36 74 68 20 70 61 72 61 6d 65 74 65 72 20 74   6th parameter t
19460 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c  o db->xAuth call
19470 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e  backs */.  Token
19480 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20   sNameToken;    
19490 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69       /* Token wi
194a0 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73  th unqualified s
194b0 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d  chema object nam
194c0 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c 61  e */.  Token sLa
194d0 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20  stToken;        
194e0 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b   /* The last tok
194f0 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 23 69 66  en parsed */.#if
19500 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
19510 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
19520 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20  Token sArg;     
19530 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d            /* Com
19540 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61 20  plete text of a 
19550 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20  module argument 
19560 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56  */.  Table **apV
19570 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f  tabLock;       /
19580 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72  * Pointer to vir
19590 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64  tual tables need
195a0 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23  ing locking */.#
195b0 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70  endif.  Table *p
195c0 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20  ZombieTab;      
195d0 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62    /* List of Tab
195e0 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65  le objects to de
195f0 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64 65 20  lete after code 
19600 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  gen */.  Trigger
19610 50 72 67 20 2a 70 54 72 69 67 67 65 72 50 72 67  Prg *pTriggerPrg
19620 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73  ;  /* Linked lis
19630 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67  t of coded trigg
19640 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ers */.  With *p
19650 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  With;           
19660 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 57 49     /* Current WI
19670 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55  TH clause, or NU
19680 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43  LL */.  struct C
19690 74 65 20 2a 70 43 74 65 3b 20 20 20 20 20 20 20  te *pCte;       
196a0 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 43 54 45    /* Current CTE
196b0 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a  , or NULL */.};.
196c0 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72  ./*.** Return tr
196d0 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20  ue if currently 
196e0 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65  inside an sqlite
196f0 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
19700 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66   call..*/.#ifdef
19710 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
19720 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66  TUALTABLE.  #def
19730 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56  ine IN_DECLARE_V
19740 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64  TAB 0.#else.  #d
19750 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45  efine IN_DECLARE
19760 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64  _VTAB (pParse->d
19770 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64  eclareVtab).#end
19780 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  if../*.** An ins
19790 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
197a0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
197b0 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64   can be declared
197c0 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20   on a stack and 
197d0 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20  used.** to save 
197e0 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43  the Parse.zAuthC
197f0 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20  ontext value so 
19800 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72  that it can be r
19810 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a  estored later..*
19820 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  /.struct AuthCon
19830 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63  text {.  const c
19840 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78  har *zAuthContex
19850 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65  t;   /* Put save
19860 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e  d Parse.zAuthCon
19870 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50  text here */.  P
19880 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
19890 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
198a0 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72  e Parse structur
198b0 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42  e */.};../*.** B
198c0 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f  itfield flags fo
198d0 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61  r P5 value in va
198e0 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a  rious opcodes..*
198f0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
19900 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30  _NCHANGE       0
19910 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74 6f  x01    /* Set to
19920 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61   update db->nCha
19930 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  nge */.#define O
19940 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
19950 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53      0x02    /* S
19960 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d  et to update db-
19970 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64  >lastRowid */.#d
19980 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55  efine OPFLAG_ISU
19990 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20  PDATE      0x04 
199a0 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e     /* This OP_In
199b0 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55  sert is an sql U
199c0 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
199d0 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20   OPFLAG_APPEND  
199e0 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a        0x08    /*
199f0 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20   This is likely 
19a00 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20  to be an append 
19a10 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
19a20 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
19a30 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74  0x10    /* Try t
19a40 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69  o avoid a seek i
19a50 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20  n BtreeInsert() 
19a60 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
19a70 47 5f 43 4c 45 41 52 43 41 43 48 45 20 20 20 20  G_CLEARCACHE    
19a80 30 78 32 30 20 20 20 20 2f 2a 20 43 6c 65 61 72  0x20    /* Clear
19a90 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 61   pseudo-table ca
19aa0 63 68 65 20 69 6e 20 4f 50 5f 43 6f 6c 75 6d 6e  che in OP_Column
19ab0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
19ac0 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20  AG_LENGTHARG    
19ad0 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43   0x40    /* OP_C
19ae0 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20  olumn only used 
19af0 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a  for length() */.
19b00 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54  #define OPFLAG_T
19b10 59 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38  YPEOFARG     0x8
19b20 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0    /* OP_Colum
19b30 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20  n only used for 
19b40 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66  typeof() */.#def
19b50 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  ine OPFLAG_BULKC
19b60 53 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20  SR       0x01   
19b70 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73   /* OP_Open** us
19b80 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20  ed to open bulk 
19b90 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  cursor */.#defin
19ba0 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47  e OPFLAG_P2ISREG
19bb0 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f         0x02    /
19bc0 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a  * P2 to OP_Open*
19bd0 2a 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  * is a register 
19be0 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e  number */.#defin
19bf0 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
19c00 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
19c10 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73  * OP_Compare: us
19c20 65 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f  e the permutatio
19c30 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68  n */../*. * Each
19c40 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e 74   trigger present
19c50 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
19c60 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65   schema is store
19c70 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  d as an instance
19c80 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72   of. * struct Tr
19c90 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f  igger. . *. * Po
19ca0 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e  inters to instan
19cb0 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
19cc0 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64  igger are stored
19cd0 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a   in two ways.. *
19ce0 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67   1. In the "trig
19cf0 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65  Hash" hash table
19d00 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71   (part of the sq
19d10 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72  lite3* that repr
19d20 65 73 65 6e 74 73 20 74 68 65 20 0a 20 2a 20 20  esents the . *  
19d30 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69    database). Thi
19d40 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72  s allows Trigger
19d50 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62   structures to b
19d60 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e  e retrieved by n
19d70 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74  ame.. * 2. All t
19d80 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74  riggers associat
19d90 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ed with a single
19da0 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69   table form a li
19db0 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67  nked list, using
19dc0 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74   the. *    pNext
19dd0 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63   member of struc
19de0 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69  t Trigger. A poi
19df0 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73  nter to the firs
19e00 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
19e10 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69  . *    linked li
19e20 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  st is stored as 
19e30 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d  the "pTrigger" m
19e40 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73  ember of the ass
19e50 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74  ociated. *    st
19e60 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20  ruct Table.. *. 
19e70 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74  * The "step_list
19e80 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20  " member points 
19e90 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
19ea0 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64  ment of a linked
19eb0 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e   list. * contain
19ec0 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74  ing the SQL stat
19ed0 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64  ements specified
19ee0 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20   as the trigger 
19ef0 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72  program.. */.str
19f00 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20  uct Trigger {.  
19f10 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
19f20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
19f30 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67  ame of the trigg
19f40 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20  er              
19f50 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63            */.  c
19f60 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20  har *table;     
19f70 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61         /* The ta
19f80 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77  ble or view to w
19f90 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
19fa0 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38   applies */.  u8
19fb0 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
19fc0 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
19fd0 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
19fe0 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20  DATE, TK_INSERT 
19ff0 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20          */.  u8 
1a000 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20  tr_tm;          
1a010 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
1a020 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54  RIGGER_BEFORE, T
1a030 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a  RIGGER_AFTER */.
1a040 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20    Expr *pWhen;  
1a050 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1a060 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
1a070 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28  the expression (
1a080 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a  may be NULL) */.
1a090 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d    IdList *pColum
1a0a0 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20  ns;       /* If 
1a0b0 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54  this is an UPDAT
1a0c0 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73  E OF <column-lis
1a0d0 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20  t> trigger,.    
1a0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0f0 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f           the <co
1a100 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74  lumn-list> is st
1a110 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53  ored here */.  S
1a120 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
1a130 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61         /* Schema
1a140 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1a150 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68  trigger */.  Sch
1a160 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b  ema *pTabSchema;
1a170 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
1a180 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61  ontaining the ta
1a190 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ble */.  Trigger
1a1a0 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b  Step *step_list;
1a1b0 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66   /* Link list of
1a1c0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
1a1d0 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20   steps          
1a1e0 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20     */.  Trigger 
1a1f0 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
1a200 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20  /* Next trigger 
1a210 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1a220 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a  the table */.};.
1a230 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72  ./*.** A trigger
1a240 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46   is either a BEF
1a250 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20  ORE or an AFTER 
1a260 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f  trigger.  The fo
1a270 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74  llowing constant
1a280 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77  s.** determine w
1a290 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20  hich. .**.** If 
1a2a0 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70  there are multip
1a2b0 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75  le triggers, you
1a2c0 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42   might of some B
1a2d0 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41  EFORE and some A
1a2e0 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74  FTER..** In that
1a2f0 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73   cases, the cons
1a300 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20  tants below can 
1a310 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72  be ORed together
1a320 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49  ..*/.#define TRI
1a330 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23  GGER_BEFORE  1.#
1a340 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41  define TRIGGER_A
1a350 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20  FTER   2../*. * 
1a360 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73  An instance of s
1a370 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
1a380 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  p is used to sto
1a390 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20  re a single SQL 
1a3a0 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61  statement. * tha
1a3b0 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61  t is a part of a
1a3c0 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
1a3d0 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63  . . *. * Instanc
1a3e0 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
1a3f0 67 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f  ggerStep are sto
1a400 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20  red in a singly 
1a410 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e  linked list (lin
1a420 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65  ked. * using the
1a430 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29   "pNext" member)
1a440 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74   referenced by t
1a450 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d  he "step_list" m
1a460 65 6d 62 65 72 20 6f 66 20 74 68 65 20 0a 20 2a  ember of the . *
1a470 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75   associated stru
1a480 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61  ct Trigger insta
1a490 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65  nce. The first e
1a4a0 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69  lement of the li
1a4b0 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20  nked list is. * 
1a4c0 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f  the first step o
1a4d0 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72  f the trigger-pr
1a4e0 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68  ogram.. * . * Th
1a4f0 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e  e "op" member in
1a500 64 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20  dicates whether 
1a510 74 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54  this is a "DELET
1a520 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55  E", "INSERT", "U
1a530 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45  PDATE" or. * "SE
1a540 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e  LECT" statement.
1a550 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   The meanings of
1a560 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65   the other membe
1a570 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  rs is determined
1a580 20 62 79 20 74 68 65 20 0a 20 2a 20 76 61 6c 75   by the . * valu
1a590 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c  e of "op" as fol
1a5a0 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20  lows:. *. * (op 
1a5b0 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a  == TK_INSERT). *
1a5c0 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74   orconf    -> st
1a5d0 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46  ores the ON CONF
1a5e0 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20  LICT algorithm. 
1a5f0 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49  * pSelect   -> I
1a600 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
1a610 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c  ERT INTO ... SEL
1a620 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e  ECT ... statemen
1a630 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20  t, then. *      
1a640 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f          this sto
1a650 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  res a pointer to
1a660 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
1a670 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65  ement. Otherwise
1a680 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72 67 65 74   NULL.. * target
1a690 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68      -> A token h
1a6a0 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65  olding the quote
1a6b0 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
1a6c0 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e  ble to insert in
1a6d0 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  to.. * pExprList
1a6e0 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
1a6f0 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
1a700 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61  . VALUES ... sta
1a710 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20  tement, then. * 
1a720 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
1a730 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20  s stores values 
1a740 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20  to be inserted. 
1a750 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
1a760 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20   * pIdList   -> 
1a770 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
1a780 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c  SERT INTO ... (<
1a790 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56  column-names>) V
1a7a0 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20  ALUES ... . *   
1a7b0 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
1a7c0 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20  ment, then this 
1a7d0 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d  stores the colum
1a7e0 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a  n-names to be. *
1a7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
1a800 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a  serted into.. *.
1a810 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c   * (op == TK_DEL
1a820 45 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20  ETE). * target  
1a830 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c    -> A token hol
1a840 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20  ding the quoted 
1a850 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
1a860 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d  e to delete from
1a870 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
1a880 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
1a890 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45  se of the DELETE
1a8a0 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
1a8b0 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
1a8c0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1a8d0 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
1a8e0 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b   * . * (op == TK
1a8f0 5f 55 50 44 41 54 45 29 0a 20 2a 20 74 61 72 67  _UPDATE). * targ
1a900 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e  et    -> A token
1a910 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f   holding the quo
1a920 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
1a930 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65 20  table to update 
1a940 72 6f 77 73 20 6f 66 2e 0a 20 2a 20 70 57 68 65  rows of.. * pWhe
1a950 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
1a960 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
1a970 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
1a980 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
1a990 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
1a9a0 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
1a9b0 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c   NULL.. * pExprL
1a9c0 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66  ist -> A list of
1a9d0 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20   the columns to 
1a9e0 75 70 64 61 74 65 20 61 6e 64 20 74 68 65 20 65  update and the e
1a9f0 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70  xpressions to up
1aa00 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20  date. *         
1aa10 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65       them to. Se
1aa20 65 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28  e sqlite3Update(
1aa30 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  ) documentation 
1aa40 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a  of "pChanges". *
1aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
1aa60 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a  gument.. * . */.
1aa70 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
1aa80 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20  ep {.  u8 op;   
1aa90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1aaa0 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c  ne of TK_DELETE,
1aab0 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
1aac0 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54  NSERT, TK_SELECT
1aad0 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b   */.  u8 orconf;
1aae0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45             /* OE
1aaf0 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a  _Rollback etc. *
1ab00 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  /.  Trigger *pTr
1ab10 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ig;      /* The 
1ab20 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68 69  trigger that thi
1ab30 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72 74  s step is a part
1ab40 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20   of */.  Select 
1ab50 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
1ab60 20 53 45 4c 45 43 54 20 73 74 61 74 6d 65 6e 74   SELECT statment
1ab70 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52   or RHS of INSER
1ab80 54 20 49 4e 54 4f 20 2e 2e 20 53 45 4c 45 43 54  T INTO .. SELECT
1ab90 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20   ... */.  Token 
1aba0 74 61 72 67 65 74 3b 20 20 20 20 20 20 20 20 2f  target;        /
1abb0 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66  * Target table f
1abc0 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54  or DELETE, UPDAT
1abd0 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45  E, INSERT */.  E
1abe0 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
1abf0 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
1ac00 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45   clause for DELE
1ac10 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65  TE or UPDATE ste
1ac20 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ps */.  ExprList
1ac30 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20   *pExprList; /* 
1ac40 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55  SET clause for U
1ac50 50 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c 69  PDATE. */.  IdLi
1ac60 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20  st *pIdList;    
1ac70 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73   /* Column names
1ac80 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20   for INSERT */. 
1ac90 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e   TriggerStep *pN
1aca0 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e  ext;  /* Next in
1acb0 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a   the link-list *
1acc0 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
1acd0 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74  *pLast;  /* Last
1ace0 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b   element in link
1acf0 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72  -list. Valid for
1ad00 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a   1st elem only *
1ad10 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
1ad20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1ad30 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ure contains inf
1ad40 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79  ormation used by
1ad50 20 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e   the sqliteFix..
1ad60 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73  ..** routines as
1ad70 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70   they walk the p
1ad80 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b  arse tree to mak
1ad90 65 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72  e database refer
1ada0 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69  ences.** explici
1adb0 74 2e 20 20 0a 2a 2f 0a 74 79 70 65 64 65 66 20  t.  .*/.typedef 
1adc0 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20 44  struct DbFixer D
1add0 62 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44  bFixer;.struct D
1ade0 62 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65  bFixer {.  Parse
1adf0 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f   *pParse;      /
1ae00 2a 20 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f  * The parsing co
1ae10 6e 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65  ntext.  Error me
1ae20 73 73 61 67 65 73 20 77 72 69 74 74 65 6e 20 68  ssages written h
1ae30 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ere */.  Schema 
1ae40 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20  *pSchema;    /* 
1ae50 46 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69  Fix items to thi
1ae60 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e  s schema */.  in
1ae70 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20  t bVarOnly;     
1ae80 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76    /* Check for v
1ae90 61 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63  ariable referenc
1aea0 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e  es only */.  con
1aeb0 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20  st char *zDb;   
1aec0 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c   /* Make sure al
1aed0 6c 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f  l objects are co
1aee0 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20  ntained in this 
1aef0 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f  database */.  co
1af00 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b  nst char *zType;
1af10 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65    /* Type of the
1af20 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65   container - use
1af30 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73  d for error mess
1af40 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ages */.  const 
1af50 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a  Token *pName; /*
1af60 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e   Name of the con
1af70 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
1af80 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
1af90 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
1afa0 20 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20 74   objected used t
1afb0 6f 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65  o accumulate the
1afc0 20 74 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e   text of a strin
1afd0 67 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f  g where we.** do
1afe0 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79   not necessarily
1aff0 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68   know how big th
1b000 65 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65  e string will be
1b010 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a   in the end..*/.
1b020 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20  struct StrAccum 
1b030 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
1b040 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69           /* Opti
1b050 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f  onal database fo
1b060 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61  r lookaside.  Ca
1b070 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  n be NULL */.  c
1b080 68 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20  har *zBase;     
1b090 20 20 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c      /* A base al
1b0a0 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66  location.  Not f
1b0b0 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20  rom malloc. */. 
1b0c0 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20   char *zText;   
1b0d0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72        /* The str
1b0e0 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f  ing collected so
1b0f0 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e   far */.  int  n
1b100 43 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Char;          /
1b110 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  * Length of the 
1b120 73 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f  string so far */
1b130 0a 20 20 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20  .  int  nAlloc; 
1b140 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e          /* Amoun
1b150 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63  t of space alloc
1b160 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f  ated in zText */
1b170 0a 20 20 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b  .  int  mxAlloc;
1b180 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
1b190 75 6d 20 61 6c 6c 6f 77 65 64 20 73 74 72 69 6e  um allowed strin
1b1a0 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 75 38  g length */.  u8
1b1b0 20 20 20 75 73 65 4d 61 6c 6c 6f 63 3b 20 20 20     useMalloc;   
1b1c0 20 20 20 2f 2a 20 30 3a 20 6e 6f 6e 65 2c 20 20     /* 0: none,  
1b1d0 31 3a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  1: sqlite3DbMall
1b1e0 6f 63 2c 20 20 32 3a 20 73 71 6c 69 74 65 33 5f  oc,  2: sqlite3_
1b1f0 6d 61 6c 6c 6f 63 20 2a 2f 0a 20 20 75 38 20 20  malloc */.  u8  
1b200 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20   accError;      
1b210 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d   /* STRACCUM_NOM
1b220 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54  EM or STRACCUM_T
1b230 4f 4f 42 49 47 20 2a 2f 0a 7d 3b 0a 23 64 65 66  OOBIG */.};.#def
1b240 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d  ine STRACCUM_NOM
1b250 45 4d 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53  EM   1.#define S
1b260 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20  TRACCUM_TOOBIG  
1b270 32 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74  2../*.** A point
1b280 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  er to this struc
1b290 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
1b2a0 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f  communicate info
1b2b0 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20  rmation.** from 
1b2c0 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20  sqlite3Init and 
1b2d0 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69  OP_ParseSchema i
1b2e0 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49  nto the sqlite3I
1b2f0 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a  nitCallback..*/.
1b300 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b  typedef struct {
1b310 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
1b320 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
1b330 74 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69  tabase being ini
1b340 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68  tialized */.  ch
1b350 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20  ar **pzErrMsg;  
1b360 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61    /* Error messa
1b370 67 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  ge stored here *
1b380 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
1b390 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72          /* 0 for
1b3a0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20   main database. 
1b3b0 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e   1 for TEMP, 2..
1b3c0 20 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f   for ATTACHed */
1b3d0 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
1b3e0 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
1b3f0 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72   code stored her
1b400 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b  e */.} InitData;
1b410 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72  ../*.** Structur
1b420 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f  e containing glo
1b430 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  bal configuratio
1b440 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 53  n data for the S
1b450 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a  QLite library..*
1b460 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
1b470 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e  ure also contain
1b480 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66  s some state inf
1b490 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  ormation..*/.str
1b4a0 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
1b4b0 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74  g {.  int bMemst
1b4c0 61 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  at;             
1b4d0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1b4e0 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79  to enable memory
1b4f0 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74   status */.  int
1b500 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20   bCoreMutex;    
1b510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b520 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
1b530 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a   core mutexing *
1b540 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74  /.  int bFullMut
1b550 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
1b560 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1b570 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74   enable full mut
1b580 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62  exing */.  int b
1b590 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20  OpenUri;        
1b5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b5b0 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65  True to interpre
1b5c0 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55  t filenames as U
1b5d0 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73  RIs */.  int bUs
1b5e0 65 43 69 73 3b 20 20 20 20 20 20 20 20 20 20 20  eCis;           
1b5f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
1b600 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63  e covering indic
1b610 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e  es for full-scan
1b620 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72  s */.  int mxStr
1b630 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  len;            
1b640 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
1b650 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74  mum string lengt
1b660 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72  h */.  int never
1b670 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20 20  Corrupt;        
1b680 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
1b690 62 61 73 65 20 69 73 20 61 6c 77 61 79 73 20 77  base is always w
1b6a0 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20  ell-formed */.  
1b6b0 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b  int szLookaside;
1b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6d0 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f    /* Default loo
1b6e0 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69  kaside buffer si
1b6f0 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f  ze */.  int nLoo
1b700 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
1b710 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1b720 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62  ault lookaside b
1b730 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20  uffer count */. 
1b740 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
1b750 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20  hods m;         
1b760 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
1b770 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
1b780 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  n interface */. 
1b790 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
1b7a0 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20  ethods mutex;   
1b7b0 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
1b7c0 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20  mutex interface 
1b7d0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61  */.  sqlite3_pca
1b7e0 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61  che_methods2 pca
1b7f0 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65  che2;  /* Low-le
1b800 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69  vel page-cache i
1b810 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f  nterface */.  vo
1b820 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20  id *pHeap;      
1b830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b840 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20  /* Heap storage 
1b850 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
1b860 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
1b870 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b880 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20  Size of pHeap[] 
1b890 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20  */.  int mnReq, 
1b8a0 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20  mxReq;          
1b8b0 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e         /* Min an
1b8c0 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65  d max heap reque
1b8d0 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73  sts sizes */.  s
1b8e0 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d  qlite3_int64 szM
1b8f0 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
1b900 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65   /* mmap() space
1b910 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a   per open file *
1b920 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  /.  sqlite3_int6
1b930 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 mxMmap;       
1b940 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
1b950 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61   value for szMma
1b960 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63  p */.  void *pSc
1b970 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
1b980 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61           /* Scra
1b990 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  tch memory */.  
1b9a0 69 6e 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20  int szScratch;  
1b9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9c0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
1b9d0 68 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72  h scratch buffer
1b9e0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74   */.  int nScrat
1b9f0 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ch;             
1ba00 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1ba10 72 20 6f 66 20 73 63 72 61 74 63 68 20 62 75 66  r of scratch buf
1ba20 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  fers */.  void *
1ba30 70 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  pPage;          
1ba40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
1ba50 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79  age cache memory
1ba60 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65   */.  int szPage
1ba70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ba80 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
1ba90 6f 66 20 65 61 63 68 20 70 61 67 65 20 69 6e 20  of each page in 
1baa0 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pPage[] */.  int
1bab0 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20 20   nPage;         
1bac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bad0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * Number of page
1bae0 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a  s in pPage[] */.
1baf0 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74    int mxParserSt
1bb00 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ack;            
1bb10 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64      /* maximum d
1bb20 65 70 74 68 20 6f 66 20 74 68 65 20 70 61 72 73  epth of the pars
1bb30 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e  er stack */.  in
1bb40 74 20 73 68 61 72 65 64 43 61 63 68 65 45 6e 61  t sharedCacheEna
1bb50 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  bled;           
1bb60 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61 72 65  /* true if share
1bb70 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61  d-cache mode ena
1bb80 62 6c 65 64 20 2a 2f 0a 20 20 2f 2a 20 54 68 65  bled */.  /* The
1bb90 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20   above might be 
1bba0 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e  initialized to n
1bbb0 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f  on-zero.  The fo
1bbc0 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20  llowing need to 
1bbd0 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74  always.  ** init
1bbe0 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68  ially be zero, h
1bbf0 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74  owever. */.  int
1bc00 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20   isInit;        
1bc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bc20 2a 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69  * True after ini
1bc30 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20  tialization has 
1bc40 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e  finished */.  in
1bc50 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20  t inProgress;   
1bc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc70 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e  /* True while in
1bc80 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20  itialization in 
1bc90 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e  progress */.  in
1bca0 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20  t isMutexInit;  
1bcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bcc0 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75  /* True after mu
1bcd0 74 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61  texes are initia
1bce0 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  lized */.  int i
1bcf0 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20  sMallocInit;    
1bd00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1bd10 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f  True after mallo
1bd20 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  c is initialized
1bd30 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63   */.  int isPCac
1bd40 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  heInit;         
1bd50 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1bd60 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20  after malloc is 
1bd70 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
1bd80 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
1bd90 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  pInitMutex;     
1bda0 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64     /* Mutex used
1bdb0 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74   by sqlite3_init
1bdc0 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 69 6e  ialize() */.  in
1bdd0 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b  t nRefInitMutex;
1bde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdf0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65  /* Number of use
1be00 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78  rs of pInitMutex
1be10 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f   */.  void (*xLo
1be20 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  g)(void*,int,con
1be30 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75  st char*); /* Fu
1be40 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69  nction for loggi
1be50 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c  ng */.  void *pL
1be60 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ogArg;          
1be70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1be80 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
1be90 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 20 20 69 6e  o xLog() */.  in
1bea0 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c  t bLocaltimeFaul
1beb0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1bec0 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20  /* True to fail 
1bed0 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c  localtime() call
1bee0 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  s */.#ifdef SQLI
1bef0 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47  TE_ENABLE_SQLLOG
1bf00 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67  .  void(*xSqllog
1bf10 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
1bf20 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e  ,const char*, in
1bf30 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c  t);.  void *pSql
1bf40 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 7d  logArg;.#endif.}
1bf50 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61  ;../*.** This ma
1bf60 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69  cro is used insi
1bf70 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20 73  de of assert() s
1bf80 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64  tatements to ind
1bf90 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68  icate that.** th
1bfa0 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79  e assert is only
1bfb0 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c   valid on a well
1bfc0 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  -formed database
1bfd0 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a  .  Instead of:.*
1bfe0 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
1bff0 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20   X );.**.** One 
1c000 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  writes:.**.**   
1c010 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43    assert( X || C
1c020 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a  ORRUPT_DB );.**.
1c030 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73  ** CORRUPT_DB is
1c040 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72   true during nor
1c050 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  mal operation.  
1c060 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20  CORRUPT_DB does 
1c070 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20  not indicate.** 
1c080 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61 73  that the databas
1c090 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20  e is definitely 
1c0a0 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68  corrupt, only th
1c0b0 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20 63  at it might be c
1c0c0 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d  orrupt..** For m
1c0d0 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c 20  ost test cases, 
1c0e0 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73 65  CORRUPT_DB is se
1c0f0 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67  t to false using
1c100 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71   a special.** sq
1c110 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
1c120 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62  ol().  This enab
1c130 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74 61  les assert() sta
1c140 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65  tements to prove
1c150 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20  .** things that 
1c160 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65 20  are always true 
1c170 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  for well-formed 
1c180 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64  databases..*/.#d
1c190 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42  efine CORRUPT_DB
1c1a0 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67    (sqlite3Config
1c1b0 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30  .neverCorrupt==0
1c1c0 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74  )../*.** Context
1c1d0 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20   pointer passed 
1c1e0 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65  down through the
1c1f0 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73   tree-walk..*/.s
1c200 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20  truct Walker {. 
1c210 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c   int (*xExprCall
1c220 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45  back)(Walker*, E
1c230 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61  xpr*);     /* Ca
1c240 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65  llback for expre
1c250 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  ssions */.  int 
1c260 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63  (*xSelectCallbac
1c270 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63  k)(Walker*,Selec
1c280 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63  t*);  /* Callbac
1c290 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f  k for SELECTs */
1c2a0 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
1c2b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1c2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c2d0 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  Parser context. 
1c2e0 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72   */.  int walker
1c2f0 44 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20  Depth;          
1c300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c310 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62  /* Number of sub
1c320 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20  queries */.  u8 
1c330 62 53 65 6c 65 63 74 44 65 70 74 68 46 69 72 73  bSelectDepthFirs
1c340 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1c350 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 73 75 62         /* Do sub
1c360 71 75 65 72 69 65 73 20 66 69 72 73 74 20 2a 2f  queries first */
1c370 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20  .  union {      
1c380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c390 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c3a0 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63  Extra data for c
1c3b0 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e  allback */.    N
1c3c0 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b  ameContext *pNC;
1c3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
1c3f0 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  ing context */. 
1c400 20 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20     int i;       
1c410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c430 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 2a   Integer value *
1c440 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70  /.    SrcList *p
1c450 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20  SrcList;        
1c460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c470 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20   /* FROM clause 
1c480 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72  */.    struct Sr
1c490 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e  cCount *pSrcCoun
1c4a0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1c4b0 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f    /* Counting co
1c4c0 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20  lumn references 
1c4d0 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a  */.  } u;.};../*
1c4e0 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61   Forward declara
1c4f0 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c  tions */.int sql
1c500 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c  ite3WalkExpr(Wal
1c510 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  ker*, Expr*);.in
1c520 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70  t sqlite3WalkExp
1c530 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45  rList(Walker*, E
1c540 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
1c550 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
1c560 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
1c570 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1c580 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61  alkSelectExpr(Wa
1c590 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
1c5a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
1c5b0 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65  SelectFrom(Walke
1c5c0 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f  r*, Select*);../
1c5d0 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65  *.** Return code
1c5e0 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d   from the parse-
1c5f0 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69  tree walking pri
1c600 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68 65 69  mitives and thei
1c610 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a  r.** callbacks..
1c620 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43  */.#define WRC_C
1c630 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f  ontinue    0   /
1c640 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20  * Continue down 
1c650 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f  into children */
1c660 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75  .#define WRC_Pru
1c670 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20  ne       1   /* 
1c680 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75  Omit children bu
1c690 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69  t continue walki
1c6a0 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23  ng siblings */.#
1c6b0 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74  define WRC_Abort
1c6c0 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62         2   /* Ab
1c6d0 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77  andon the tree w
1c6e0 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  alk */../*.** An
1c6f0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
1c700 73 20 73 74 72 75 63 74 75 72 65 20 72 65 70 72  s structure repr
1c710 65 73 65 6e 74 73 20 61 20 73 65 74 20 6f 66 20  esents a set of 
1c720 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54 45 73  one or more CTEs
1c730 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c  .** (common tabl
1c740 65 20 65 78 70 72 65 73 73 69 6f 6e 73 29 20 63  e expressions) c
1c750 72 65 61 74 65 64 20 62 79 20 61 20 73 69 6e 67  reated by a sing
1c760 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 0a  le WITH clause..
1c770 2a 2f 0a 73 74 72 75 63 74 20 57 69 74 68 20 7b  */.struct With {
1c780 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20 20 20 20  .  int nCte;    
1c790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7a0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1c7b0 43 54 45 73 20 69 6e 20 74 68 65 20 57 49 54 48  CTEs in the WITH
1c7c0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69 74   clause */.  Wit
1c7d0 68 20 2a 70 4f 75 74 65 72 3b 20 20 20 20 20 20  h *pOuter;      
1c7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c7f0 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54 48 20  Containing WITH 
1c800 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20  clause, or NULL 
1c810 2a 2f 0a 20 20 73 74 72 75 63 74 20 43 74 65 20  */.  struct Cte 
1c820 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
1c830 20 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68       /* For each
1c840 20 43 54 45 20 69 6e 20 74 68 65 20 57 49 54 48   CTE in the WITH
1c850 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20   clause.... */. 
1c860 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
1c870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c880 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
1c890 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 45 78  is CTE */.    Ex
1c8a0 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20  prList *pCols;  
1c8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c8c0 20 4c 69 73 74 20 6f 66 20 65 78 70 6c 69 63 69   List of explici
1c8d0 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20  t column names, 
1c8e0 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53  or NULL */.    S
1c8f0 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
1c900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c910 2a 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e  * The definition
1c920 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a   of this CTE */.
1c930 20 20 20 20 73 74 72 75 63 74 20 43 74 65 20 2a      struct Cte *
1c940 70 4f 75 74 65 72 43 74 65 3b 20 20 20 20 20 20  pOuterCte;      
1c950 20 20 20 20 2f 2a 20 4e 65 78 74 20 57 49 54 48      /* Next WITH
1c960 20 63 6c 61 75 73 65 20 69 6e 20 6f 75 74 65 72   clause in outer
1c970 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 7d 20   context */.  } 
1c980 61 5b 31 5d 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  a[1];.};../*.** 
1c990 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69  Assuming zIn poi
1c9a0 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nts to the first
1c9b0 20 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38   byte of a UTF-8
1c9c0 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61   character,.** a
1c9d0 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f  dvance zIn to po
1c9e0 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73 74  int to the first
1c9f0 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78   byte of the nex
1ca00 74 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  t UTF-8 characte
1ca10 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  r..*/.#define SQ
1ca20 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a  LITE_SKIP_UTF8(z
1ca30 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20 20  In) {           
1ca40 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
1ca50 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e   if( (*(zIn++))>
1ca60 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20 20 20  =0xc0 ){        
1ca70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca80 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c        \.    whil
1ca90 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29  e( (*zIn & 0xc0)
1caa0 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b  ==0x80 ){ zIn++;
1cab0 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 5c   }             \
1cac0 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20 20 20  .  }            
1cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1caf0 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a          \.}../*.
1cb00 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f  ** The SQLITE_*_
1cb10 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20  BKPT macros are 
1cb20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f 72 20  substitutes for 
1cb30 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20  the error codes 
1cb40 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65  with.** the same
1cb50 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75   name but withou
1cb60 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66  t the _BKPT suff
1cb70 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f  ix.  These macro
1cb80 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74  s invoke.** rout
1cb90 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72 74  ines that report
1cba0 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72   the line-number
1cbb0 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65 72   on which the er
1cbc0 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a  ror originated.*
1cbd0 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  * using sqlite3_
1cbe0 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74  log().  The rout
1cbf0 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64  ines also provid
1cc00 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70  e a convenient p
1cc10 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61  lace.** to set a
1cc20 20 64 65 62 75 67 67 65 72 20 62 72 65 61 6b 70   debugger breakp
1cc30 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  oint..*/.int sql
1cc40 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72  ite3CorruptError
1cc50 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
1cc60 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e  e3MisuseError(in
1cc70 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  t);.int sqlite3C
1cc80 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74  antopenError(int
1cc90 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  );.#define SQLIT
1cca0 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73  E_CORRUPT_BKPT s
1ccb0 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72  qlite3CorruptErr
1ccc0 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65  or(__LINE__).#de
1ccd0 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55  fine SQLITE_MISU
1cce0 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d  SE_BKPT sqlite3M
1ccf0 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e  isuseError(__LIN
1cd00 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c  E__).#define SQL
1cd10 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50  ITE_CANTOPEN_BKP
1cd20 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65  T sqlite3Cantope
1cd30 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  nError(__LINE__)
1cd40 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73  .../*.** FTS4 is
1cd50 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e   really an exten
1cd60 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20  sion for FTS3.  
1cd70 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73  It is enabled us
1cd80 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54  ing the.** SQLIT
1cd90 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61  E_ENABLE_FTS3 ma
1cda0 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f  cro.  But to avo
1cdb0 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20  id confusion we 
1cdc0 61 6c 73 6f 20 61 6c 6c 0a 2a 2a 20 74 68 65 20  also all.** the 
1cdd0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1cde0 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76  S4 macro to serv
1cdf0 65 20 61 73 20 61 6e 20 61 6c 69 73 73 65 20 66  e as an alisse f
1ce00 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  or SQLITE_ENABLE
1ce10 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65  _FTS3..*/.#if de
1ce20 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
1ce30 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64 65  BLE_FTS4) && !de
1ce40 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
1ce50 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69  BLE_FTS3).# defi
1ce60 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
1ce70 5f 46 54 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a  _FTS3.#endif../*
1ce80 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20  .** The ctype.h 
1ce90 68 65 61 64 65 72 20 69 73 20 6e 65 65 64 65 64  header is needed
1cea0 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73   for non-ASCII s
1ceb0 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61  ystems.  It is a
1cec0 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79  lso.** needed by
1ced0 20 46 54 53 33 20 77 68 65 6e 20 46 54 53 33 20   FTS3 when FTS3 
1cee0 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74  is included in t
1cef0 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e  he amalgamation.
1cf00 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
1cf10 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c  (SQLITE_ASCII) |
1cf20 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
1cf30 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
1cf40 54 53 33 29 20 26 26 20 64 65 66 69 6e 65 64 28  TS3) && defined(
1cf50 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
1cf60 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20  ION)).# include 
1cf70 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66  <ctype.h>.#endif
1cf80 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
1cf90 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d  owing macros mim
1cfa0 69 63 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  ic the standard 
1cfb0 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e  library function
1cfc0 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20  s toupper(),.** 
1cfd0 69 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e  isspace(), isaln
1cfe0 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29 20  um(), isdigit() 
1cff0 61 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c 20  and isxdigit(), 
1d000 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68  respectively. Th
1d010 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73  e.** sqlite vers
1d020 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66  ions only work f
1d030 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74  or ASCII charact
1d040 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20  ers, regardless 
1d050 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69  of locale..*/.#i
1d060 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49  fdef SQLITE_ASCI
1d070 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  I.# define sqlit
1d080 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 28 28  e3Toupper(x)  ((
1d090 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70  x)&~(sqlite3Ctyp
1d0a0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1d0b0 68 61 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a  har)(x)]&0x20)).
1d0c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1d0d0 49 73 73 70 61 63 65 28 78 29 20 20 20 28 73 71  Isspace(x)   (sq
1d0e0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
1d0f0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1d100 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65  ]&0x01).# define
1d110 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28   sqlite3Isalnum(
1d120 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
1d130 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
1d140 63 68 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a  char)(x)]&0x06).
1d150 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1d160 49 73 61 6c 70 68 61 28 78 29 20 20 20 28 73 71  Isalpha(x)   (sq
1d170 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
1d180 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1d190 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65  ]&0x02).# define
1d1a0 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
1d1b0 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
1d1c0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
1d1d0 63 68 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a  char)(x)]&0x04).
1d1e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1d1f0 49 73 78 64 69 67 69 74 28 78 29 20 20 28 73 71  Isxdigit(x)  (sq
1d200 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
1d210 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1d220 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65  ]&0x08).# define
1d230 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28   sqlite3Tolower(
1d240 78 29 20 20 20 28 73 71 6c 69 74 65 33 55 70 70  x)   (sqlite3Upp
1d250 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67  erToLower[(unsig
1d260 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23  ned char)(x)]).#
1d270 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
1d280 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20  lite3Toupper(x) 
1d290 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67    toupper((unsig
1d2a0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
1d2b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1d2c0 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61  space(x)   isspa
1d2d0 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ce((unsigned cha
1d2e0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
1d2f0 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
1d300 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73  )   isalnum((uns
1d310 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
1d320 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1d330 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61  Isalpha(x)   isa
1d340 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63  lpha((unsigned c
1d350 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
1d360 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  e sqlite3Isdigit
1d370 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75  (x)   isdigit((u
1d380 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1d390 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1d3a0 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69  e3Isxdigit(x)  i
1d3b0 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65  sxdigit((unsigne
1d3c0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
1d3d0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f  fine sqlite3Tolo
1d3e0 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72  wer(x)   tolower
1d3f0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
1d400 28 78 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  (x)).#endif../*.
1d410 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63  ** Internal func
1d420 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a  tion prototypes.
1d430 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  */.#define sqlit
1d440 65 33 53 74 72 49 43 6d 70 20 73 71 6c 69 74 65  e3StrICmp sqlite
1d450 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20 73 71  3_stricmp.int sq
1d460 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f  lite3Strlen30(co
1d470 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66  nst char*);.#def
1d480 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49  ine sqlite3StrNI
1d490 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e  Cmp sqlite3_strn
1d4a0 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65  icmp..int sqlite
1d4b0 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64  3MallocInit(void
1d4c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
1d4d0 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a  allocEnd(void);.
1d4e0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
1d4f0 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  loc(int);.void *
1d500 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72  sqlite3MallocZer
1d510 6f 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  o(int);.void *sq
1d520 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
1d530 6f 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  o(sqlite3*, int)
1d540 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
1d550 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74  bMallocRaw(sqlit
1d560 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20  e3*, int);.char 
1d570 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70  *sqlite3DbStrDup
1d580 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
1d590 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71  char*);.char *sq
1d5a0 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73  lite3DbStrNDup(s
1d5b0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1d5c0 61 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  ar*, int);.void 
1d5d0 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28  *sqlite3Realloc(
1d5e0 76 6f 69 64 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  void*, int);.voi
1d5f0 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
1d600 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65  locOrFree(sqlite
1d610 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74  3 *, void *, int
1d620 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1d630 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65  DbRealloc(sqlite
1d640 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74  3 *, void *, int
1d650 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
1d660 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20  bFree(sqlite3*, 
1d670 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
1d680 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f  te3MallocSize(vo
1d690 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
1d6a0 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71  3DbMallocSize(sq
1d6b0 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
1d6c0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72  void *sqlite3Scr
1d6d0 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b  atchMalloc(int);
1d6e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72  .void sqlite3Scr
1d6f0 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b  atchFree(void*);
1d700 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61  .void *sqlite3Pa
1d710 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  geMalloc(int);.v
1d720 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46  oid sqlite3PageF
1d730 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ree(void*);.void
1d740 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65   sqlite3MemSetDe
1d750 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69  fault(void);.voi
1d760 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d  d sqlite3BenignM
1d770 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20  allocHooks(void 
1d780 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20  (*)(void), void 
1d790 28 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20  (*)(void));.int 
1d7a0 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c  sqlite3HeapNearl
1d7b0 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a  yFull(void);../*
1d7c0 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77  .** On systems w
1d7d0 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20  ith ample stack 
1d7e0 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73  space and that s
1d7f0 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c  upport alloca(),
1d800 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20   make.** use of 
1d810 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61  alloca() to obta
1d820 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72  in space for lar
1d830 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a  ge automatic obj
1d840 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c  ects.  By defaul
1d850 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61  t,.** obtain spa
1d860 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ce from malloc()
1d870 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f  ..**.** The allo
1d880 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76  ca() routine nev
1d890 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e  er returns NULL.
1d8a0 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
1d8b0 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20  e code paths.** 
1d8c0 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73  that deal with s
1d8d0 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
1d8e0 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62  () failures to b
1d8f0 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a  e unreachable..*
1d900 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
1d910 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66  USE_ALLOCA.# def
1d920 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
1d930 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
1d940 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69  alloca(N).# defi
1d950 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
1d960 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d  llocZero(D,N)  m
1d970 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c  emset(alloca(N),
1d980 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20   0, N).# define 
1d990 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
1d9a0 28 44 2c 50 29 20 20 20 20 20 20 20 0a 23 65 6c  (D,P)       .#el
1d9b0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
1d9c0 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77  te3StackAllocRaw
1d9d0 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44  (D,N)   sqlite3D
1d9e0 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a  bMallocRaw(D,N).
1d9f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1da00 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
1da10 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61  ,N)  sqlite3DbMa
1da20 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20  llocZero(D,N).# 
1da30 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
1da40 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20  ackFree(D,P)    
1da50 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
1da60 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69  (D,P).#endif..#i
1da70 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
1da80 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74  LE_MEMSYS3.const
1da90 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
1daa0 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d  hods *sqlite3Mem
1dab0 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29  GetMemsys3(void)
1dac0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
1dad0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
1dae0 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS5.const sqli
1daf0 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
1db00 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
1db10 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e  msys5(void);.#en
1db20 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  dif...#ifndef SQ
1db30 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a  LITE_MUTEX_OMIT.
1db40 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
1db50 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73  methods const *s
1db60 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74  qlite3DefaultMut
1db70 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69  ex(void);.  sqli
1db80 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
1db90 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
1dba0 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b  NoopMutex(void);
1dbb0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
1dbc0 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c   *sqlite3MutexAl
1dbd0 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  loc(int);.  int 
1dbe0 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74  sqlite3MutexInit
1dbf0 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71  (void);.  int sq
1dc00 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f  lite3MutexEnd(vo
1dc10 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74  id);.#endif..int
1dc20 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61   sqlite3StatusVa
1dc30 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  lue(int);.void s
1dc40 71 6c 69 74 65 33 53 74 61 74 75 73 41 64 64 28  qlite3StatusAdd(
1dc50 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1dc60 73 71 6c 69 74 65 33 53 74 61 74 75 73 53 65 74  sqlite3StatusSet
1dc70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66  (int, int);..#if
1dc80 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1dc90 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
1dca0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e    int sqlite3IsN
1dcb0 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73  aN(double);.#els
1dcc0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1dcd0 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65  e3IsNaN(X)  0.#e
1dce0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
1dcf0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
1dd00 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1dd10 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61  re holds informa
1dd20 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a  tion about SQL.*
1dd30 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75  * functions argu
1dd40 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65 20 74  ments that are t
1dd50 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  he parameters to
1dd60 20 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75   the printf() fu
1dd70 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  nction..*/.struc
1dd80 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  t PrintfArgument
1dd90 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20  s {.  int nArg; 
1dda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ddb0 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  * Total number o
1ddc0 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
1ddd0 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20   int nUsed;     
1dde0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1ddf0 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
1de00 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
1de10 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
1de20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68  **apArg;   /* Th
1de30 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65  e argument value
1de40 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65  s */.};..#define
1de50 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49   SQLITE_PRINTF_I
1de60 4e 54 45 52 4e 41 4c 20 30 78 30 31 0a 23 64 65  NTERNAL 0x01.#de
1de70 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
1de80 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32  TF_SQLFUNC  0x02
1de90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50  .void sqlite3VXP
1dea0 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c  rintf(StrAccum*,
1deb0 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61 72   u32, const char
1dec0 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69  *, va_list);.voi
1ded0 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66  d sqlite3XPrintf
1dee0 28 53 74 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c  (StrAccum*, u32,
1def0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
1df00 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  .);.char *sqlite
1df10 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  3MPrintf(sqlite3
1df20 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  *,const char*, .
1df30 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..);.char *sqlit
1df40 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  e3VMPrintf(sqlit
1df50 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
1df60 20 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72 20   va_list);.char 
1df70 2a 73 71 6c 69 74 65 33 4d 41 70 70 65 6e 64 66  *sqlite3MAppendf
1df80 28 73 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a 2c  (sqlite3*,char*,
1df90 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
1dfa0 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
1dfb0 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 64 65  LITE_TEST) || de
1dfc0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
1dfd0 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  UG).  void sqlit
1dfe0 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f  e3DebugPrintf(co
1dff0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
1e000 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
1e010 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
1e020 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
1e030 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f  TestTextToPtr(co
1e040 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  nst char*);.#end
1e050 69 66 0a 0a 2f 2a 20 4f 75 74 70 75 74 20 66 6f  if../* Output fo
1e060 72 6d 61 74 74 69 6e 67 20 66 6f 72 20 53 51 4c  rmatting for SQL
1e070 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 45 58 50  ITE_TESTCTRL_EXP
1e080 4c 41 49 4e 20 2a 2f 0a 23 69 66 20 64 65 66 69  LAIN */.#if defi
1e090 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
1e0a0 45 5f 54 52 45 45 5f 45 58 50 4c 41 49 4e 29 0a  E_TREE_EXPLAIN).
1e0b0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
1e0c0 70 6c 61 69 6e 42 65 67 69 6e 28 56 64 62 65 2a  plainBegin(Vdbe*
1e0d0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1e0e0 33 45 78 70 6c 61 69 6e 50 72 69 6e 74 66 28 56  3ExplainPrintf(V
1e0f0 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  dbe*, const char
1e100 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64 20  *, ...);.  void 
1e110 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 4e 4c  sqlite3ExplainNL
1e120 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20  (Vdbe*);.  void 
1e130 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 75  sqlite3ExplainPu
1e140 73 68 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69  sh(Vdbe*);.  voi
1e150 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
1e160 50 6f 70 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f  Pop(Vdbe*);.  vo
1e170 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  id sqlite3Explai
1e180 6e 46 69 6e 69 73 68 28 56 64 62 65 2a 29 3b 0a  nFinish(Vdbe*);.
1e190 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
1e1a0 70 6c 61 69 6e 53 65 6c 65 63 74 28 56 64 62 65  plainSelect(Vdbe
1e1b0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76  *, Select*);.  v
1e1c0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
1e1d0 69 6e 45 78 70 72 28 56 64 62 65 2a 2c 20 45 78  inExpr(Vdbe*, Ex
1e1e0 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  pr*);.  void sql
1e1f0 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72 4c  ite3ExplainExprL
1e200 69 73 74 28 56 64 62 65 2a 2c 20 45 78 70 72 4c  ist(Vdbe*, ExprL
1e210 69 73 74 2a 29 3b 0a 20 20 63 6f 6e 73 74 20 63  ist*);.  const c
1e220 68 61 72 20 2a 73 71 6c 69 74 65 33 56 64 62 65  har *sqlite3Vdbe
1e230 45 78 70 6c 61 6e 61 74 69 6f 6e 28 56 64 62 65  Explanation(Vdbe
1e240 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
1e250 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  ne sqlite3Explai
1e260 6e 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69  nBegin(X).# defi
1e270 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  ne sqlite3Explai
1e280 6e 53 65 6c 65 63 74 28 41 2c 42 29 0a 23 20 64  nSelect(A,B).# d
1e290 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
1e2a0 6c 61 69 6e 45 78 70 72 28 41 2c 42 29 0a 23 20  lainExpr(A,B).# 
1e2b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
1e2c0 70 6c 61 69 6e 45 78 70 72 4c 69 73 74 28 41 2c  plainExprList(A,
1e2d0 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
1e2e0 74 65 33 45 78 70 6c 61 69 6e 46 69 6e 69 73 68  te3ExplainFinish
1e2f0 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (X).# define sql
1e300 69 74 65 33 56 64 62 65 45 78 70 6c 61 6e 61 74  ite3VdbeExplanat
1e310 69 6f 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a  ion(X) 0.#endif.
1e320 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ..void sqlite3Se
1e330 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c  tString(char **,
1e340 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74   sqlite3*, const
1e350 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f   char*, ...);.vo
1e360 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d  id sqlite3ErrorM
1e370 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  sg(Parse*, const
1e380 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e   char*, ...);.in
1e390 74 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65  t sqlite3Dequote
1e3a0 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (char*);.int sql
1e3b0 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28  ite3KeywordCode(
1e3c0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
1e3d0 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  har*, int);.int 
1e3e0 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72  sqlite3RunParser
1e3f0 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
1e400 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  har*, char **);.
1e410 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
1e420 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29  shCoding(Parse*)
1e430 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
1e440 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b  TempReg(Parse*);
1e450 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
1e460 65 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73  easeTempReg(Pars
1e470 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  e*,int);.int sql
1e480 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65  ite3GetTempRange
1e490 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
1e4a0 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
1e4b0 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  eTempRange(Parse
1e4c0 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
1e4d0 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d   sqlite3ClearTem
1e4e0 70 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a  pRegCache(Parse*
1e4f0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
1e500 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65  ExprAlloc(sqlite
1e510 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b  3*,int,const Tok
1e520 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  en*,int);.Expr *
1e530 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69  sqlite3Expr(sqli
1e540 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
1e550 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
1e560 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62  te3ExprAttachSub
1e570 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45  trees(sqlite3*,E
1e580 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  xpr*,Expr*,Expr*
1e590 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
1e5a0 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e  PExpr(Parse*, in
1e5b0 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  t, Expr*, Expr*,
1e5c0 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
1e5d0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
1e5e0 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78  rAnd(sqlite3*,Ex
1e5f0 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  pr*, Expr*);.Exp
1e600 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75  r *sqlite3ExprFu
1e610 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78  nction(Parse*,Ex
1e620 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  prList*, Token*)
1e630 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1e640 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65  prAssignVarNumbe
1e650 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  r(Parse*, Expr*)
1e660 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1e670 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  prDelete(sqlite3
1e680 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c  *, Expr*);.ExprL
1e690 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
1e6a0 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65  ListAppend(Parse
1e6b0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
1e6c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e6d0 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28  ExprListSetName(
1e6e0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
1e6f0 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Token*,int);.vo
1e700 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
1e710 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a  stSetSpan(Parse*
1e720 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53  ,ExprList*,ExprS
1e730 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  pan*);.void sqli
1e740 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74  te3ExprListDelet
1e750 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
1e760 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
1e770 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  te3Init(sqlite3*
1e780 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73  , char**);.int s
1e790 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
1e7a0 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  ck(void*, int, c
1e7b0 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  har**, char**);.
1e7c0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67  void sqlite3Prag
1e7d0 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ma(Parse*,Token*
1e7e0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
1e7f0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1e800 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
1e810 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c  OfConnection(sql
1e820 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
1e830 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
1e840 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ma(sqlite3*,int)
1e850 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
1e860 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72  llapseDatabaseAr
1e870 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ray(sqlite3*);.v
1e880 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
1e890 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69 6e 74  Parse(Parse*,int
1e8a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1e8b0 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61  ommitInternalCha
1e8c0 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  nges(sqlite3*);.
1e8d0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65  Table *sqlite3Re
1e8e0 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28  sultSetOfSelect(
1e8f0 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b  Parse*,Select*);
1e900 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
1e910 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72  nMasterTable(Par
1e920 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65  se *, int);.Inde
1e930 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72  x *sqlite3Primar
1e940 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a  yKeyIndex(Table*
1e950 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f  );.i16 sqlite3Co
1e960 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65  lumnOfIndex(Inde
1e970 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73  x*, i16);.void s
1e980 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65  qlite3StartTable
1e990 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
1e9a0 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  oken*,int,int,in
1e9b0 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
1e9c0 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61  ite3AddColumn(Pa
1e9d0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  rse*,Token*);.vo
1e9e0 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74  id sqlite3AddNot
1e9f0 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74  Null(Parse*, int
1ea00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
1ea10 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72  ddPrimaryKey(Par
1ea20 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
1ea30 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
1ea40 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
1ea50 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50  heckConstraint(P
1ea60 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
1ea70 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
1ea80 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65 2a 2c  lumnType(Parse*,
1ea90 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
1eaa0 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56  lite3AddDefaultV
1eab0 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72  alue(Parse*,Expr
1eac0 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Span*);.void sql
1ead0 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79  ite3AddCollateTy
1eae0 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
1eaf0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1eb00 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  EndTable(Parse*,
1eb10 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38  Token*,Token*,u8
1eb20 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73  ,Select*);.int s
1eb30 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63  qlite3ParseUri(c
1eb40 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
1eb50 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20   char*,unsigned 
1eb60 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  int*,.          
1eb70 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
1eb80 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63  3_vfs**,char**,c
1eb90 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a  har **);.Btree *
1eba0 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42  sqlite3DbNameToB
1ebb0 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  tree(sqlite3*,co
1ebc0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
1ebd0 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28  sqlite3CodeOnce(
1ebe0 50 61 72 73 65 20 2a 29 3b 0a 0a 42 69 74 76 65  Parse *);..Bitve
1ebf0 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63  c *sqlite3Bitvec
1ec00 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74  Create(u32);.int
1ec10 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
1ec20 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  st(Bitvec*, u32)
1ec30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
1ec40 76 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20  vecSet(Bitvec*, 
1ec50 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u32);.void sqlit
1ec60 65 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69  e3BitvecClear(Bi
1ec70 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64  tvec*, u32, void
1ec80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1ec90 42 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69  BitvecDestroy(Bi
1eca0 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69  tvec*);.u32 sqli
1ecb0 74 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69  te3BitvecSize(Bi
1ecc0 74 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  tvec*);.int sqli
1ecd0 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e  te3BitvecBuiltin
1ece0 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a  Test(int,int*);.
1ecf0 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33  .RowSet *sqlite3
1ed00 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74  RowSetInit(sqlit
1ed10 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69  e3*, void*, unsi
1ed20 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20  gned int);.void 
1ed30 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65  sqlite3RowSetCle
1ed40 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69  ar(RowSet*);.voi
1ed50 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49  d sqlite3RowSetI
1ed60 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69  nsert(RowSet*, i
1ed70 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
1ed80 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65  RowSetTest(RowSe
1ed90 74 2a 2c 20 75 38 20 69 42 61 74 63 68 2c 20 69  t*, u8 iBatch, i
1eda0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
1edb0 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65  RowSetNext(RowSe
1edc0 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64  t*, i64*);..void
1edd0 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69   sqlite3CreateVi
1ede0 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ew(Parse*,Token*
1edf0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53  ,Token*,Token*,S
1ee00 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b  elect*,int,int);
1ee10 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
1ee20 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
1ee30 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c   || !defined(SQL
1ee40 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1ee50 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c  TABLE).  int sql
1ee60 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
1ee70 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61  nNames(Parse*,Ta
1ee80 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ble*);.#else.# d
1ee90 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65  efine sqlite3Vie
1eea0 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
1eeb0 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 76  A,B) 0.#endif..v
1eec0 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
1eed0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
1eee0 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  List*, int, int)
1eef0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
1ef00 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  deDropTable(Pars
1ef10 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
1ef20 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1ef30 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73  te3DeleteTable(s
1ef40 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29  qlite3*, Table*)
1ef50 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
1ef60 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
1ef70 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ENT.  void sqlit
1ef80 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
1ef90 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72  egin(Parse *pPar
1efa0 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  se);.  void sqli
1efb0 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
1efc0 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73  End(Parse *pPars
1efd0 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  e);.#else.# defi
1efe0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
1eff0 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a  crementBegin(X).
1f000 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1f010 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
1f020 28 58 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  (X).#endif.int s
1f030 71 6c 69 74 65 33 43 6f 64 65 43 6f 72 6f 75 74  qlite3CodeCorout
1f040 69 6e 65 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  ine(Parse*, Sele
1f050 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a  ct*, SelectDest*
1f060 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
1f070 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72  nsert(Parse*, Sr
1f080 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c  cList*, Select*,
1f090 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a   IdList*, int);.
1f0a0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72  void *sqlite3Arr
1f0b0 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74  ayAllocate(sqlit
1f0c0 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e  e3*,void*,int,in
1f0d0 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74  t*,int*);.IdList
1f0e0 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41   *sqlite3IdListA
1f0f0 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20  ppend(sqlite3*, 
1f100 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  IdList*, Token*)
1f110 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c  ;.int sqlite3IdL
1f120 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a  istIndex(IdList*
1f130 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53  ,const char*);.S
1f140 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
1f150 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71  rcListEnlarge(sq
1f160 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
1f170 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63  , int, int);.Src
1f180 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
1f190 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74  ListAppend(sqlit
1f1a0 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  e3*, SrcList*, T
1f1b0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
1f1c0 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
1f1d0 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f  SrcListAppendFro
1f1e0 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72  mTerm(Parse*, Sr
1f1f0 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
1f200 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20  Token*,.        
1f210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 6f                To
1f230 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45  ken*, Select*, E
1f240 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a  xpr*, IdList*);.
1f250 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
1f260 69 73 74 49 6e 64 65 78 65 64 42 79 28 50 61 72  istIndexedBy(Par
1f270 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  se *, SrcList *,
1f280 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e 74 20 73   Token *);.int s
1f290 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c  qlite3IndexedByL
1f2a0 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73  ookup(Parse *, s
1f2b0 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
1f2c0 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  em *);.void sqli
1f2d0 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a  te3SrcListShiftJ
1f2e0 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a  oinType(SrcList*
1f2f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1f300 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73  rcListAssignCurs
1f310 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ors(Parse*, SrcL
1f320 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
1f330 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28  te3IdListDelete(
1f340 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74  sqlite3*, IdList
1f350 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1f360 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71  SrcListDelete(sq
1f370 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
1f380 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
1f390 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62  3AllocateIndexOb
1f3a0 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31  ject(sqlite3*,i1
1f3b0 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 49  6,int,char**);.I
1f3c0 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65  ndex *sqlite3Cre
1f3d0 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
1f3e0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72  Token*,Token*,Sr
1f3f0 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  cList*,ExprList*
1f400 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20  ,int,Token*,.   
1f410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f420 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e         Expr*, in
1f430 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1f440 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50  lite3DropIndex(P
1f450 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
1f460 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
1f470 65 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  e3Select(Parse*,
1f480 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74   Select*, Select
1f490 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a  Dest*);.Select *
1f4a0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77  sqlite3SelectNew
1f4b0 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
1f4c0 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
1f4d0 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20  ,ExprList*,.    
1f4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4f0 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c       Expr*,ExprL
1f500 69 73 74 2a 2c 75 31 36 2c 45 78 70 72 2a 2c 45  ist*,u16,Expr*,E
1f510 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
1f520 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28  te3SelectDelete(
1f530 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74  sqlite3*, Select
1f540 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
1f550 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28  e3SrcListLookup(
1f560 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
1f570 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
1f580 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c  ReadOnly(Parse*,
1f590 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76   Table*, int);.v
1f5a0 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  oid sqlite3OpenT
1f5b0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  able(Parse*, int
1f5c0 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20   iCur, int iDb, 
1f5d0 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69  Table*, int);.#i
1f5e0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
1f5f0 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44  _ENABLE_UPDATE_D
1f600 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20  ELETE_LIMIT) && 
1f610 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1f620 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45  OMIT_SUBQUERY).E
1f630 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69  xpr *sqlite3Limi
1f640 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72  tWhere(Parse*,Sr
1f650 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
1f660 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  rList*,Expr*,Exp
1f670 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  r*,char*);.#endi
1f680 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  f.void sqlite3De
1f690 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c  leteFrom(Parse*,
1f6a0 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a   SrcList*, Expr*
1f6b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
1f6c0 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72  pdate(Parse*, Sr
1f6d0 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
1f6e0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
1f6f0 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74  WhereInfo *sqlit
1f700 65 33 57 68 65 72 65 42 65 67 69 6e 28 50 61 72  e3WhereBegin(Par
1f710 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  se*,SrcList*,Exp
1f720 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
1f730 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b  rList*,u16,int);
1f740 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65  .void sqlite3Whe
1f750 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a  reEnd(WhereInfo*
1f760 29 3b 0a 75 36 34 20 73 71 6c 69 74 65 33 57 68  );.u64 sqlite3Wh
1f770 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e  ereOutputRowCoun
1f780 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  t(WhereInfo*);.i
1f790 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
1f7a0 73 44 69 73 74 69 6e 63 74 28 57 68 65 72 65 49  sDistinct(WhereI
1f7b0 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
1f7c0 65 33 57 68 65 72 65 49 73 4f 72 64 65 72 65 64  e3WhereIsOrdered
1f7d0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
1f7e0 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 43 6f  t sqlite3WhereCo
1f7f0 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68 65 72  ntinueLabel(Wher
1f800 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
1f810 69 74 65 33 57 68 65 72 65 42 72 65 61 6b 4c 61  ite3WhereBreakLa
1f820 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  bel(WhereInfo*);
1f830 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
1f840 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65 72 65  eOkOnePass(Where
1f850 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  Info*, int*);.in
1f860 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
1f870 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65  eGetColumn(Parse
1f880 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
1f890 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76  int, int, u8);.v
1f8a0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1f8b0 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61  odeGetColumnOfTa
1f8c0 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65  ble(Vdbe*, Table
1f8d0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1f8e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1f8f0 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73  xprCodeMove(Pars
1f900 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
1f910 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1f920 45 78 70 72 43 61 63 68 65 53 74 6f 72 65 28 50  ExprCacheStore(P
1f930 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
1f940 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1f950 74 65 33 45 78 70 72 43 61 63 68 65 50 75 73 68  te3ExprCachePush
1f960 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
1f970 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50  qlite3ExprCacheP
1f980 6f 70 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  op(Parse*, int);
1f990 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1f9a0 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72  rCacheRemove(Par
1f9b0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
1f9c0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1f9d0 43 61 63 68 65 43 6c 65 61 72 28 50 61 72 73 65  CacheClear(Parse
1f9e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1f9f0 45 78 70 72 43 61 63 68 65 41 66 66 69 6e 69 74  ExprCacheAffinit
1fa00 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20  yChange(Parse*, 
1fa10 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
1fa20 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50  qlite3ExprCode(P
1fa30 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
1fa40 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1fa50 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50  ExprCodeAtInit(P
1fa60 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
1fa70 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
1fa80 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28  te3ExprCodeTemp(
1fa90 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
1faa0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
1fab0 33 45 78 70 72 43 6f 64 65 54 61 72 67 65 74 28  3ExprCodeTarget(
1fac0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
1fad0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1fae0 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65  ExprCodeAndCache
1faf0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
1fb00 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1fb10 33 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73  3ExprCodeExprLis
1fb20 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  t(Parse*, ExprLi
1fb30 73 74 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23  st*, int, u8);.#
1fb40 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
1fb50 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30 31  EL_DUP      0x01
1fb60 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73    /* Deep, not s
1fb70 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f  hallow copies */
1fb80 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
1fb90 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30 78  ECEL_FACTOR   0x
1fba0 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75  02  /* Factor ou
1fbb0 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73  t constant terms
1fbc0 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33   */.void sqlite3
1fbd0 45 78 70 72 49 66 54 72 75 65 28 50 61 72 73 65  ExprIfTrue(Parse
1fbe0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69  *, Expr*, int, i
1fbf0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1fc00 33 45 78 70 72 49 66 46 61 6c 73 65 28 50 61 72  3ExprIfFalse(Par
1fc10 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
1fc20 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71   int);.Table *sq
1fc30 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73  lite3FindTable(s
1fc40 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1fc50 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
1fc60 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
1fc70 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72  3LocateTable(Par
1fc80 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 63  se*,int isView,c
1fc90 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
1fca0 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20  t char*);.Table 
1fcb0 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61  *sqlite3LocateTa
1fcc0 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 69  bleItem(Parse*,i
1fcd0 6e 74 20 69 73 56 69 65 77 2c 73 74 72 75 63 74  nt isView,struct
1fce0 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
1fcf0 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
1fd00 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65  FindIndex(sqlite
1fd10 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
1fd20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
1fd30 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
1fd40 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73  AndDeleteTable(s
1fd50 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
1fd60 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
1fd70 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
1fd80 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74  eleteIndex(sqlit
1fd90 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
1fda0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
1fdb0 65 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a 29  e3Vacuum(Parse*)
1fdc0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e  ;.int sqlite3Run
1fdd0 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73  Vacuum(char**, s
1fde0 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61 72 20 2a  qlite3*);.char *
1fdf0 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54  sqlite3NameFromT
1fe00 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54  oken(sqlite3*, T
1fe10 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
1fe20 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28 45  te3ExprCompare(E
1fe30 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  xpr*, Expr*, int
1fe40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1fe50 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78  prListCompare(Ex
1fe60 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  prList*, ExprLis
1fe70 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
1fe80 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73  lite3ExprImplies
1fe90 45 78 70 72 28 45 78 70 72 2a 2c 20 45 78 70 72  Expr(Expr*, Expr
1fea0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
1feb0 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65  lite3ExprAnalyze
1fec0 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43  Aggregates(NameC
1fed0 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b  ontext*, Expr*);
1fee0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1fef0 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28  rAnalyzeAggList(
1ff00 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70  NameContext*,Exp
1ff10 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
1ff20 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73  ite3FunctionUses
1ff30 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53  ThisSrc(Expr*, S
1ff40 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a  rcList*);.Vdbe *
1ff50 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 50  sqlite3GetVdbe(P
1ff60 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
1ff70 69 74 65 33 50 72 6e 67 53 61 76 65 53 74 61 74  ite3PrngSaveStat
1ff80 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  e(void);.void sq
1ff90 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65  lite3PrngRestore
1ffa0 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69  State(void);.voi
1ffb0 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63  d sqlite3Rollbac
1ffc0 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e  kAll(sqlite3*,in
1ffd0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1ffe0 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
1fff0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
20000 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56  oid sqlite3CodeV
20010 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61  erifyNamedSchema
20020 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
20030 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20  har *zDb);.void 
20040 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e  sqlite3BeginTran
20050 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20  saction(Parse*, 
20060 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
20070 65 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74  e3CommitTransact
20080 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ion(Parse*);.voi
20090 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63  d sqlite3Rollbac
200a0 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  kTransaction(Par
200b0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
200c0 65 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73  e3Savepoint(Pars
200d0 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29  e*, int, Token*)
200e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c  ;.void sqlite3Cl
200f0 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71  oseSavepoints(sq
20100 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73  lite3 *);.void s
20110 71 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78  qlite3LeaveMutex
20120 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73  AndCloseZombie(s
20130 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
20140 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
20150 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  ant(Expr*);.int 
20160 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
20170 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70  stantNotJoin(Exp
20180 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
20190 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72  ExprIsConstantOr
201a0 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 29 3b  Function(Expr*);
201b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
201c0 49 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c  IsInteger(Expr*,
201d0 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
201e0 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c  te3ExprCanBeNull
201f0 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 76  (const Expr*);.v
20200 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
20210 6f 64 65 49 73 4e 75 6c 6c 4a 75 6d 70 28 56 64  odeIsNullJump(Vd
20220 62 65 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a  be*, const Expr*
20230 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74  , int, int);.int
20240 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64   sqlite3ExprNeed
20250 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67  sNoAffinityChang
20260 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63  e(const Expr*, c
20270 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  har);.int sqlite
20280 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63  3IsRowid(const c
20290 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
202a0 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65  te3GenerateRowDe
202b0 6c 65 74 65 28 50 61 72 73 65 2a 2c 54 61 62 6c  lete(Parse*,Tabl
202c0 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c  e*,Trigger*,int,
202d0 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75  int,int,i16,u8,u
202e0 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  8,u8);.void sqli
202f0 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e  te3GenerateRowIn
20300 64 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a  dexDelete(Parse*
20310 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
20320 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  nt, int*);.int s
20330 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e  qlite3GenerateIn
20340 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49  dexKey(Parse*, I
20350 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ndex*, int, int,
20360 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78   int, int*,Index
20370 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
20380 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73  ite3GenerateCons
20390 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72  traintChecks(Par
203a0 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c  se*,Table*,int*,
203b0 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  int,int,int,int,
203c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
203d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203e0 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c        u8,u8,int,
203f0 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  int*);.void sqli
20400 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72  te3CompleteInser
20410 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c  tion(Parse*,Tabl
20420 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  e*,int,int,int,i
20430 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29  nt*,int,int,int)
20440 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65  ;.int sqlite3Ope
20450 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73  nTableAndIndices
20460 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
20470 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2a 2c 20   int, int, u8*, 
20480 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69  int*, int*);.voi
20490 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72  d sqlite3BeginWr
204a0 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72  iteOperation(Par
204b0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
204c0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c 74  void sqlite3Mult
204d0 69 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b 0a  iWrite(Parse*);.
204e0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79 41  void sqlite3MayA
204f0 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f  bort(Parse*);.vo
20500 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43 6f  id sqlite3HaltCo
20510 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
20520 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a   int, int, char*
20530 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20  , i8, u8);.void 
20540 73 71 6c 69 74 65 33 55 6e 69 71 75 65 43 6f 6e  sqlite3UniqueCon
20550 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
20560 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f  int, Index*);.vo
20570 69 64 20 73 71 6c 69 74 65 33 52 6f 77 69 64 43  id sqlite3RowidC
20580 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
20590 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a  , int, Table*);.
205a0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
205b0 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78  rDup(sqlite3*,Ex
205c0 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69  pr*,int);.ExprLi
205d0 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
205e0 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
205f0 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  ExprList*,int);.
20600 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
20610 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74  SrcListDup(sqlit
20620 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74  e3*,SrcList*,int
20630 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74  );.IdList *sqlit
20640 65 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69  e3IdListDup(sqli
20650 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53  te3*,IdList*);.S
20660 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65  elect *sqlite3Se
20670 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a  lectDup(sqlite3*
20680 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 76  ,Select*,int);.v
20690 6f 69 64 20 73 71 6c 69 74 65 33 46 75 6e 63 44  oid sqlite3FuncD
206a0 65 66 49 6e 73 65 72 74 28 46 75 6e 63 44 65 66  efInsert(FuncDef
206b0 48 61 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29  Hash*, FuncDef*)
206c0 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74  ;.FuncDef *sqlit
206d0 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73  e3FindFunction(s
206e0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
206f0 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75  ar*,int,int,u8,u
20700 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
20710 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46  RegisterBuiltinF
20720 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33  unctions(sqlite3
20730 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
20740 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65  RegisterDateTime
20750 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
20760 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
20770 69 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74  isterGlobalFunct
20780 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20  ions(void);.int 
20790 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
207a0 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ckOk(sqlite3*);.
207b0 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
207c0 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73  yCheckSickOrOk(s
207d0 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
207e0 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b  qlite3ChangeCook
207f0 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ie(Parse*, int);
20800 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
20810 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
20820 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
20830 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
20840 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ).void sqlite3Ma
20850 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61  terializeView(Pa
20860 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
20870 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69  pr*, int);.#endi
20880 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
20890 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20  E_OMIT_TRIGGER. 
208a0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67   void sqlite3Beg
208b0 69 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  inTrigger(Parse*
208c0 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  , Token*,Token*,
208d0 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c  int,int,IdList*,
208e0 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  SrcList*,.      
208f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20900 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20       Expr*,int, 
20910 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
20920 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65  ite3FinishTrigge
20930 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
20940 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  rStep*, Token*);
20950 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
20960 72 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65  ropTrigger(Parse
20970 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
20980 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
20990 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28  3DropTriggerPtr(
209a0 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a  Parse*, Trigger*
209b0 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71  );.  Trigger *sq
209c0 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69  lite3TriggersExi
209d0 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
209e0 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73  e*, int, ExprLis
209f0 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b  t*, int *pMask);
20a00 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
20a10 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50  te3TriggerList(P
20a20 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29  arse *, Table *)
20a30 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
20a40 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50  CodeRowTrigger(P
20a50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a  arse*, Trigger *
20a60 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
20a70 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a  , int, Table *,.
20a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a90 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c              int,
20aa0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f   int, int);.  vo
20ab0 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  id sqlite3CodeRo
20ac0 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50  wTriggerDirect(P
20ad0 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20  arse *, Trigger 
20ae0 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c  *, Table *, int,
20af0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f   int, int);.  vo
20b00 69 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69  id sqliteViewTri
20b10 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61  ggers(Parse*, Ta
20b20 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ble*, Expr*, int
20b30 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20  , ExprList*);.  
20b40 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
20b50 74 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71  teTriggerStep(sq
20b60 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53  lite3*, TriggerS
20b70 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  tep*);.  Trigger
20b80 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
20b90 67 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73  ggerSelectStep(s
20ba0 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29  qlite3*,Select*)
20bb0 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
20bc0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49  *sqlite3TriggerI
20bd0 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69 74 65  nsertStep(sqlite
20be0 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73  3*,Token*, IdLis
20bf0 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
20c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c10 20 20 20 20 20 20 20 20 20 20 20 20 53 65 6c 65              Sele
20c20 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67 67  ct*,u8);.  Trigg
20c30 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
20c40 72 69 67 67 65 72 55 70 64 61 74 65 53 74 65 70  riggerUpdateStep
20c50 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a  (sqlite3*,Token*
20c60 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72  ,ExprList*, Expr
20c70 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69 67 67 65  *, u8);.  Trigge
20c80 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
20c90 69 67 67 65 72 44 65 6c 65 74 65 53 74 65 70 28  iggerDeleteStep(
20ca0 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c  sqlite3*,Token*,
20cb0 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20   Expr*);.  void 
20cc0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
20cd0 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54  gger(sqlite3*, T
20ce0 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64  rigger*);.  void
20cf0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
20d00 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73  dDeleteTrigger(s
20d10 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
20d20 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20  t char*);.  u32 
20d30 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f  sqlite3TriggerCo
20d40 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69  lmask(Parse*,Tri
20d50 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  gger*,ExprList*,
20d60 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69  int,int,Table*,i
20d70 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71  nt);.# define sq
20d80 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
20d90 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70  el(p) ((p)->pTop
20da0 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f  level ? (p)->pTo
20db0 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 65  plevel : (p)).#e
20dc0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
20dd0 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
20de0 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23  t(B,C,D,E,F) 0.#
20df0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44   define sqlite3D
20e00 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42  eleteTrigger(A,B
20e10 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
20e20 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72  e3DropTriggerPtr
20e30 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
20e40 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
20e50 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42  eleteTrigger(A,B
20e60 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,C).# define sql
20e70 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
20e80 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47  er(A,B,C,D,E,F,G
20e90 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73  ,H,I).# define s
20ea0 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
20eb0 67 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43  ggerDirect(A,B,C
20ec0 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65  ,D,E,F).# define
20ed0 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c   sqlite3TriggerL
20ee0 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65  ist(X, Y) 0.# de
20ef0 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
20f00 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23  eToplevel(p) p.#
20f10 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
20f20 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c  riggerColmask(A,
20f30 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23  B,C,D,E,F,G) 0.#
20f40 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74  endif..int sqlit
20f50 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65  e3JoinType(Parse
20f60 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
20f70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
20f80 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f   sqlite3CreateFo
20f90 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
20fa0 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65   ExprList*, Toke
20fb0 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  n*, ExprList*, i
20fc0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
20fd0 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79  3DeferForeignKey
20fe0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23  (Parse*, int);.#
20ff0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
21000 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
21010 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
21020 75 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45  uthRead(Parse*,E
21030 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63  xpr*,Schema*,Src
21040 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  List*);.  int sq
21050 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 50  lite3AuthCheck(P
21060 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  arse*,int, const
21070 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
21080 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
21090 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
210a0 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68  3AuthContextPush
210b0 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e  (Parse*, AuthCon
210c0 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  text*, const cha
210d0 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
210e0 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f  te3AuthContextPo
210f0 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b  p(AuthContext*);
21100 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
21110 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a  thReadCol(Parse*
21120 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
21130 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
21140 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  t);.#else.# defi
21150 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  ne sqlite3AuthRe
21160 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65  ad(a,b,c,d).# de
21170 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
21180 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29  Check(a,b,c,d,e)
21190 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20      SQLITE_OK.# 
211a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
211b0 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c  thContextPush(a,
211c0 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71  b,c).# define sq
211d0 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
211e0 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29 28  Pop(a)  ((void)(
211f0 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  a)).#endif.void 
21200 73 71 6c 69 74 65 33 41 74 74 61 63 68 28 50 61  sqlite3Attach(Pa
21210 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  rse*, Expr*, Exp
21220 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  r*, Expr*);.void
21230 20 73 71 6c 69 74 65 33 44 65 74 61 63 68 28 50   sqlite3Detach(P
21240 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
21250 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e  oid sqlite3FixIn
21260 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72  it(DbFixer*, Par
21270 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  se*, int, const 
21280 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  char*, const Tok
21290 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
212a0 33 46 69 78 53 72 63 4c 69 73 74 28 44 62 46 69  3FixSrcList(DbFi
212b0 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  xer*, SrcList*);
212c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53  .int sqlite3FixS
212d0 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20  elect(DbFixer*, 
212e0 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
212f0 6c 69 74 65 33 46 69 78 45 78 70 72 28 44 62 46  lite3FixExpr(DbF
21300 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  ixer*, Expr*);.i
21310 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70  nt sqlite3FixExp
21320 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20  rList(DbFixer*, 
21330 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
21340 73 71 6c 69 74 65 33 46 69 78 54 72 69 67 67 65  sqlite3FixTrigge
21350 72 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20  rStep(DbFixer*, 
21360 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69  TriggerStep*);.i
21370 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63  nt sqlite3AtoF(c
21380 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f  onst char *z, do
21390 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  uble*, int, u8);
213a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49  .int sqlite3GetI
213b0 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20  nt32(const char 
213c0 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
213d0 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20  lite3Atoi(const 
213e0 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
213f0 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28  te3Utf16ByteLen(
21400 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74  const void *pDat
21410 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69  a, int nChar);.i
21420 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 43 68  nt sqlite3Utf8Ch
21430 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72  arLen(const char
21440 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79   *pData, int nBy
21450 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  te);.u32 sqlite3
21460 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75  Utf8Read(const u
21470 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c  8**);.LogEst sql
21480 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b  ite3LogEst(u64);
21490 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
214a0 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c  ogEstAdd(LogEst,
214b0 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66  LogEst);.#ifndef
214c0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
214d0 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74  TUALTABLE.LogEst
214e0 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72   sqlite3LogEstFr
214f0 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29  omDouble(double)
21500 3b 0a 23 65 6e 64 69 66 0a 75 36 34 20 73 71 6c  ;.#endif.u64 sql
21510 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28  ite3LogEstToInt(
21520 4c 6f 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20  LogEst);../*.** 
21530 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64  Routines to read
21540 20 61 6e 64 20 77 72 69 74 65 20 76 61 72 69 61   and write varia
21550 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
21560 65 72 73 2e 20 20 54 68 65 73 65 20 75 73 65 64  ers.  These used
21570 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65   to.** be define
21580 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e  d locally, but n
21590 6f 77 20 77 65 20 75 73 65 20 74 68 65 20 76 61  ow we use the va
215a0 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e  rint routines in
215b0 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66   the util.c.** f
215c0 69 6c 65 2e 20 20 43 6f 64 65 20 73 68 6f 75 6c  ile.  Code shoul
215d0 64 20 75 73 65 20 74 68 65 20 4d 41 43 52 4f 20  d use the MACRO 
215e0 66 6f 72 6d 73 20 62 65 6c 6f 77 2c 20 61 73 20  forms below, as 
215f0 74 68 65 20 56 61 72 69 6e 74 33 32 20 76 65 72  the Varint32 ver
21600 73 69 6f 6e 73 0a 2a 2a 20 61 72 65 20 63 6f 64  sions.** are cod
21610 65 64 20 74 6f 20 61 73 73 75 6d 65 20 74 68 65  ed to assume the
21620 20 73 69 6e 67 6c 65 20 62 79 74 65 20 63 61 73   single byte cas
21630 65 20 69 73 20 61 6c 72 65 61 64 79 20 68 61 6e  e is already han
21640 64 6c 65 64 20 28 77 68 69 63 68 20 0a 2a 2a 20  dled (which .** 
21650 74 68 65 20 4d 41 43 52 4f 20 66 6f 72 6d 20 64  the MACRO form d
21660 6f 65 73 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  oes)..*/.int sql
21670 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e  ite3PutVarint(un
21680 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36  signed char*, u6
21690 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50  4);.int sqlite3P
216a0 75 74 56 61 72 69 6e 74 33 32 28 75 6e 73 69 67  utVarint32(unsig
216b0 6e 65 64 20 63 68 61 72 2a 2c 20 75 33 32 29 3b  ned char*, u32);
216c0 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61  .u8 sqlite3GetVa
216d0 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67  rint(const unsig
216e0 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20  ned char *, u64 
216f0 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65  *);.u8 sqlite3Ge
21700 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20  tVarint32(const 
21710 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
21720 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c   u32 *);.int sql
21730 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36  ite3VarintLen(u6
21740 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  4 v);../*.** The
21750 20 68 65 61 64 65 72 20 6f 66 20 61 20 72 65 63   header of a rec
21760 6f 72 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ord consists of 
21770 61 20 73 65 71 75 65 6e 63 65 20 76 61 72 69 61  a sequence varia
21780 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
21790 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 69 6e  ers..** These in
217a0 74 65 67 65 72 73 20 61 72 65 20 61 6c 6d 6f 73  tegers are almos
217b0 74 20 61 6c 77 61 79 73 20 73 6d 61 6c 6c 20 61  t always small a
217c0 6e 64 20 61 72 65 20 65 6e 63 6f 64 65 64 20 61  nd are encoded a
217d0 73 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e  s a single byte.
217e0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
217f0 67 20 6d 61 63 72 6f 73 20 74 61 6b 65 20 61 64  g macros take ad
21800 76 61 6e 74 61 67 65 20 74 68 69 73 20 66 61 63  vantage this fac
21810 74 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20 66  t to provide a f
21820 61 73 74 20 65 6e 63 6f 64 65 0a 2a 2a 20 61 6e  ast encode.** an
21830 64 20 64 65 63 6f 64 65 20 6f 66 20 74 68 65 20  d decode of the 
21840 69 6e 74 65 67 65 72 73 20 69 6e 20 61 20 72 65  integers in a re
21850 63 6f 72 64 20 68 65 61 64 65 72 2e 20 20 49 74  cord header.  It
21860 20 69 73 20 66 61 73 74 65 72 20 66 6f 72 20 74   is faster for t
21870 68 65 20 63 6f 6d 6d 6f 6e 0a 2a 2a 20 63 61 73  he common.** cas
21880 65 20 77 68 65 72 65 20 74 68 65 20 69 6e 74 65  e where the inte
21890 67 65 72 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ger is a single 
218a0 62 79 74 65 2e 20 20 49 74 20 69 73 20 61 20 6c  byte.  It is a l
218b0 69 74 74 6c 65 20 73 6c 6f 77 65 72 20 77 68 65  ittle slower whe
218c0 6e 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72  n the.** integer
218d0 20 69 73 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20   is two or more 
218e0 62 79 74 65 73 2e 20 20 42 75 74 20 6f 76 65 72  bytes.  But over
218f0 61 6c 6c 20 69 74 20 69 73 20 66 61 73 74 65 72  all it is faster
21900 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ..**.** The foll
21910 6f 77 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  owing expression
21920 73 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74  s are equivalent
21930 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20  :.**.**     x = 
21940 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
21950 33 32 28 20 41 2c 20 26 42 20 29 3b 0a 2a 2a 20  32( A, &B );.** 
21960 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 50      x = sqlite3P
21970 75 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42  utVarint32( A, B
21980 20 29 3b 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20   );.**.**     x 
21990 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 20 41  = getVarint32( A
219a0 2c 20 42 20 29 3b 0a 2a 2a 20 20 20 20 20 78 20  , B );.**     x 
219b0 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 20 41  = putVarint32( A
219c0 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2f 0a 23 64 65  , B );.**.*/.#de
219d0 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32  fine getVarint32
219e0 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28  (A,B)  \.  (u8)(
219f0 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f  (*(A)<(u8)0x80)?
21a00 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c  ((B)=(u32)*(A)),
21a10 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  1:sqlite3GetVari
21a20 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29  nt32((A),(u32 *)
21a30 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70  &(B))).#define p
21a40 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20  utVarint32(A,B) 
21a50 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29   \.  (u8)(((u32)
21a60 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28  (B)<(u32)0x80)?(
21a70 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63  *(A)=(unsigned c
21a80 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73  har)(B)),1:\.  s
21a90 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 33  qlite3PutVarint3
21aa0 32 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66  2((A),(B))).#def
21ab0 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20  ine getVarint   
21ac0 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
21ad0 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72  t.#define putVar
21ae0 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75  int    sqlite3Pu
21af0 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20  tVarint...const 
21b00 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64  char *sqlite3Ind
21b10 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 56 64  exAffinityStr(Vd
21b20 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a  be *, Index *);.
21b30 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
21b40 65 41 66 66 69 6e 69 74 79 53 74 72 28 56 64 62  eAffinityStr(Vdb
21b50 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 63  e *, Table *);.c
21b60 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61  har sqlite3Compa
21b70 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20  reAffinity(Expr 
21b80 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66  *pExpr, char aff
21b90 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  2);.int sqlite3I
21ba0 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45  ndexAffinityOk(E
21bb0 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
21bc0 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a   idx_affinity);.
21bd0 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72  char sqlite3Expr
21be0 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
21bf0 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Expr);.int sqlit
21c00 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63  e3Atoi64(const c
21c10 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c  har*, i64*, int,
21c20 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
21c30 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a  e3Error(sqlite3*
21c40 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
21c50 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 2a 73  r*,...);.void *s
21c60 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28  qlite3HexToBlob(
21c70 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
21c80 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b  char *z, int n);
21c90 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f  .u8 sqlite3HexTo
21ca0 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20  Int(int h);.int 
21cb0 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61  sqlite3TwoPartNa
21cc0 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65  me(Parse *, Toke
21cd0 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f  n *, Token *, To
21ce0 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65  ken **);..#if de
21cf0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
21d00 54 29 20 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  T) .const char *
21d10 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69  sqlite3ErrName(i
21d20 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e  nt);.#endif..con
21d30 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
21d40 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74  ErrStr(int);.int
21d50 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
21d60 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ma(Parse *pParse
21d70 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
21d80 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73  te3FindCollSeq(s
21d90 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20  qlite3*,u8 enc, 
21da0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
21db0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
21dc0 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28  e3LocateCollSeq(
21dd0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63  Parse *pParse, c
21de0 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29  onst char*zName)
21df0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
21e00 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61  e3ExprCollSeq(Pa
21e10 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
21e20 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20  r *pExpr);.Expr 
21e30 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43  *sqlite3ExprAddC
21e40 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73  ollateToken(Pars
21e50 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a  e *pParse, Expr*
21e60 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20  , Token*);.Expr 
21e70 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43  *sqlite3ExprAddC
21e80 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72  ollateString(Par
21e90 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20  se*,Expr*,const 
21ea0 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  char*);.Expr *sq
21eb0 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c  lite3ExprSkipCol
21ec0 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74  late(Expr*);.int
21ed0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c   sqlite3CheckCol
21ee0 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f  lSeq(Parse *, Co
21ef0 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71  llSeq *);.int sq
21f00 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74  lite3CheckObject
21f10 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f  Name(Parse *, co
21f20 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69  nst char *);.voi
21f30 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74  d sqlite3VdbeSet
21f40 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20  Changes(sqlite3 
21f50 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
21f60 69 74 65 33 41 64 64 49 6e 74 36 34 28 69 36 34  ite3AddInt64(i64
21f70 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
21f80 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a  te3SubInt64(i64*
21f90 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
21fa0 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c  e3MulInt64(i64*,
21fb0 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
21fc0 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a  3AbsInt32(int);.
21fd0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
21fe0 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76  ABLE_8_3_NAMES.v
21ff0 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53  oid sqlite3FileS
22000 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61  uffix3(const cha
22010 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73  r*, char*);.#els
22020 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
22030 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c  e3FileSuffix3(X,
22040 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c  Y).#endif.u8 sql
22050 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63  ite3GetBoolean(c
22060 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 69 6e 74  onst char *z,int
22070 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  );..const void *
22080 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74  sqlite3ValueText
22090 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
220a0 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
220b0 33 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69  3ValueBytes(sqli
220c0 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
220d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
220e0 75 65 53 65 74 53 74 72 28 73 71 6c 69 74 65 33  ueSetStr(sqlite3
220f0 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f  _value*, int, co
22100 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a  nst void *,u8, .
22110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22120 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28          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 56 61 6c 75 65 53 65 74 4e 75 6c  lite3ValueSetNul
22150 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  l(sqlite3_value*
22160 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
22170 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33  alueFree(sqlite3
22180 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65  _value*);.sqlite
22190 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33  3_value *sqlite3
221a0 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33  ValueNew(sqlite3
221b0 20 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74   *);.char *sqlit
221c0 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74  e3Utf16to8(sqlit
221d0 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64  e3 *, const void
221e0 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
221f0 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f   sqlite3ValueFro
22200 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  mExpr(sqlite3 *,
22210 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c   Expr *, u8, u8,
22220 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
22230 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22240 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
22250 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ty(sqlite3_value
22260 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66   *, u8, u8);.#if
22270 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  ndef SQLITE_AMAL
22280 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20  GAMATION.extern 
22290 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
222a0 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64  har sqlite3Opcod
222b0 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74  eProperty[];.ext
222c0 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
222d0 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55  ed char sqlite3U
222e0 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65  pperToLower[];.e
222f0 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
22300 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
22310 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74  3CtypeMap[];.ext
22320 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  ern const Token 
22330 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73  sqlite3IntTokens
22340 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54  [];.extern SQLIT
22350 45 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c  E_WSD struct Sql
22360 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74  ite3Config sqlit
22370 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e  e3Config;.extern
22380 20 53 51 4c 49 54 45 5f 57 53 44 20 46 75 6e 63   SQLITE_WSD Func
22390 44 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 47  DefHash sqlite3G
223a0 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a  lobalFunctions;.
223b0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
223c0 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69  MIT_WSD.extern i
223d0 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e  nt sqlite3Pendin
223e0 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65  gByte;.#endif.#e
223f0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
22400 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73  3RootPageMoved(s
22410 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e  qlite3*, int, in
22420 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
22430 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50 61 72  lite3Reindex(Par
22440 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
22450 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
22460 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73  e3AlterFunctions
22470 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
22480 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54  ite3AlterRenameT
22490 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
224a0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
224b0 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f  int sqlite3GetTo
224c0 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ken(const unsign
224d0 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a  ed char *, int *
224e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e  );.void sqlite3N
224f0 65 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65  estedParse(Parse
22500 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
22510 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
22520 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
22530 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74  Statements(sqlit
22540 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
22550 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50  3CodeSubselect(P
22560 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
22570 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
22580 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65  sqlite3SelectPre
22590 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  p(Parse*, Select
225a0 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29  *, NameContext*)
225b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74  ;.int sqlite3Mat
225c0 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74  chSpanName(const
225d0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
225e0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
225f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
22600 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
22610 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65  veExprNames(Name
22620 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
22630 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
22640 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73  solveSelectNames
22650 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
22660 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b  , NameContext*);
22670 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
22680 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63  olveSelfReferenc
22690 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  e(Parse*,Table*,
226a0 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  int,Expr*,ExprLi
226b0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
226c0 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f  3ResolveOrderGro
226d0 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c  upBy(Parse*, Sel
226e0 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ect*, ExprList*,
226f0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
22700 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  oid sqlite3Colum
22710 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c  nDefault(Vdbe *,
22720 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
22730 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
22740 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43  3AlterFinishAddC
22750 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54  olumn(Parse *, T
22760 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71  oken *);.void sq
22770 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41  lite3AlterBeginA
22780 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a  ddColumn(Parse *
22790 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f  , SrcList *);.Co
227a0 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65  llSeq *sqlite3Ge
227b0 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c  tCollSeq(Parse*,
227c0 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20   u8, CollSeq *, 
227d0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
227e0 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69  ar sqlite3Affini
227f0 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61  tyType(const cha
22800 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73  r*, u8*);.void s
22810 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61  qlite3Analyze(Pa
22820 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
22830 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
22840 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64  e3InvokeBusyHand
22850 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a  ler(BusyHandler*
22860 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
22870 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54  ndDb(sqlite3*, T
22880 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
22890 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71  te3FindDbName(sq
228a0 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
228b0 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
228c0 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28  te3AnalysisLoad(
228d0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42  sqlite3*,int iDB
228e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
228f0 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65  eleteIndexSample
22900 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78  s(sqlite3*,Index
22910 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22920 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e  DefaultRowEst(In
22930 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
22940 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46  te3RegisterLikeF
22950 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33  unctions(sqlite3
22960 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
22970 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69  ite3IsLikeFuncti
22980 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  on(sqlite3*,Expr
22990 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76  *,int*,char*);.v
229a0 6f 69 64 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d  oid sqlite3Minim
229b0 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50 61 72  umFileFormat(Par
229c0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
229d0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65  void sqlite3Sche
229e0 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b  maClear(void *);
229f0 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33  .Schema *sqlite3
22a00 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65  SchemaGet(sqlite
22a10 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69  3 *, Btree *);.i
22a20 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  nt sqlite3Schema
22a30 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20  ToIndex(sqlite3 
22a40 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a  *db, Schema *);.
22a50 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
22a60 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c  KeyInfoAlloc(sql
22a70 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  ite3*,int,int);.
22a80 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49  void sqlite3KeyI
22a90 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f  nfoUnref(KeyInfo
22aa0 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
22ab0 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b  ite3KeyInfoRef(K
22ac0 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66  eyInfo*);.KeyInf
22ad0 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
22ae0 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  oOfIndex(Parse*,
22af0 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65 66   Index*);.#ifdef
22b00 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e   SQLITE_DEBUG.in
22b10 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f  t sqlite3KeyInfo
22b20 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49  IsWriteable(KeyI
22b30 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  nfo*);.#endif.in
22b40 74 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46  t sqlite3CreateF
22b50 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  unc(sqlite3 *, c
22b60 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
22b70 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a  , int, void *, .
22b80 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
22b90 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
22ba0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
22bb0 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  ),.  void (*)(sq
22bc0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
22bd0 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
22be0 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73   **), void (*)(s
22bf0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
22c00 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74  ,.  FuncDestruct
22c10 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a  or *pDestructor.
22c20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70  );.int sqlite3Ap
22c30 69 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64  iExit(sqlite3 *d
22c40 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  b, int);.int sql
22c50 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61  ite3OpenTempData
22c60 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a  base(Parse *);..
22c70 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
22c80 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75  ccumInit(StrAccu
22c90 6d 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20  m*, char*, int, 
22ca0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22cb0 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
22cc0 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74  (StrAccum*,const
22cd0 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69   char*,int);.voi
22ce0 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
22cf0 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63  mAppendAll(StrAc
22d00 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  cum*,const char*
22d10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
22d20 70 70 65 6e 64 53 70 61 63 65 28 53 74 72 41 63  ppendSpace(StrAc
22d30 63 75 6d 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20  cum*,int);.char 
22d40 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d  *sqlite3StrAccum
22d50 46 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a  Finish(StrAccum*
22d60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
22d70 74 72 41 63 63 75 6d 52 65 73 65 74 28 53 74 72  trAccumReset(Str
22d80 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71  Accum*);.void sq
22d90 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73 74 49  lite3SelectDestI
22da0 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c  nit(SelectDest*,
22db0 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  int,int);.Expr *
22dc0 73 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c  sqlite3CreateCol
22dd0 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20  umnExpr(sqlite3 
22de0 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e  *, SrcList *, in
22df0 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73  t, int);..void s
22e00 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73 74  qlite3BackupRest
22e10 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  art(sqlite3_back
22e20 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  up *);.void sqli
22e30 74 65 33 42 61 63 6b 75 70 55 70 64 61 74 65 28  te3BackupUpdate(
22e40 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a  sqlite3_backup *
22e50 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38  , Pgno, const u8
22e60 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c   *);..#ifdef SQL
22e70 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
22e80 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73  _OR_STAT4.void s
22e90 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e  qlite3AnalyzeFun
22ea0 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e  ctions(void);.in
22eb0 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72  t sqlite3Stat4Pr
22ec0 6f 62 65 53 65 74 56 61 6c 75 65 28 50 61 72 73  obeSetValue(Pars
22ed0 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b  e*,Index*,Unpack
22ee0 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a  edRecord**,Expr*
22ef0 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76  ,u8,int,int*);.v
22f00 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 34  oid sqlite3Stat4
22f10 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b  ProbeFree(Unpack
22f20 65 64 52 65 63 6f 72 64 2a 29 3b 0a 23 65 6e 64  edRecord*);.#end
22f30 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e  if../*.** The in
22f40 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c  terface to the L
22f50 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70  EMON-generated p
22f60 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73  arser.*/.void *s
22f70 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f  qlite3ParserAllo
22f80 63 28 76 6f 69 64 2a 28 2a 29 28 73 69 7a 65 5f  c(void*(*)(size_
22f90 74 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t));.void sqlite
22fa0 33 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64  3ParserFree(void
22fb0 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a  *, void(*)(void*
22fc0 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ));.void sqlite3
22fd0 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e  Parser(void*, in
22fe0 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a  t, Token, Parse*
22ff0 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43  );.#ifdef YYTRAC
23000 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20  KMAXSTACKDEPTH. 
23010 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73   int sqlite3Pars
23020 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64  erStackPeak(void
23030 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  *);.#endif..void
23040 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64   sqlite3AutoLoad
23050 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
23060 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  e3*);.#ifndef SQ
23070 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45  LITE_OMIT_LOAD_E
23080 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20  XTENSION.  void 
23090 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
230a0 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  nsions(sqlite3*)
230b0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
230c0 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
230d0 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69  ensions(X).#endi
230e0 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
230f0 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
23100 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  CHE.  void sqlit
23110 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73  e3TableLock(Pars
23120 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  e *, int, int, u
23130 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  8, const char *)
23140 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
23150 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  e sqlite3TableLo
23160 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65  ck(v,w,x,y,z).#e
23170 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
23180 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73  ITE_TEST.  int s
23190 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e  qlite3Utf8To8(un
231a0 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23  signed char*);.#
231b0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
231c0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
231d0 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65  LTABLE.#  define
231e0 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
231f0 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73  r(Y).#  define s
23200 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58  qlite3VtabSync(X
23210 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20  ,Y) SQLITE_OK.# 
23220 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
23230 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23  tabRollback(X).#
23240 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
23250 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20  VtabCommit(X).# 
23260 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
23270 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a  tabInSync(db) 0.
23280 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
23290 33 56 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20  3VtabLock(X) .# 
232a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
232b0 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20  tabUnlock(X).#  
232c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
232d0 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a  abUnlockList(X).
232e0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
232f0 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58  3VtabSavepoint(X
23300 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f  , Y, Z) SQLITE_O
23310 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  K.#  define sqli
23320 74 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59  te3GetVTable(X,Y
23330 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a  )  ((VTable*)0).
23340 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71  #else.   void sq
23350 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73  lite3VtabClear(s
23360 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c  qlite3 *db, Tabl
23370 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  e*);.   void sql
23380 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65  ite3VtabDisconne
23390 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ct(sqlite3 *db, 
233a0 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e  Table *p);.   in
233b0 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  t sqlite3VtabSyn
233c0 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56  c(sqlite3 *db, V
233d0 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71  dbe*);.   int sq
233e0 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63  lite3VtabRollbac
233f0 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  k(sqlite3 *db);.
23400 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
23410 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33  abCommit(sqlite3
23420 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73   *db);.   void s
23430 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56  qlite3VtabLock(V
23440 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69  Table *);.   voi
23450 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  d sqlite3VtabUnl
23460 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20  ock(VTable *);. 
23470 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
23480 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c  abUnlockList(sql
23490 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73  ite3*);.   int s
234a0 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
234b0 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69  int(sqlite3 *, i
234c0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69  nt, int);.   voi
234d0 64 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70  d sqlite3VtabImp
234e0 6f 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c  ortErrmsg(Vdbe*,
234f0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b   sqlite3_vtab*);
23500 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69  .   VTable *sqli
23510 74 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c  te3GetVTable(sql
23520 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ite3*, Table*);.
23530 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
23540 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20  3VtabInSync(db) 
23550 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30  ((db)->nVTrans>0
23560 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e   && (db)->aVTran
23570 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 76 6f 69  s==0).#endif.voi
23580 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b  d sqlite3VtabMak
23590 65 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a  eWritable(Parse*
235a0 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  ,Table*);.void s
235b0 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50  qlite3VtabBeginP
235c0 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
235d0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
235e0 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  en*, int);.void 
235f0 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73  sqlite3VtabFinis
23600 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  hParse(Parse*, T
23610 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
23620 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28  ite3VtabArgInit(
23630 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
23640 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65  lite3VtabArgExte
23650 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  nd(Parse*, Token
23660 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
23670 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71  tabCallCreate(sq
23680 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
23690 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20  st char *, char 
236a0 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
236b0 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28  VtabCallConnect(
236c0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
236d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
236e0 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69  CallDestroy(sqli
236f0 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
23700 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
23710 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73  lite3VtabBegin(s
23720 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65  qlite3 *, VTable
23730 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71   *);.FuncDef *sq
23740 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61  lite3VtabOverloa
23750 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
23760 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e  3 *,FuncDef*, in
23770 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a  t nArg, Expr*);.
23780 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61  void sqlite3Inva
23790 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  lidFunction(sqli
237a0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
237b0 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
237c0 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  );.sqlite3_int64
237d0 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72   sqlite3StmtCurr
237e0 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f  entTime(sqlite3_
237f0 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73  context*);.int s
23800 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65  qlite3VdbeParame
23810 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20  terIndex(Vdbe*, 
23820 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
23830 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72  );.int sqlite3Tr
23840 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73  ansferBindings(s
23850 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73  qlite3_stmt *, s
23860 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a  qlite3_stmt *);.
23870 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
23880 65 72 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b  erReset(Parse*);
23890 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72  .int sqlite3Repr
238a0 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f  epare(Vdbe*);.vo
238b0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
238c0 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61  stCheckLength(Pa
238d0 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
238e0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43   const char*);.C
238f0 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42  ollSeq *sqlite3B
23900 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c  inaryCompareColl
23910 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70  Seq(Parse *, Exp
23920 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e  r *, Expr *);.in
23930 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d  t sqlite3TempInM
23940 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69  emory(const sqli
23950 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61  te3*);.const cha
23960 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  r *sqlite3Journa
23970 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a  lModename(int);.
23980 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
23990 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71  MIT_WAL.  int sq
239a0 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
239b0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
239c0 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  nt, int*, int*);
239d0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61  .  int sqlite3Wa
239e0 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69  lDefaultHook(voi
239f0 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
23a00 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65  t char*,int);.#e
23a10 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
23a20 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57  ITE_OMIT_CTE.  W
23a30 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68  ith *sqlite3With
23a40 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a  Add(Parse*,With*
23a50 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
23a60 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f  *,Select*);.  vo
23a70 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 44 65  id sqlite3WithDe
23a80 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69  lete(sqlite3*,Wi
23a90 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  th*);.  void sql
23aa0 69 74 65 33 57 69 74 68 50 75 73 68 28 50 61 72  ite3WithPush(Par
23ab0 73 65 2a 2c 20 57 69 74 68 2a 29 3b 0a 23 65 6c  se*, With*);.#el
23ac0 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  se.#define sqlit
23ad0 65 33 57 69 74 68 50 75 73 68 28 78 2c 79 29 0a  e3WithPush(x,y).
23ae0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57  #define sqlite3W
23af0 69 74 68 44 65 6c 65 74 65 28 78 2c 79 29 0a 23  ithDelete(x,y).#
23b00 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72  endif../* Declar
23b10 61 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74  ations for funct
23b20 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20  ions in fkey.c. 
23b30 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65  All of these are
23b40 20 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20   replaced by.** 
23b50 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20  no-op macros if 
23b60 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
23b70 20 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20   is defined. In 
23b80 74 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72  this case no for
23b90 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63  eign.** key func
23ba0 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61  tionality is ava
23bb0 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f  ilable. If OMIT_
23bc0 54 52 49 47 47 45 52 20 69 73 20 64 65 66 69 6e  TRIGGER is defin
23bd0 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46  ed but.** OMIT_F
23be0 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f  OREIGN_KEY is no
23bf0 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20  t, only some of 
23c00 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  the functions ar
23c10 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a  e no-oped. In.**
23c20 20 74 68 69 73 20 63 61 73 65 20 66 6f 72 65 69   this case forei
23c30 67 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72 73  gn keys are pars
23c40 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72  ed, but no other
23c50 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69   functionality i
23c60 73 20 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28  s .** provided (
23c70 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46  enforcement of F
23c80 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65  K constraints re
23c90 71 75 69 72 65 73 20 74 68 65 20 74 72 69 67 67  quires the trigg
23ca0 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e  ers sub-system).
23cb0 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
23cc0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52  (SQLITE_OMIT_FOR
23cd0 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65  EIGN_KEY) && !de
23ce0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
23cf0 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69  T_TRIGGER).  voi
23d00 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b  d sqlite3FkCheck
23d10 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
23d20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
23d30 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
23d40 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65  lite3FkDropTable
23d50 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
23d60 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76   *, Table*);.  v
23d70 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74  oid sqlite3FkAct
23d80 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62  ions(Parse*, Tab
23d90 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  le*, ExprList*, 
23da0 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  int, int*, int);
23db0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b  .  int sqlite3Fk
23dc0 52 65 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c  Required(Parse*,
23dd0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69   Table*, int*, i
23de0 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74  nt);.  u32 sqlit
23df0 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73  e3FkOldmask(Pars
23e00 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46  e*, Table*);.  F
23e10 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65  Key *sqlite3FkRe
23e20 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a  ferences(Table *
23e30 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
23e40 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69  ne sqlite3FkActi
23e50 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29  ons(a,b,c,d,e,f)
23e60 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
23e70 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c  e3FkCheck(a,b,c,
23e80 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65  d,e,f).  #define
23e90 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
23ea0 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65  ble(a,b,c).  #de
23eb0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c  fine sqlite3FkOl
23ec0 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20  dmask(a,b)      
23ed0 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73     0.  #define s
23ee0 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64  qlite3FkRequired
23ef0 28 61 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 23  (a,b,c,d)    0.#
23f00 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
23f10 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
23f20 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c  N_KEY.  void sql
23f30 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c  ite3FkDelete(sql
23f40 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  ite3 *, Table*);
23f50 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b  .  int sqlite3Fk
23f60 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72 73  LocateIndex(Pars
23f70 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c  e*,Table*,FKey*,
23f80 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a  Index**,int**);.
23f90 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
23fa0 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28  sqlite3FkDelete(
23fb0 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73  a,b).  #define s
23fc0 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e  qlite3FkLocateIn
23fd0 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23  dex(a,b,c,d,e).#
23fe0 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76  endif.../*.** Av
23ff0 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e  ailable fault in
24000 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64  jectors.  Should
24010 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67   be numbered beg
24020 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a  inning with 0..*
24030 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
24040 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d  _FAULTINJECTOR_M
24050 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66  ALLOC     0.#def
24060 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54  ine SQLITE_FAULT
24070 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20  INJECTOR_COUNT  
24080 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65      1../*.** The
24090 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68   interface to th
240a0 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e  e code in fault.
240b0 63 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74  c used for ident
240c0 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a  ifying "benign".
240d0 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72  ** malloc failur
240e0 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  es. This is only
240f0 20 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49   present if SQLI
24100 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
24110 54 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64  TEST.** is not d
24120 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64  efined..*/.#ifnd
24130 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
24140 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f  UILTIN_TEST.  vo
24150 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  id sqlite3BeginB
24160 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64  enignMalloc(void
24170 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
24180 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
24190 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20  (void);.#else.  
241a0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42  #define sqlite3B
241b0 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
241c0 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  ().  #define sql
241d0 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
241e0 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 23 64  loc().#endif..#d
241f0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52  efine IN_INDEX_R
24200 4f 57 49 44 20 20 20 20 20 20 20 20 20 20 20 31  OWID           1
24210 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
24220 58 5f 45 50 48 20 20 20 20 20 20 20 20 20 20 20  X_EPH           
24230 20 20 32 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49    2.#define IN_I
24240 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43 20 20  NDEX_INDEX_ASC  
24250 20 20 20 20 20 33 0a 23 64 65 66 69 6e 65 20 49       3.#define I
24260 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45  N_INDEX_INDEX_DE
24270 53 43 20 20 20 20 20 20 34 0a 69 6e 74 20 73 71  SC      4.int sq
24280 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
24290 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
242a0 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69 66 64 65 66  , int*);..#ifdef
242b0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41   SQLITE_ENABLE_A
242c0 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20 69 6e  TOMIC_WRITE.  in
242d0 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
242e0 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73  Open(sqlite3_vfs
242f0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
24300 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  , sqlite3_file *
24310 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 69  , int, int);.  i
24320 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
24330 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66  lSize(sqlite3_vf
24340 73 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  s *);.  int sqli
24350 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65  te3JournalCreate
24360 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
24370 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ;.  int sqlite3J
24380 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 73 71 6c  ournalExists(sql
24390 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 23  ite3_file *p);.#
243a0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
243b0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a  qlite3JournalSiz
243c0 65 28 70 56 66 73 29 20 28 28 70 56 66 73 29 2d  e(pVfs) ((pVfs)-
243d0 3e 73 7a 4f 73 46 69 6c 65 29 0a 20 20 23 64 65  >szOsFile).  #de
243e0 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72  fine sqlite3Jour
243f0 6e 61 6c 45 78 69 73 74 73 28 70 29 20 31 0a 23  nalExists(p) 1.#
24400 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69  endif..void sqli
24410 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65  te3MemJournalOpe
24420 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  n(sqlite3_file *
24430 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  );.int sqlite3Me
24440 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 76 6f 69  mJournalSize(voi
24450 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  d);.int sqlite3I
24460 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c 69  sMemJournal(sqli
24470 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 23 69  te3_file *);..#i
24480 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  f SQLITE_MAX_EXP
24490 52 5f 44 45 50 54 48 3e 30 0a 20 20 76 6f 69 64  R_DEPTH>0.  void
244a0 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48   sqlite3ExprSetH
244b0 65 69 67 68 74 28 50 61 72 73 65 20 2a 70 50 61  eight(Parse *pPa
244c0 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 20  rse, Expr *p);. 
244d0 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65   int sqlite3Sele
244e0 63 74 45 78 70 72 48 65 69 67 68 74 28 53 65 6c  ctExprHeight(Sel
244f0 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  ect *);.  int sq
24500 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
24510 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  ight(Parse*, int
24520 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
24530 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 53 65  ne sqlite3ExprSe
24540 74 48 65 69 67 68 74 28 78 2c 79 29 0a 20 20 23  tHeight(x,y).  #
24550 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65  define sqlite3Se
24560 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 78  lectExprHeight(x
24570 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ) 0.  #define sq
24580 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
24590 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66  ight(x,y).#endif
245a0 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65 74  ..u32 sqlite3Get
245b0 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29  4byte(const u8*)
245c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75  ;.void sqlite3Pu
245d0 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29  t4byte(u8*, u32)
245e0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
245f0 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e  _ENABLE_UNLOCK_N
24600 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c  OTIFY.  void sql
24610 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c  ite3ConnectionBl
24620 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c  ocked(sqlite3 *,
24630 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76   sqlite3 *);.  v
24640 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
24650 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71  ctionUnlocked(sq
24660 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f  lite3 *db);.  vo
24670 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
24680 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74  tionClosed(sqlit
24690 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20  e3 *db);.#else. 
246a0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
246b0 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65  ConnectionBlocke
246c0 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65  d(x,y).  #define
246d0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
246e0 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20  onUnlocked(x).  
246f0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
24700 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28  onnectionClosed(
24710 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  x).#endif..#ifde
24720 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
24730 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72   void sqlite3Par
24740 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20  serTrace(FILE*, 
24750 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a  char *);.#endif.
24760 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  ./*.** If the SQ
24770 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52  LITE_ENABLE IOTR
24780 41 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20  ACE exists then 
24790 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  the global varia
247a0 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f  ble.** sqlite3Io
247b0 54 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74  Trace is a point
247c0 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c  er to a printf-l
247d0 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64  ike routine used
247e0 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f   to.** print I/O
247f0 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65   tracing message
24800 73 2e 20 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  s. .*/.#ifdef SQ
24810 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52  LITE_ENABLE_IOTR
24820 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54  ACE.# define IOT
24830 52 41 43 45 28 41 29 20 20 69 66 28 20 73 71 6c  RACE(A)  if( sql
24840 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73  ite3IoTrace ){ s
24850 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b  qlite3IoTrace A;
24860 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65   }.  void sqlite
24870 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
24880 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 45  Vdbe*);.SQLITE_E
24890 58 54 45 52 4e 20 76 6f 69 64 20 28 2a 73 71 6c  XTERN void (*sql
248a0 69 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e  ite3IoTrace)(con
248b0 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23  st char*,...);.#
248c0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f  else.# define IO
248d0 54 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e  TRACE(A).# defin
248e0 65 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  e sqlite3VdbeIOT
248f0 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69  raceSql(X).#endi
24900 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72  f../*.** These r
24910 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69  outines are avai
24920 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65  lable for the me
24930 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d  m2.c debugging m
24940 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a  emory allocator.
24950 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61  ** only.  They a
24960 72 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66  re used to verif
24970 79 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74  y that different
24980 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f   "types" of memo
24990 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e  ry.** allocation
249a0 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74  s are properly t
249b0 72 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79  racked by the sy
249c0 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  stem..**.** sqli
249d0 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
249e0 70 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74  pe() sets the "t
249f0 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63  ype" of an alloc
24a00 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a  ation to one of.
24a10 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a  ** the MEMTYPE_*
24a20 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20   macros defined 
24a30 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65  below.  The type
24a40 20 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61   must be a bitma
24a50 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e  sk with.** a sin
24a60 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a  gle bit set..**.
24a70 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
24a80 75 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75  ugHasType() retu
24a90 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20  rns true if any 
24aa0 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
24ab0 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
24ac0 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
24ad0 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
24ae0 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
24af0 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
24b00 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  )..** sqlite3Mem
24b10 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69  debugHasType() i
24b20 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75  s intended for u
24b30 73 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74  se inside assert
24b40 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  () statements..*
24b50 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
24b60 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74  ebugNoType() ret
24b70 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e  urns true if non
24b80 65 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  e of the bits in
24b90 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
24ba0 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
24bb0 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
24bc0 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
24bd0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
24be0 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61  e()..**.** Perha
24bf0 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f  ps the most impo
24c00 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74  rtant point is t
24c10 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
24c20 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45  tween MEMTYPE_HE
24c30 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50  AP.** and MEMTYP
24c40 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66  E_LOOKASIDE.  If
24c50 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69   an allocation i
24c60 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  s MEMTYPE_LOOKAS
24c70 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a  IDE, that means.
24c80 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65  ** it might have
24c90 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20   been allocated 
24ca0 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78  by lookaside, ex
24cb0 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74  cept the allocat
24cc0 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c  ion was.** too l
24cd0 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64  arge or lookasid
24ce0 65 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75  e was already fu
24cf0 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72  ll.  It is impor
24d00 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a  tant to verify.*
24d10 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f  * that allocatio
24d20 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61  ns that might ha
24d30 76 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65  ve been satisfie
24d40 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61  d by lookaside a
24d50 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64  re not.** passed
24d60 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f   back to non-loo
24d70 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
24d80 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73  utines.  Asserts
24d90 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20   such as the.** 
24da0 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72  example above ar
24db0 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20  e placed on the 
24dc0 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
24dd0 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f  ee() routines to
24de0 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20   verify.** this 
24df0 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a  constraint. .**.
24e00 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69  ** All of this i
24e10 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72  s no-op for a pr
24e20 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20  oduction build. 
24e30 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69   It only comes i
24e40 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e  nto.** play when
24e50 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44   the SQLITE_MEMD
24e60 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  EBUG compile-tim
24e70 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64  e option is used
24e80 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
24e90 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f  TE_MEMDEBUG.  vo
24ea0 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  id sqlite3Memdeb
24eb0 75 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c  ugSetType(void*,
24ec0 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  u8);.  int sqlit
24ed0 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
24ee0 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69  e(void*,u8);.  i
24ef0 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  nt sqlite3Memdeb
24f00 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75  ugNoType(void*,u
24f10 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  8);.#else.# defi
24f20 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
24f30 75 67 53 65 74 54 79 70 65 28 58 2c 59 29 20 20  ugSetType(X,Y)  
24f40 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65  /* no-op */.# de
24f50 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
24f60 65 62 75 67 48 61 73 54 79 70 65 28 58 2c 59 29  ebugHasType(X,Y)
24f70 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c    1.# define sql
24f80 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
24f90 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64  pe(X,Y)   1.#end
24fa0 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  if.#define MEMTY
24fb0 50 45 5f 48 45 41 50 20 20 20 20 20 20 20 30 78  PE_HEAP       0x
24fc0 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68  01  /* General h
24fd0 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  eap allocations 
24fe0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
24ff0 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78  PE_LOOKASIDE  0x
25000 30 32 20 20 2f 2a 20 4d 69 67 68 74 20 68 61 76  02  /* Might hav
25010 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65  e been lookaside
25020 20 6d 65 6d 6f 72 79 20 2a 2f 0a 23 64 65 66 69   memory */.#defi
25030 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52 41 54  ne MEMTYPE_SCRAT
25040 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a 20 53  CH    0x04  /* S
25050 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f  cratch allocatio
25060 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
25070 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20 20 20  MTYPE_PCACHE    
25080 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65 20 63   0x08  /* Page c
25090 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ache allocations
250a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
250b0 59 50 45 5f 44 42 20 20 20 20 20 20 20 20 20 30  YPE_DB         0
250c0 78 31 30 20 20 2f 2a 20 55 73 65 73 20 73 71 6c  x10  /* Uses sql
250d0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20 6e 6f  ite3DbMalloc, no
250e0 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 20  t sqlite_malloc 
250f0 2a 2f 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53  */..#endif /* _S
25100 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a     QLITEINT_H_ */.