/ Hex Artifact Content
Login

Artifact 219f6e9323f7fdddaec9f442d9610cce356c3ad7:


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 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75 73  .** The previous
0540: 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20 77   paragraph was w
0550: 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e 20  ritten in 2005. 
0560: 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70 68   (This paragraph
0570: 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 6f   is written.** o
0580: 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20 54  n 2008-11-28.) T
0590: 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20 4c  hese days, all L
05a0: 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75 70  inux kernels sup
05b0: 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65 73  port large files
05c0: 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f 75  , so.** you shou
05d0: 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61 76  ld probably leav
05e0: 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20 20  e LFS enabled.  
05f0: 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64 65  But some embedde
0600: 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67 68  d platforms migh
0610: 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69 6e  t.** lack LFS in
0620: 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
0630: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0640: 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20 73  FS macro might s
0650: 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e 0a  till be useful..
0660: 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73  **.** Similar is
0670: 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53   true for Mac OS
0680: 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79   X.  LFS is only
0690: 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61   supported on Ma
06a0: 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74  c OS X 9 and lat
06b0: 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  er..*/.#ifndef S
06c0: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46  QLITE_DISABLE_LF
06d0: 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  S.# define _LARG
06e0: 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23  E_FILE       1.#
06f0: 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46   ifndef _FILE_OF
0700: 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65  FSET_BITS.#   de
0710: 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45  fine _FILE_OFFSE
0720: 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69  T_BITS 64.# endi
0730: 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  f.# define _LARG
0740: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23  EFILE_SOURCE 1.#
0750: 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65 65 64 65 64  endif../* Needed
0760: 20 66 6f 72 20 76 61 72 69 6f 75 73 20 64 65 66   for various def
0770: 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20 2a 2f 0a 23  initions... */.#
0780: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55  if defined(__GNU
0790: 43 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  C__) && !defined
07a0: 28 5f 47 4e 55 5f 53 4f 55 52 43 45 29 0a 23 20  (_GNU_SOURCE).# 
07b0: 64 65 66 69 6e 65 20 5f 47 4e 55 5f 53 4f 55 52  define _GNU_SOUR
07c0: 43 45 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  CE.#endif..#if d
07d0: 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44  efined(__OpenBSD
07e0: 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  __) && !defined(
07f0: 5f 42 53 44 5f 53 4f 55 52 43 45 29 0a 23 20 64  _BSD_SOURCE).# d
0800: 65 66 69 6e 65 20 5f 42 53 44 5f 53 4f 55 52 43  efine _BSD_SOURC
0810: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
0820: 46 6f 72 20 4d 69 6e 47 57 2c 20 63 68 65 63 6b  For MinGW, check
0830: 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 63 61   to see if we ca
0840: 6e 20 69 6e 63 6c 75 64 65 20 74 68 65 20 68 65  n include the he
0850: 61 64 65 72 20 66 69 6c 65 20 63 6f 6e 74 61 69  ader file contai
0860: 6e 69 6e 67 20 69 74 73 0a 2a 2a 20 76 65 72 73  ning its.** vers
0870: 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c  ion information,
0880: 20 61 6d 6f 6e 67 20 6f 74 68 65 72 20 74 68 69   among other thi
0890: 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20  ngs.  Normally, 
08a0: 74 68 69 73 20 69 6e 74 65 72 6e 61 6c 20 4d 69  this internal Mi
08b0: 6e 47 57 0a 2a 2a 20 68 65 61 64 65 72 20 66 69  nGW.** header fi
08c0: 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e 6c 79 5d 20  le would [only] 
08d0: 62 65 20 69 6e 63 6c 75 64 65 64 20 61 75 74 6f  be included auto
08e0: 6d 61 74 69 63 61 6c 6c 79 20 62 79 20 6f 74 68  matically by oth
08f0: 65 72 20 4d 69 6e 47 57 20 68 65 61 64 65 72 0a  er MinGW header.
0900: 2a 2a 20 66 69 6c 65 73 3b 20 68 6f 77 65 76 65  ** files; howeve
0910: 72 2c 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 64  r, the contained
0920: 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61   version informa
0930: 74 69 6f 6e 20 69 73 20 6e 6f 77 20 72 65 71 75  tion is now requ
0940: 69 72 65 64 20 62 79 20 74 68 69 73 0a 2a 2a 20  ired by this.** 
0950: 68 65 61 64 65 72 20 66 69 6c 65 20 74 6f 20 77  header file to w
0960: 6f 72 6b 20 61 72 6f 75 6e 64 20 62 69 6e 61 72  ork around binar
0970: 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  y compatibility 
0980: 69 73 73 75 65 73 20 28 73 65 65 20 62 65 6c 6f  issues (see belo
0990: 77 29 20 61 6e 64 0a 2a 2a 20 74 68 69 73 20 69  w) and.** this i
09a0: 73 20 74 68 65 20 6f 6e 6c 79 20 6b 6e 6f 77 6e  s the only known
09b0: 20 77 61 79 20 74 6f 20 72 65 6c 69 61 62 6c 79   way to reliably
09c0: 20 6f 62 74 61 69 6e 20 69 74 2e 20 20 54 68 69   obtain it.  Thi
09d0: 73 20 65 6e 74 69 72 65 20 23 69 66 20 62 6c 6f  s entire #if blo
09e0: 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20 62 65 20 63  ck.** would be c
09f0: 6f 6d 70 6c 65 74 65 6c 79 20 75 6e 6e 65 63 65  ompletely unnece
0a00: 73 73 61 72 79 20 69 66 20 74 68 65 72 65 20 77  ssary if there w
0a10: 61 73 20 61 6e 79 20 6f 74 68 65 72 20 77 61 79  as any other way
0a20: 20 6f 66 20 64 65 74 65 63 74 69 6e 67 0a 2a 2a   of detecting.**
0a30: 20 4d 69 6e 47 57 20 76 69 61 20 74 68 65 69 72   MinGW via their
0a40: 20 70 72 65 70 72 6f 63 65 73 73 6f 72 20 28 65   preprocessor (e
0a50: 2e 67 2e 20 69 66 20 74 68 65 79 20 63 75 73 74  .g. if they cust
0a60: 6f 6d 69 7a 65 64 20 74 68 65 69 72 20 47 43 43  omized their GCC
0a70: 20 74 6f 20 64 65 66 69 6e 65 0a 2a 2a 20 73 6f   to define.** so
0a80: 6d 65 20 4d 69 6e 47 57 2d 73 70 65 63 69 66 69  me MinGW-specifi
0a90: 63 20 6d 61 63 72 6f 73 29 2e 20 20 57 68 65 6e  c macros).  When
0aa0: 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 4d   compiling for M
0ab0: 69 6e 47 57 2c 20 65 69 74 68 65 72 20 74 68 65  inGW, either the
0ac0: 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49 4e 47 57 5f  .** _HAVE_MINGW_
0ad0: 48 20 6f 72 20 5f 48 41 56 45 5f 5f 4d 49 4e 47  H or _HAVE__MING
0ae0: 57 5f 48 20 28 6e 6f 74 65 20 74 68 65 20 65 78  W_H (note the ex
0af0: 74 72 61 20 75 6e 64 65 72 73 63 6f 72 65 29 20  tra underscore) 
0b00: 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 0a 2a 2a  macro must be.**
0b10: 20 64 65 66 69 6e 65 64 3b 20 6f 74 68 65 72 77   defined; otherw
0b20: 69 73 65 2c 20 64 65 74 65 63 74 69 6f 6e 20 6f  ise, detection o
0b30: 66 20 63 6f 6e 64 69 74 69 6f 6e 73 20 73 70 65  f conditions spe
0b40: 63 69 66 69 63 20 74 6f 20 4d 69 6e 47 57 20 77  cific to MinGW w
0b50: 69 6c 6c 20 62 65 0a 2a 2a 20 64 69 73 61 62 6c  ill be.** disabl
0b60: 65 64 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ed..*/.#if defin
0b70: 65 64 28 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48  ed(_HAVE_MINGW_H
0b80: 29 0a 23 20 69 6e 63 6c 75 64 65 20 22 6d 69 6e  ).# include "min
0b90: 67 77 2e 68 22 0a 23 65 6c 69 66 20 64 65 66 69  gw.h".#elif defi
0ba0: 6e 65 64 28 5f 48 41 56 45 5f 5f 4d 49 4e 47 57  ned(_HAVE__MINGW
0bb0: 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20 22 5f  _H).# include "_
0bc0: 6d 69 6e 67 77 2e 68 22 0a 23 65 6e 64 69 66 0a  mingw.h".#endif.
0bd0: 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57  ./*.** For MinGW
0be0: 20 76 65 72 73 69 6f 6e 20 34 2e 78 20 28 61 6e   version 4.x (an
0bf0: 64 20 68 69 67 68 65 72 29 2c 20 63 68 65 63 6b  d higher), check
0c00: 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 5f   to see if the _
0c10: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
0c20: 0a 2a 2a 20 64 65 66 69 6e 65 20 69 73 20 72 65  .** define is re
0c30: 71 75 69 72 65 64 20 74 6f 20 6d 61 69 6e 74 61  quired to mainta
0c40: 69 6e 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74  in binary compat
0c50: 69 62 69 6c 69 74 79 20 77 69 74 68 20 74 68 65  ibility with the
0c60: 20 4d 53 56 43 20 72 75 6e 74 69 6d 65 0a 2a 2a   MSVC runtime.**
0c70: 20 6c 69 62 72 61 72 79 20 69 6e 20 75 73 65 20   library in use 
0c80: 28 65 2e 67 2e 20 66 6f 72 20 57 69 6e 64 6f 77  (e.g. for Window
0c90: 73 20 58 50 29 2e 0a 2a 2f 0a 23 69 66 20 21 64  s XP)..*/.#if !d
0ca0: 65 66 69 6e 65 64 28 5f 55 53 45 5f 33 32 42 49  efined(_USE_32BI
0cb0: 54 5f 54 49 4d 45 5f 54 29 20 26 26 20 21 64 65  T_TIME_T) && !de
0cc0: 66 69 6e 65 64 28 5f 55 53 45 5f 36 34 42 49 54  fined(_USE_64BIT
0cd0: 5f 54 49 4d 45 5f 54 29 20 26 26 20 5c 0a 20 20  _TIME_T) && \.  
0ce0: 20 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32    defined(_WIN32
0cf0: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57  ) && !defined(_W
0d00: 49 4e 36 34 29 20 26 26 20 5c 0a 20 20 20 20 64  IN64) && \.    d
0d10: 65 66 69 6e 65 64 28 5f 5f 4d 49 4e 47 57 5f 4d  efined(__MINGW_M
0d20: 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 29 20 26 26  AJOR_VERSION) &&
0d30: 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56   __MINGW_MAJOR_V
0d40: 45 52 53 49 4f 4e 20 3e 3d 20 34 20 26 26 20 5c  ERSION >= 4 && \
0d50: 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d  .    defined(__M
0d60: 53 56 43 52 54 5f 5f 29 0a 23 20 64 65 66 69 6e  SVCRT__).# defin
0d70: 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49 4d  e _USE_32BIT_TIM
0d80: 45 5f 54 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54  E_T.#endif../* T
0d90: 68 65 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65  he public SQLite
0da0: 20 69 6e 74 65 72 66 61 63 65 2e 20 20 54 68 65   interface.  The
0db0: 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49   _FILE_OFFSET_BI
0dc0: 54 53 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70  TS macro must ap
0dd0: 70 65 61 72 0a 2a 2a 20 66 69 72 73 74 20 69 6e  pear.** first in
0de0: 20 51 4e 58 2e 20 20 41 6c 73 6f 2c 20 74 68 65   QNX.  Also, the
0df0: 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45   _USE_32BIT_TIME
0e00: 5f 54 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70  _T macro must ap
0e10: 70 65 61 72 20 66 69 72 73 74 20 66 6f 72 0a 2a  pear first for.*
0e20: 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a 23 69 6e 63  * MinGW..*/.#inc
0e30: 6c 75 64 65 20 22 73 71 6c 69 74 65 33 2e 68 22  lude "sqlite3.h"
0e40: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0e50: 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  the configuratio
0e60: 6e 20 68 65 61 64 65 72 20 6f 75 74 70 75 74 20  n header output 
0e70: 62 79 20 27 63 6f 6e 66 69 67 75 72 65 27 20 69  by 'configure' i
0e80: 66 20 77 65 27 72 65 20 75 73 69 6e 67 20 74 68  f we're using th
0e90: 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e 66 2d 62 61  e.** autoconf-ba
0ea0: 73 65 64 20 62 75 69 6c 64 0a 2a 2f 0a 23 69 66  sed build.*/.#if
0eb0: 64 65 66 20 5f 48 41 56 45 5f 53 51 4c 49 54 45  def _HAVE_SQLITE
0ec0: 5f 43 4f 4e 46 49 47 5f 48 0a 23 69 6e 63 6c 75  _CONFIG_H.#inclu
0ed0: 64 65 20 22 63 6f 6e 66 69 67 2e 68 22 0a 23 65  de "config.h".#e
0ee0: 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22  ndif..#include "
0ef0: 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a  sqliteLimit.h"..
0f00: 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61  /* Disable nuisa
0f10: 6e 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20  nce warnings on 
0f20: 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72  Borland compiler
0f30: 73 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  s */.#if defined
0f40: 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23  (__BORLANDC__).#
0f50: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68  pragma warn -rch
0f60: 20 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20   /* unreachable 
0f70: 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20  code */.#pragma 
0f80: 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e  warn -ccc /* Con
0f90: 64 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73  dition is always
0fa0: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a   true or false *
0fb0: 2f 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  /.#pragma warn -
0fc0: 61 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20  aus /* Assigned 
0fd0: 76 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75  value is never u
0fe0: 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  sed */.#pragma w
0ff0: 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70  arn -csu /* Comp
1000: 61 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64  aring signed and
1010: 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72   unsigned */.#pr
1020: 61 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f  agma warn -spa /
1030: 2a 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69  * Suspicious poi
1040: 6e 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20  nter arithmetic 
1050: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
1060: 20 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72   Include standar
1070: 64 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61  d header files a
1080: 73 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23  s necessary.*/.#
1090: 69 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e  ifdef HAVE_STDIN
10a0: 54 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  T_H.#include <st
10b0: 64 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23  dint.h>.#endif.#
10c0: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59  ifdef HAVE_INTTY
10d0: 50 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c  PES_H.#include <
10e0: 69 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64  inttypes.h>.#end
10f0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
1100: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61  llowing macros a
1110: 72 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20  re used to cast 
1120: 70 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65  pointers to inte
1130: 67 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65  gers and.** inte
1140: 67 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73  gers to pointers
1150: 2e 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64  .  The way you d
1160: 6f 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72  o this varies fr
1170: 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a  om one compiler.
1180: 2a 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20  ** to the next, 
1190: 73 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c  so we have devel
11a0: 6f 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69  oped the followi
11b0: 6e 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74  ng set of #if st
11c0: 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67  atements.** to g
11d0: 65 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69  enerate appropri
11e0: 61 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61  ate macros for a
11f0: 20 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63   wide range of c
1200: 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20  ompilers..**.** 
1210: 54 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53  The correct "ANS
1220: 49 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69  I" way to do thi
1230: 73 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20  s is to use the 
1240: 69 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 20 0a  intptr_t type. .
1250: 2a 2a 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79  ** Unfortunately
1260: 2c 20 74 68 61 74 20 74 79 70 65 64 65 66 20 69  , that typedef i
1270: 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20  s not available 
1280: 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73  on all compilers
1290: 2c 20 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73  , or.** if it is
12a0: 20 61 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72   available, it r
12b0: 65 71 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c  equires an #incl
12c0: 75 64 65 20 6f 66 20 73 70 65 63 69 66 69 63 20  ude of specific 
12d0: 68 65 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20  headers.** that 
12e0: 76 61 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61  vary from one ma
12f0: 63 68 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78  chine to the nex
1300: 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  t..**.** Ticket 
1310: 23 33 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d  #3860:  The llvm
1320: 2d 67 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65  -gcc-4.2 compile
1330: 72 20 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f  r from Apple cho
1340: 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28  kes on.** the ((
1350: 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30  void*)&((char*)0
1360: 29 5b 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e  )[X]) construct.
1370: 20 20 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65    But MSVC choke
1380: 73 20 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29  s on ((void*)(X)
1390: 29 2e 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65  )..** So we have
13a0: 20 74 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d   to define the m
13b0: 61 63 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65  acros in differe
13c0: 6e 74 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e  nt ways dependin
13d0: 67 20 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  g on the.** comp
13e0: 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  iler..*/.#if def
13f0: 69 6e 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54  ined(__PTRDIFF_T
1400: 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20  YPE__)  /* This 
1410: 63 61 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b  case should work
1420: 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65   for GCC */.# de
1430: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f  fine SQLITE_INT_
1440: 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69  TO_PTR(X)  ((voi
1450: 64 2a 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59  d*)(__PTRDIFF_TY
1460: 50 45 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69  PE__)(X)).# defi
1470: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
1480: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
1490: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
14a0: 29 28 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66  )(X)).#elif !def
14b0: 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20  ined(__GNUC__)  
14c0: 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f       /* Works fo
14d0: 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65  r compilers othe
14e0: 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23  r than LLVM */.#
14f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
1500: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
1510: 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30  void*)&((char*)0
1520: 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53  )[X]).# define S
1530: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
1540: 28 58 29 20 20 28 28 69 6e 74 29 28 28 28 63 68  (X)  ((int)(((ch
1550: 61 72 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29  ar*)X)-(char*)0)
1560: 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28  ).#elif defined(
1570: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20  HAVE_STDINT_H)  
1580: 20 2f 2a 20 55 73 65 20 74 68 69 73 20 63 61 73   /* Use this cas
1590: 65 20 69 66 20 77 65 20 68 61 76 65 20 41 4e 53  e if we have ANS
15a0: 49 20 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64  I headers */.# d
15b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
15c0: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
15d0: 69 64 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58  id*)(intptr_t)(X
15e0: 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  )).# define SQLI
15f0: 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29  TE_PTR_TO_INT(X)
1600: 20 20 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f    ((int)(intptr_
1610: 74 29 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20  t)(X)).#else    
1620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1630: 20 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74        /* Generat
1640: 65 73 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62  es a warning - b
1650: 75 74 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72  ut it always wor
1660: 6b 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  ks */.# define S
1670: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
1680: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29  (X)  ((void*)(X)
1690: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
16a0: 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20  E_PTR_TO_INT(X) 
16b0: 20 28 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64   ((int)(X)).#end
16c0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72  if../*.** A macr
16d0: 6f 20 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65  o to hint to the
16e0: 20 63 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61   compiler that a
16f0: 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64   function should
1700: 20 6e 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e   not be.** inlin
1710: 65 64 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ed..*/.#if defin
1720: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20  ed(__GNUC__).#  
1730: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
1740: 49 4e 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62  INLINE  __attrib
1750: 75 74 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29  ute__((noinline)
1760: 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28  ).#elif defined(
1770: 5f 4d 53 43 5f 56 45 52 29 0a 23 20 20 64 65 66  _MSC_VER).#  def
1780: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
1790: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
17a0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
17b0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
17c0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
17d0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
17e0: 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 6d 61  TE_THREADSAFE ma
17f0: 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65 66 69  cro must be defi
1800: 6e 65 64 20 61 73 20 30 2c 20 31 2c 20 6f 72 20  ned as 0, 1, or 
1810: 32 2e 0a 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75  2..** 0 means mu
1820: 74 65 78 65 73 20 61 72 65 20 70 65 72 6d 61 6e  texes are perman
1830: 65 6e 74 6c 79 20 64 69 73 61 62 6c 65 20 61 6e  ently disable an
1840: 64 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73  d the library is
1850: 20 6e 65 76 65 72 0a 2a 2a 20 74 68 72 65 61 64   never.** thread
1860: 73 61 66 65 2e 20 20 31 20 6d 65 61 6e 73 20 74  safe.  1 means t
1870: 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 73 65  he library is se
1880: 72 69 61 6c 69 7a 65 64 20 77 68 69 63 68 20 69  rialized which i
1890: 73 20 74 68 65 20 68 69 67 68 65 73 74 0a 2a 2a  s the highest.**
18a0: 20 6c 65 76 65 6c 20 6f 66 20 74 68 72 65 61 64   level of thread
18b0: 73 61 66 65 74 79 2e 20 20 32 20 6d 65 61 6e 73  safety.  2 means
18c0: 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20   the library is 
18d0: 6d 75 6c 74 69 74 68 72 65 61 64 65 64 20 2d 20  multithreaded - 
18e0: 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65  multiple.** thre
18f0: 61 64 73 20 63 61 6e 20 75 73 65 20 53 51 4c 69  ads can use SQLi
1900: 74 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f  te as long as no
1910: 20 74 77 6f 20 74 68 72 65 61 64 73 20 74 72 79   two threads try
1920: 20 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65   to use the same
1930: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
1940: 6e 65 63 74 69 6f 6e 20 61 74 20 74 68 65 20 73  nection at the s
1950: 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20  ame time..**.** 
1960: 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f  Older versions o
1970: 66 20 53 51 4c 69 74 65 20 75 73 65 64 20 61 6e  f SQLite used an
1980: 20 6f 70 74 69 6f 6e 61 6c 20 54 48 52 45 41 44   optional THREAD
1990: 53 41 46 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57  SAFE macro..** W
19a0: 65 20 73 75 70 70 6f 72 74 20 74 68 61 74 20 66  e support that f
19b0: 6f 72 20 6c 65 67 61 63 79 2e 0a 2a 2f 0a 23 69  or legacy..*/.#i
19c0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
19d0: 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23 20  E_THREADSAFE).# 
19e0: 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45 41  if defined(THREA
19f0: 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69 6e  DSAFE).#   defin
1a00: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
1a10: 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a 23  AFE THREADSAFE.#
1a20: 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65   else.#   define
1a30: 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41   SQLITE_THREADSA
1a40: 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d 30  FE 1 /* IMP: R-0
1a50: 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23 20  7272-22309 */.# 
1a60: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
1a70: 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f 76  .** Powersafe ov
1a80: 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62 79  erwrite is on by
1a90: 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20 63   default.  But c
1aa0: 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66 66  an be turned off
1ab0: 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d 44   using.** the -D
1ac0: 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45  SQLITE_POWERSAFE
1ad0: 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f 6d  _OVERWRITE=0 com
1ae0: 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e  mand-line option
1af0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
1b00: 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56  ITE_POWERSAFE_OV
1b10: 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e 65  ERWRITE.# define
1b20: 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46   SQLITE_POWERSAF
1b30: 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23 65  E_OVERWRITE 1.#e
1b40: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
1b50: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
1b60: 45 4d 53 54 41 54 55 53 20 6d 61 63 72 6f 20 6d  EMSTATUS macro m
1b70: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
1b80: 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e  s either 0 or 1.
1b90: 0a 2a 2a 20 49 74 20 64 65 74 65 72 6d 69 6e 65  .** It determine
1ba0: 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  s whether or not
1bb0: 20 74 68 65 20 66 65 61 74 75 72 65 73 20 72 65   the features re
1bc0: 6c 61 74 65 64 20 74 6f 20 0a 2a 2a 20 53 51 4c  lated to .** SQL
1bd0: 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54  ITE_CONFIG_MEMST
1be0: 41 54 55 53 20 61 72 65 20 61 76 61 69 6c 61 62  ATUS are availab
1bf0: 6c 65 20 62 79 20 64 65 66 61 75 6c 74 20 6f 72  le by default or
1c00: 20 6e 6f 74 2e 20 54 68 69 73 20 76 61 6c 75 65   not. This value
1c10: 20 63 61 6e 0a 2a 2a 20 62 65 20 6f 76 65 72 72   can.** be overr
1c20: 69 64 64 65 6e 20 61 74 20 72 75 6e 74 69 6d 65  idden at runtime
1c30: 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74   using the sqlit
1c40: 65 33 5f 63 6f 6e 66 69 67 28 29 20 41 50 49 2e  e3_config() API.
1c50: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
1c60: 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  (SQLITE_DEFAULT_
1c70: 4d 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66  MEMSTATUS).# def
1c80: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
1c90: 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23  LT_MEMSTATUS 1.#
1ca0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61  endif../*.** Exa
1cb0: 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  ctly one of the 
1cc0: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
1cd0: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
1ce0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
1cf0: 73 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65  specify which me
1d00: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1d10: 73 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65  subsystem to use
1d20: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49  ..**.**     SQLI
1d30: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
1d40: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65            // Use
1d50: 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d   normal system m
1d60: 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53  alloc().**     S
1d70: 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c  QLITE_WIN32_MALL
1d80: 4f 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  OC           // 
1d90: 55 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65  Use Win32 native
1da0: 20 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20   heap API.**    
1db0: 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c   SQLITE_ZERO_MAL
1dc0: 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f  LOC            /
1dd0: 2f 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c  / Use a stub all
1de0: 6f 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61  ocator that alwa
1df0: 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20  ys fails.**     
1e00: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20  SQLITE_MEMDEBUG 
1e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1e20: 20 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69   Debugging versi
1e30: 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c  on of system mal
1e40: 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57  loc().**.** On W
1e50: 69 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53  indows, if the S
1e60: 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c  QLITE_WIN32_MALL
1e70: 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72  OC_VALIDATE macr
1e80: 6f 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64  o is defined and
1e90: 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29   the.** assert()
1ea0: 20 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65   macro is enable
1eb0: 64 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74  d, each call int
1ec0: 6f 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69  o the Win32 nati
1ed0: 76 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65  ve heap subsyste
1ee0: 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20  m.** will cause 
1ef0: 48 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20  HeapValidate to 
1f00: 62 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68  be called.  If h
1f10: 65 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73  eap validation s
1f20: 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a  hould fail, an.*
1f30: 2a 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c  * assertion will
1f40: 20 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a   be triggered..*
1f50: 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20  *.** If none of 
1f60: 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65  the above are de
1f70: 66 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20  fined, then set 
1f80: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
1f90: 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64  LLOC as.** the d
1fa0: 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64  efault..*/.#if d
1fb0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59  efined(SQLITE_SY
1fc0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  STEM_MALLOC) \. 
1fd0: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
1fe0: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20  E_WIN32_MALLOC) 
1ff0: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
2000: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
2010: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2020: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29  SQLITE_MEMDEBUG)
2030: 3e 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20  >1.# error "Two 
2040: 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66  or more of the f
2050: 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65  ollowing compile
2060: 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74  -time configurat
2070: 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72  ion options\. ar
2080: 65 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74  e defined but at
2090: 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c   most one is all
20a0: 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53  owed:\. SQLITE_S
20b0: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51  YSTEM_MALLOC, SQ
20c0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
20d0: 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  C, SQLITE_MEMDEB
20e0: 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52  UG,\. SQLITE_ZER
20f0: 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66  O_MALLOC".#endif
2100: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2110: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
2120: 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64  C) \.  + defined
2130: 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41  (SQLITE_WIN32_MA
2140: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
2150: 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f  ned(SQLITE_ZERO_
2160: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2170: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d  fined(SQLITE_MEM
2180: 44 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69  DEBUG)==0.# defi
2190: 6e 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d  ne SQLITE_SYSTEM
21a0: 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66  _MALLOC 1.#endif
21b0: 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54  ../*.** If SQLIT
21c0: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
21d0: 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c  MIT is not zero,
21e0: 20 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65   then try to kee
21f0: 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f  p the.** sizes o
2200: 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  f memory allocat
2210: 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20  ions below this 
2220: 76 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73  value where poss
2230: 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ible..*/.#if !de
2240: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c  fined(SQLITE_MAL
2250: 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a  LOC_SOFT_LIMIT).
2260: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
2270: 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49  MALLOC_SOFT_LIMI
2280: 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f  T 1024.#endif../
2290: 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20  *.** We need to 
22a0: 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f  define _XOPEN_SO
22b0: 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20  URCE as follows 
22c0: 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62  in order to enab
22d0: 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20  le.** recursive 
22e0: 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20  mutexes on most 
22f0: 55 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64  Unix systems and
2300: 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65   fchmod() on Ope
2310: 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f  nBSD..** But _XO
2320: 50 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e  PEN_SOURCE defin
2330: 65 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d  e causes problem
2340: 73 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20  s for Mac OS X, 
2350: 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a  so omit.** it..*
2360: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  /.#if !defined(_
2370: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26  XOPEN_SOURCE) &&
2380: 20 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57   !defined(__DARW
2390: 49 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65  IN__) && !define
23a0: 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20  d(__APPLE__).#  
23b0: 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f  define _XOPEN_SO
23c0: 55 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a  URCE 600.#endif.
23d0: 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e  ./*.** NDEBUG an
23e0: 64 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61  d SQLITE_DEBUG a
23f0: 72 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49  re opposites.  I
2400: 74 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20  t should always 
2410: 62 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20  be true that.** 
2420: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d  defined(NDEBUG)=
2430: 3d 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  =!defined(SQLITE
2440: 5f 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69  _DEBUG).  If thi
2450: 73 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74  s is not current
2460: 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65  ly true,.** make
2470: 20 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69   it true by defi
2480: 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69  ning or undefini
2490: 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a  ng NDEBUG..**.**
24a0: 20 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20   Setting NDEBUG 
24b0: 6d 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73  makes the code s
24c0: 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65  maller and faste
24d0: 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74  r by disabling t
24e0: 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73  he.** assert() s
24f0: 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65  tatements in the
2500: 20 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61   code.  So we wa
2510: 6e 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61  nt the default a
2520: 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66  ction.** to be f
2530: 6f 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20  or NDEBUG to be 
2540: 73 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74  set and NDEBUG t
2550: 6f 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f  o be undefined o
2560: 6e 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45  nly if SQLITE_DE
2570: 42 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20  BUG.** is set.  
2580: 54 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f  Thus NDEBUG beco
2590: 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61  mes an opt-in ra
25a0: 74 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74  ther than an opt
25b0: 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e  -out.** feature.
25c0: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
25d0: 28 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66  (NDEBUG) && !def
25e0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
25f0: 47 29 20 0a 23 20 64 65 66 69 6e 65 20 4e 44 45  G) .# define NDE
2600: 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66  BUG 1.#endif.#if
2610: 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29   defined(NDEBUG)
2620: 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
2630: 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65  TE_DEBUG).# unde
2640: 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a  f NDEBUG.#endif.
2650: 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51  ./*.** Enable SQ
2660: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
2670: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20  AIN_COMMENTS if 
2680: 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20  SQLITE_DEBUG is 
2690: 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69  turned on..*/.#i
26a0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
26b0: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
26c0: 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65  _COMMENTS) && de
26d0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
26e0: 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  UG).# define SQL
26f0: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
2700: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65  IN_COMMENTS 1.#e
2710: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
2720: 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f  testcase() macro
2730: 20 69 73 20 75 73 65 64 20 74 6f 20 61 69 64 20   is used to aid 
2740: 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65 73 74  in coverage test
2750: 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a 2a 20 64  ing.  When .** d
2760: 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65  oing coverage te
2770: 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69  sting, the condi
2780: 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65 20  tion inside the 
2790: 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74  argument to.** t
27a0: 65 73 74 63 61 73 65 28 29 20 6d 75 73 74 20 62  estcase() must b
27b0: 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74 68  e evaluated both
27c0: 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20   true and false 
27d0: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67  in order to.** g
27e0: 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20 63  et full branch c
27f0: 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20 74 65  overage.  The te
2800: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
2810: 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f  s inserted.** to
2820: 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64 65   help ensure ade
2830: 71 75 61 74 65 20 74 65 73 74 20 63 6f 76 65 72  quate test cover
2840: 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77 68  age in places wh
2850: 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f  ere simple.** co
2860: 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e  ndition/decision
2870: 20 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e 61   coverage is ina
2880: 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65 78  dequate.  For ex
2890: 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65 28  ample, testcase(
28a0: 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  ).** can be used
28b0: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62 6f   to make sure bo
28c0: 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61 72  undary values ar
28d0: 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a  e tested.  For.*
28e0: 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73 2c  * bitmask tests,
28f0: 20 74 65 73 74 63 61 73 65 28 29 20 63 61 6e 20   testcase() can 
2900: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
2910: 73 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a 2a  sure each bit.**
2920: 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74 20   is significant 
2930: 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61 73  and used at leas
2940: 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74  t once.  On swit
2950: 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  ch statements.**
2960: 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65 20   where multiple 
2970: 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65 20  cases go to the 
2980: 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f  same block of co
2990: 64 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  de, testcase().*
29a0: 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68 61  * can insure tha
29b0: 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65 20  t all cases are 
29c0: 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f  evaluated..**.*/
29d0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43  .#ifdef SQLITE_C
29e0: 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20 76  OVERAGE_TEST.  v
29f0: 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65 72  oid sqlite3Cover
2a00: 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66 69  age(int);.# defi
2a10: 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 20 20  ne testcase(X)  
2a20: 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65 33  if( X ){ sqlite3
2a30: 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f  Coverage(__LINE_
2a40: 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65  _); }.#else.# de
2a50: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
2a60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2a70: 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72  he TESTONLY macr
2a80: 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e 63  o is used to enc
2a90: 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64 65  lose variable de
2aa0: 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a  clarations or.**
2ab0: 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20 63   other bits of c
2ac0: 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e 65 65  ode that are nee
2ad0: 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 74  ded to support t
2ae0: 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20  he arguments.** 
2af0: 77 69 74 68 69 6e 20 74 65 73 74 63 61 73 65 28  within testcase(
2b00: 29 20 61 6e 64 20 61 73 73 65 72 74 28 29 20 6d  ) and assert() m
2b10: 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64  acros..*/.#if !d
2b20: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 7c  efined(NDEBUG) |
2b30: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
2b40: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a  _COVERAGE_TEST).
2b50: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
2b60: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
2b70: 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28  define TESTONLY(
2b80: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2b90: 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e 65   Sometimes we ne
2ba0: 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e  ed a small amoun
2bb0: 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20 61  t of code such a
2bc0: 73 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e 69  s a variable ini
2bd0: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74  tialization.** t
2be0: 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c 61  o setup for a la
2bf0: 74 65 72 20 61 73 73 65 72 74 28 29 20 73 74 61  ter assert() sta
2c00: 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e  tement.  We do n
2c10: 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f 64  ot want this cod
2c20: 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77  e to.** appear w
2c30: 68 65 6e 20 61 73 73 65 72 74 28 29 20 69 73 20  hen assert() is 
2c40: 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20 66  disabled.  The f
2c50: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69  ollowing macro i
2c60: 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75  s therefore.** u
2c70: 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  sed to contain t
2c80: 68 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e 20  hat setup code. 
2c90: 20 54 68 65 20 22 56 56 41 22 20 61 63 72 6f 6e   The "VVA" acron
2ca0: 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ym stands for.**
2cb0: 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20   "Verification, 
2cc0: 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20  Validation, and 
2cd0: 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e 20  Accreditation". 
2ce0: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2cf0: 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74   the.** code wit
2d00: 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77  hin VVA_ONLY() w
2d10: 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72  ill only run dur
2d20: 69 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f 6e  ing verification
2d30: 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23   processes..*/.#
2d40: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 20  ifndef NDEBUG.# 
2d50: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
2d60: 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65  X)  X.#else.# de
2d70: 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29  fine VVA_ONLY(X)
2d80: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2d90: 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  he ALWAYS and NE
2da0: 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72 6f  VER macros surro
2db0: 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72  und boolean expr
2dc0: 65 73 73 69 6f 6e 73 20 77 68 69 63 68 20 0a 2a  essions which .*
2dd0: 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74  * are intended t
2de0: 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65  o always be true
2df0: 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65   or false, respe
2e00: 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a  ctively.  Such.*
2e10: 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f  * expressions co
2e20: 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66  uld be omitted f
2e30: 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d  rom the code com
2e40: 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68  pletely.  But th
2e50: 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64  ey.** are includ
2e60: 65 64 20 69 6e 20 61 20 66 65 77 20 63 61 73 65  ed in a few case
2e70: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
2e80: 68 61 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69  hance the resili
2e90: 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74  ence.** of SQLit
2ea0: 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20  e to unexpected 
2eb0: 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61  behavior - to ma
2ec0: 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c  ke the code "sel
2ed0: 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72  f-healing".** or
2ee0: 20 22 64 75 63 74 69 6c 65 22 20 72 61 74 68 65   "ductile" rathe
2ef0: 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72  r than being "br
2f00: 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68  ittle" and crash
2f10: 69 6e 67 20 61 74 20 74 68 65 20 66 69 72 73 74  ing at the first
2f20: 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c  .** hint of unpl
2f30: 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a  anned behavior..
2f40: 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  **.** In other w
2f50: 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64  ords, ALWAYS and
2f60: 20 4e 45 56 45 52 20 61 72 65 20 61 64 64 65 64   NEVER are added
2f70: 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63   for defensive c
2f80: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ode..**.** When 
2f90: 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74  doing coverage t
2fa0: 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e  esting ALWAYS an
2fb0: 64 20 4e 45 56 45 52 20 61 72 65 20 68 61 72 64  d NEVER are hard
2fc0: 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20  -coded to.** be 
2fd0: 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73  true and false s
2fe0: 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72 65 61  o that the unrea
2ff0: 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68 65 79  chable code they
3000: 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a   specify will.**
3010: 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20   not be counted 
3020: 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65  as untested code
3030: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
3040: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
3050: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
3060: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
3070: 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  1).# define NEVE
3080: 52 28 58 29 20 20 20 20 20 20 20 28 30 29 0a 23  R(X)       (0).#
3090: 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  elif !defined(ND
30a0: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 41  EBUG).# define A
30b0: 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28 28  LWAYS(X)      ((
30c0: 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29 2c  X)?1:(assert(0),
30d0: 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  0)).# define NEV
30e0: 45 52 28 58 29 20 20 20 20 20 20 20 28 28 58 29  ER(X)       ((X)
30f0: 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30  ?(assert(0),1):0
3100: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
3110: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
3120: 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  (X).# define NEV
3130: 45 52 28 58 29 20 20 20 20 20 20 20 28 58 29 0a  ER(X)       (X).
3140: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
3150: 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a  turn true (non-z
3160: 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e 70 75  ero) if the inpu
3170: 74 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  t is an integer 
3180: 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67  that is too larg
3190: 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20 33  e.** to fit in 3
31a0: 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20 6d 61  2-bits.  This ma
31b0: 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69  cro is used insi
31c0: 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20 74 65  de of various te
31d0: 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72  stcase().** macr
31e0: 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  os to verify tha
31f0: 74 20 77 65 20 68 61 76 65 20 74 65 73 74 65 64  t we have tested
3200: 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61 72 67   SQLite for larg
3210: 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a  e-file support..
3220: 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f 42 49  */.#define IS_BI
3230: 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58 29 26  G_INT(X)  (((X)&
3240: 7e 28 69 36 34 29 30 78 66 66 66 66 66 66 66 66  ~(i64)0xffffffff
3250: 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )!=0)../*.** The
3260: 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28   macro unlikely(
3270: 29 20 69 73 20 61 20 68 69 6e 74 20 74 68 61 74  ) is a hint that
3280: 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f   surrounds a boo
3290: 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69  lean.** expressi
32a0: 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  on that is usual
32b0: 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f  ly false.  Macro
32c0: 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72 6f 75   likely() surrou
32d0: 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e  nds.** a boolean
32e0: 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
32f0: 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65   is usually true
3300: 2e 20 20 54 68 65 73 65 20 68 69 6e 74 73 20 63  .  These hints c
3310: 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f  ould,.** in theo
3320: 72 79 2c 20 62 65 20 75 73 65 64 20 62 79 20 74  ry, be used by t
3330: 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67  he compiler to g
3340: 65 6e 65 72 61 74 65 20 62 65 74 74 65 72 20 63  enerate better c
3350: 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72  ode, but.** curr
3360: 65 6e 74 6c 79 20 74 68 65 79 20 61 72 65 20 6a  ently they are j
3370: 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72  ust comments for
3380: 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a   human readers..
3390: 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c  */.#define likel
33a0: 79 28 58 29 20 20 20 20 28 58 29 0a 23 64 65 66  y(X)    (X).#def
33b0: 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20  ine unlikely(X) 
33c0: 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22   (X)..#include "
33d0: 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65  hash.h".#include
33e0: 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c   "parse.h".#incl
33f0: 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69  ude <stdio.h>.#i
3400: 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68  nclude <stdlib.h
3410: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69  >.#include <stri
3420: 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ng.h>.#include <
3430: 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75  assert.h>.#inclu
3440: 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f  de <stddef.h>../
3450: 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c 69 6e  *.** If compilin
3460: 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73 73 6f  g for a processo
3470: 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66 6c 6f  r that lacks flo
3480: 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75 70 70  ating point supp
3490: 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69 74 75  ort,.** substitu
34a0: 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72 20 66  te integer for f
34b0: 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f  loating-point.*/
34c0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
34d0: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
34e0: 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f 75 62  NT.# define doub
34f0: 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a  le sqlite_int64.
3500: 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74 20 73  # define float s
3510: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65  qlite_int64.# de
3520: 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f  fine LONGDOUBLE_
3530: 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e 74 36  TYPE sqlite_int6
3540: 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c 49 54  4.# ifndef SQLIT
3550: 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20 64 65  E_BIG_DBL.#   de
3560: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f  fine SQLITE_BIG_
3570: 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33 5f 69  DBL (((sqlite3_i
3580: 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23 20 65  nt64)1)<<50).# e
3590: 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51  ndif.# define SQ
35a0: 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49  LITE_OMIT_DATETI
35b0: 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64 65 66  ME_FUNCS 1.# def
35c0: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ine SQLITE_OMIT_
35d0: 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65 66 20  TRACE 1.# undef 
35e0: 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45 4e 44  SQLITE_MIXED_END
35f0: 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41 54 0a  IAN_64BIT_FLOAT.
3600: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 48  # undef SQLITE_H
3610: 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64 69 66  AVE_ISNAN.#endif
3620: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
3630: 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69 6e 65  BIG_DBL.# define
3640: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20   SQLITE_BIG_DBL 
3650: 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a 0a 2f  (1e99).#endif../
3660: 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50 44 42  *.** OMIT_TEMPDB
3670: 20 69 73 20 73 65 74 20 74 6f 20 31 20 69 66 20   is set to 1 if 
3680: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50  SQLITE_OMIT_TEMP
3690: 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c 20 6f  DB is defined, o
36a0: 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61 72 64  r 0.** afterward
36b0: 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20 6d 61  . Having this ma
36c0: 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f  cro allows us to
36d0: 20 63 61 75 73 65 20 74 68 65 20 43 20 63 6f 6d   cause the C com
36e0: 70 69 6c 65 72 20 0a 2a 2a 20 74 6f 20 6f 6d 69  piler .** to omi
36f0: 74 20 63 6f 64 65 20 75 73 65 64 20 62 79 20 54  t code used by T
3700: 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74 68 6f  EMP tables witho
3710: 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64 65 66  ut messy #ifndef
3720: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a   statements..*/.
3730: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
3740: 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66 69 6e  IT_TEMPDB.#defin
3750: 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 31 0a  e OMIT_TEMPDB 1.
3760: 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 4d  #else.#define OM
3770: 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65 6e 64  IT_TEMPDB 0.#end
3780: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22 66  if../*.** The "f
3790: 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75 6d 62  ile format" numb
37a0: 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  er is an integer
37b0: 20 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d 65   that is increme
37c0: 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a 2a 2a  nted whenever.**
37d0: 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65 6c 20   the VDBE-level 
37e0: 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68 61 6e  file format chan
37f0: 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ges.  The follow
3800: 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66 69 6e  ing macros defin
3810: 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64 65 66  e the.** the def
3820: 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d 61 74  ault file format
3830: 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62 61 73   for new databas
3840: 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78 69 6d  es and the maxim
3850: 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 2a  um file format.*
3860: 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62 72 61  * that the libra
3870: 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a  ry can read..*/.
3880: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
3890: 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34  AX_FILE_FORMAT 4
38a0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
38b0: 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52  DEFAULT_FILE_FOR
38c0: 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  MAT.# define SQL
38d0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45  ITE_DEFAULT_FILE
38e0: 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64 69 66  _FORMAT 4.#endif
38f0: 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e  ../*.** Determin
3900: 65 20 77 68 65 74 68 65 72 20 74 72 69 67 67 65  e whether trigge
3910: 72 73 20 61 72 65 20 72 65 63 75 72 73 69 76 65  rs are recursive
3920: 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54 68   by default.  Th
3930: 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63 68 61  is can be.** cha
3940: 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65  nged at run-time
3950: 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d 61 2e   using a pragma.
3960: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
3970: 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52  TE_DEFAULT_RECUR
3980: 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a 23 20  SIVE_TRIGGERS.# 
3990: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
39a0: 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f  FAULT_RECURSIVE_
39b0: 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e 64 69  TRIGGERS 0.#endi
39c0: 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64 65  f../*.** Provide
39d0: 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65   a default value
39e0: 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 4d 50   for SQLITE_TEMP
39f0: 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65 20 69  _STORE in case i
3a00: 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69  t is not specifi
3a10: 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d  ed.** on the com
3a20: 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66  mand-line.*/.#if
3a30: 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45 4d 50  ndef SQLITE_TEMP
3a40: 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e 65 20  _STORE.# define 
3a50: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
3a60: 45 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  E 1.# define SQL
3a70: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 78  ITE_TEMP_STORE_x
3a80: 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20  c 1  /* Exclude 
3a90: 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a  from ctime.c */.
3aa0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
3ab0: 20 6e 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65   no value has be
3ac0: 65 6e 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20  en provided for 
3ad0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
3ae0: 52 5f 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66  R_THREADS, or if
3af0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  .** SQLITE_TEMP_
3b00: 53 54 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20  STORE is set to 
3b10: 33 20 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d  3 (never use tem
3b20: 70 6f 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73  porary files), s
3b30: 65 74 20 69 74 20 0a 2a 2a 20 74 6f 20 7a 65 72  et it .** to zer
3b40: 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  o..*/.#if SQLITE
3b50: 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c  _TEMP_STORE==3 |
3b60: 7c 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  | SQLITE_THREADS
3b70: 41 46 45 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53  AFE==0.# undef S
3b80: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
3b90: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
3ba0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  e SQLITE_MAX_WOR
3bb0: 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65  KER_THREADS 0.#e
3bc0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
3bd0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
3be0: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
3bf0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
3c00: 52 5f 54 48 52 45 41 44 53 20 38 0a 23 65 6e 64  R_THREADS 8.#end
3c10: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
3c20: 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52  E_DEFAULT_WORKER
3c30: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
3c40: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
3c50: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20  _WORKER_THREADS 
3c60: 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  0.#endif.#if SQL
3c70: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
3c80: 45 52 5f 54 48 52 45 41 44 53 3e 53 51 4c 49 54  ER_THREADS>SQLIT
3c90: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
3ca0: 45 41 44 53 0a 23 20 75 6e 64 65 66 20 53 51 4c  EADS.# undef SQL
3cb0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
3cc0: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
3cd0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
3ce0: 52 5f 54 48 52 45 41 44 53 20 53 51 4c 49 54 45  R_THREADS SQLITE
3cf0: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
3d00: 54 48 52 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a  THREADS.#endif..
3d10: 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20  ./*.** GCC does 
3d20: 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20 6f  not define the o
3d30: 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f 20  ffsetof() macro 
3d40: 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74 6f  so we'll have to
3d50: 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c   do it.** oursel
3d60: 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ves..*/.#ifndef 
3d70: 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e 65  offsetof.#define
3d80: 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43 54   offsetof(STRUCT
3d90: 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e 74  URE,FIELD) ((int
3da0: 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52 55  )((char*)&((STRU
3db0: 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44  CTURE*)0)->FIELD
3dc0: 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
3dd0: 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70 75   Macros to compu
3de0: 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20 6d  te minimum and m
3df0: 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e 75  aximum of two nu
3e00: 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  mbers..*/.#defin
3e10: 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c  e MIN(A,B) ((A)<
3e20: 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 64 65  (B)?(A):(B)).#de
3e30: 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20 28 28  fine MAX(A,B) ((
3e40: 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29 29 0a  A)>(B)?(A):(B)).
3e50: 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20  ./*.** Check to 
3e60: 73 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68  see if this mach
3e70: 69 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e  ine uses EBCDIC.
3e80: 20 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20    (Yes, believe 
3e90: 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68  it or.** not, th
3ea0: 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61  ere are still ma
3eb0: 63 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65  chines out there
3ec0: 20 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43   that use EBCDIC
3ed0: 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d  .).*/.#if 'A' ==
3ee0: 20 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65   '\301'.# define
3ef0: 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31   SQLITE_EBCDIC 1
3f00: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
3f10: 53 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23  SQLITE_ASCII 1.#
3f20: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74  endif../*.** Int
3f30: 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73  egers of known s
3f40: 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70  izes.  These typ
3f50: 65 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e  edefs might chan
3f60: 67 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74  ge for architect
3f70: 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68  ures.** where th
3f80: 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50  e sizes very.  P
3f90: 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72  reprocessor macr
3fa0: 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  os are available
3fb0: 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20   so that the.** 
3fc0: 74 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e  types can be con
3fd0: 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69  veniently redefi
3fe0: 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ned at compile-t
3ff0: 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a  ype.  Like this:
4000: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63  .**.**         c
4010: 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50  c '-DUINTPTR_TYP
4020: 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27  E=long long int'
4030: 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20   ....*/.#ifndef 
4040: 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66  UINT32_TYPE.# if
4050: 64 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f  def HAVE_UINT32_
4060: 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  T.#  define UINT
4070: 33 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74  32_TYPE uint32_t
4080: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
4090: 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e  e UINT32_TYPE un
40a0: 73 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64  signed int.# end
40b0: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
40c0: 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20  f UINT16_TYPE.# 
40d0: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31  ifdef HAVE_UINT1
40e0: 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49  6_T.#  define UI
40f0: 4e 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36  NT16_TYPE uint16
4100: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
4110: 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20  ine UINT16_TYPE 
4120: 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69  unsigned short i
4130: 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  nt.# endif.#endi
4140: 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f  f.#ifndef INT16_
4150: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
4160: 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66  E_INT16_T.#  def
4170: 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69  ine INT16_TYPE i
4180: 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20  nt16_t.# else.# 
4190: 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59   define INT16_TY
41a0: 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65  PE short int.# e
41b0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
41c0: 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23  def UINT8_TYPE.#
41d0: 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54   ifdef HAVE_UINT
41e0: 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49  8_T.#  define UI
41f0: 4e 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74  NT8_TYPE uint8_t
4200: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
4210: 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73  e UINT8_TYPE uns
4220: 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64  igned char.# end
4230: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
4240: 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66  f INT8_TYPE.# if
4250: 64 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a  def HAVE_INT8_T.
4260: 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54  #  define INT8_T
4270: 59 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73  YPE int8_t.# els
4280: 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38  e.#  define INT8
4290: 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61  _TYPE signed cha
42a0: 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  r.# endif.#endif
42b0: 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55  .#ifndef LONGDOU
42c0: 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e  BLE_TYPE.# defin
42d0: 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50  e LONGDOUBLE_TYP
42e0: 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65  E long double.#e
42f0: 6e 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c  ndif.typedef sql
4300: 69 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20  ite_int64 i64;  
4310: 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74          /* 8-byt
4320: 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  e signed integer
4330: 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69   */.typedef sqli
4340: 74 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20  te_uint64 u64;  
4350: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
4360: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
4370: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
4380: 54 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20  T32_TYPE u32;   
4390: 20 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74          /* 4-byt
43a0: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
43b0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49  er */.typedef UI
43c0: 4e 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20  NT16_TYPE u16;  
43d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
43e0: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
43f0: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49  ger */.typedef I
4400: 4e 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20  NT16_TYPE i16;  
4410: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62            /* 2-b
4420: 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67  yte signed integ
4430: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49  er */.typedef UI
4440: 4e 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20  NT8_TYPE u8;    
4450: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
4460: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
4470: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49  ger */.typedef I
4480: 4e 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20  NT8_TYPE i8;    
4490: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62            /* 1-b
44a0: 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67  yte signed integ
44b0: 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c  er */../*.** SQL
44c0: 49 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61  ITE_MAX_U32 is a
44d0: 20 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68   u64 constant th
44e0: 61 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75  at is the maximu
44f0: 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74  m u64 value.** t
4500: 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65  hat can be store
4510: 64 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f  d in a u32 witho
4520: 75 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e  ut loss of data.
4530: 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69    The value.** i
4540: 73 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66  s 0x00000000ffff
4550: 66 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75  ffff.  But becau
4560: 73 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20  se of quirks of 
4570: 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20  some compilers, 
4580: 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70  we.** have to sp
4590: 65 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20  ecify the value 
45a0: 69 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75  in the less intu
45b0: 69 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f  itive manner sho
45c0: 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wn:.*/.#define S
45d0: 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28  QLITE_MAX_U32  (
45e0: 28 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31  (((u64)1)<<32)-1
45f0: 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74  )../*.** The dat
4600: 61 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74  atype used to st
4610: 6f 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66  ore estimates of
4620: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
4630: 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c  ows in a.** tabl
4640: 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69  e or index.  Thi
4650: 73 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64  s is an unsigned
4660: 20 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20   integer type.  
4670: 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20  For 99.9% of.** 
4680: 74 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d  the world, a 32-
4690: 62 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73  bit integer is s
46a0: 75 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20  ufficient.  But 
46b0: 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
46c0: 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20  .** can be used 
46d0: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  at compile-time 
46e0: 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23  if desired..*/.#
46f0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42  ifdef SQLITE_64B
4700: 49 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65  IT_STATS. typede
4710: 66 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20  f u64 tRowcnt;  
4720: 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79    /* 64-bit only
4730: 20 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74   if requested at
4740: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f   compile-time */
4750: 0a 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20  .#else. typedef 
4760: 75 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20  u32 tRowcnt;    
4770: 2f 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65  /* 32-bit is the
4780: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64   default */.#end
4790: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61  if../*.** Estima
47a0: 74 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75  ted quantities u
47b0: 73 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c  sed for query pl
47c0: 61 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65  anning are store
47d0: 64 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c  d as 16-bit.** l
47e0: 6f 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20  ogarithms.  For 
47f0: 71 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20  quantity X, the 
4800: 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20  value stored is 
4810: 31 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69  10*log2(X).  Thi
4820: 73 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73  s.** gives a pos
4830: 73 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76  sible range of v
4840: 61 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69  alues of approxi
4850: 6d 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74  mately 1.0e986 t
4860: 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74  o 1e-986..** But
4870: 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c   the allowed val
4880: 75 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22  ues are "grainy"
4890: 2e 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c  .  Not every val
48a0: 75 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61  ue is representa
48b0: 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ble..** For exam
48c0: 70 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20  ple, quantities 
48d0: 31 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f  16 and 17 are bo
48e0: 74 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62  th represented b
48f0: 79 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66  y a LogEst.** of
4900: 20 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73   40.  However, s
4910: 69 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e  ince LogEst quan
4920: 74 61 74 69 65 73 20 61 72 65 20 73 75 70 70 6f  taties are suppo
4930: 73 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74  se to be estimat
4940: 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74  es,.** not exact
4950: 20 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d   values, this im
4960: 70 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74  precision is not
4970: 20 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a   a problem..**.*
4980: 2a 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68  * "LogEst" is sh
4990: 6f 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74  ort for "Logarit
49a0: 68 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a  hmic Estimate"..
49b0: 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a  **.** Examples:.
49c0: 2a 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20  **      1 -> 0  
49d0: 20 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d              20 -
49e0: 3e 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30  > 43          10
49f0: 30 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20  000 -> 132.**   
4a00: 20 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20     2 -> 10      
4a10: 20 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20         25 -> 46 
4a20: 20 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d           25000 -
4a30: 3e 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20  > 146.**      3 
4a40: 2d 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20  -> 16           
4a50: 20 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20   100 -> 66      
4a60: 20 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39    1000000 -> 199
4a70: 0a 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30  .**      4 -> 20
4a80: 20 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20             1000 
4a90: 2d 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34  -> 99        104
4aa0: 38 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20  8576 -> 200.**  
4ab0: 20 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20     10 -> 33     
4ac0: 20 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30        1024 -> 10
4ad0: 30 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20  0    4294967296 
4ae0: 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65  -> 320.**.** The
4af0: 20 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e   LogEst can be n
4b00: 65 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63  egative to indic
4b10: 61 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76  ate fractional v
4b20: 61 6c 75 65 73 2e 20 0a 2a 2a 20 45 78 61 6d 70  alues. .** Examp
4b30: 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e  les:.**.**    0.
4b40: 35 20 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20  5 -> -10        
4b50: 20 20 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20     0.1 -> -33   
4b60: 20 20 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d       0.0625 -> -
4b70: 34 30 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  40.*/.typedef IN
4b80: 54 31 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b  T16_TYPE LogEst;
4b90: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
4ba0: 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74  o determine whet
4bb0: 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e 65 20  her the machine 
4bc0: 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74 6c 65  is big or little
4bd0: 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20   endian,.** and 
4be0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
4bf0: 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74 69 6f  hat determinatio
4c00: 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20 6f 72  n is run-time or
4c10: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a   compile-time..*
4c20: 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20 70 65  *.** For best pe
4c30: 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20 61 74  rformance, an at
4c40: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
4c50: 20 67 75 65 73 73 20 61 74 20 74 68 65 20 62 79   guess at the by
4c60: 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73 69 6e  te-order.** usin
4c70: 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72  g C-preprocessor
4c80: 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74 68 61   macros.  If tha
4c90: 74 20 69 73 20 75 6e 73 75 63 63 65 73 73 66 75  t is unsuccessfu
4ca0: 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44 53 51  l, or if.** -DSQ
4cb0: 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54  LITE_RUNTIME_BYT
4cc0: 45 4f 52 44 45 52 3d 31 20 69 73 20 73 65 74 2c  EORDER=1 is set,
4cd0: 20 74 68 65 6e 20 62 79 74 65 2d 6f 72 64 65 72   then byte-order
4ce0: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a   is determined.*
4cf0: 2a 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a  * at run-time..*
4d00: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4d10: 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e  AMALGAMATION.con
4d20: 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e  st int sqlite3on
4d30: 65 20 3d 20 31 3b 0a 23 65 6c 73 65 0a 65 78 74  e = 1;.#else.ext
4d40: 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71  ern const int sq
4d50: 6c 69 74 65 33 6f 6e 65 3b 0a 23 65 6e 64 69 66  lite3one;.#endif
4d60: 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28 69 33  .#if (defined(i3
4d70: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
4d80: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
4d90: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
4da0: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
4db0: 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34  defined(__x86_64
4dc0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78  ) || defined(__x
4dd0: 38 36 5f 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69  86_64__) || defi
4de0: 6e 65 64 28 5f 4d 5f 58 36 34 29 20 20 7c 7c 20  ned(_M_X64)  || 
4df0: 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65     \.     define
4e00: 64 28 5f 4d 5f 41 4d 44 36 34 29 20 7c 7c 20 64  d(_M_AMD64) || d
4e10: 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20  efined(_M_ARM)  
4e20: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
4e30: 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20  x86)   ||    \. 
4e40: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 61 72      defined(__ar
4e50: 6d 5f 5f 29 29 20 26 26 20 21 64 65 66 69 6e 65  m__)) && !define
4e60: 64 28 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45  d(SQLITE_RUNTIME
4e70: 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20 64 65  _BYTEORDER).# de
4e80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45  fine SQLITE_BYTE
4e90: 4f 52 44 45 52 20 20 20 20 31 32 33 34 0a 23 20  ORDER    1234.# 
4ea0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
4eb0: 47 45 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64  GENDIAN    0.# d
4ec0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54  efine SQLITE_LIT
4ed0: 54 4c 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65  TLEENDIAN 1.# de
4ee0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31  fine SQLITE_UTF1
4ef0: 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f  6NATIVE  SQLITE_
4f00: 55 54 46 31 36 4c 45 0a 23 65 6e 64 69 66 0a 23  UTF16LE.#endif.#
4f10: 69 66 20 28 64 65 66 69 6e 65 64 28 73 70 61 72  if (defined(spar
4f20: 63 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  c)    || defined
4f30: 28 5f 5f 70 70 63 5f 5f 29 29 20 20 5c 0a 20 20  (__ppc__))  \.  
4f40: 20 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51    && !defined(SQ
4f50: 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54  LITE_RUNTIME_BYT
4f60: 45 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65  EORDER).# define
4f70: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
4f80: 52 20 20 20 20 34 33 32 31 0a 23 20 64 65 66 69  R    4321.# defi
4f90: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
4fa0: 49 41 4e 20 20 20 20 31 0a 23 20 64 65 66 69 6e  IAN    1.# defin
4fb0: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
4fc0: 4e 44 49 41 4e 20 30 0a 23 20 64 65 66 69 6e 65  NDIAN 0.# define
4fd0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
4fe0: 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31  IVE  SQLITE_UTF1
4ff0: 36 42 45 0a 23 65 6e 64 69 66 0a 23 69 66 20 21  6BE.#endif.#if !
5000: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 42  defined(SQLITE_B
5010: 59 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66 69  YTEORDER).# defi
5020: 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  ne SQLITE_BYTEOR
5030: 44 45 52 20 20 20 20 30 20 20 20 20 20 2f 2a 20  DER    0     /* 
5040: 30 20 6d 65 61 6e 73 20 22 75 6e 6b 6e 6f 77 6e  0 means "unknown
5050: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
5060: 22 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51  " */.# define SQ
5070: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20  LITE_BIGENDIAN  
5080: 20 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71    (*(char *)(&sq
5090: 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20  lite3one)==0).# 
50a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49  define SQLITE_LI
50b0: 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68  TTLEENDIAN (*(ch
50c0: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
50d0: 65 29 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20  e)==1).# define 
50e0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
50f0: 56 45 20 20 28 53 51 4c 49 54 45 5f 42 49 47 45  VE  (SQLITE_BIGE
5100: 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46  NDIAN?SQLITE_UTF
5110: 31 36 42 45 3a 53 51 4c 49 54 45 5f 55 54 46 31  16BE:SQLITE_UTF1
5120: 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  6LE).#endif../*.
5130: 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72  ** Constants for
5140: 20 74 68 65 20 6c 61 72 67 65 73 74 20 61 6e 64   the largest and
5150: 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69 62   smallest possib
5160: 6c 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64  le 64-bit signed
5170: 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68   integers..** Th
5180: 65 73 65 20 6d 61 63 72 6f 73 20 61 72 65 20 64  ese macros are d
5190: 65 73 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20  esigned to work 
51a0: 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74  correctly on bot
51b0: 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d  h 32-bit and 64-
51c0: 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73  bit.** compilers
51d0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52  ..*/.#define LAR
51e0: 47 45 53 54 5f 49 4e 54 36 34 20 20 28 30 78 66  GEST_INT64  (0xf
51f0: 66 66 66 66 66 66 66 7c 28 28 28 69 36 34 29 30  fffffff|(((i64)0
5200: 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 29  x7fffffff)<<32))
5210: 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53  .#define SMALLES
5220: 54 5f 49 4e 54 36 34 20 28 28 28 69 36 34 29 2d  T_INT64 (((i64)-
5230: 31 29 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54  1) - LARGEST_INT
5240: 36 34 29 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e  64)../* .** Roun
5250: 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20 74 6f  d up a number to
5260: 20 74 68 65 20 6e 65 78 74 20 6c 61 72 67 65 72   the next larger
5270: 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20   multiple of 8. 
5280: 20 54 68 69 73 20 69 73 20 75 73 65 64 0a 2a 2a   This is used.**
5290: 20 74 6f 20 66 6f 72 63 65 20 38 2d 62 79 74 65   to force 8-byte
52a0: 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34   alignment on 64
52b0: 2d 62 69 74 20 61 72 63 68 69 74 65 63 74 75 72  -bit architectur
52c0: 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52  es..*/.#define R
52d0: 4f 55 4e 44 38 28 78 29 20 20 20 20 20 28 28 28  OUND8(x)     (((
52e0: 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a  x)+7)&~7)../*.**
52f0: 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74   Round down to t
5300: 68 65 20 6e 65 61 72 65 73 74 20 6d 75 6c 74 69  he nearest multi
5310: 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66  ple of 8.*/.#def
5320: 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78  ine ROUNDDOWN8(x
5330: 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a  ) ((x)&~7)../*.*
5340: 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68  * Assert that th
5350: 65 20 70 6f 69 6e 74 65 72 20 58 20 69 73 20 61  e pointer X is a
5360: 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62  ligned to an 8-b
5370: 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 20 20 54  yte boundary.  T
5380: 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20  his.** macro is 
5390: 75 73 65 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e  used only within
53a0: 20 61 73 73 65 72 74 28 29 20 74 6f 20 76 65 72   assert() to ver
53b0: 69 66 79 20 74 68 61 74 20 74 68 65 20 63 6f 64  ify that the cod
53c0: 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c  e gets.** all al
53d0: 69 67 6e 6d 65 6e 74 20 72 65 73 74 72 69 63 74  ignment restrict
53e0: 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a  ions correct..**
53f0: 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69 66 20 53  .** Except, if S
5400: 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49  QLITE_4_BYTE_ALI
5410: 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64  GNED_MALLOC is d
5420: 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74 68 65  efined, then the
5430: 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d  .** underlying m
5440: 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e  alloc() implemen
5450: 74 61 74 69 6f 6e 20 6d 69 67 68 74 20 72 65 74  tation might ret
5460: 75 72 6e 20 75 73 20 34 2d 62 79 74 65 20 61 6c  urn us 4-byte al
5470: 69 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72  igned.** pointer
5480: 73 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 65  s.  In that case
5490: 2c 20 6f 6e 6c 79 20 76 65 72 69 66 79 20 34 2d  , only verify 4-
54a0: 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a  byte alignment..
54b0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
54c0: 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f  _4_BYTE_ALIGNED_
54d0: 4d 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20  MALLOC.# define 
54e0: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
54f0: 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68  MENT(X)   ((((ch
5500: 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a  ar*)(X) - (char*
5510: 29 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65  )0)&3)==0).#else
5520: 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f  .# define EIGHT_
5530: 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58  BYTE_ALIGNMENT(X
5540: 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58  )   ((((char*)(X
5550: 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 37 29  ) - (char*)0)&7)
5560: 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ==0).#endif../*.
5570: 2a 2a 20 44 69 73 61 62 6c 65 20 4d 4d 41 50 20  ** Disable MMAP 
5580: 6f 6e 20 70 6c 61 74 66 6f 72 6d 73 20 77 68 65  on platforms whe
5590: 72 65 20 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74  re it is known t
55a0: 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69  o not work.*/.#i
55b0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e  f defined(__Open
55c0: 42 53 44 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  BSD__) || define
55d0: 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20  d(__QNXNTO__).# 
55e0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  undef SQLITE_MAX
55f0: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66  _MMAP_SIZE.# def
5600: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  ine SQLITE_MAX_M
5610: 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69  MAP_SIZE 0.#endi
5620: 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74  f../*.** Default
5630: 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66   maximum size of
5640: 20 6d 65 6d 6f 72 79 20 75 73 65 64 20 62 79 20   memory used by 
5650: 6d 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f  memory-mapped I/
5660: 4f 20 69 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a  O in the VFS.*/.
5670: 23 69 66 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f  #ifdef __APPLE__
5680: 0a 23 20 69 6e 63 6c 75 64 65 20 3c 54 61 72 67  .# include <Targ
5690: 65 74 43 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68  etConditionals.h
56a0: 3e 0a 23 20 69 66 20 54 41 52 47 45 54 5f 4f 53  >.# if TARGET_OS
56b0: 5f 49 50 48 4f 4e 45 0a 23 20 20 20 75 6e 64 65  _IPHONE.#   unde
56c0: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  f SQLITE_MAX_MMA
56d0: 50 5f 53 49 5a 45 0a 23 20 20 20 64 65 66 69 6e  P_SIZE.#   defin
56e0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
56f0: 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66  P_SIZE 0.# endif
5700: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
5710: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
5720: 53 49 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65  SIZE.# if define
5730: 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20  d(__linux__) \. 
5740: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 57 49 4e   || defined(_WIN
5750: 33 32 29 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69  32) \.  || (defi
5760: 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26  ned(__APPLE__) &
5770: 26 20 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48  & defined(__MACH
5780: 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69  __)) \.  || defi
5790: 6e 65 64 28 5f 5f 73 75 6e 29 0a 23 20 20 20 64  ned(__sun).#   d
57a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
57b0: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78 37 66 66  _MMAP_SIZE 0x7ff
57c0: 66 30 30 30 30 20 20 2f 2a 20 32 31 34 37 34 31  f0000  /* 214741
57d0: 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23  8112 */.# else.#
57e0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
57f0: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
5800: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
5810: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
5820: 50 5f 53 49 5a 45 5f 78 63 20 31 20 2f 2a 20 65  P_SIZE_xc 1 /* e
5830: 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d  xclude from ctim
5840: 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  e.c */.#endif../
5850: 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74  *.** The default
5860: 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65   MMAP_SIZE is ze
5870: 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f  ro on all platfo
5880: 72 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69  rms.  Or, even i
5890: 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65  f a larger.** de
58a0: 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20  fault MMAP_SIZE 
58b0: 69 73 20 73 70 65 63 69 66 69 65 64 20 61 74 20  is specified at 
58c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61  compile-time, ma
58d0: 6b 65 20 73 75 72 65 20 74 68 61 74 20 69 74 20  ke sure that it 
58e0: 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65  does.** not exce
58f0: 65 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d  ed the maximum m
5900: 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  map size..*/.#if
5910: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
5920: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  ULT_MMAP_SIZE.# 
5930: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
5940: 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20  FAULT_MMAP_SIZE 
5950: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
5960: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
5970: 49 5a 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63  IZE_xc 1  /* Exc
5980: 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e  lude from ctime.
5990: 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 20  c */.#endif.#if 
59a0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
59b0: 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f  MAP_SIZE>SQLITE_
59c0: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
59d0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  undef SQLITE_DEF
59e0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  AULT_MMAP_SIZE.#
59f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
5a00: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
5a10: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
5a20: 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  _SIZE.#endif../*
5a30: 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20  .** Only one of 
5a40: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
5a50: 41 54 33 20 6f 72 20 53 51 4c 49 54 45 5f 45 4e  AT3 or SQLITE_EN
5a60: 41 42 4c 45 5f 53 54 41 54 34 20 63 61 6e 20 62  ABLE_STAT4 can b
5a70: 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20 50 72  e defined..** Pr
5a80: 69 6f 72 69 74 79 20 69 73 20 67 69 76 65 6e 20  iority is given 
5a90: 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  to SQLITE_ENABLE
5aa0: 5f 53 54 41 54 34 2e 20 20 49 66 20 65 69 74 68  _STAT4.  If eith
5ab0: 65 72 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20  er are defined, 
5ac0: 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65 20 53  also.** define S
5ad0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5ae0: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a 23  T3_OR_STAT4.*/.#
5af0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
5b00: 42 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e 64 65  BLE_STAT4.# unde
5b10: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
5b20: 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53  STAT3.# define S
5b30: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5b40: 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65  T3_OR_STAT4 1.#e
5b50: 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  lif SQLITE_ENABL
5b60: 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65  E_STAT3.# define
5b70: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
5b80: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a  TAT3_OR_STAT4 1.
5b90: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  #elif SQLITE_ENA
5ba0: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
5bb0: 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  T4.# undef SQLIT
5bc0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
5bd0: 52 5f 53 54 41 54 34 0a 23 65 6e 64 69 66 0a 0a  R_STAT4.#endif..
5be0: 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54 52 41 43  /*.** SELECTTRAC
5bf0: 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c 6c 20 62  E_ENABLED will b
5c00: 65 20 65 69 74 68 65 72 20 31 20 6f 72 20 30 20  e either 1 or 0 
5c10: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
5c20: 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74  ther or not.** t
5c30: 68 65 20 53 65 6c 65 63 74 20 71 75 65 72 79 20  he Select query 
5c40: 67 65 6e 65 72 61 74 6f 72 20 74 72 61 63 69 6e  generator tracin
5c50: 67 20 6c 6f 67 69 63 20 69 73 20 74 75 72 6e 65  g logic is turne
5c60: 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  d on..*/.#if def
5c70: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
5c80: 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  G) || defined(SQ
5c90: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45  LITE_ENABLE_SELE
5ca0: 43 54 54 52 41 43 45 29 0a 23 20 64 65 66 69 6e  CTTRACE).# defin
5cb0: 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  e SELECTTRACE_EN
5cc0: 41 42 4c 45 44 20 31 0a 23 65 6c 73 65 0a 23 20  ABLED 1.#else.# 
5cd0: 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41  define SELECTTRA
5ce0: 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a 23 65 6e  CE_ENABLED 0.#en
5cf0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
5d00: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
5d10: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
5d20: 65 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  e is used to sto
5d30: 72 65 20 74 68 65 20 62 75 73 79 2d 68 61 6e 64  re the busy-hand
5d40: 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20  ler.** callback 
5d50: 66 6f 72 20 61 20 67 69 76 65 6e 20 73 71 6c 69  for a given sqli
5d60: 74 65 20 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a  te handle. .**.*
5d70: 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62 75 73  * The sqlite.bus
5d80: 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20  yHandler member 
5d90: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20 73 74  of the sqlite st
5da0: 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  ruct contains th
5db0: 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61  e busy.** callba
5dc0: 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  ck for the datab
5dd0: 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61 63 68  ase handle. Each
5de0: 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20 76 69   pager opened vi
5df0: 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20  a the sqlite.** 
5e00: 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73 65 64  handle is passed
5e10: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 73 71   a pointer to sq
5e20: 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72  lite.busyHandler
5e30: 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e 64 6c  . The busy-handl
5e40: 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69  er.** callback i
5e50: 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f  s currently invo
5e60: 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69  ked only from wi
5e70: 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f  thin pager.c..*/
5e80: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5e90: 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75 73 79  BusyHandler Busy
5ea0: 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63 74 20  Handler;.struct 
5eb0: 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20  BusyHandler {.  
5ec0: 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76 6f 69  int (*xFunc)(voi
5ed0: 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68  d *,int);  /* Th
5ee0: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
5ef0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 3b  */.  void *pArg;
5f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f10: 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f 20  /* First arg to 
5f20: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  busy callback */
5f30: 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20 20  .  int nBusy;   
5f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
5f50: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
5f60: 68 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c  h each busy call
5f70: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61   */.};../*.** Na
5f80: 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72  me of the master
5f90: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e   database table.
5fa0: 20 20 54 68 65 20 6d 61 73 74 65 72 20 64 61 74    The master dat
5fb0: 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69  abase table.** i
5fc0: 73 20 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c  s a special tabl
5fd0: 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  e that holds the
5fe0: 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69   names and attri
5ff0: 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20  butes of all.** 
6000: 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20  user tables and 
6010: 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66  indices..*/.#def
6020: 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20  ine MASTER_NAME 
6030: 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61        "sqlite_ma
6040: 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45  ster".#define TE
6050: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20  MP_MASTER_NAME  
6060: 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
6070: 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ter"../*.** The 
6080: 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65  root-page of the
6090: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
60a0: 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69   table..*/.#defi
60b0: 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20  ne MASTER_ROOT  
60c0: 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
60d0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63  e name of the sc
60e0: 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23  hema table..*/.#
60f0: 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41  define SCHEMA_TA
6100: 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f  BLE(x)  ((!OMIT_
6110: 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f  TEMPDB)&&(x==1)?
6120: 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45  TEMP_MASTER_NAME
6130: 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f  :MASTER_NAME)../
6140: 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e  *.** A convenien
6150: 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65  ce macro that re
6160: 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
6170: 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a   of elements in.
6180: 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a  ** an array..*/.
6190: 23 64 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a  #define ArraySiz
61a0: 65 28 58 29 20 20 20 20 28 28 69 6e 74 29 28 73  e(X)    ((int)(s
61b0: 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28  izeof(X)/sizeof(
61c0: 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44  X[0])))../*.** D
61d0: 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20  etermine if the 
61e0: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f  argument is a po
61f0: 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64  wer of two.*/.#d
6200: 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54  efine IsPowerOfT
6210: 77 6f 28 58 29 20 28 28 28 58 29 26 28 28 58 29  wo(X) (((X)&((X)
6220: 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  -1))==0)../*.** 
6230: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61  The following va
6240: 6c 75 65 20 61 73 20 61 20 64 65 73 74 72 75 63  lue as a destruc
6250: 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65  tor means to use
6260: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
6270: 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33  ..** The sqlite3
6280: 44 62 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65  DbFree() routine
6290: 20 72 65 71 75 69 72 65 73 20 74 77 6f 20 70 61   requires two pa
62a0: 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64  rameters instead
62b0: 20 6f 66 20 74 68 65 20 0a 2a 2a 20 6f 6e 65 20   of the .** one 
62c0: 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20 64  parameter that d
62d0: 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61  estructors norma
62e0: 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77 65  lly want.  So we
62f0: 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64 75   have to introdu
6300: 63 65 20 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69  ce .** this magi
6310: 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  c value that the
6320: 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68   code knows to h
6330: 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c  andle differentl
6340: 79 2e 20 20 41 6e 79 20 0a 2a 2a 20 70 6f 69 6e  y.  Any .** poin
6350: 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65  ter will work he
6360: 72 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74  re as long as it
6370: 20 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f   is distinct fro
6380: 6d 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a  m SQLITE_STATIC.
6390: 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52  ** and SQLITE_TR
63a0: 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66  ANSIENT..*/.#def
63b0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d  ine SQLITE_DYNAM
63c0: 49 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64  IC   ((sqlite3_d
63d0: 65 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73  estructor_type)s
63e0: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
63f0: 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51  )../*.** When SQ
6400: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73  LITE_OMIT_WSD is
6410: 20 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61   defined, it mea
6420: 6e 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67  ns that the targ
6430: 65 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73  et platform does
6440: 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  .** not support 
6450: 57 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20  Writable Static 
6460: 44 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20  Data (WSD) such 
6470: 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74  as global and st
6480: 61 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a  atic variables..
6490: 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73  ** All variables
64a0: 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20   must either be 
64b0: 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20  on the stack or 
64c0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
64d0: 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68  cated from.** th
64e0: 65 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53  e heap.  When WS
64f0: 44 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64  D is unsupported
6500: 2c 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64  , the variable d
6510: 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74  eclarations scat
6520: 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68  tered.** through
6530: 6f 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63  out the SQLite c
6540: 6f 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20  ode must become 
6550: 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61  constants instea
6560: 64 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57  d.  The SQLITE_W
6570: 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75  SD.** macro is u
6580: 73 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72  sed for this pur
6590: 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65  pose.  And inste
65a0: 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e  ad of referencin
65b0: 67 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a  g the variable.*
65c0: 2a 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75  * directly, we u
65d0: 73 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20  se its constant 
65e0: 61 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b  as a key to look
65f0: 75 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  up the run-time 
6600: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66  allocated.** buf
6610: 66 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72  fer that holds r
6620: 65 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54  eal variable.  T
6630: 68 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61  he constant is a
6640: 6c 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69  lso the initiali
6650: 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  zer.** for the r
6660: 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65  un-time allocate
6670: 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20  d buffer..**.** 
6680: 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73  In the usual cas
6690: 65 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73  e where WSD is s
66a0: 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51  upported, the SQ
66b0: 4c 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f  LITE_WSD and GLO
66c0: 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65  BAL.** macros be
66d0: 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20  come no-ops and 
66e0: 68 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72  have zero perfor
66f0: 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f  mance impact..*/
6700: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
6710: 4d 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  MIT_WSD.  #defin
6720: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e  e SQLITE_WSD con
6730: 73 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f  st.  #define GLO
6740: 42 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73  BAL(t,v) (*(t*)s
6750: 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28  qlite3_wsd_find(
6760: 28 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a  (void*)&(v), siz
6770: 65 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69  eof(v))).  #defi
6780: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
6790: 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74  Config GLOBAL(st
67a0: 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
67b0: 69 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  ig, sqlite3Confi
67c0: 67 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  g).  int sqlite3
67d0: 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c  _wsd_init(int N,
67e0: 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20   int J);.  void 
67f0: 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e  *sqlite3_wsd_fin
6800: 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c  d(void *K, int L
6810: 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
6820: 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 0a 20  ne SQLITE_WSD . 
6830: 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28   #define GLOBAL(
6840: 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65  t,v) v.  #define
6850: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
6860: 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66  nfig sqlite3Conf
6870: 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ig.#endif../*.**
6880: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
6890: 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74  acros are used t
68a0: 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69  o suppress compi
68b0: 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64  ler warnings and
68c0: 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63   to.** make it c
68d0: 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65  lear to human re
68e0: 61 64 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e  aders when a fun
68f0: 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20  ction parameter 
6900: 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79 20  is deliberately 
6910: 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64 20  .** left unused 
6920: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
6930: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54  of a function. T
6940: 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70 70  his usually happ
6950: 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75  ens when.** a fu
6960: 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64  nction is called
6970: 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e 20   via a function 
6980: 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78 61  pointer. For exa
6990: 6d 70 6c 65 20 74 68 65 20 0a 2a 2a 20 69 6d 70  mple the .** imp
69a0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
69b0: 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20  n SQL aggregate 
69c0: 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61  step callback ma
69d0: 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a  y not use the.**
69e0: 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63   parameter indic
69f0: 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72  ating the number
6a00: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61   of arguments pa
6a10: 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72  ssed to the aggr
6a20: 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20  egate,.** if it 
6a30: 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20  knows that this 
6a40: 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65  is enforced else
6a50: 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  where..**.** Whe
6a60: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
6a70: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
6a80: 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e  ed at all within
6a90: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66   the body of a f
6aa0: 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69  unction,.** it i
6ab0: 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65  s generally name
6ac0: 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22  d "NotUsed" or "
6ad0: 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b  NotUsed2" to mak
6ae0: 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c  e things even cl
6af0: 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65  earer..** Howeve
6b00: 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20  r, these macros 
6b10: 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64  may also be used
6b20: 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72   to suppress war
6b30: 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f  nings related to
6b40: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74  .** parameters t
6b50: 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e  hat may or may n
6b60: 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e  ot be used depen
6b70: 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74  ding on compilat
6b80: 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20  ion options..** 
6b90: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73  For example thos
6ba0: 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c  e parameters onl
6bb0: 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74  y used in assert
6bc0: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49  () statements. I
6bd0: 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73  n these.** cases
6be0: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
6bf0: 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72  are named as per
6c00: 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65   the usual conve
6c10: 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ntions..*/.#defi
6c20: 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  ne UNUSED_PARAME
6c30: 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29  TER(x) (void)(x)
6c40: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
6c50: 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20  PARAMETER2(x,y) 
6c60: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
6c70: 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d  (x),UNUSED_PARAM
6c80: 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46  ETER(y)../*.** F
6c90: 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65  orward reference
6ca0: 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a  s to structures.
6cb0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
6cc0: 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66  t AggInfo AggInf
6cd0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
6ce0: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75  t AuthContext Au
6cf0: 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  thContext;.typed
6d00: 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e  ef struct Autoin
6d10: 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66  cInfo AutoincInf
6d20: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
6d30: 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b  t Bitvec Bitvec;
6d40: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6d50: 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b  CollSeq CollSeq;
6d60: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6d70: 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74  Column Column;.t
6d80: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
6d90: 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72   Db;.typedef str
6da0: 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d  uct Schema Schem
6db0: 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  a;.typedef struc
6dc0: 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70  t Expr Expr;.typ
6dd0: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
6de0: 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74  List ExprList;.t
6df0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
6e00: 70 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e 3b  prSpan ExprSpan;
6e10: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6e20: 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64  FKey FKey;.typed
6e30: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
6e40: 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73  structor FuncDes
6e50: 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66  tructor;.typedef
6e60: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20   struct FuncDef 
6e70: 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66  FuncDef;.typedef
6e80: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48   struct FuncDefH
6e90: 61 73 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b  ash FuncDefHash;
6ea0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6eb0: 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74  IdList IdList;.t
6ec0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
6ed0: 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64  dex Index;.typed
6ee0: 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 53  ef struct IndexS
6ef0: 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c  ample IndexSampl
6f00: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
6f10: 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c  t KeyClass KeyCl
6f20: 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ass;.typedef str
6f30: 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49  uct KeyInfo KeyI
6f40: 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nfo;.typedef str
6f50: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f  uct Lookaside Lo
6f60: 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66  okaside;.typedef
6f70: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
6f80: 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53  eSlot LookasideS
6f90: 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  lot;.typedef str
6fa0: 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c  uct Module Modul
6fb0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
6fc0: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61  t NameContext Na
6fd0: 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  meContext;.typed
6fe0: 65 66 20 73 74 72 75 63 74 20 50 61 72 73 65 20  ef struct Parse 
6ff0: 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73  Parse;.typedef s
7000: 74 72 75 63 74 20 50 72 65 55 70 64 61 74 65 20  truct PreUpdate 
7010: 50 72 65 55 70 64 61 74 65 3b 0a 74 79 70 65 64  PreUpdate;.typed
7020: 65 66 20 73 74 72 75 63 74 20 50 72 69 6e 74 66  ef struct Printf
7030: 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e 74 66  Arguments Printf
7040: 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70 65 64  Arguments;.typed
7050: 65 66 20 73 74 72 75 63 74 20 52 6f 77 53 65 74  ef struct RowSet
7060: 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66   RowSet;.typedef
7070: 20 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e   struct Savepoin
7080: 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70  t Savepoint;.typ
7090: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
70a0: 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64  ct Select;.typed
70b0: 65 66 20 73 74 72 75 63 74 20 53 51 4c 69 74 65  ef struct SQLite
70c0: 54 68 72 65 61 64 20 53 51 4c 69 74 65 54 68 72  Thread SQLiteThr
70d0: 65 61 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ead;.typedef str
70e0: 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 53  uct SelectDest S
70f0: 65 6c 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64  electDest;.typed
7100: 65 66 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  ef struct SrcLis
7110: 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64  t SrcList;.typed
7120: 65 66 20 73 74 72 75 63 74 20 53 74 72 41 63 63  ef struct StrAcc
7130: 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74 79 70  um StrAccum;.typ
7140: 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c  edef struct Tabl
7150: 65 20 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66  e Table;.typedef
7160: 20 73 74 72 75 63 74 20 54 61 62 6c 65 4c 6f 63   struct TableLoc
7170: 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70  k TableLock;.typ
7180: 65 64 65 66 20 73 74 72 75 63 74 20 54 6f 6b 65  edef struct Toke
7190: 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66  n Token;.typedef
71a0: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
71b0: 54 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66  Trigger;.typedef
71c0: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50   struct TriggerP
71d0: 72 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74  rg TriggerPrg;.t
71e0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
71f0: 69 67 67 65 72 53 74 65 70 20 54 72 69 67 67 65  iggerStep Trigge
7200: 72 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73  rStep;.typedef s
7210: 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65  truct UnpackedRe
7220: 63 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63  cord UnpackedRec
7230: 6f 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ord;.typedef str
7240: 75 63 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c  uct VTable VTabl
7250: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
7260: 74 20 56 74 61 62 43 74 78 20 56 74 61 62 43 74  t VtabCtx VtabCt
7270: 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  x;.typedef struc
7280: 74 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b  t Walker Walker;
7290: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
72a0: 57 68 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49  WhereInfo WhereI
72b0: 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nfo;.typedef str
72c0: 75 63 74 20 57 69 74 68 20 57 69 74 68 3b 0a 0a  uct With With;..
72d0: 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72  /*.** Defer sour
72e0: 63 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20  cing vdbe.h and 
72f0: 62 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66  btree.h until af
7300: 74 65 72 20 74 68 65 20 22 75 38 22 20 61 6e 64  ter the "u8" and
7310: 20 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65   .** "BusyHandle
7320: 72 22 20 74 79 70 65 64 65 66 73 2e 20 76 64 62  r" typedefs. vdb
7330: 65 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65  e.h also require
7340: 73 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f  s a few of the o
7350: 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72  paque.** pointer
7360: 20 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e   types (i.e. Fun
7370: 63 44 65 66 29 20 64 65 66 69 6e 65 64 20 61 62  cDef) defined ab
7380: 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  ove..*/.#include
7390: 20 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c   "btree.h".#incl
73a0: 75 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e  ude "vdbe.h".#in
73b0: 63 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a  clude "pager.h".
73c0: 23 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65  #include "pcache
73d0: 2e 68 22 0a 0a 23 69 6e 63 6c 75 64 65 20 22 6f  .h"..#include "o
73e0: 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d  s.h".#include "m
73f0: 75 74 65 78 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20  utex.h".../*.** 
7400: 45 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69  Each database fi
7410: 6c 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65  le to be accesse
7420: 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20  d by the system 
7430: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  is an instance.*
7440: 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * of the followi
7450: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  ng structure.  T
7460: 68 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c  here are normall
7470: 79 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73  y two of these s
7480: 74 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20  tructures.** in 
7490: 74 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d  the sqlite.aDb[]
74a0: 20 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20   array.  aDb[0] 
74b0: 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
74c0: 62 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a  base file and.**
74d0: 20 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64   aDb[1] is the d
74e0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
74f0: 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72  d to hold tempor
7500: 61 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64  ary tables.  Add
7510: 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62  itional.** datab
7520: 61 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61  ases may be atta
7530: 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ched..*/.struct 
7540: 44 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  Db {.  char *zNa
7550: 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  me;         /* N
7560: 61 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61  ame of this data
7570: 62 61 73 65 20 2a 2f 0a 20 20 42 74 72 65 65 20  base */.  Btree 
7580: 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20 2f  *pBt;          /
7590: 2a 20 54 68 65 20 42 2a 54 72 65 65 20 73 74 72  * The B*Tree str
75a0: 75 63 74 75 72 65 20 66 6f 72 20 74 68 69 73 20  ucture for this 
75b0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f  database file */
75c0: 0a 20 20 75 38 20 73 61 66 65 74 79 5f 6c 65 76  .  u8 safety_lev
75d0: 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f 77 20 61  el;     /* How a
75e0: 67 67 72 65 73 73 69 76 65 20 61 74 20 73 79 6e  ggressive at syn
75f0: 63 69 6e 67 20 64 61 74 61 20 74 6f 20 64 69 73  cing data to dis
7600: 6b 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  k */.  Schema *p
7610: 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50  Schema;     /* P
7620: 6f 69 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61  ointer to databa
7630: 73 65 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69  se schema (possi
7640: 62 6c 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d  bly shared) */.}
7650: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
7660: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
7670: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
7680: 73 74 6f 72 65 73 20 61 20 64 61 74 61 62 61 73  stores a databas
7690: 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20  e schema..**.** 
76a0: 4d 6f 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65  Most Schema obje
76b0: 63 74 73 20 61 72 65 20 61 73 73 6f 63 69 61 74  cts are associat
76c0: 65 64 20 77 69 74 68 20 61 20 42 74 72 65 65 2e  ed with a Btree.
76d0: 20 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20    The exception 
76e0: 69 73 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61  is.** the Schema
76f0: 20 66 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61   for the TEMP da
7700: 74 61 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e  tabaes (sqlite3.
7710: 61 44 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73  aDb[1]) which is
7720: 20 66 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a   free-standing..
7730: 2a 2a 20 49 6e 20 73 68 61 72 65 64 20 63 61 63  ** In shared cac
7740: 68 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c  he mode, a singl
7750: 65 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  e Schema object 
7760: 63 61 6e 20 62 65 20 73 68 61 72 65 64 20 62 79  can be shared by
7770: 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72   multiple.** Btr
7780: 65 65 73 20 74 68 61 74 20 72 65 66 65 72 20 74  ees that refer t
7790: 6f 20 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72  o the same under
77a0: 6c 79 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f  lying BtShared o
77b0: 62 6a 65 63 74 2e 0a 2a 2a 20 0a 2a 2a 20 53 63  bject..** .** Sc
77c0: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65  hema objects are
77d0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64   automatically d
77e0: 65 61 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20  eallocated when 
77f0: 74 68 65 20 6c 61 73 74 20 42 74 72 65 65 20 74  the last Btree t
7800: 68 61 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65  hat.** reference
7810: 73 20 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f  s them is destro
7820: 79 65 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20  yed.   The TEMP 
7830: 53 63 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c  Schema is manual
7840: 6c 79 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73  ly freed by.** s
7850: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a  qlite3_close()..
7860: 2a 0a 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75  *.** A thread mu
7870: 73 74 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20  st be holding a 
7880: 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72  mutex on the cor
7890: 72 65 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65  responding Btree
78a0: 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20   in order.** to 
78b0: 61 63 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f  access Schema co
78c0: 6e 74 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70  ntent.  This imp
78d0: 6c 69 65 73 20 74 68 61 74 20 74 68 65 20 74 68  lies that the th
78e0: 72 65 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62  read must also b
78f0: 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d  e.** holding a m
7900: 75 74 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69  utex on the sqli
7910: 74 65 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70  te3 connection p
7920: 6f 69 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73  ointer that owns
7930: 20 74 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46   the Btree..** F
7940: 6f 72 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61  or a TEMP Schema
7950: 2c 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65  , only the conne
7960: 63 74 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72  ction mutex is r
7970: 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75  equired..*/.stru
7980: 63 74 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e  ct Schema {.  in
7990: 74 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b  t schema_cookie;
79a0: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73     /* Database s
79b0: 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75  chema version nu
79c0: 6d 62 65 72 20 66 6f 72 20 74 68 69 73 20 66 69  mber for this fi
79d0: 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e  le */.  int iGen
79e0: 65 72 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20  eration;     /* 
79f0: 47 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  Generation count
7a00: 65 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64  er.  Incremented
7a10: 20 77 69 74 68 20 65 61 63 68 20 63 68 61 6e 67   with each chang
7a20: 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48  e */.  Hash tblH
7a30: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
7a40: 6c 6c 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65  ll tables indexe
7a50: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
7a60: 61 73 68 20 69 64 78 48 61 73 68 3b 20 20 20 20  ash idxHash;    
7a70: 20 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65      /* All (name
7a80: 64 29 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78  d) indices index
7a90: 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20  ed by name */.  
7aa0: 48 61 73 68 20 74 72 69 67 48 61 73 68 3b 20 20  Hash trigHash;  
7ab0: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67       /* All trig
7ac0: 67 65 72 73 20 69 6e 64 65 78 65 64 20 62 79 20  gers indexed by 
7ad0: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66  name */.  Hash f
7ae0: 6b 65 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f  keyHash;       /
7af0: 2a 20 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65  * All foreign ke
7b00: 79 73 20 62 79 20 72 65 66 65 72 65 6e 63 65 64  ys by referenced
7b10: 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20   table name */. 
7b20: 20 54 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b   Table *pSeqTab;
7b30: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c        /* The sql
7b40: 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62  ite_sequence tab
7b50: 6c 65 20 75 73 65 64 20 62 79 20 41 55 54 4f 49  le used by AUTOI
7b60: 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38  NCREMENT */.  u8
7b70: 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20   file_format;   
7b80: 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72     /* Schema for
7b90: 6d 61 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20  mat version for 
7ba0: 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75  this file */.  u
7bb0: 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
7bc0: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
7bd0: 64 69 6e 67 20 75 73 65 64 20 62 79 20 74 68 69  ding used by thi
7be0: 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
7bf0: 75 31 36 20 73 63 68 65 6d 61 46 6c 61 67 73 3b  u16 schemaFlags;
7c00: 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73       /* Flags as
7c10: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
7c20: 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69  is schema */.  i
7c30: 6e 74 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20  nt cache_size;  
7c40: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
7c50: 20 70 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e   pages to use in
7c60: 20 74 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b   the cache */.};
7c70: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61  ../*.** These ma
7c80: 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64  cros can be used
7c90: 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f   to test, set, o
7ca0: 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20  r clear bits in 
7cb0: 74 68 65 20 0a 2a 2a 20 44 62 2e 70 53 63 68 65  the .** Db.pSche
7cc0: 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e  ma->flags field.
7cd0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61  .*/.#define DbHa
7ce0: 73 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  sProperty(D,I,P)
7cf0: 20 20 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b       (((D)->aDb[
7d00: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  I].pSchema->sche
7d10: 6d 61 46 6c 61 67 73 26 28 50 29 29 3d 3d 28 50  maFlags&(P))==(P
7d20: 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73  )).#define DbHas
7d30: 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  AnyProperty(D,I,
7d40: 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49  P)  (((D)->aDb[I
7d50: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
7d60: 61 46 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a  aFlags&(P))!=0).
7d70: 23 64 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f  #define DbSetPro
7d80: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
7d90: 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63   (D)->aDb[I].pSc
7da0: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
7db0: 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 44  s|=(P).#define D
7dc0: 62 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 44  bClearProperty(D
7dd0: 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e 61 44 62  ,I,P)   (D)->aDb
7de0: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  [I].pSchema->sch
7df0: 65 6d 61 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a  emaFlags&=~(P)..
7e00: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
7e10: 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e  lues for the DB.
7e20: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66  pSchema->flags f
7e30: 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ield..**.** The 
7e40: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20  DB_SchemaLoaded 
7e50: 66 6c 61 67 20 69 73 20 73 65 74 20 61 66 74 65  flag is set afte
7e60: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  r the database s
7e70: 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a  chema has been.*
7e80: 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65  * read into inte
7e90: 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73  rnal hash tables
7ea0: 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73  ..**.** DB_Unres
7eb0: 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68  etViews means th
7ec0: 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76  at one or more v
7ed0: 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e  iews have column
7ee0: 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68   names that.** h
7ef0: 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20  ave been filled 
7f00: 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73 63 68  out.  If the sch
7f10: 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65  ema changes, the
7f20: 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  se column names 
7f30: 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73  might.** changes
7f40: 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77   and so the view
7f50: 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65   will need to be
7f60: 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69   reset..*/.#defi
7f70: 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  ne DB_SchemaLoad
7f80: 65 64 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a  ed    0x0001  /*
7f90: 20 54 68 65 20 73 63 68 65 6d 61 20 68 61 73 20   The schema has 
7fa0: 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23  been loaded */.#
7fb0: 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65  define DB_Unrese
7fc0: 74 56 69 65 77 73 20 20 20 20 30 78 30 30 30 32  tViews    0x0002
7fd0: 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20    /* Some views 
7fe0: 68 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c  have defined col
7ff0: 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65  umn names */.#de
8000: 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20  fine DB_Empty   
8010: 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
8020: 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20 65  /* The file is e
8030: 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62  mpty (length 0 b
8040: 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ytes) */../*.** 
8050: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69  The number of di
8060: 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66  fferent kinds of
8070: 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e   things that can
8080: 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75   be limited.** u
8090: 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33  sing the sqlite3
80a0: 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61  _limit() interfa
80b0: 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ce..*/.#define S
80c0: 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53  QLITE_N_LIMIT (S
80d0: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b  QLITE_LIMIT_WORK
80e0: 45 52 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a 2f  ER_THREADS+1)../
80f0: 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d  *.** Lookaside m
8100: 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f  alloc is a set o
8110: 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66  f fixed-size buf
8120: 66 65 72 73 20 74 68 61 74 20 63 61 6e 20 62 65  fers that can be
8130: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69   used.** to sati
8140: 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69  sfy small transi
8150: 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ent memory alloc
8160: 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66  ation requests f
8170: 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73  or objects.** as
8180: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
8190: 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62  particular datab
81a0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
81b0: 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c   The use of.** l
81c0: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
81d0: 70 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69  provides a signi
81e0: 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e  ficant performan
81f0: 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a  ce enhancement.*
8200: 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29 20 62  * (approx 10%) b
8210: 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72  y avoiding numer
8220: 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20  ous malloc/free 
8230: 72 65 71 75 65 73 74 73 20 77 68 69 6c 65 20 70  requests while p
8240: 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74  arsing.** SQL st
8250: 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
8260: 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74  The Lookaside st
8270: 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f  ructure holds co
8280: 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f  nfiguration info
8290: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
82a0: 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d  e.** lookaside m
82b0: 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e  alloc subsystem.
82c0: 20 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65    Each available
82d0: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
82e0: 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f  on in.** the loo
82f0: 6b 61 73 69 64 65 20 73 75 62 73 79 73 74 65 6d  kaside subsystem
8300: 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20   is stored on a 
8310: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c  linked list of L
8320: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20  ookasideSlot.** 
8330: 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c  objects..**.** L
8340: 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74  ookaside allocat
8350: 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c  ions are only al
8360: 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74  lowed for object
8370: 73 20 74 68 61 74 20 61 72 65 20 61 73 73 6f 63  s that are assoc
8380: 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20  iated.** with a 
8390: 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62  particular datab
83a0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
83b0: 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69   Hence, schema i
83c0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f  nformation canno
83d0: 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69  t.** be stored i
83e0: 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61  n lookaside beca
83f0: 75 73 65 20 69 6e 20 73 68 61 72 65 64 20 63 61  use in shared ca
8400: 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68  che mode the sch
8410: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ema information.
8420: 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62 79 20  ** is shared by 
8430: 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73  multiple databas
8440: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20  e connections.  
8450: 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65  Therefore, while
8460: 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65   parsing.** sche
8470: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  ma information, 
8480: 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45  the Lookaside.bE
8490: 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63  nabled flag is c
84a0: 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a  leared so that.*
84b0: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  * lookaside allo
84c0: 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20  cations are not 
84d0: 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63  used to construc
84e0: 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a  t the schema obj
84f0: 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ects..*/.struct 
8500: 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31  Lookaside {.  u1
8510: 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20  6 sz;           
8520: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
8530: 20 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20   each buffer in 
8540: 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45  bytes */.  u8 bE
8550: 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20  nabled;         
8560: 20 20 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64     /* False to d
8570: 69 73 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61  isable new looka
8580: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
8590: 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63   */.  u8 bMalloc
85a0: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
85b0: 20 54 72 75 65 20 69 66 20 70 53 74 61 72 74 20   True if pStart 
85c0: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71  obtained from sq
85d0: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a  lite3_malloc() *
85e0: 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20  /.  int nOut;   
85f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
8600: 75 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72 73  umber of buffers
8610: 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b   currently check
8620: 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20  ed out */.  int 
8630: 6d 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20  mxOut;          
8640: 20 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72      /* Highwater
8650: 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a   mark for nOut *
8660: 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33  /.  int anStat[3
8670: 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30  ];          /* 0
8680: 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65  : hits.  1: size
8690: 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c   misses.  2: ful
86a0: 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f  l misses */.  Lo
86b0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72  okasideSlot *pFr
86c0: 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  ee;   /* List of
86d0: 20 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65   available buffe
86e0: 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53  rs */.  void *pS
86f0: 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  tart;           
8700: 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f 66  /* First byte of
8710: 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72   available memor
8720: 79 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69  y space */.  voi
8730: 64 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20  d *pEnd;        
8740: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79       /* First by
8750: 74 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61  te past end of a
8760: 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a  vailable space *
8770: 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b  /.};.struct Look
8780: 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f  asideSlot {.  Lo
8790: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65  okasideSlot *pNe
87a0: 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62  xt;    /* Next b
87b0: 75 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73  uffer in the lis
87c0: 74 20 6f 66 20 66 72 65 65 20 62 75 66 66 65 72  t of free buffer
87d0: 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  s */.};../*.** A
87e0: 20 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20   hash table for 
87f0: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
8800: 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68  ions..**.** Hash
8810: 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74   each FuncDef st
8820: 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65  ructure into one
8830: 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48   of the FuncDefH
8840: 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a  ash.a[] slots..*
8850: 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65  * Collisions are
8860: 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e   on the FuncDef.
8870: 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a  pHash chain..*/.
8880: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61  struct FuncDefHa
8890: 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a  sh {.  FuncDef *
88a0: 61 5b 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20  a[23];       /* 
88b0: 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66  Hash table for f
88c0: 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a  unctions */.};..
88d0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
88e0: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
88f0: 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74  N./*.** Informat
8900: 69 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20  ion held in the 
8910: 22 73 71 6c 69 74 65 33 22 20 64 61 74 61 62 61  "sqlite3" databa
8920: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62  se connection ob
8930: 6a 65 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a  ject and used.**
8940: 20 74 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20   to manage user 
8950: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a  authentication..
8960: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
8970: 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  t sqlite3_userau
8980: 74 68 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  th sqlite3_usera
8990: 75 74 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69  uth;.struct sqli
89a0: 74 65 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20  te3_userauth {. 
89b0: 20 75 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20   u8 authLevel;  
89c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
89d0: 2a 20 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e  * Current authen
89e0: 74 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a  tication level *
89f0: 2f 0a 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b  /.  int nAuthPW;
8a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a10: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65    /* Size of the
8a20: 20 7a 41 75 74 68 50 57 20 69 6e 20 62 79 74 65   zAuthPW in byte
8a30: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75  s */.  char *zAu
8a40: 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20  thPW;           
8a50: 20 20 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64       /* Password
8a60: 20 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74   used to authent
8a70: 69 63 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20  icate */.  char 
8a80: 2a 7a 41 75 74 68 55 73 65 72 3b 20 20 20 20 20  *zAuthUser;     
8a90: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72           /* User
8aa0: 20 6e 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75   name used to au
8ab0: 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b  thenticate */.};
8ac0: 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  ../* Allowed val
8ad0: 75 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f  ues for sqlite3_
8ae0: 75 73 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76  userauth.authLev
8af0: 65 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  el */.#define UA
8b00: 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20  UTH_Unknown     
8b10: 30 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  0     /* Authent
8b20: 69 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20  ication not yet 
8b30: 63 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69  checked */.#defi
8b40: 6e 65 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20  ne UAUTH_Fail   
8b50: 20 20 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73       1     /* Us
8b60: 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f  er authenticatio
8b70: 6e 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66  n failed */.#def
8b80: 69 6e 65 20 55 41 55 54 48 5f 55 73 65 72 20 20  ine UAUTH_User  
8b90: 20 20 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41        2     /* A
8ba0: 75 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20  uthenticated as 
8bb0: 61 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f  a normal user */
8bc0: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41  .#define UAUTH_A
8bd0: 64 6d 69 6e 20 20 20 20 20 20 20 33 20 20 20 20  dmin       3    
8be0: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65   /* Authenticate
8bf0: 64 20 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74  d as an administ
8c00: 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e  rator */../* Fun
8c10: 63 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79  ctions used only
8c20: 20 62 79 20 75 73 65 72 20 61 75 74 68 6f 72 69   by user authori
8c30: 7a 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a  zation logic */.
8c40: 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41  int sqlite3UserA
8c50: 75 74 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63  uthTable(const c
8c60: 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
8c70: 65 33 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c  e3UserAuthCheckL
8c80: 6f 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ogin(sqlite3*,co
8c90: 6e 73 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a  nst char*,u8*);.
8ca0: 76 6f 69 64 20 73 71 6c 69 74 65 33 55 73 65 72  void sqlite3User
8cb0: 41 75 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33  AuthInit(sqlite3
8cc0: 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
8cd0: 43 72 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65  CryptFunc(sqlite
8ce0: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
8cf0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
8d00: 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ..#endif /* SQLI
8d10: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
8d20: 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  CATION */../*.**
8d30: 20 74 79 70 65 64 65 66 20 66 6f 72 20 74 68 65   typedef for the
8d40: 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63   authorization c
8d50: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e  allback function
8d60: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
8d70: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
8d80: 43 41 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66  CATION.  typedef
8d90: 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78   int (*sqlite3_x
8da0: 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  auth)(void*,int,
8db0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
8dc0: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
8dd0: 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ar*,.           
8de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8df0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
8e00: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23   const char*);.#
8e10: 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 69  else.  typedef i
8e20: 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75  nt (*sqlite3_xau
8e30: 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  th)(void*,int,co
8e40: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
8e50: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
8e60: 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
8e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e80: 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a    const char*);.
8e90: 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45  #endif.../*.** E
8ea0: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
8eb0: 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e  nection is an in
8ec0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
8ed0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
8ee0: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c  e..*/.struct sql
8ef0: 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65 33  ite3 {.  sqlite3
8f00: 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20 20  _vfs *pVfs;     
8f10: 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74         /* OS Int
8f20: 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74 72 75  erface */.  stru
8f30: 63 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20  ct Vdbe *pVdbe; 
8f40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73            /* Lis
8f50: 74 20 6f 66 20 61 63 74 69 76 65 20 76 69 72 74  t of active virt
8f60: 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a  ual machines */.
8f70: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74    CollSeq *pDflt
8f80: 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20  Coll;           
8f90: 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 63  /* The default c
8fa0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
8fb0: 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20  e (BINARY) */.  
8fc0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d  sqlite3_mutex *m
8fd0: 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a  utex;         /*
8fe0: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65   Connection mute
8ff0: 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20  x */.  Db *aDb; 
9000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9010: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b       /* All back
9020: 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 44  ends */.  int nD
9030: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
9040: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
9050: 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20 63 75  r of backends cu
9060: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a  rrently in use *
9070: 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 20 20  /.  int flags;  
9080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9090: 20 20 2f 2a 20 4d 69 73 63 65 6c 6c 61 6e 65 6f    /* Miscellaneo
90a0: 75 73 20 66 6c 61 67 73 2e 20 53 65 65 20 62 65  us flags. See be
90b0: 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73  low */.  i64 las
90c0: 74 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20  tRowid;         
90d0: 20 20 20 20 20 20 20 2f 2a 20 52 4f 57 49 44 20         /* ROWID 
90e0: 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69  of most recent i
90f0: 6e 73 65 72 74 20 28 73 65 65 20 61 62 6f 76 65  nsert (see above
9100: 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61  ) */.  i64 szMma
9110: 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
9120: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
9130: 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74 74 69 6e  mmap_size settin
9140: 67 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  g */.  unsigned 
9150: 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20  int openFlags;  
9160: 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61       /* Flags pa
9170: 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f  ssed to sqlite3_
9180: 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20  vfs.xOpen() */. 
9190: 20 69 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20   int errCode;   
91a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
91b0: 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  * Most recent er
91c0: 72 6f 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45  ror code (SQLITE
91d0: 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  _*) */.  int err
91e0: 4d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20  Mask;           
91f0: 20 20 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75         /* & resu
9200: 6c 74 20 63 6f 64 65 73 20 77 69 74 68 20 74 68  lt codes with th
9210: 69 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e  is before return
9220: 69 6e 67 20 2a 2f 0a 20 20 75 31 36 20 64 62 4f  ing */.  u16 dbO
9230: 70 74 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  ptFlags;        
9240: 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20         /* Flags 
9250: 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61 62 6c  to enable/disabl
9260: 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  e optimizations 
9270: 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d  */.  u8 autoComm
9280: 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
9290: 20 20 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63     /* The auto-c
92a0: 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20  ommit flag. */. 
92b0: 20 75 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20   u8 temp_store; 
92c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
92d0: 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d  * 1: file 2: mem
92e0: 6f 72 79 20 30 3a 20 64 65 66 61 75 6c 74 20 2a  ory 0: default *
92f0: 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69  /.  u8 mallocFai
9300: 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  led;            
9310: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 77 65 20    /* True if we 
9320: 68 61 76 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c  have seen a mall
9330: 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20  oc failure */.  
9340: 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b  u8 dfltLockMode;
9350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9360: 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67   Default locking
9370: 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68  -mode for attach
9380: 65 64 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e  ed dbs */.  sign
9390: 65 64 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f  ed char nextAuto
93a0: 76 61 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74  vac;      /* Aut
93b0: 6f 76 61 63 20 73 65 74 74 69 6e 67 20 61 66 74  ovac setting aft
93c0: 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30  er VACUUM if >=0
93d0: 20 2a 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73   */.  u8 suppres
93e0: 73 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  sErr;           
93f0: 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73      /* Do not is
9400: 73 75 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  sue error messag
9410: 65 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20  es if true */.  
9420: 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  u8 vtabOnConflic
9430: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
9440: 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
9450: 20 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f   for s3_vtab_on_
9460: 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20  conflict() */.  
9470: 75 38 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  u8 isTransaction
9480: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a  Savepoint;    /*
9490: 20 54 72 75 65 20 69 66 20 74 68 65 20 6f 75 74   True if the out
94a0: 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74  ermost savepoint
94b0: 20 69 73 20 61 20 54 53 20 2a 2f 0a 20 20 69 6e   is a TS */.  in
94c0: 74 20 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20  t nextPagesize; 
94d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
94e0: 61 67 65 73 69 7a 65 20 61 66 74 65 72 20 56 41  agesize after VA
94f0: 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20  CUUM if >0 */.  
9500: 75 33 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20  u32 magic;      
9510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9520: 20 4d 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f   Magic number fo
9530: 72 20 64 65 74 65 63 74 20 6c 69 62 72 61 72 79  r detect library
9540: 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74   misuse */.  int
9550: 20 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20   nChange;       
9560: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
9570: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
9580: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
9590: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61  ) */.  int nTota
95a0: 6c 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20  lChange;        
95b0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65       /* Value re
95c0: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
95d0: 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28  3_total_changes(
95e0: 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69  ) */.  int aLimi
95f0: 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54  t[SQLITE_N_LIMIT
9600: 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a  ];   /* Limits *
9610: 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74  /.  int nMaxSort
9620: 65 72 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  erMmap;         
9630: 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a    /* Maximum siz
9640: 65 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70  e of regions map
9650: 70 65 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f  ped by sorter */
9660: 0a 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65  .  struct sqlite
9670: 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20  3InitInfo {     
9680: 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
9690: 75 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74  used during init
96a0: 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20  ialization */.  
96b0: 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20    int newTnum;  
96c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
96d0: 20 52 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62   Rootpage of tab
96e0: 6c 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  le being initial
96f0: 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69  ized */.    u8 i
9700: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
9710: 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
9720: 20 64 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e   db file is bein
9730: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
9740: 0a 20 20 20 20 75 38 20 62 75 73 79 3b 20 20 20  .    u8 busy;   
9750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9760: 20 2f 2a 20 54 52 55 45 20 69 66 20 63 75 72 72   /* TRUE if curr
9770: 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69  ently initializi
9780: 6e 67 20 2a 2f 0a 20 20 20 20 75 38 20 6f 72 70  ng */.    u8 orp
9790: 68 61 6e 54 72 69 67 67 65 72 3b 20 20 20 20 20  hanTrigger;     
97a0: 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 73 74        /* Last st
97b0: 61 74 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61  atement is orpha
97c0: 6e 65 64 20 54 45 4d 50 20 74 72 69 67 67 65 72  ned TEMP trigger
97d0: 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20   */.  } init;.  
97e0: 69 6e 74 20 6e 56 64 62 65 41 63 74 69 76 65 3b  int nVdbeActive;
97f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9800: 20 4e 75 6d 62 65 72 20 6f 66 20 56 44 42 45 73   Number of VDBEs
9810: 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69   currently runni
9820: 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62  ng */.  int nVdb
9830: 65 52 65 61 64 3b 20 20 20 20 20 20 20 20 20 20  eRead;          
9840: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
9850: 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20  of active VDBEs 
9860: 74 68 61 74 20 72 65 61 64 20 6f 72 20 77 72 69  that read or wri
9870: 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62  te */.  int nVdb
9880: 65 57 72 69 74 65 3b 20 20 20 20 20 20 20 20 20  eWrite;         
9890: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
98a0: 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20  of active VDBEs 
98b0: 74 68 61 74 20 72 65 61 64 20 61 6e 64 20 77 72  that read and wr
98c0: 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64  ite */.  int nVd
98d0: 62 65 45 78 65 63 3b 20 20 20 20 20 20 20 20 20  beExec;         
98e0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
98f0: 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73   of nested calls
9900: 20 74 6f 20 56 64 62 65 45 78 65 63 28 29 20 2a   to VdbeExec() *
9910: 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e 73 69  /.  int nExtensi
9920: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  on;             
9930: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
9940: 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f 6e 73  oaded extensions
9950: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78   */.  void **aEx
9960: 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20  tension;        
9970: 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
9980: 73 68 61 72 65 64 20 6c 69 62 72 61 72 79 20 68  shared library h
9990: 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 76 6f 69 64  andles */.  void
99a0: 20 28 2a 78 54 72 61 63 65 29 28 76 6f 69 64 2a   (*xTrace)(void*
99b0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 20  ,const char*);  
99c0: 20 20 20 20 20 20 2f 2a 20 54 72 61 63 65 20 66        /* Trace f
99d0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
99e0: 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20 20 20  d *pTraceArg;   
99f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a00: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
9a10: 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63 65 20  nt to the trace 
9a20: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
9a30: 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28 76  id (*xProfile)(v
9a40: 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  oid*,const char*
9a50: 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69  ,u64);  /* Profi
9a60: 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ling function */
9a70: 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c  .  void *pProfil
9a80: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
9a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9aa0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66  Argument to prof
9ab0: 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ile function */.
9ac0: 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41    void *pCommitA
9ad0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
9ae0: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
9af0: 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61  to xCommitCallba
9b00: 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 69 6e 74  ck() */   .  int
9b10: 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61   (*xCommitCallba
9b20: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f  ck)(void*);    /
9b30: 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65  * Invoked at eve
9b40: 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20  ry commit. */.  
9b50: 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41  void *pRollbackA
9b60: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
9b70: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
9b80: 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61   xRollbackCallba
9b90: 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 76 6f 69  ck() */   .  voi
9ba0: 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c  d (*xRollbackCal
9bb0: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f  lback)(void*); /
9bc0: 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65  * Invoked at eve
9bd0: 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20  ry commit. */.  
9be0: 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41 72 67  void *pUpdateArg
9bf0: 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70 64 61  ;.  void (*xUpda
9c00: 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  teCallback)(void
9c10: 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  *,int, const cha
9c20: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73  r*,const char*,s
9c30: 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69  qlite_int64);.#i
9c40: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
9c50: 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f  LE_PREUPDATE_HOO
9c60: 4b 0a 20 20 76 6f 69 64 20 2a 70 50 72 65 55 70  K.  void *pPreUp
9c70: 64 61 74 65 41 72 67 3b 20 20 20 20 20 20 20 20  dateArg;        
9c80: 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
9c90: 65 6e 74 20 74 6f 20 78 50 72 65 55 70 64 61 74  ent to xPreUpdat
9ca0: 65 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76  eCallback */.  v
9cb0: 6f 69 64 20 28 2a 78 50 72 65 55 70 64 61 74 65  oid (*xPreUpdate
9cc0: 43 61 6c 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20  Callback)(   /* 
9cd0: 52 65 67 69 73 74 65 72 65 64 20 75 73 69 6e 67  Registered using
9ce0: 20 73 71 6c 69 74 65 33 5f 70 72 65 75 70 64 61   sqlite3_preupda
9cf0: 74 65 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20  te_hook() */.   
9d00: 20 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c   void*,sqlite3*,
9d10: 69 6e 74 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c  int,char const*,
9d20: 63 68 61 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69  char const*,sqli
9d30: 74 65 33 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65  te3_int64,sqlite
9d40: 33 5f 69 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50  3_int64.  );.  P
9d50: 72 65 55 70 64 61 74 65 20 2a 70 50 72 65 55 70  reUpdate *pPreUp
9d60: 64 61 74 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  date;        /* 
9d70: 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69  Context for acti
9d80: 76 65 20 70 72 65 2d 75 70 64 61 74 65 20 63 61  ve pre-update ca
9d90: 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  llback */.#endif
9da0: 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   /* SQLITE_ENABL
9db0: 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b  E_PREUPDATE_HOOK
9dc0: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
9dd0: 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
9de0: 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b  t (*xWalCallback
9df0: 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65  )(void *, sqlite
9e00: 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
9e10: 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
9e20: 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66  *pWalArg;.#endif
9e30: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
9e40: 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69  eded)(void*,sqli
9e50: 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65  te3*,int eTextRe
9e60: 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  p,const char*);.
9e70: 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65    void(*xCollNee
9e80: 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c  ded16)(void*,sql
9e90: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
9ea0: 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  ep,const void*);
9eb0: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65  .  void *pCollNe
9ec0: 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74  ededArg;.  sqlit
9ed0: 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20  e3_value *pErr; 
9ee0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
9ef0: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
9f00: 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e  ssage */.  union
9f10: 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20   {.    volatile 
9f20: 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74 65  int isInterrupte
9f30: 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71  d; /* True if sq
9f40: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20  lite3_interrupt 
9f50: 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20  has been called 
9f60: 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f  */.    double no
9f70: 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20 20  tUsed1;         
9f80: 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a     /* Spacer */.
9f90: 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73    } u1;.  Lookas
9fa0: 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20  ide lookaside;  
9fb0: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61          /* Looka
9fc0: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66  side malloc conf
9fd0: 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66  iguration */.#if
9fe0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
9ff0: 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
a000: 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78   sqlite3_xauth x
a010: 41 75 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f  Auth;          /
a020: 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f 72 69  * Access authori
a030: 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20  zation function 
a040: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68  */.  void *pAuth
a050: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
a060: 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
a070: 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65 73 73  nt to the access
a080: 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a   auth function *
a090: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
a0a0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
a0b0: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
a0c0: 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73   int (*xProgress
a0d0: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f  )(void *);     /
a0e0: 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63  * The progress c
a0f0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
a100: 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b  d *pProgressArg;
a110: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
a120: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72  gument to the pr
a130: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
a140: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  */.  unsigned nP
a150: 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20  rogressOps;     
a160: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
a170: 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67  opcodes for prog
a180: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
a190: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
a1a0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
a1b0: 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
a1c0: 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  VTrans;         
a1d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
a1e0: 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56  cated size of aV
a1f0: 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  Trans */.  Hash 
a200: 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20  aModule;        
a210: 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75           /* popu
a220: 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74 65 33  lated by sqlite3
a230: 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29  _create_module()
a240: 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70   */.  VtabCtx *p
a250: 56 74 61 62 43 74 78 3b 20 20 20 20 20 20 20 20  VtabCtx;        
a260: 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66      /* Context f
a270: 6f 72 20 61 63 74 69 76 65 20 76 74 61 62 20 63  or active vtab c
a280: 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f  onnect/create */
a290: 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72  .  VTable **aVTr
a2a0: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
a2b0: 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c   /* Virtual tabl
a2c0: 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61  es with open tra
a2d0: 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56  nsactions */.  V
a2e0: 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65  Table *pDisconne
a2f0: 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e  ct;    /* Discon
a300: 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65  nect these in ne
a310: 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  xt sqlite3_prepa
a320: 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  re() */.#endif. 
a330: 20 46 75 6e 63 44 65 66 48 61 73 68 20 61 46 75   FuncDefHash aFu
a340: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  nc;            /
a350: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20  * Hash table of 
a360: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74  connection funct
a370: 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61  ions */.  Hash a
a380: 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20  CollSeq;        
a390: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63          /* All c
a3a0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
a3b0: 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64  es */.  BusyHand
a3c0: 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b  ler busyHandler;
a3d0: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61        /* Busy ca
a3e0: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61  llback */.  Db a
a3f0: 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20  DbStatic[2];    
a400: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61            /* Sta
a410: 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74 68  tic space for th
a420: 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b  e 2 default back
a430: 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f  ends */.  Savepo
a440: 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
a450: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
a460: 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70 6f  of active savepo
a470: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75  ints */.  int bu
a480: 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20  syTimeout;      
a490: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20          /* Busy 
a4a0: 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c  handler timeout,
a4b0: 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e   in msec */.  in
a4c0: 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t nSavepoint;   
a4d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
a4e0: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
a4f0: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
a500: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74  nts */.  int nSt
a510: 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20  atement;        
a520: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
a530: 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74 65   of nested state
a540: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
a550: 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  s  */.  i64 nDef
a560: 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
a570: 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66        /* Net def
a580: 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
a590: 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  s this transacti
a5a0: 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  on. */.  i64 nDe
a5b0: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
a5c0: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
a5d0: 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65  ferred immediate
a5e0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
a5f0: 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72    int *pnBytesFr
a600: 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eed;            
a610: 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20  /* If not NULL, 
a620: 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69  increment this i
a630: 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69  n DbFree() */.#i
a640: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
a650: 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
a660: 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
a670: 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61 72  ing variables ar
a680: 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20  e all protected 
a690: 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41  by the STATIC_MA
a6a0: 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74 65 78  STER .  ** mutex
a6b0: 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33  , not by sqlite3
a6c0: 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65  .mutex. They are
a6d0: 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e   used by code in
a6e0: 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20 2a 2a   notify.c. .  **
a6f0: 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e  .  ** When X.pUn
a700: 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d  lockConnection==
a710: 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  Y, that means th
a720: 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67 20  at X is waiting 
a730: 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e  for Y to.  ** un
a740: 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20  lock so that it 
a750: 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a  can proceed..  *
a760: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42  *.  ** When X.pB
a770: 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f  lockingConnectio
a780: 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73  n==Y, that means
a790: 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20   that something 
a7a0: 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a  that X tried.  *
a7b0: 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65  * tried to do re
a7c0: 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69  cently failed wi
a7d0: 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43  th an SQLITE_LOC
a7e0: 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f  KED error due to
a7f0: 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64   locks.  ** held
a800: 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71   by Y..  */.  sq
a810: 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67  lite3 *pBlocking
a820: 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43  Connection; /* C
a830: 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63  onnection that c
a840: 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43  aused SQLITE_LOC
a850: 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  KED */.  sqlite3
a860: 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74   *pUnlockConnect
a870: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ion;           /
a880: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  * Connection to 
a890: 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b  watch for unlock
a8a0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c   */.  void *pUnl
a8b0: 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20  ockArg;         
a8c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
a8d0: 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f  rgument to xUnlo
a8e0: 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f  ckNotify */.  vo
a8f0: 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69  id (*xUnlockNoti
a900: 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74  fy)(void **, int
a910: 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f  );  /* Unlock no
a920: 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  tify callback */
a930: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78  .  sqlite3 *pNex
a940: 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20  tBlocked;       
a950: 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74   /* Next in list
a960: 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20   of all blocked 
a970: 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23  connections */.#
a980: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
a990: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
a9a0: 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65  ICATION.  sqlite
a9b0: 33 5f 75 73 65 72 61 75 74 68 20 61 75 74 68 3b  3_userauth auth;
a9c0: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20          /* User 
a9d0: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69  authentication i
a9e0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65  nformation */.#e
a9f0: 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ndif.};../*.** A
aa00: 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76   macro to discov
aa10: 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  er the encoding 
aa20: 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a  of a database..*
aa30: 2f 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62  /.#define ENC(db
aa40: 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e  ) ((db)->aDb[0].
aa50: 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 0a 2f  pSchema->enc)../
aa60: 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
aa70: 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c  lues for the sql
aa80: 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23  ite3.flags..*/.#
aa90: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
aaa0: 62 65 54 72 61 63 65 20 20 20 20 20 20 30 78 30  beTrace      0x0
aab0: 30 30 30 30 30 30 31 20 20 2f 2a 20 54 72 75 65  0000001  /* True
aac0: 20 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65   to trace VDBE e
aad0: 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  xecution */.#def
aae0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74 65 72  ine SQLITE_Inter
aaf0: 6e 43 68 61 6e 67 65 73 20 20 30 78 30 30 30 30  nChanges  0x0000
ab00: 30 30 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69  0002  /* Uncommi
ab10: 74 74 65 64 20 48 61 73 68 20 74 61 62 6c 65 20  tted Hash table 
ab20: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
ab30: 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53  ne SQLITE_FullFS
ab40: 79 6e 63 20 20 20 20 20 20 30 78 30 30 30 30 30  ync      0x00000
ab50: 30 30 34 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c  004  /* Use full
ab60: 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61   fsync on the ba
ab70: 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ckend */.#define
ab80: 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c   SQLITE_CkptFull
ab90: 46 53 79 6e 63 20 20 30 78 30 30 30 30 30 30 30  FSync  0x0000000
aba0: 38 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66  8  /* Use full f
abb0: 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f  sync for checkpo
abc0: 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  int */.#define S
abd0: 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c  QLITE_CacheSpill
abe0: 20 20 20 20 20 30 78 30 30 30 30 30 30 31 30 20       0x00000010 
abf0: 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20   /* OK to spill 
ac00: 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23  pager cache */.#
ac10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
ac20: 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30  llColNames   0x0
ac30: 30 30 30 30 30 32 30 20 20 2f 2a 20 53 68 6f 77  0000020  /* Show
ac40: 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d   full column nam
ac50: 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a  es on SELECT */.
ac60: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
ac70: 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78  hortColNames  0x
ac80: 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f  00000040  /* Sho
ac90: 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20  w short columns 
aca0: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
acb0: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
acc0: 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30 38  s      0x0000008
acd0: 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73  0  /* Count rows
ace0: 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45   changed by INSE
acf0: 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  RT, */.         
ad00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad20: 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72   /*   DELETE, or
ad30: 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75   UPDATE and retu
ad40: 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  rn */.          
ad50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad70: 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75  /*   the count u
ad80: 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e  sing a callback.
ad90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ada0: 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20  TE_NullCallback 
adb0: 20 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a    0x00000100  /*
adc0: 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c   Invoke the call
add0: 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65  back once if the
ade0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
adf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ae10: 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73     result set is
ae20: 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
ae30: 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  e SQLITE_SqlTrac
ae40: 65 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32  e       0x000002
ae50: 30 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69  00  /* Debug pri
ae60: 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65  nt SQL as it exe
ae70: 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cutes */.#define
ae80: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
ae90: 69 6e 67 20 20 20 20 30 78 30 30 30 30 30 34 30  ing    0x0000040
aea0: 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74  0  /* Debug list
aeb0: 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f  ings of VDBE pro
aec0: 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65  grams */.#define
aed0: 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68   SQLITE_WriteSch
aee0: 65 6d 61 20 20 20 20 30 78 30 30 30 30 30 38 30  ema    0x0000080
aef0: 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61  0  /* OK to upda
af00: 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52  te SQLITE_MASTER
af10: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
af20: 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63  TE_VdbeAddopTrac
af30: 65 20 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a  e 0x00001000  /*
af40: 20 54 72 61 63 65 20 73 71 6c 69 74 65 33 56 64   Trace sqlite3Vd
af50: 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20  beAddOp() calls 
af60: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
af70: 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20  E_IgnoreChecks  
af80: 20 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20   0x00002000  /* 
af90: 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63  Do not enforce c
afa0: 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73  heck constraints
afb0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
afc0: 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74  TE_ReadUncommitt
afd0: 65 64 20 30 78 30 30 30 34 30 30 30 20 20 2f 2a  ed 0x0004000  /*
afe0: 20 46 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68   For shared-cach
aff0: 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e  e mode */.#defin
b000: 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46  e SQLITE_LegacyF
b010: 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30 38 30  ileFmt  0x000080
b020: 30 30 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65  00  /* Create ne
b030: 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66  w databases in f
b040: 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69  ormat 1 */.#defi
b050: 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65  ne SQLITE_Recove
b060: 72 79 4d 6f 64 65 20 20 20 30 78 30 30 30 31 30  ryMode   0x00010
b070: 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73  000  /* Ignore s
b080: 63 68 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a  chema errors */.
b090: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
b0a0: 65 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78  everseOrder   0x
b0b0: 30 30 30 32 30 30 30 30 20 20 2f 2a 20 52 65 76  00020000  /* Rev
b0c0: 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53  erse unordered S
b0d0: 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e  ELECTs */.#defin
b0e0: 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67  e SQLITE_RecTrig
b0f0: 67 65 72 73 20 20 20 20 30 78 30 30 30 34 30 30  gers    0x000400
b100: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65  00  /* Enable re
b110: 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73  cursive triggers
b120: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b130: 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20  TE_ForeignKeys  
b140: 20 20 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a    0x00080000  /*
b150: 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e   Enforce foreign
b160: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
b170: 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c    */.#define SQL
b180: 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20  ITE_AutoIndex   
b190: 20 20 20 30 78 30 30 31 30 30 30 30 30 20 20 2f     0x00100000  /
b1a0: 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74  * Enable automat
b1b0: 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64  ic indexes */.#d
b1c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 65  efine SQLITE_Pre
b1d0: 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30  ferBuiltin  0x00
b1e0: 32 30 30 30 30 30 20 20 2f 2a 20 50 72 65 66 65  200000  /* Prefe
b1f0: 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69  rence to built-i
b200: 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69  n funcs */.#defi
b210: 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78  ne SQLITE_LoadEx
b220: 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 34 30 30  tension  0x00400
b230: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c  000  /* Enable l
b240: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f  oad_extension */
b250: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b260: 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20 30  EnableTrigger  0
b270: 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20 54 72  x00800000  /* Tr
b280: 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69  ue to enable tri
b290: 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  ggers */.#define
b2a0: 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73   SQLITE_DeferFKs
b2b0: 20 20 20 20 20 20 20 30 78 30 31 30 30 30 30 30         0x0100000
b2c0: 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20  0  /* Defer all 
b2d0: 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  FK constraints *
b2e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b2f0: 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20  _QueryOnly      
b300: 30 78 30 32 30 30 30 30 30 30 20 20 2f 2a 20 44  0x02000000  /* D
b310: 69 73 61 62 6c 65 20 64 61 74 61 62 61 73 65 20  isable database 
b320: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
b330: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51  ne SQLITE_VdbeEQ
b340: 50 20 20 20 20 20 20 20 20 30 78 30 34 30 30 30  P        0x04000
b350: 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58  000  /* Debug EX
b360: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
b370: 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73   */.../*.** Bits
b380: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e   of the sqlite3.
b390: 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64  dbOptFlags field
b3a0: 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 62   that are used b
b3b0: 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  y the.** sqlite3
b3c0: 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51  _test_control(SQ
b3d0: 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50  LITE_TESTCTRL_OP
b3e0: 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29  TIMIZATIONS,...)
b3f0: 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a   interface to.**
b400: 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73   selectively dis
b410: 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74  able various opt
b420: 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23  imizations..*/.#
b430: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75  define SQLITE_Qu
b440: 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30  eryFlattener 0x0
b450: 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66  001   /* Query f
b460: 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65  lattening */.#de
b470: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75  fine SQLITE_Colu
b480: 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30 30 30  mnCache    0x000
b490: 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61  2   /* Column ca
b4a0: 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  che */.#define S
b4b0: 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64  QLITE_GroupByOrd
b4c0: 65 72 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a  er   0x0004   /*
b4d0: 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f   GROUPBY cover o
b4e0: 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65  f ORDERBY */.#de
b4f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74  fine SQLITE_Fact
b500: 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30  orOutConst 0x000
b510: 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  8   /* Constant 
b520: 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20  factoring */./* 
b530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
b540: 6f 74 20 75 73 65 64 20 20 20 20 30 78 30 30 31  ot used    0x001
b550: 30 20 20 20 2f 2f 20 57 61 73 3a 20 53 51 4c 49  0   // Was: SQLI
b560: 54 45 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20  TE_IdxRealAsInt 
b570: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b580: 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20  E_DistinctOpt   
b590: 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44 49 53   0x0020   /* DIS
b5a0: 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65  TINCT using inde
b5b0: 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  xes */.#define S
b5c0: 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63  QLITE_CoverIdxSc
b5d0: 61 6e 20 20 20 30 78 30 30 34 30 20 20 20 2f 2a  an   0x0040   /*
b5e0: 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20   Covering index 
b5f0: 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  scans */.#define
b600: 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49   SQLITE_OrderByI
b610: 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20 20 20  dxJoin 0x0080   
b620: 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a  /* ORDER BY of j
b630: 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a  oins via index *
b640: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b650: 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65 20 20  _SubqCoroutine  
b660: 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76 61 6c  0x0100   /* Eval
b670: 75 61 74 65 20 73 75 62 71 75 65 72 69 65 73 20  uate subqueries 
b680: 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a 2f  as coroutines */
b690: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b6a0: 54 72 61 6e 73 69 74 69 76 65 20 20 20 20 20 30  Transitive     0
b6b0: 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61 6e 73  x0200   /* Trans
b6c0: 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74  itive constraint
b6d0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b6e0: 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e  ITE_OmitNoopJoin
b6f0: 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20 4f     0x0400   /* O
b700: 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65  mit unused table
b710: 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64  s in joins */.#d
b720: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61  efine SQLITE_Sta
b730: 74 33 20 20 20 20 20 20 20 20 20 20 30 78 30 38  t3          0x08
b740: 30 30 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20  00   /* Use the 
b750: 53 51 4c 49 54 45 5f 53 54 41 54 33 20 74 61 62  SQLITE_STAT3 tab
b760: 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  le */.#define SQ
b770: 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20  LITE_AllOpts    
b780: 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20      0xffff   /* 
b790: 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  All optimization
b7a0: 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  s */../*.** Macr
b7b0: 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77  os for testing w
b7c0: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70  hether or not op
b7d0: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20  timizations are 
b7e0: 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62  enabled or disab
b7f0: 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  led..*/.#ifndef 
b800: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
b810: 54 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e 65  TIN_TEST.#define
b820: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73   OptimizationDis
b830: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
b840: 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c   (((db)->dbOptFl
b850: 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a  ags&(mask))!=0).
b860: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
b870: 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20  tionEnabled(db, 
b880: 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e  mask)   (((db)->
b890: 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b  dbOptFlags&(mask
b8a0: 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65  ))==0).#else.#de
b8b0: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
b8c0: 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61  nDisabled(db, ma
b8d0: 73 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20 4f  sk)  0.#define O
b8e0: 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c  ptimizationEnabl
b8f0: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 31  ed(db, mask)   1
b900: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52  .#endif../*.** R
b910: 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74  eturn true if it
b920: 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f   OK to factor co
b930: 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
b940: 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74  ns into the init
b950: 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f  ialization.** co
b960: 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74  de. The argument
b970: 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65   is a Parse obje
b980: 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20  ct for the code 
b990: 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64  generator..*/.#d
b9a0: 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f  efine ConstFacto
b9b0: 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43  rOk(P) ((P)->okC
b9c0: 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a  onstFactor)../*.
b9d0: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
b9e0: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
b9f0: 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a  e.magic field..*
ba00: 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72  * The numbers ar
ba10: 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61  e obtained at ra
ba20: 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f  ndom and have no
ba30: 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67   special meaning
ba40: 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20  , other.** than 
ba50: 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66  being distinct f
ba60: 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e  rom one another.
ba70: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
ba80: 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20  TE_MAGIC_OPEN   
ba90: 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a    0xa029a697  /*
baa0: 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65   Database is ope
bab0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
bac0: 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
bad0: 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f     0x9f3c2d33  /
bae0: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c  * Database is cl
baf0: 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  osed */.#define 
bb00: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43  SQLITE_MAGIC_SIC
bb10: 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30  K     0x4b771290
bb20: 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61    /* Error and a
bb30: 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f  waiting close */
bb40: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bb50: 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30  MAGIC_BUSY     0
bb60: 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61  xf03b7906  /* Da
bb70: 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79  tabase currently
bb80: 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69   in use */.#defi
bb90: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
bba0: 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37  ERROR    0xb5357
bbb0: 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54  930  /* An SQLIT
bbc0: 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f  E_MISUSE error o
bbd0: 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69  ccurred */.#defi
bbe0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
bbf0: 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66  ZOMBIE   0x64cff
bc00: 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69  c7f  /* Close wi
bc10: 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e  th last statemen
bc20: 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a  t close */../*.*
bc30: 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74  * Each SQL funct
bc40: 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62  ion is defined b
bc50: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
bc60: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   the following.*
bc70: 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 41 20  * structure.  A 
bc80: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
bc90: 73 74 72 75 63 74 75 72 65 20 69 73 20 73 74 6f  structure is sto
bca0: 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74  red in the sqlit
bcb0: 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20  e.aFunc.** hash 
bcc0: 74 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c  table.  When mul
bcd0: 74 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20  tiple functions 
bce0: 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61  have the same na
bcf0: 6d 65 2c 20 74 68 65 20 68 61 73 68 20 74 61 62  me, the hash tab
bd00: 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20  le.** points to 
bd10: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  a linked list of
bd20: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
bd30: 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  s..*/.struct Fun
bd40: 63 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41 72  cDef {.  i16 nAr
bd50: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  g;            /*
bd60: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
bd70: 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20  ents.  -1 means 
bd80: 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75  unlimited */.  u
bd90: 31 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20  16 funcFlags;   
bda0: 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62      /* Some comb
bdb0: 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54  ination of SQLIT
bdc0: 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f  E_FUNC_* */.  vo
bdd0: 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20  id *pUserData;  
bde0: 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20     /* User data 
bdf0: 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46  parameter */.  F
be00: 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20  uncDef *pNext;  
be10: 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63      /* Next func
be20: 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e  tion with same n
be30: 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ame */.  void (*
be40: 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63  xFunc)(sqlite3_c
be50: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
be60: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a  te3_value**); /*
be70: 20 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69 6f   Regular functio
be80: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53  n */.  void (*xS
be90: 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tep)(sqlite3_con
bea0: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
beb0: 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41  3_value**); /* A
bec0: 67 67 72 65 67 61 74 65 20 73 74 65 70 20 2a 2f  ggregate step */
bed0: 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c  .  void (*xFinal
bee0: 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  ize)(sqlite3_con
bef0: 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20  text*);         
bf00: 20 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65 67         /* Aggreg
bf10: 61 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f  ate finalizer */
bf20: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
bf30: 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e          /* SQL n
bf40: 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
bf50: 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65  ion. */.  FuncDe
bf60: 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f  f *pHash;      /
bf70: 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69  * Next with a di
bf80: 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74  fferent name but
bf90: 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a   the same hash *
bfa0: 2f 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74  /.  FuncDestruct
bfb0: 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b  or *pDestructor;
bfc0: 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20     /* Reference 
bfd0: 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74  counted destruct
bfe0: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d  or function */.}
bff0: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74  ;../*.** This st
c000: 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c  ructure encapsul
c010: 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63  ates a user-func
c020: 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20  tion destructor 
c030: 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20  callback (as.** 
c040: 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67  configured using
c050: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
c060: 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66  _v2()) and a ref
c070: 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20  erence counter. 
c080: 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66  When.** create_f
c090: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20  unction_v2() is 
c0a0: 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65  called to create
c0b0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68   a function with
c0c0: 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a   a destructor,.*
c0d0: 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63  * a single objec
c0e0: 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
c0f0: 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e  s allocated. Fun
c100: 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66  cDestructor.nRef
c110: 20 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74   is set to .** t
c120: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e  he number of Fun
c130: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65  cDef objects cre
c140: 61 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f  ated (either 1 o
c150: 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f  r 3, depending o
c160: 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20  n whether.** or 
c170: 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65  not the specifie
c180: 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51  d encoding is SQ
c190: 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46  LITE_ANY). The F
c1a0: 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74  uncDef.pDestruct
c1b0: 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20  or.** member of 
c1c0: 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20  each of the new 
c1d0: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
c1e0: 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20  is set to point 
c1f0: 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64  to the allocated
c200: 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74  .** FuncDestruct
c210: 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61  or..**.** Therea
c220: 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f  fter, when one o
c230: 66 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62  f the FuncDef ob
c240: 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64  jects is deleted
c250: 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a  , the reference.
c260: 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73  ** count on this
c270: 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65   object is decre
c280: 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20  mented. When it 
c290: 72 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64  reaches 0, the d
c2a0: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20  estructor.** is 
c2b0: 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20  invoked and the 
c2c0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73  FuncDestructor s
c2d0: 74 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a  tructure freed..
c2e0: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
c2f0: 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74  structor {.  int
c300: 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a   nRef;.  void (*
c310: 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
c320: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  );.  void *pUser
c330: 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  Data;.};../*.** 
c340: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
c350: 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67  for FuncDef.flag
c360: 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68  s.  Note that th
c370: 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54  e _LENGTH and _T
c380: 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20  YPEOF.** values 
c390: 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20  must correspond 
c3a0: 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  to OPFLAG_LENGTH
c3b0: 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54  ARG and OPFLAG_T
c3c0: 59 50 45 4f 46 41 52 47 2e 20 20 54 68 65 72 65  YPEOFARG.  There
c3d0: 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29  .** are assert()
c3e0: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
c3f0: 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66  he code to verif
c400: 79 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69  y this..*/.#defi
c410: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45  ne SQLITE_FUNC_E
c420: 4e 43 4d 41 53 4b 20 20 30 78 30 30 33 20 2f 2a  NCMASK  0x003 /*
c430: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
c440: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20  LITE_UTF16BE or 
c450: 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69  UTF16LE */.#defi
c460: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
c470: 49 4b 45 20 20 20 20 20 30 78 30 30 34 20 2f 2a  IKE     0x004 /*
c480: 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74   Candidate for t
c490: 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61  he LIKE optimiza
c4a0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
c4b0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45  SQLITE_FUNC_CASE
c4c0: 20 20 20 20 20 30 78 30 30 38 20 2f 2a 20 43 61       0x008 /* Ca
c4d0: 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b  se-sensitive LIK
c4e0: 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20  E-type function 
c4f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c500: 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20  E_FUNC_EPHEM    
c510: 30 78 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72  0x010 /* Ephemer
c520: 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68  al.  Delete with
c530: 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65   VDBE */.#define
c540: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45   SQLITE_FUNC_NEE
c550: 44 43 4f 4c 4c 20 30 78 30 32 30 20 2f 2a 20 73  DCOLL 0x020 /* s
c560: 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c  qlite3GetFuncCol
c570: 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20  lSeq() might be 
c580: 63 61 6c 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e  called */.#defin
c590: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45  e SQLITE_FUNC_LE
c5a0: 4e 47 54 48 20 20 20 30 78 30 34 30 20 2f 2a 20  NGTH   0x040 /* 
c5b0: 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28  Built-in length(
c5c0: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
c5d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
c5e0: 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30 38 30  C_TYPEOF   0x080
c5f0: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70   /* Built-in typ
c600: 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  eof() function *
c610: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c620: 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30  _FUNC_COUNT    0
c630: 78 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  x100 /* Built-in
c640: 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67   count(*) aggreg
c650: 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ate */.#define S
c660: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45  QLITE_FUNC_COALE
c670: 53 43 45 20 30 78 32 30 30 20 2f 2a 20 42 75 69  SCE 0x200 /* Bui
c680: 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29  lt-in coalesce()
c690: 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a   or ifnull() */.
c6a0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
c6b0: 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 34  UNC_UNLIKELY 0x4
c6c0: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75  00 /* Built-in u
c6d0: 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69  nlikely() functi
c6e0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
c6f0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
c700: 4e 54 20 30 78 38 30 30 20 2f 2a 20 43 6f 6e 73  NT 0x800 /* Cons
c710: 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76 65  tant inputs give
c720: 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70   a constant outp
c730: 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ut */.#define SQ
c740: 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
c750: 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72 75 65    0x1000 /* True
c760: 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20 6d   for min() and m
c770: 61 78 28 29 20 61 67 67 72 65 67 61 74 65 73 20  ax() aggregates 
c780: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  */../*.** The fo
c790: 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61  llowing three ma
c7a0: 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29  cros, FUNCTION()
c7b0: 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64  , LIKEFUNC() and
c7c0: 20 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65   AGGREGATE() are
c7d0: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61  .** used to crea
c7e0: 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  te the initializ
c7f0: 65 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63  ers for the Func
c800: 44 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a  Def structures..
c810: 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e  **.**   FUNCTION
c820: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
c830: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
c840: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
c850: 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
c860: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
c870: 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
c880: 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69   zName .**     i
c890: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20  mplemented by C 
c8a0: 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74  function xFunc t
c8b0: 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67  hat accepts nArg
c8c0: 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a   arguments. The.
c8d0: 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73  **     value pas
c8e0: 73 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63  sed as iArg is c
c8f0: 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29  ast to a (void*)
c900: 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61   and made availa
c910: 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68  ble.**     as th
c920: 65 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c  e user-data (sql
c930: 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29  ite3_user_data()
c940: 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69  ) for the functi
c950: 6f 6e 2e 20 49 66 20 0a 2a 2a 20 20 20 20 20 61  on. If .**     a
c960: 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74  rgument bNC is t
c970: 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51  rue, then the SQ
c980: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
c990: 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a  LL flag is set..
c9a0: 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f  **.**   VFUNCTIO
c9b0: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
c9c0: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
c9d0: 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e  .**     Like FUN
c9e0: 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20  CTION except it 
c9f0: 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45  omits the SQLITE
ca00: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66  _FUNC_CONSTANT f
ca10: 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47  lag..**.**   AGG
ca20: 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  REGATE(zName, nA
ca30: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
ca40: 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a  Step, xFinal).**
ca50: 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
ca60: 61 74 65 20 61 6e 20 61 67 67 72 65 67 61 74 65  ate an aggregate
ca70: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
ca80: 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64  tion implemented
ca90: 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43   by.**     the C
caa0: 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70   functions xStep
cab0: 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65   and xFinal. The
cac0: 20 66 69 72 73 74 20 66 6f 75 72 20 70 61 72 61   first four para
cad0: 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72  meters.**     ar
cae0: 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e  e interpreted in
caf0: 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73   the same way as
cb00: 20 74 68 65 20 66 69 72 73 74 20 34 20 70 61 72   the first 4 par
cb10: 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20  ameters to.**   
cb20: 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a    FUNCTION()..**
cb30: 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a  .**   LIKEFUNC(z
cb40: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67  Name, nArg, pArg
cb50: 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20  , flags).**     
cb60: 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
cb70: 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e   scalar function
cb80: 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61   definition of a
cb90: 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20   function zName 
cba0: 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63 63  .**     that acc
cbb0: 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65  epts nArg argume
cbc0: 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c 65  nts and is imple
cbd0: 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c 6c  mented by a call
cbe0: 20 74 6f 20 43 20 0a 2a 2a 20 20 20 20 20 66 75   to C .**     fu
cbf0: 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e  nction likeFunc.
cc00: 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20 69   Argument pArg i
cc10: 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69  s cast to a (voi
cc20: 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a  d *) and made.**
cc30: 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 61       available a
cc40: 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 75  s the function u
cc50: 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65  ser-data (sqlite
cc60: 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e 20  3_user_data()). 
cc70: 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44  The.**     FuncD
cc80: 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62 6c  ef.flags variabl
cc90: 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  e is set to the 
cca0: 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20  value passed as 
ccb0: 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20  the flags.**    
ccc0: 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23   parameter..*/.#
ccd0: 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28  define FUNCTION(
cce0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
ccf0: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
cd00: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
cd10: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
cd20: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
cd30: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
cd40: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
cd50: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
cd60: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
cd70: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
cd80: 30 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43  0}.#define VFUNC
cd90: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
cda0: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
cdb0: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
cdc0: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
cdd0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
cde0: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
cdf0: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
ce00: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
ce10: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
ce20: 30 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54  0}.#define FUNCT
ce30: 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ION2(zName, nArg
ce40: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
ce50: 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  nc, extraFlags) 
ce60: 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45  \.  {nArg,SQLITE
ce70: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
ce80: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
ce90: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
cea0: 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73  COLL)|extraFlags
ceb0: 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54  ,\.   SQLITE_INT
cec0: 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
ced0: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  , xFunc, 0, 0, #
cee0: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
cef0: 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f  fine STR_FUNCTIO
cf00: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70  N(zName, nArg, p
cf10: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
cf20: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
cf30: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
cf40: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e  |SQLITE_UTF8|(bN
cf50: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
cf60: 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41  EDCOLL), \.   pA
cf70: 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  rg, 0, xFunc, 0,
cf80: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
cf90: 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46 55  }.#define LIKEFU
cfa0: 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  NC(zName, nArg, 
cfb0: 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20  arg, flags) \.  
cfc0: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
cfd0: 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
cfe0: 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c  TE_UTF8|flags, \
cff0: 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67 2c  .   (void *)arg,
d000: 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c   0, likeFunc, 0,
d010: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
d020: 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
d030: 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
d040: 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c   arg, nc, xStep,
d050: 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41   xFinal) \.  {nA
d060: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
d070: 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  (nc*SQLITE_FUNC_
d080: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
d090: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
d0a0: 52 28 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53  R(arg), 0, 0, xS
d0b0: 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d  tep,xFinal,#zNam
d0c0: 65 2c 30 2c 30 7d 0a 23 64 65 66 69 6e 65 20 41  e,0,0}.#define A
d0d0: 47 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c  GGREGATE2(zName,
d0e0: 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
d0f0: 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65  xStep, xFinal, e
d100: 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b  xtraFlags) \.  {
d110: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
d120: 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e  8|(nc*SQLITE_FUN
d130: 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72  C_NEEDCOLL)|extr
d140: 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c  aFlags, \.   SQL
d150: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
d160: 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70  rg), 0, 0, xStep
d170: 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30  ,xFinal,#zName,0
d180: 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63  ,0}../*.** All c
d190: 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  urrent savepoint
d1a0: 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
d1b0: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74  a linked list st
d1c0: 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c  arting at.** sql
d1d0: 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e  ite3.pSavepoint.
d1e0: 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
d1f0: 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69  nt in the list i
d200: 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  s the most recen
d210: 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61  tly.** opened sa
d220: 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69  vepoint. Savepoi
d230: 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f  nts are added to
d240: 20 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65   the list by the
d250: 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65   vdbe.** OP_Save
d260: 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  point instructio
d270: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76  n..*/.struct Sav
d280: 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20  epoint {.  char 
d290: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
d2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d2b0: 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65  * Savepoint name
d2c0: 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64   (nul-terminated
d2d0: 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  ) */.  i64 nDefe
d2e0: 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20  rredCons;       
d2f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
d300: 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64  mber of deferred
d310: 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a   fk violations *
d320: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
d330: 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20  dImmCons;       
d340: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
d350: 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d  r of deferred im
d360: 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70  m fk. */.  Savep
d370: 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  oint *pNext;    
d380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d390: 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69  * Parent savepoi
d3a0: 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d  nt (if any) */.}
d3b0: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
d3c0: 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20  lowing are used 
d3d0: 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  as the second pa
d3e0: 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74  rameter to sqlit
d3f0: 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a  e3Savepoint(),.*
d400: 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20  * and as the P1 
d410: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
d420: 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
d430: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65  truction..*/.#de
d440: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42  fine SAVEPOINT_B
d450: 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66  EGIN      0.#def
d460: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45  ine SAVEPOINT_RE
d470: 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69  LEASE    1.#defi
d480: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  ne SAVEPOINT_ROL
d490: 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a  LBACK   2.../*.*
d4a0: 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f  * Each SQLite mo
d4b0: 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61  dule (virtual ta
d4c0: 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20  ble definition) 
d4d0: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
d4e0: 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
d4f0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
d500: 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20  ructure, stored 
d510: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61  in the sqlite3.a
d520: 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74  Module.** hash t
d530: 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  able..*/.struct 
d540: 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74  Module {.  const
d550: 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
d560: 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20  *pModule;       
d570: 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e  /* Callback poin
d580: 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ters */.  const 
d590: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
d5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d5b0: 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f  * Name passed to
d5c0: 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29   create_module()
d5d0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78   */.  void *pAux
d5e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d5f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41             /* pA
d600: 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65  ux passed to cre
d610: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
d620: 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f    void (*xDestro
d630: 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20  y)(void *);     
d640: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65         /* Module
d650: 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63   destructor func
d660: 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  tion */.};../*.*
d670: 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * information ab
d680: 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  out each column 
d690: 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  of an SQL table 
d6a0: 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e  is held in an in
d6b0: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
d6c0: 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  s structure..*/.
d6d0: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a  struct Column {.
d6e0: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
d6f0: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
d700: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45  is column */.  E
d710: 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20  xpr *pDflt;     
d720: 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65  /* Default value
d730: 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20   of this column 
d740: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c 74  */.  char *zDflt
d750: 3b 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61  ;     /* Origina
d760: 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 64 65  l text of the de
d770: 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20  fault value */. 
d780: 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 20   char *zType;   
d790: 20 20 2f 2a 20 44 61 74 61 20 74 79 70 65 20 66    /* Data type f
d7a0: 6f 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  or this column *
d7b0: 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b  /.  char *zColl;
d7c0: 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e       /* Collatin
d7d0: 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20  g sequence.  If 
d7e0: 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65  NULL, use the de
d7f0: 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f  fault */.  u8 no
d800: 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41  tNull;      /* A
d810: 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68  n OE_ code for h
d820: 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55  andling a NOT NU
d830: 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  LL constraint */
d840: 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
d850: 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68  ;   /* One of th
d860: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e  e SQLITE_AFF_...
d870: 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20   values */.  u8 
d880: 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  szEst;        /*
d890: 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20   Estimated size 
d8a0: 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20  of this column. 
d8b0: 20 49 4e 54 3d 3d 31 20 2a 2f 0a 20 20 75 38 20   INT==1 */.  u8 
d8c0: 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a  colFlags;     /*
d8d0: 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74   Boolean propert
d8e0: 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41  ies.  See COLFLA
d8f0: 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77  G_ defines below
d900: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77   */.};../* Allow
d910: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f  ed values for Co
d920: 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a  lumn.colFlags:.*
d930: 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
d940: 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30  G_PRIMKEY  0x000
d950: 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69  1    /* Column i
d960: 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72  s part of the pr
d970: 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65  imary key */.#de
d980: 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44  fine COLFLAG_HID
d990: 44 45 4e 20 20 20 30 78 30 30 30 32 20 20 20 20  DEN   0x0002    
d9a0: 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75  /* A hidden colu
d9b0: 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20  mn in a virtual 
d9c0: 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  table */../*.** 
d9d0: 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71  A "Collating Seq
d9e0: 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65  uence" is define
d9f0: 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  d by an instance
da00: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
da10: 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20  g.** structure. 
da20: 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20  Conceptually, a 
da30: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
da40: 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  ce consists of a
da50: 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63   name and.** a c
da60: 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e  omparison routin
da70: 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  e that defines t
da80: 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74  he order of that
da90: 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a   sequence..**.**
daa0: 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70   If CollSeq.xCmp
dab0: 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61   is NULL, it mea
dac0: 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63  ns that the.** c
dad0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
dae0: 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20  e is undefined. 
daf0: 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f   Indices built o
db00: 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a  n an undefined.*
db10: 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * collating sequ
db20: 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20  ence may not be 
db30: 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e  read or written.
db40: 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53  .*/.struct CollS
db50: 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  eq {.  char *zNa
db60: 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  me;          /* 
db70: 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c  Name of the coll
db80: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20  ating sequence, 
db90: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f  UTF-8 encoded */
dba0: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
dbb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
dbc0: 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65   encoding handle
dbd0: 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20  d by xCmp() */. 
dbe0: 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20   void *pUser;   
dbf0: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
dc00: 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70  argument to xCmp
dc10: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43  () */.  int (*xC
dc20: 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  mp)(void*,int, c
dc30: 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
dc40: 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20   const void*);. 
dc50: 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f   void (*xDel)(vo
dc60: 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75  id*);  /* Destru
dc70: 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a  ctor for pUser *
dc80: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f  /.};../*.** A so
dc90: 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20  rt order can be 
dca0: 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45  either ASC or DE
dcb0: 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  SC..*/.#define S
dcc0: 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20  QLITE_SO_ASC    
dcd0: 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e     0  /* Sort in
dce0: 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
dcf0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dd00: 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20  TE_SO_DESC      
dd10: 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73  1  /* Sort in as
dd20: 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f  cending order */
dd30: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61  ../*.** Column a
dd40: 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a  ffinity types..*
dd50: 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20  *.** These used 
dd60: 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63  to have mnemonic
dd70: 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66   name like 'i' f
dd80: 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  or SQLITE_AFF_IN
dd90: 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27  TEGER and.** 't'
dda0: 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
ddb0: 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61  TEXT.  But we ca
ddc0: 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20  n save a little 
ddd0: 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76  space and improv
dde0: 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61  e.** the speed a
ddf0: 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65   little by numbe
de00: 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20  ring the values 
de10: 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20  consecutively.  
de20: 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65  .**.** But rathe
de30: 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74  r than start wit
de40: 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67  h 0 or 1, we beg
de50: 69 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54 68  in with 'A'.  Th
de60: 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20  at way,.** when 
de70: 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74  multiple affinit
de80: 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63  y types are conc
de90: 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20  atenated into a 
dea0: 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73  string and.** us
deb0: 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65  ed as the P4 ope
dec0: 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20  rand, they will 
ded0: 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65  be more readable
dee0: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73  ..**.** Note als
def0: 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72  o that the numer
df00: 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f  ic types are gro
df10: 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f  uped together so
df20: 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a   that testing.**
df30: 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74   for a numeric t
df40: 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ype is a single 
df50: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64  comparison.  And
df60: 20 74 68 65 20 4e 4f 4e 45 20 74 79 70 65 20 69   the NONE type i
df70: 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66  s first..*/.#def
df80: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  ine SQLITE_AFF_N
df90: 4f 4e 45 20 20 20 20 20 27 41 27 0a 23 64 65 66  ONE     'A'.#def
dfa0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  ine SQLITE_AFF_T
dfb0: 45 58 54 20 20 20 20 20 27 42 27 0a 23 64 65 66  EXT     'B'.#def
dfc0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  ine SQLITE_AFF_N
dfd0: 55 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65 66  UMERIC  'C'.#def
dfe0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  ine SQLITE_AFF_I
dff0: 4e 54 45 47 45 52 20 20 27 44 27 0a 23 64 65 66  NTEGER  'D'.#def
e000: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52  ine SQLITE_AFF_R
e010: 45 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65  EAL     'E'..#de
e020: 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75  fine sqlite3IsNu
e030: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29  mericAffinity(X)
e040: 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41    ((X)>=SQLITE_A
e050: 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a  FF_NUMERIC)../*.
e060: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46  ** The SQLITE_AF
e070: 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61  F_MASK values ma
e080: 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e  sks off the sign
e090: 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20  ificant bits of 
e0a0: 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76  an.** affinity v
e0b0: 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e  alue. .*/.#defin
e0c0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
e0d0: 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a  K     0x47../*.*
e0e0: 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74  * Additional bit
e0f0: 20 76 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e   values that can
e100: 20 62 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e   be ORed with an
e110: 20 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75   affinity withou
e120: 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68  t.** changing th
e130: 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a  e affinity..**.*
e140: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54  * The SQLITE_NOT
e150: 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63  NULL flag is a c
e160: 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55  ombination of NU
e170: 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e  LLEQ and JUMPIFN
e180: 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65  ULL..** It cause
e190: 73 20 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f  s an assert() to
e1a0: 20 66 69 72 65 20 69 66 20 65 69 74 68 65 72 20   fire if either 
e1b0: 6f 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d  operand to a com
e1c0: 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61  parison.** opera
e1d0: 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74  tor is NULL.  It
e1e0: 20 69 73 20 61 64 64 65 64 20 74 6f 20 63 65 72   is added to cer
e1f0: 74 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20  tain comparison 
e200: 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20  operators to.** 
e210: 70 72 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f  prove that the o
e220: 70 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61  perands are alwa
e230: 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ys NOT NULL..*/.
e240: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a  #define SQLITE_J
e250: 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30  UMPIFNULL   0x10
e260: 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69    /* jumps if ei
e270: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
e280: 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
e290: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20  SQLITE_STOREP2  
e2a0: 20 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f      0x20  /* Sto
e2b0: 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  re result in reg
e2c0: 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e  [P2] rather than
e2d0: 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65   jump */.#define
e2e0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20   SQLITE_NULLEQ  
e2f0: 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55       0x80  /* NU
e300: 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  LL=NULL */.#defi
e310: 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c  ne SQLITE_NOTNUL
e320: 4c 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20  L      0x90  /* 
e330: 41 73 73 65 72 74 20 74 68 61 74 20 6f 70 65 72  Assert that oper
e340: 61 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e  ands are never N
e350: 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  ULL */../*.** An
e360: 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20   object of this 
e370: 74 79 70 65 20 69 73 20 63 72 65 61 74 65 64 20  type is created 
e380: 66 6f 72 20 65 61 63 68 20 76 69 72 74 75 61 6c  for each virtual
e390: 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69   table present i
e3a0: 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73  n.** the databas
e3b0: 65 20 73 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a  e schema. .**.**
e3c0: 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65   If the database
e3d0: 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65   schema is share
e3e0: 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69 73  d, then there is
e3f0: 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66   one instance of
e400: 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75   this.** structu
e410: 72 65 20 66 6f 72 20 65 61 63 68 20 64 61 74 61  re for each data
e420: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
e430: 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74 20  (sqlite3*) that 
e440: 75 73 65 73 20 74 68 65 20 73 68 61 72 65 64 0a  uses the shared.
e450: 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20  ** schema. This 
e460: 69 73 20 62 65 63 61 75 73 65 20 65 61 63 68 20  is because each 
e470: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
e480: 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74 73  ion requires its
e490: 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69   own unique.** i
e4a0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 73  nstance of the s
e4b0: 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
e4c0: 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63 65  dle used to acce
e4d0: 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  ss the virtual t
e4e0: 61 62 6c 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65  able .** impleme
e4f0: 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33  ntation. sqlite3
e500: 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63  _vtab* handles c
e510: 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64  an not be shared
e520: 20 62 65 74 77 65 65 6e 20 0a 2a 2a 20 64 61 74   between .** dat
e530: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
e540: 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65  s, even when the
e550: 20 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d   rest of the in-
e560: 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 20  memory database 
e570: 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68  .** schema is sh
e580: 61 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70  ared, as the imp
e590: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65  lementation ofte
e5a0: 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64 61 74  n stores the dat
e5b0: 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  abase.** connect
e5c0: 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65  ion handle passe
e5d0: 64 20 74 6f 20 69 74 20 76 69 61 20 74 68 65 20  d to it via the 
e5e0: 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43  xConnect() or xC
e5f0: 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a  reate() method.*
e600: 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c  * during initial
e610: 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c  ization internal
e620: 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62 61 73  ly. This databas
e630: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
e640: 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20  dle may.** then 
e650: 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20 76  be used by the v
e660: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
e670: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61  lementation to a
e680: 63 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65  ccess real table
e690: 73 20 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65  s .** within the
e6a0: 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68   database. So th
e6b0: 61 74 20 74 68 65 79 20 61 70 70 65 61 72 20 61  at they appear a
e6c0: 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 61  s part of the ca
e6d0: 6c 6c 65 72 73 20 0a 2a 2a 20 74 72 61 6e 73 61  llers .** transa
e6e0: 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63  ction, these acc
e6f0: 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65  esses need to be
e700: 20 6d 61 64 65 20 76 69 61 20 74 68 65 20 73 61   made via the sa
e710: 6d 65 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20  me database .** 
e720: 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68  connection as th
e730: 61 74 20 75 73 65 64 20 74 6f 20 65 78 65 63 75  at used to execu
e740: 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e  te SQL operation
e750: 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c  s on the virtual
e760: 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c   table..**.** Al
e770: 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  l VTable objects
e780: 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
e790: 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62   to a single tab
e7a0: 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a  le in a shared.*
e7b0: 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  * database schem
e7c0: 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20  a are initially 
e7d0: 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b  stored in a link
e7e0: 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20  ed-list pointed 
e7f0: 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62  to by.** the Tab
e800: 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65  le.pVTable membe
e810: 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68  r variable of th
e820: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
e830: 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a  Table object..**
e840: 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33   When an sqlite3
e850: 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65 72 61  _prepare() opera
e860: 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64  tion is required
e870: 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76   to access the v
e880: 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c  irtual.** table,
e890: 20 69 74 20 73 65 61 72 63 68 65 73 20 74 68 65   it searches the
e8a0: 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56 54   list for the VT
e8b0: 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73  able that corres
e8c0: 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20  ponds to the.** 
e8d0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
e8e0: 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72  ion doing the pr
e8f0: 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f  eparing so as to
e900: 20 75 73 65 20 74 68 65 20 63 6f 72 72 65 63 74   use the correct
e910: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62  .** sqlite3_vtab
e920: 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20  * handle in the 
e930: 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a  compiled query..
e940: 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e  **.** When an in
e950: 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62  -memory Table ob
e960: 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65 64 20  ject is deleted 
e970: 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65  (for example whe
e980: 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  n the.** schema 
e990: 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65  is being reloade
e9a0: 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f  d for some reaso
e9b0: 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f  n), the VTable o
e9c0: 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 20 0a  bjects are not .
e9d0: 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74  ** deleted and t
e9e0: 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  he sqlite3_vtab*
e9f0: 20 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74   handles are not
ea00: 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64   xDisconnect()ed
ea10: 20 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79   .** immediately
ea20: 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20  . Instead, they 
ea30: 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74  are moved from t
ea40: 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65  he Table.pVTable
ea50: 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74   list to.** anot
ea60: 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  her linked list 
ea70: 68 65 61 64 65 64 20 62 79 20 74 68 65 20 73 71  headed by the sq
ea80: 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63  lite3.pDisconnec
ea90: 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a  t member of the.
eaa0: 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ** corresponding
eab0: 20 73 71 6c 69 74 65 33 20 73 74 72 75 63 74 75   sqlite3 structu
eac0: 72 65 2e 20 54 68 65 79 20 61 72 65 20 74 68 65  re. They are the
ead0: 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f  n deleted/xDisco
eae0: 6e 6e 65 63 74 65 64 20 0a 2a 2a 20 6e 65 78 74  nnected .** next
eaf0: 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65 6e   time a statemen
eb00: 74 20 69 73 20 70 72 65 70 61 72 65 64 20 75 73  t is prepared us
eb10: 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65 33  ing said sqlite3
eb20: 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65 0a  *. This is done.
eb30: 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64  ** to avoid dead
eb40: 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76 6f  lock issues invo
eb50: 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73  lving multiple s
eb60: 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74  qlite3.mutex mut
eb70: 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74  exes..** Refer t
eb80: 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65  o comments above
eb90: 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65   function sqlite
eba0: 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
ebb0: 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c  ) for an.** expl
ebc0: 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77 68  anation as to wh
ebd0: 79 20 69 74 20 69 73 20 73 61 66 65 20 74 6f 20  y it is safe to 
ebe0: 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f 20  add an entry to 
ebf0: 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  an sqlite3.pDisc
ec00: 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77  onnect.** list w
ec10: 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74  ithout holding t
ec20: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
ec30: 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d   sqlite3.mutex m
ec40: 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  utex..**.** The 
ec50: 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63  memory for objec
ec60: 74 73 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ts of this type 
ec70: 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61  is always alloca
ec80: 74 65 64 20 62 79 20 0a 2a 2a 20 73 71 6c 69 74  ted by .** sqlit
ec90: 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73  e3DbMalloc(), us
eca0: 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ing the connecti
ecb0: 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64  on handle stored
ecc0: 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73   in VTable.db as
ecd0: 20 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61   .** the first a
ece0: 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  rgument..*/.stru
ecf0: 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71  ct VTable {.  sq
ed00: 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
ed10: 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
ed20: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  ase connection a
ed30: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
ed40: 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d  his table */.  M
ed50: 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20  odule *pMod;    
ed60: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
ed70: 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d  ter to module im
ed80: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a  plementation */.
ed90: 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
eda0: 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50  pVtab;      /* P
edb0: 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69  ointer to vtab i
edc0: 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74  nstance */.  int
edd0: 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
ede0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
edf0: 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
ee00: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 2a  this structure *
ee10: 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69  /.  u8 bConstrai
ee20: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
ee30: 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61   True if constra
ee40: 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74  ints are support
ee50: 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76  ed */.  int iSav
ee60: 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20  epoint;         
ee70: 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68    /* Depth of th
ee80: 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63  e SAVEPOINT stac
ee90: 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70  k */.  VTable *p
eea0: 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
eeb0: 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b   /* Next in link
eec0: 65 64 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f  ed list (see abo
eed0: 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ve) */.};../*.**
eee0: 20 45 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20   Each SQL table 
eef0: 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
ef00: 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 20 69  n memory by an i
ef10: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 0a 2a  nstance of the.*
ef20: 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  * following stru
ef30: 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62  cture..**.** Tab
ef40: 6c 65 2e 7a 4e 61 6d 65 20 69 73 20 74 68 65 20  le.zName is the 
ef50: 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
ef60: 65 2e 20 20 54 68 65 20 63 61 73 65 20 6f 66 20  e.  The case of 
ef70: 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a 20  the original.** 
ef80: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
ef90: 74 65 6d 65 6e 74 20 69 73 20 73 74 6f 72 65 64  tement is stored
efa0: 2c 20 62 75 74 20 63 61 73 65 20 69 73 20 6e 6f  , but case is no
efb0: 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 66 6f  t significant fo
efc0: 72 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 73  r.** comparisons
efd0: 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 6e 43  ..**.** Table.nC
efe0: 6f 6c 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  ol is the number
eff0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
f000: 68 69 73 20 74 61 62 6c 65 2e 20 20 54 61 62 6c  his table.  Tabl
f010: 65 2e 61 43 6f 6c 20 69 73 20 61 0a 2a 2a 20 70  e.aCol is a.** p
f020: 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 61 72 72  ointer to an arr
f030: 61 79 20 6f 66 20 43 6f 6c 75 6d 6e 20 73 74 72  ay of Column str
f040: 75 63 74 75 72 65 73 2c 20 6f 6e 65 20 66 6f 72  uctures, one for
f050: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a   each column..**
f060: 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65  .** If the table
f070: 20 68 61 73 20 61 6e 20 49 4e 54 45 47 45 52 20   has an INTEGER 
f080: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65  PRIMARY KEY, the
f090: 6e 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73  n Table.iPKey is
f0a0: 20 74 68 65 20 69 6e 64 65 78 20 6f 66 0a 2a 2a   the index of.**
f0b0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 68 61 74   the column that
f0c0: 20 69 73 20 74 68 61 74 20 6b 65 79 2e 20 20 20   is that key.   
f0d0: 4f 74 68 65 72 77 69 73 65 20 54 61 62 6c 65 2e  Otherwise Table.
f0e0: 69 50 4b 65 79 20 69 73 20 6e 65 67 61 74 69 76  iPKey is negativ
f0f0: 65 2e 20 20 4e 6f 74 65 0a 2a 2a 20 74 68 61 74  e.  Note.** that
f100: 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66   the datatype of
f110: 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
f120: 20 6d 75 73 74 20 62 65 20 49 4e 54 45 47 45 52   must be INTEGER
f130: 20 66 6f 72 20 74 68 69 73 20 66 69 65 6c 64 20   for this field 
f140: 74 6f 0a 2a 2a 20 62 65 20 73 65 74 2e 20 20 41  to.** be set.  A
f150: 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  n INTEGER PRIMAR
f160: 59 20 4b 45 59 20 69 73 20 75 73 65 64 20 61 73  Y KEY is used as
f170: 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 65   the rowid for e
f180: 61 63 68 20 72 6f 77 20 6f 66 0a 2a 2a 20 74 68  ach row of.** th
f190: 65 20 74 61 62 6c 65 2e 20 20 49 66 20 61 20 74  e table.  If a t
f1a0: 61 62 6c 65 20 68 61 73 20 6e 6f 20 49 4e 54 45  able has no INTE
f1b0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
f1c0: 20 74 68 65 6e 20 61 20 72 61 6e 64 6f 6d 20 72   then a random r
f1d0: 6f 77 69 64 0a 2a 2a 20 69 73 20 67 65 6e 65 72  owid.** is gener
f1e0: 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f  ated for each ro
f1f0: 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 20  w of the table. 
f200: 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65   TF_HasPrimaryKe
f210: 79 20 69 73 20 73 65 74 20 69 66 0a 2a 2a 20 74  y is set if.** t
f220: 68 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e 79  he table has any
f230: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 49 4e   PRIMARY KEY, IN
f240: 54 45 47 45 52 20 6f 72 20 6f 74 68 65 72 77 69  TEGER or otherwi
f250: 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e  se..**.** Table.
f260: 74 6e 75 6d 20 69 73 20 74 68 65 20 70 61 67 65  tnum is the page
f270: 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
f280: 72 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65 20  root BTree page 
f290: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 6e 20  of the table in 
f2a0: 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  the.** database 
f2b0: 66 69 6c 65 2e 20 20 49 66 20 54 61 62 6c 65 2e  file.  If Table.
f2c0: 69 44 62 20 69 73 20 74 68 65 20 69 6e 64 65 78  iDb is the index
f2d0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
f2e0: 20 74 61 62 6c 65 20 62 61 63 6b 65 6e 64 0a 2a   table backend.*
f2f0: 2a 20 69 6e 20 73 71 6c 69 74 65 2e 61 44 62 5b  * in sqlite.aDb[
f300: 5d 2e 20 20 30 20 69 73 20 66 6f 72 20 74 68 65  ].  0 is for the
f310: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 61   main database a
f320: 6e 64 20 31 20 69 73 20 66 6f 72 20 74 68 65 20  nd 1 is for the 
f330: 66 69 6c 65 20 74 68 61 74 0a 2a 2a 20 68 6f 6c  file that.** hol
f340: 64 73 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ds temporary tab
f350: 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e  les and indices.
f360: 20 20 49 66 20 54 46 5f 45 70 68 65 6d 65 72 61    If TF_Ephemera
f370: 6c 20 69 73 20 73 65 74 0a 2a 2a 20 74 68 65 6e  l is set.** then
f380: 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 73 74   the table is st
f390: 6f 72 65 64 20 69 6e 20 61 20 66 69 6c 65 20 74  ored in a file t
f3a0: 68 61 74 20 69 73 20 61 75 74 6f 6d 61 74 69 63  hat is automatic
f3b0: 61 6c 6c 79 20 64 65 6c 65 74 65 64 0a 2a 2a 20  ally deleted.** 
f3c0: 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 63 75  when the VDBE cu
f3d0: 72 73 6f 72 20 74 6f 20 74 68 65 20 74 61 62 6c  rsor to the tabl
f3e0: 65 20 69 73 20 63 6c 6f 73 65 64 2e 20 20 49 6e  e is closed.  In
f3f0: 20 74 68 69 73 20 63 61 73 65 20 54 61 62 6c 65   this case Table
f400: 2e 74 6e 75 6d 20 0a 2a 2a 20 72 65 66 65 72 73  .tnum .** refers
f410: 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d   VDBE cursor num
f420: 62 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74  ber that holds t
f430: 68 65 20 74 61 62 6c 65 20 6f 70 65 6e 2c 20 6e  he table open, n
f440: 6f 74 20 74 6f 20 74 68 65 20 72 6f 6f 74 0a 2a  ot to the root.*
f450: 2a 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 20 20  * page number.  
f460: 54 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 73  Transient tables
f470: 20 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f 6c   are used to hol
f480: 64 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  d the results of
f490: 20 61 0a 2a 2a 20 73 75 62 2d 71 75 65 72 79 20   a.** sub-query 
f4a0: 74 68 61 74 20 61 70 70 65 61 72 73 20 69 6e 73  that appears ins
f4b0: 74 65 61 64 20 6f 66 20 61 20 72 65 61 6c 20 74  tead of a real t
f4c0: 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65  able name in the
f4d0: 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 0a 2a 2a   FROM clause .**
f4e0: 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
f4f0: 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  tement..*/.struc
f500: 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72  t Table {.  char
f510: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
f520: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
f530: 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f  table or view */
f540: 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b  .  Column *aCol;
f550: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72          /* Infor
f560: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
f570: 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e  h column */.  In
f580: 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20  dex *pIndex;    
f590: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51     /* List of SQ
f5a0: 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69  L indexes on thi
f5b0: 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65  s table. */.  Se
f5c0: 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
f5d0: 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74     /* NULL for t
f5e0: 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74  ables.  Points t
f5f0: 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20  o definition if 
f600: 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65  a view. */.  FKe
f610: 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20  y *pFKey;       
f620: 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74    /* Linked list
f630: 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20   of all foreign 
f640: 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74 61 62  keys in this tab
f650: 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43  le */.  char *zC
f660: 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20  olAff;       /* 
f670: 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20  String defining 
f680: 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  the affinity of 
f690: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23  each column */.#
f6a0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
f6b0: 49 54 5f 43 48 45 43 4b 0a 20 20 45 78 70 72 4c  IT_CHECK.  ExprL
f6c0: 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20  ist *pCheck;    
f6d0: 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e  /* All CHECK con
f6e0: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 65 6e 64  straints */.#end
f6f0: 69 66 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77  if.  LogEst nRow
f700: 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74  LogEst;   /* Est
f710: 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74  imated rows in t
f720: 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69  able - from sqli
f730: 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a  te_stat1 table *
f740: 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20  /.  int tnum;   
f750: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74           /* Root
f760: 20 42 54 72 65 65 20 6e 6f 64 65 20 66 6f 72 20   BTree node for 
f770: 74 68 69 73 20 74 61 62 6c 65 20 28 73 65 65 20  this table (see 
f780: 6e 6f 74 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20  note above) */. 
f790: 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20   i16 iPKey;     
f7a0: 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20        /* If not 
f7b0: 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20 61 43  negative, use aC
f7c0: 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65  ol[iPKey] as the
f7d0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
f7e0: 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20    i16 nCol;     
f7f0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
f800: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
f810: 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75  his table */.  u
f820: 31 36 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  16 nRef;        
f830: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
f840: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69   pointers to thi
f850: 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67  s Table */.  Log
f860: 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20 20  Est szTabRow;   
f870: 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73    /* Estimated s
f880: 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62 6c  ize of each tabl
f890: 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20 2a  e row in bytes *
f8a0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
f8b0: 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a  ENABLE_COSTMULT.
f8c0: 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c    LogEst costMul
f8d0: 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d  t;     /* Cost m
f8e0: 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75 73  ultiplier for us
f8f0: 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ing this table *
f900: 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 74 61  /.#endif.  u8 ta
f910: 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  bFlags;         
f920: 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20  /* Mask of TF_* 
f930: 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 6b  values */.  u8 k
f940: 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  eyConf;         
f950: 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69   /* What to do i
f960: 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65  n case of unique
f970: 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e  ness conflict on
f980: 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65   iPKey */.#ifnde
f990: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c  f SQLITE_OMIT_AL
f9a0: 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61  TERTABLE.  int a
f9b0: 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20  ddColOffset;    
f9c0: 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45  /* Offset in CRE
f9d0: 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74  ATE TABLE stmt t
f9e0: 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75  o add a new colu
f9f0: 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  mn */.#endif.#if
fa00: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
fa10: 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
fa20: 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20  int nModuleArg; 
fa30: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
fa40: 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  f arguments to t
fa50: 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63  he module */.  c
fa60: 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72  har **azModuleAr
fa70: 67 3b 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 61  g;  /* Text of a
fa80: 6c 6c 20 6d 6f 64 75 6c 65 20 61 72 67 73 2e 20  ll module args. 
fa90: 5b 30 5d 20 69 73 20 6d 6f 64 75 6c 65 20 6e 61  [0] is module na
faa0: 6d 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  me */.  VTable *
fab0: 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20  pVTable;     /* 
fac0: 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f  List of VTable o
fad0: 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69  bjects. */.#endi
fae0: 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  f.  Trigger *pTr
faf0: 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74  igger;   /* List
fb00: 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74 6f   of triggers sto
fb10: 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a  red in pSchema *
fb20: 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
fb30: 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65  ema;     /* Sche
fb40: 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ma that contains
fb50: 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
fb60: 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d   Table *pNextZom
fb70: 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e  bie;  /* Next on
fb80: 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62   the Parse.pZomb
fb90: 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b  ieTab list */.};
fba0: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
fbb0: 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65  values for Table
fbc0: 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2f 0a 23 64  .tabFlags..*/.#d
fbd0: 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c  efine TF_Readonl
fbe0: 79 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20  y        0x01   
fbf0: 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79   /* Read-only sy
fc00: 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64  stem table */.#d
fc10: 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72  efine TF_Ephemer
fc20: 61 6c 20 20 20 20 20 20 20 30 78 30 32 20 20 20  al       0x02   
fc30: 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c   /* An ephemeral
fc40: 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
fc50: 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b  e TF_HasPrimaryK
fc60: 65 79 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20  ey   0x04    /* 
fc70: 54 61 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d  Table has a prim
fc80: 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  ary key */.#defi
fc90: 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d  ne TF_Autoincrem
fca0: 65 6e 74 20 20 20 30 78 30 38 20 20 20 20 2f 2a  ent   0x08    /*
fcb0: 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   Integer primary
fcc0: 20 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63 72   key is autoincr
fcd0: 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  ement */.#define
fce0: 20 54 46 5f 56 69 72 74 75 61 6c 20 20 20 20 20   TF_Virtual     
fcf0: 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 49      0x10    /* I
fd00: 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  s a virtual tabl
fd10: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
fd20: 57 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20 20  WithoutRowid    
fd30: 30 78 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f  0x20    /* No ro
fd40: 77 69 64 20 75 73 65 64 2e 20 50 52 49 4d 41 52  wid used. PRIMAR
fd50: 59 20 4b 45 59 20 69 73 20 74 68 65 20 6b 65 79  Y KEY is the key
fd60: 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74   */.../*.** Test
fd70: 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20   to see whether 
fd80: 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69  or not a table i
fd90: 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  s a virtual tabl
fda0: 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64  e.  This is.** d
fdb0: 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73  one as a macro s
fdc0: 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62  o that it will b
fdd0: 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20  e optimized out 
fde0: 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20  when virtual.** 
fdf0: 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73  table support is
fe00: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68   omitted from th
fe10: 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e  e build..*/.#ifn
fe20: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
fe30: 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20  VIRTUALTABLE.#  
fe40: 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c  define IsVirtual
fe50: 28 58 29 20 20 20 20 20 20 28 28 28 58 29 2d 3e  (X)      (((X)->
fe60: 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 56 69  tabFlags & TF_Vi
fe70: 72 74 75 61 6c 29 21 3d 30 29 0a 23 20 20 64 65  rtual)!=0).#  de
fe80: 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
fe90: 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f  umn(X) (((X)->co
fea0: 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47  lFlags & COLFLAG
feb0: 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c  _HIDDEN)!=0).#el
fec0: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  se.#  define IsV
fed0: 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30  irtual(X)      0
fee0: 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64  .#  define IsHid
fef0: 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23  denColumn(X) 0.#
ff00: 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 65 73 20 74  endif../* Does t
ff10: 68 65 20 74 61 62 6c 65 20 68 61 76 65 20 61 20  he table have a 
ff20: 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
ff30: 20 48 61 73 52 6f 77 69 64 28 58 29 20 20 20 20   HasRowid(X)    
ff40: 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
ff50: 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77   & TF_WithoutRow
ff60: 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45  id)==0)../*.** E
ff70: 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ach foreign key 
ff80: 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e  constraint is an
ff90: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
ffa0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
ffb0: 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f  ture..**.** A fo
ffc0: 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73  reign key is ass
ffd0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77 6f  ociated with two
ffe0: 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66   tables.  The "f
fff0: 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a  rom" table is.**
10000 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
10010 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46  contains the REF
10020 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74  ERENCES clause t
10030 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65 20  hat creates the 
10040 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20  foreign.** key. 
10050 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20   The "to" table 
10060 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  is the table tha
10070 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68  t is named in th
10080 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
10090 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72  use..** Consider
100a0 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a   this example:.*
100b0 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
100c0 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20  TABLE ex1(.**   
100d0 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50 52      a INTEGER PR
100e0 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20  IMARY KEY,.**   
100f0 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f      b INTEGER CO
10100 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46  NSTRAINT fk1 REF
10110 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a  ERENCES ex2(x).*
10120 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46  *     );.**.** F
10130 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22  or foreign key "
10140 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74  fk1", the from-t
10150 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e  able is "ex1" an
10160 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69  d the to-table i
10170 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69  s "ex2"..** Equi
10180 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a  valent names:.**
10190 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62  .**     from-tab
101a0 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c  le == child-tabl
101b0 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61  e.**       to-ta
101c0 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61  ble == parent-ta
101d0 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52  ble.**.** Each R
101e0 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
101f0 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e   generates an in
10200 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
10210 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
10220 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74  e.** which is at
10230 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 66 72  tached to the fr
10240 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74  om-table.  The t
10250 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74  o-table need not
10260 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74   exist when.** t
10270 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73  he from-table is
10280 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20 65   created.  The e
10290 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20  xistence of the 
102a0 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20  to-table is not 
102b0 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  checked..**.** T
102c0 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70  he list of all p
102d0 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64  arents for child
102e0 20 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64   Table X is held
102f0 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a   at X.pFKey..**.
10300 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c  ** A list of all
10310 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20   children for a 
10320 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77  table named Z (w
10330 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65  hich might not e
10340 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73  ven exist).** is
10350 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e   held in Schema.
10360 66 6b 65 79 48 61 73 68 20 77 69 74 68 20 61 20  fkeyHash with a 
10370 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a  hash key of Z..*
10380 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a  /.struct FKey {.
10390 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20    Table *pFrom; 
103a0 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e      /* Table con
103b0 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45  taining the REFE
103c0 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61  RENCES clause (a
103d0 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20  ka: Child) */.  
103e0 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b  FKey *pNextFrom;
103f0 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77    /* Next FKey w
10400 69 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20  ith the same in 
10410 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65  pFrom. Next pare
10420 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20  nt of pFrom */. 
10430 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20   char *zTo;     
10440 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61     /* Name of ta
10450 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65 79  ble that the key
10460 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a   points to (aka:
10470 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b   Parent) */.  FK
10480 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20  ey *pNextTo;    
10490 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68 65  /* Next with the
104a0 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20   same zTo. Next 
104b0 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f  child of zTo. */
104c0 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f  .  FKey *pPrevTo
104d0 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73  ;    /* Previous
104e0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a   with the same z
104f0 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c  To */.  int nCol
10500 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
10510 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
10520 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20  n this key */.  
10530 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32  /* EV: R-30323-2
10540 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44  1917 */.  u8 isD
10550 65 66 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f  eferred;       /
10560 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
10570 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73  aint checking is
10580 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43   deferred till C
10590 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41  OMMIT */.  u8 aA
105a0 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20  ction[2];       
105b0 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e   /* ON DELETE an
105c0 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69  d ON UPDATE acti
105d0 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ons, respectivel
105e0 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  y */.  Trigger *
105f0 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20  apTrigger[2];/* 
10600 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41 63  Triggers for aAc
10610 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a  tion[] actions *
10620 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d  /.  struct sColM
10630 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70  ap {      /* Map
10640 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  ping of columns 
10650 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75  in pFrom to colu
10660 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20  mns in zTo */.  
10670 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20    int iFrom;    
10680 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
10690 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46   of column in pF
106a0 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  rom */.    char 
106b0 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  *zCol;          
106c0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75   /* Name of colu
106d0 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e  mn in zTo.  If N
106e0 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20  ULL use PRIMARY 
106f0 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b  KEY */.  } aCol[
10700 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  1];            /
10710 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
10720 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c  each of nCol col
10730 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  umns */.};../*.*
10740 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74  * SQLite support
10750 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74  s many different
10760 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65   ways to resolve
10770 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a   a constraint.**
10780 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43   error.  ROLLBAC
10790 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  K processing mea
107a0 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72  ns that a constr
107b0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a  aint violation.*
107c0 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70 65  * causes the ope
107d0 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
107e0 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f  s to fail and fo
107f0 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  r the current tr
10800 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20  ansaction.** to 
10810 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  be rolled back. 
10820 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e   ABORT processin
10830 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72  g means the oper
10840 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73  ation in process
10850 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e  .** fails and an
10860 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20  y prior changes 
10870 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70  from that one op
10880 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b  eration are back
10890 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74  ed out,.** but t
108a0 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
108b0 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63  s not rolled bac
108c0 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73  k.  FAIL process
108d0 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a  ing means that.*
108e0 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  * the operation 
108f0 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70  in progress stop
10900 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e  s and returns an
10910 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75   error code.  Bu
10920 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67  t prior.** chang
10930 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73 61  es due to the sa
10940 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  me operation are
10950 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20   not backed out 
10960 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a  and no rollback.
10970 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f  ** occurs.  IGNO
10980 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  RE means that th
10990 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77  e particular row
109a0 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65   that caused the
109b0 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
109c0 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65  rror is not inse
109d0 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e  rted or updated.
109e0 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
109f0 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
10a00 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e  ror.** is return
10a10 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61  ed.  REPLACE mea
10a20 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73 74  ns that preexist
10a30 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f 77  ing database row
10a40 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a  s that caused.**
10a50 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
10a60 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61  aint violation a
10a70 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68  re removed so th
10a80 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72  at the new inser
10a90 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63  t or.** update c
10aa0 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f  an proceed.  Pro
10ab0 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65  cessing continue
10ac0 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69  s and no error i
10ad0 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a  s reported..**.*
10ae0 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e  * RESTRICT, SETN
10af0 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45  ULL, and CASCADE
10b00 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f   actions apply o
10b10 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b  nly to foreign k
10b20 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54  eys..** RESTRICT
10b30 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
10b40 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49  ABORT for IMMEDI
10b50 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ATE foreign keys
10b60 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65   and the.** same
10b70 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72   as ROLLBACK for
10b80 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20   DEFERRED keys. 
10b90 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74   SETNULL means t
10ba0 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a  hat the foreign.
10bb0 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f  ** key is set to
10bc0 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20   NULL.  CASCADE 
10bd0 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c  means that a DEL
10be0 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66  ETE or UPDATE of
10bf0 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63   the.** referenc
10c00 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20  ed table row is 
10c10 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20  propagated into 
10c20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c  the row that hol
10c30 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67  ds the.** foreig
10c40 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68  n key..** .** Th
10c50 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62  e following symb
10c60 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20  olic values are 
10c70 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77  used to record w
10c80 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20  hich type.** of 
10c90 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a  action to take..
10ca0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f  */.#define OE_No
10cb0 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68  ne     0   /* Th
10cc0 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72  ere is no constr
10cd0 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f  aint to check */
10ce0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c  .#define OE_Roll
10cf0 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c  back 1   /* Fail
10d00 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61   the operation a
10d10 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  nd rollback the 
10d20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23  transaction */.#
10d30 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20  define OE_Abort 
10d40 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f     2   /* Back o
10d50 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64  ut changes but d
10d60 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72  o no rollback tr
10d70 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
10d80 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20  fine OE_Fail    
10d90 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65   3   /* Stop the
10da0 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c   operation but l
10db0 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63  eave all prior c
10dc0 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
10dd0 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20  e OE_Ignore   4 
10de0 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20    /* Ignore the 
10df0 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f  error. Do not do
10e00 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55   the INSERT or U
10e10 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
10e20 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20   OE_Replace  5  
10e30 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74   /* Delete exist
10e40 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ing record, then
10e50 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50   do INSERT or UP
10e60 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65  DATE */..#define
10e70 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20 20   OE_Restrict 6  
10e80 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72   /* OE_Abort for
10e90 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52   IMMEDIATE, OE_R
10ea0 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45  ollback for DEFE
10eb0 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20  RRED */.#define 
10ec0 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20  OE_SetNull  7   
10ed0 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
10ee0 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
10ef0 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
10f00 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20  OE_SetDflt  8   
10f10 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
10f20 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
10f30 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23  its default */.#
10f40 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64  define OE_Cascad
10f50 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64  e  9   /* Cascad
10f60 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f  e the changes */
10f70 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66  ..#define OE_Def
10f80 61 75 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f 20  ault  10  /* Do 
10f90 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66  whatever the def
10fa0 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a  ault action is *
10fb0 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  /.../*.** An ins
10fc0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
10fd0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
10fe0 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68   is passed as th
10ff0 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d  e first.** argum
11000 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64  ent to sqlite3Vd
11010 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64  beKeyCompare and
11020 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74   is used to cont
11030 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70  rol the .** comp
11040 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77  arison of the tw
11050 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a  o index keys..**
11060 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53  .** Note that aS
11070 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61  ortOrder[] and a
11080 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65  Coll[] have nFie
11090 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65  ld+1 slots.  The
110a0 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64  re.** are nField
110b0 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63   slots for the c
110c0 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64  olumns of an ind
110d0 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72  ex then one extr
110e0 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68  a slot.** for th
110f0 65 20 72 6f 77 69 64 20 61 74 20 74 68 65 20 65  e rowid at the e
11100 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65  nd..*/.struct Ke
11110 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52  yInfo {.  u32 nR
11120 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ef;           /*
11130 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72   Number of refer
11140 65 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65  ences to this Ke
11150 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a  yInfo object */.
11160 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
11170 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
11180 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20  coding - one of 
11190 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20  the SQLITE_UTF* 
111a0 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20  values */.  u16 
111b0 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
111c0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79  /* Number of key
111d0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
111e0 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e  index */.  u16 n
111f0 58 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f  XField;        /
11200 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
11210 6d 6e 73 20 62 65 79 6f 6e 64 20 74 68 65 20 6b  mns beyond the k
11220 65 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  ey columns */.  
11230 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
11240 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
11250 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a  ase connection *
11260 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64  /.  u8 *aSortOrd
11270 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20  er;     /* Sort 
11280 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68 20 63  order for each c
11290 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c  olumn. */.  Coll
112a0 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20  Seq *aColl[1];  
112b0 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
112c0 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74  uence for each t
112d0 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a  erm of the key *
112e0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
112f0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
11300 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
11310 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61  re holds informa
11320 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a 2a 20  tion about a.** 
11330 73 69 6e 67 6c 65 20 69 6e 64 65 78 20 72 65 63  single index rec
11340 6f 72 64 20 74 68 61 74 20 68 61 73 20 61 6c 72  ord that has alr
11350 65 61 64 79 20 62 65 65 6e 20 70 61 72 73 65 64  eady been parsed
11360 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69   out into indivi
11370 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a  dual.** values..
11380 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69  **.** A record i
11390 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74  s an object that
113a0 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   contains one or
113b0 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20   more fields of 
113c0 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73  data..** Records
113d0 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f   are used to sto
113e0 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  re the content o
113f0 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e  f a table row an
11400 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68  d to store.** th
11410 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65  e key of an inde
11420 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64  x.  A blob encod
11430 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20  ing of a record 
11440 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a  is created by.**
11450 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f   the OP_MakeReco
11460 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65  rd opcode of the
11470 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73   VDBE and is dis
11480 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65  assembled by the
11490 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  .** OP_Column op
114a0 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  code..**.** This
114b0 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
114c0 20 61 20 72 65 63 6f 72 64 20 74 68 61 74 20 68   a record that h
114d0 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  as already been 
114e0 64 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a 2a 20  disassembled.** 
114f0 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74 69 74  into its constit
11500 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a  uent fields..**.
11510 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20 72 32  ** The r1 and r2
11520 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65   member variable
11530 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20  s are only used 
11540 62 79 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 64  by the optimized
11550 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 66   comparison.** f
11560 75 6e 63 74 69 6f 6e 73 20 76 64 62 65 52 65 63  unctions vdbeRec
11570 6f 72 64 43 6f 6d 70 61 72 65 49 6e 74 28 29 20  ordCompareInt() 
11580 61 6e 64 20 76 64 62 65 52 65 63 6f 72 64 43 6f  and vdbeRecordCo
11590 6d 70 61 72 65 53 74 72 69 6e 67 28 29 2e 0a 2a  mpareString()..*
115a0 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65  /.struct Unpacke
115b0 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49  dRecord {.  KeyI
115c0 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20  nfo *pKeyInfo;  
115d0 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64  /* Collation and
115e0 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f   sort-order info
115f0 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 31 36  rmation */.  u16
11600 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
11610 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
11620 74 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d  tries in apMem[]
11630 20 2a 2f 0a 20 20 69 38 20 64 65 66 61 75 6c 74   */.  i8 default
11640 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d  _rc;      /* Com
11650 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 69  parison result i
11660 66 20 6b 65 79 73 20 61 72 65 20 65 71 75 61 6c  f keys are equal
11670 20 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f 64 65   */.  u8 errCode
11680 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72  ;         /* Err
11690 6f 72 20 64 65 74 65 63 74 65 64 20 62 79 20 78  or detected by x
116a0 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 20 28 43  RecordCompare (C
116b0 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29  ORRUPT or NOMEM)
116c0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b   */.  Mem *aMem;
116d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
116e0 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 31 3b  ues */.  int r1;
116f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11700 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
11710 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a  if (lhs > rhs) *
11720 2f 0a 20 20 69 6e 74 20 72 32 3b 20 20 20 20 20  /.  int r2;     
11730 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
11740 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 72   to return if (r
11750 68 73 20 3c 20 6c 68 73 29 20 2a 2f 0a 7d 3b 0a  hs < lhs) */.};.
11760 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
11770 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73   index is repres
11780 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
11790 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
117a0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
117b0 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
117c0 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20  .** The columns 
117d0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
117e0 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65  t are to be inde
117f0 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65  xed are describe
11800 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f  d.** by the aiCo
11810 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20  lumn[] field of 
11820 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
11830 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75   For example, su
11840 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65  ppose.** we have
11850 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
11860 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a  able and index:.
11870 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
11880 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e   TABLE Ex1(c1 in
11890 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65  t, c2 int, c3 te
118a0 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41  xt);.**     CREA
118b0 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20  TE INDEX Ex2 ON 
118c0 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a  Ex1(c3,c1);.**.*
118d0 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73  * In the Table s
118e0 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
118f0 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33  ing Ex1, nCol==3
11900 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61   because there a
11910 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75  re.** three colu
11920 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
11930 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20  .  In the Index 
11940 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
11950 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f  bing.** Ex2, nCo
11960 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20  lumn==2 since 2 
11970 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73  of the 3 columns
11980 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65   of Ex1 are inde
11990 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75  xed..** The valu
119a0 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73  e of aiColumn is
119b0 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75   {2, 0}.  aiColu
119c0 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65  mn[0]==2 because
119d0 20 74 68 65 20 0a 2a 2a 20 66 69 72 73 74 20 63   the .** first c
119e0 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65  olumn to be inde
119f0 78 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20  xed (c3) has an 
11a00 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78  index of 2 in Ex
11a10 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65  1.aCol[]..** The
11a20 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74   second column t
11a30 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31  o be indexed (c1
11a40 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  ) has an index o
11a50 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43  f 0 in.** Ex1.aC
11a60 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e  ol[], hence Ex2.
11a70 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a  aiColumn[1]==0..
11a80 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e  **.** The Index.
11a90 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65  onError field de
11aa0 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72  termines whether
11ab0 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65   or not the inde
11ac0 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d  xed columns.** m
11ad0 75 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e  ust be unique an
11ae0 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20  d what to do if 
11af0 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57  they are not.  W
11b00 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  hen Index.onErro
11b10 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74  r=OE_None,.** it
11b20 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e   means this is n
11b30 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  ot a unique inde
11b40 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74  x.  Otherwise it
11b50 20 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64   is a unique ind
11b60 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61  ex.** and the va
11b70 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45  lue of Index.onE
11b80 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68  rror indicate th
11b90 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74  e which conflict
11ba0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20   resolution .** 
11bb0 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70  algorithm to emp
11bc0 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20  loy whenever an 
11bd0 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
11be0 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d  to insert a non-
11bf0 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e  unique.** elemen
11c00 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64  t..*/.struct Ind
11c10 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  ex {.  char *zNa
11c20 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
11c30 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
11c40 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a  index */.  i16 *
11c50 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20  aiColumn;       
11c60 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c      /* Which col
11c70 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62 79  umns are used by
11c80 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73   this index.  1s
11c90 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45  t is 0 */.  LogE
11ca0 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b  st *aiRowLogEst;
11cb0 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41       /* From ANA
11cc0 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20  LYZE: Est. rows 
11cd0 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63 68  selected by each
11ce0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62   column */.  Tab
11cf0 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20  le *pTable;     
11d00 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c        /* The SQL
11d10 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64   table being ind
11d20 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  exed */.  char *
11d30 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20  zColAff;        
11d40 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
11d50 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
11d60 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
11d70 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e  n */.  Index *pN
11d80 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
11d90 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65  /* The next inde
11da0 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  x associated wit
11db0 68 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65  h the same table
11dc0 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
11dd0 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f  chema;         /
11de0 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
11df0 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a  ing this index *
11e00 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64  /.  u8 *aSortOrd
11e10 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
11e20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a  for each column:
11e30 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c   True==DESC, Fal
11e40 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61  se==ASC */.  cha
11e50 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20  r **azColl;     
11e60 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f        /* Array o
11e70 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  f collation sequ
11e80 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69  ence names for i
11e90 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ndex */.  Expr *
11ea0 70 50 61 72 74 49 64 78 57 68 65 72 65 3b 20 20  pPartIdxWhere;  
11eb0 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75     /* WHERE clau
11ec0 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69  se for partial i
11ed0 6e 64 69 63 65 73 20 2a 2f 0a 20 20 4b 65 79 49  ndices */.  KeyI
11ee0 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20  nfo *pKeyInfo;  
11ef0 20 20 20 20 20 2f 2a 20 41 20 4b 65 79 49 6e 66       /* A KeyInf
11f00 6f 20 6f 62 6a 65 63 74 20 73 75 69 74 61 62 6c  o object suitabl
11f10 65 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78  e for this index
11f20 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
11f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11f40 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69  * DB Page contai
11f50 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69  ning root of thi
11f60 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67  s index */.  Log
11f70 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20  Est szIdxRow;   
11f80 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
11f90 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20 73  ed average row s
11fa0 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ize in bytes */.
11fb0 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20    u16 nKeyCol;  
11fc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
11fd0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
11fe0 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20  forming the key 
11ff0 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e  */.  u16 nColumn
12000 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
12010 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
12020 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  ns stored in the
12030 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f   index */.  u8 o
12040 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20  nError;         
12050 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74       /* OE_Abort
12060 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f  , OE_Ignore, OE_
12070 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e  Replace, or OE_N
12080 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  one */.  unsigne
12090 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20  d idxType:2;    
120a0 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20    /* 1==UNIQUE, 
120b0 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  2==PRIMARY KEY, 
120c0 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20  0==CREATE INDEX 
120d0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55  */.  unsigned bU
120e0 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a  nordered:1;   /*
120f0 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78 20   Use this index 
12100 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65  for == or IN que
12110 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75  ries only */.  u
12120 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e  nsigned uniqNotN
12130 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  ull:1;  /* True 
12140 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f  if UNIQUE and NO
12150 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63  T NULL for all c
12160 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69  olumns */.  unsi
12170 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31  gned isResized:1
12180 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
12190 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63  resizeIndexObjec
121a0 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c  t() has been cal
121b0 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  led */.  unsigne
121c0 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20  d isCovering:1; 
121d0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69    /* True if thi
121e0 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20  s is a covering 
121f0 69 6e 64 65 78 20 2a 2f 0a 23 69 66 64 65 66 20  index */.#ifdef 
12200 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
12210 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69  AT3_OR_STAT4.  i
12220 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20  nt nSample;     
12230 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
12240 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
12250 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20   aSample[] */.  
12260 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20  int nSampleCol; 
12270 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
12280 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e   of IndexSample.
12290 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e  anEq[] and so on
122a0 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
122b0 41 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f  AvgEq;         /
122c0 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61  * Average nEq va
122d0 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f  lues for keys no
122e0 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a  t in aSample */.
122f0 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61    IndexSample *a
12300 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61  Sample;    /* Sa
12310 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66  mples of the lef
12320 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 23 65  t-most key */.#e
12330 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ndif.};../*.** A
12340 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
12350 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a  r Index.idxType.
12360 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
12370 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44 45 46  E_IDXTYPE_APPDEF
12380 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65        0   /* Cre
12390 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54  ated using CREAT
123a0 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69  E INDEX */.#defi
123b0 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
123c0 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20 31 20  E_UNIQUE      1 
123d0 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20    /* Implements 
123e0 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  a UNIQUE constra
123f0 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  int */.#define S
12400 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52  QLITE_IDXTYPE_PR
12410 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a  IMARYKEY  2   /*
12420 20 49 73 20 74 68 65 20 50 52 49 4d 41 52 59 20   Is the PRIMARY 
12430 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c  KEY for the tabl
12440 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20  e */../* Return 
12450 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20  true if index X 
12460 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59  is a PRIMARY KEY
12470 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
12480 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79 49 6e  e IsPrimaryKeyIn
12490 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e 69 64  dex(X)  ((X)->id
124a0 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44  xType==SQLITE_ID
124b0 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59  XTYPE_PRIMARYKEY
124c0 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75  )../* Return tru
124d0 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20  e if index X is 
124e0 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78 20 2a  a UNIQUE index *
124f0 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e 69 71  /.#define IsUniq
12500 75 65 49 6e 64 65 78 28 58 29 20 20 20 20 20 20  ueIndex(X)      
12510 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f  ((X)->onError!=O
12520 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 0a 2a 2a 20 45  E_None)../*.** E
12530 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65  ach sample store
12540 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  d in the sqlite_
12550 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72  stat3 table is r
12560 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
12570 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61  mory .** using a
12580 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68   structure of th
12590 69 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f  is type.  See do
125a0 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74  cumentation at t
125b0 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a  he top of the.**
125c0 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63   analyze.c sourc
125d0 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74  e file for addit
125e0 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
125f0 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64  n..*/.struct Ind
12600 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69  exSample {.  voi
12610 64 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f  d *p;          /
12620 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d  * Pointer to sam
12630 70 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20  pled record */. 
12640 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
12650 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65     /* Size of re
12660 63 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f  cord in bytes */
12670 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71  .  tRowcnt *anEq
12680 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  ;    /* Est. num
12690 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72  ber of rows wher
126a0 65 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73  e the key equals
126b0 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
126c0 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b    tRowcnt *anLt;
126d0 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
126e0 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
126f0 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61   key is less tha
12700 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  n this sample */
12710 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c  .  tRowcnt *anDL
12720 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  t;   /* Est. num
12730 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20  ber of distinct 
12740 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74  keys less than t
12750 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b  his sample */.};
12760 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b  ../*.** Each tok
12770 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66  en coming out of
12780 20 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e   the lexer is an
12790 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20   instance of.** 
127a0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
127b0 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f   Tokens are also
127c0 20 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66   used as part of
127d0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a   an expression..
127e0 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f  **.** Note if To
127f0 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f  ken.z==0 then To
12800 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65  ken.dyn and Toke
12810 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65  n.n are undefine
12820 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e  d and.** may con
12830 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75  tain random valu
12840 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65  es.  Do not make
12850 20 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73   any assumptions
12860 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e   about Token.dyn
12870 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20  .** and Token.n 
12880 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e  when Token.z==0.
12890 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e  .*/.struct Token
128a0 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
128b0 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20  *z;     /* Text 
128c0 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e  of the token.  N
128d0 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74  ot NULL-terminat
128e0 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ed! */.  unsigne
128f0 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e  d int n;    /* N
12900 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74  umber of charact
12910 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65  ers in this toke
12920 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  n */.};../*.** A
12930 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
12940 69 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  is structure con
12950 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tains informatio
12960 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  n needed to gene
12970 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72  rate.** code for
12980 20 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63   a SELECT that c
12990 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74  ontains aggregat
129a0 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  e functions..**.
129b0 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54  ** If Expr.op==T
129c0 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20  K_AGG_COLUMN or 
129d0 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20  TK_AGG_FUNCTION 
129e0 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e  then Expr.pAggIn
129f0 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74  fo is a.** point
12a00 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  er to this struc
12a10 74 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e  ture.  The Expr.
12a20 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73  iColumn field is
12a30 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a   the index in.**
12a40 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20   AggInfo.aCol[] 
12a50 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63  or AggInfo.aFunc
12a60 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  [] of informatio
12a70 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  n needed to gene
12a80 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72  rate.** code for
12a90 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a   that node..**.*
12aa0 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70  * AggInfo.pGroup
12ab0 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61  By and AggInfo.a
12ac0 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74  Func.pExpr point
12ad0 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69   to fields withi
12ae0 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61  n the.** origina
12af0 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75  l Select structu
12b00 72 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65  re that describe
12b10 73 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  s the SELECT sta
12b20 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a  tement.  These.*
12b30 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20  * fields do not 
12b40 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64  need to be freed
12b50 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69   when deallocati
12b60 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73  ng the AggInfo s
12b70 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
12b80 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20  uct AggInfo {.  
12b90 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20  u8 directMode;  
12ba0 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63          /* Direc
12bb0 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65  t rendering mode
12bc0 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61   means take data
12bd0 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20   directly.      
12be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bf0 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72      ** from sour
12c00 63 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72  ce tables rather
12c10 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d   than from accum
12c20 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20  ulators */.  u8 
12c30 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20  useSortingIdx;  
12c40 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63       /* In direc
12c50 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63  t mode, referenc
12c60 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  e the sorting in
12c70 64 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20  dex rather.     
12c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c90 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65       ** than the
12ca0 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
12cb0 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64  .  int sortingId
12cc0 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75  x;         /* Cu
12cd0 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
12ce0 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
12cf0 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e   */.  int sortin
12d00 67 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a  gIdxPTab;     /*
12d10 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
12d20 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a  f pseudo-table *
12d30 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67  /.  int nSorting
12d40 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e  Column;     /* N
12d50 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
12d60 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20   in the sorting 
12d70 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d  index */.  int m
12d80 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20  nReg, mxReg;    
12d90 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72     /* Range of r
12da0 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74  egisters allocat
12db0 65 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20  ed for aCol and 
12dc0 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c  aFunc */.  ExprL
12dd0 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
12de0 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20     /* The group 
12df0 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73  by clause */.  s
12e00 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f  truct AggInfo_co
12e10 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61  l {    /* For ea
12e20 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69  ch column used i
12e30 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20  n source tables 
12e40 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  */.    Table *pT
12e50 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ab;             
12e60 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20  /* Source table 
12e70 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c  */.    int iTabl
12e80 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
12e90 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
12ea0 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74   of the source t
12eb0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
12ec0 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
12ed0 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
12ee0 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65  umber within the
12ef0 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
12f00 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72  .    int iSorter
12f10 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a  Column;       /*
12f20 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69   Column number i
12f30 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
12f40 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  dex */.    int i
12f50 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
12f60 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f      /* Memory lo
12f70 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73  cation that acts
12f80 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20   as accumulator 
12f90 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
12fa0 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
12fb0 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20  /* The original 
12fc0 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
12fd0 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e  } *aCol;.  int n
12fe0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
12ff0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13000 75 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20  used entries in 
13010 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  aCol[] */.  int 
13020 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20  nAccumulator;   
13030 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13040 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68   columns that sh
13050 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ow through to th
13060 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20  e output..      
13070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13080 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61      ** Additiona
13090 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  l columns are us
130a0 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d  ed only as param
130b0 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20  eters to.       
130c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130d0 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20     ** aggregate 
130e0 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73  functions */.  s
130f0 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75  truct AggInfo_fu
13100 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61  nc {   /* For ea
13110 63 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ch aggregate fun
13120 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70  ction */.    Exp
13130 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
13140 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
13150 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65  ion encoding the
13160 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
13170 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b   FuncDef *pFunc;
13180 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
13190 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
131a0 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ion implementati
131b0 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  on */.    int iM
131c0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
131d0 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
131e0 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
131f0 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
13200 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69  /.    int iDisti
13210 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  nct;           /
13220 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  * Ephemeral tabl
13230 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63  e used to enforc
13240 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20  e DISTINCT */.  
13250 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20  } *aFunc;.  int 
13260 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  nFunc;          
13270 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13280 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e   entries in aFun
13290 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  c[] */.};../*.**
132a0 20 54 68 65 20 64 61 74 61 74 79 70 65 20 79 6e   The datatype yn
132b0 56 61 72 20 69 73 20 61 20 73 69 67 6e 65 64 20  Var is a signed 
132c0 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72 20  integer, either 
132d0 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74  16-bit or 32-bit
132e0 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20  ..** Usually it 
132f0 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74  is 16-bits.  But
13300 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56   if SQLITE_MAX_V
13310 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69  ARIABLE_NUMBER i
13320 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61  s greater.** tha
13330 6e 20 33 32 37 36 37 20 77 65 20 68 61 76 65 20  n 32767 we have 
13340 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69  to make it 32-bi
13350 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70 72  t.  16-bit is pr
13360 65 66 65 72 72 65 64 20 62 65 63 61 75 73 65 0a  eferred because.
13370 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73 20  ** it uses less 
13380 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78  memory in the Ex
13390 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68  pr object, which
133a0 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79   is a big memory
133b0 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74   user.** in syst
133c0 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66  ems with lots of
133d0 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
133e0 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61  ents.  And few a
133f0 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e  pplications.** n
13400 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62  eed more than ab
13410 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76 61 72  out 10 or 20 var
13420 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d  iables.  But som
13430 65 20 65 78 74 72 65 6d 65 20 75 73 65 72 73 20  e extreme users 
13440 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20  want.** to have 
13450 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
13460 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20 33 32  nts with over 32
13470 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61  767 variables, a
13480 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74  nd for them.** t
13490 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61  he option is ava
134a0 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69  ilable (at compi
134b0 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66  le-time)..*/.#if
134c0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49   SQLITE_MAX_VARI
134d0 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37  ABLE_NUMBER<=327
134e0 36 37 0a 74 79 70 65 64 65 66 20 69 31 36 20 79  67.typedef i16 y
134f0 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65  nVar;.#else.type
13500 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23  def int ynVar;.#
13510 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  endif../*.** Eac
13520 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70  h node of an exp
13530 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70  ression in the p
13540 61 72 73 65 20 74 72 65 65 20 69 73 20 61 6e 20  arse tree is an 
13550 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
13560 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  his structure..*
13570 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20  *.** Expr.op is 
13580 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20  the opcode. The 
13590 69 6e 74 65 67 65 72 20 70 61 72 73 65 72 20 74  integer parser t
135a0 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72  oken codes are r
135b0 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f  eused.** as opco
135c0 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78  des here. For ex
135d0 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65  ample, the parse
135e0 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20  r defines TK_GE 
135f0 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
13600 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65  .** code represe
13610 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f  nting the ">=" o
13620 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61  perator. This sa
13630 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20  me integer code 
13640 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20  is reused.** to 
13650 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72  represent the gr
13660 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71  eater-than-or-eq
13670 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20  ual-to operator 
13680 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  in the expressio
13690 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a  n.** tree..**.**
136a0 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
136b0 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74  on is an SQL lit
136c0 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52  eral (TK_INTEGER
136d0 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42  , TK_FLOAT, TK_B
136e0 4c 4f 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53  LOB, .** or TK_S
136f0 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70  TRING), then Exp
13700 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
13710 20 74 68 65 20 74 65 78 74 20 6f 66 20 74 68 65   the text of the
13720 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66   SQL literal. If
13730 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69  .** the expressi
13740 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c 65  on is a variable
13750 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20   (TK_VARIABLE), 
13760 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
13770 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a  contains the .**
13780 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20   variable name. 
13790 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20  Finally, if the 
137a0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
137b0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54   SQL function (T
137c0 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20  K_FUNCTION),.** 
137d0 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
137e0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d  contains the nam
137f0 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
13800 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52  n..**.** Expr.pR
13810 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c  ight and Expr.pL
13820 65 66 74 20 61 72 65 20 74 68 65 20 6c 65 66 74  eft are the left
13830 20 61 6e 64 20 72 69 67 68 74 20 73 75 62 65 78   and right subex
13840 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a  pressions of a.*
13850 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  * binary operato
13860 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74  r. Either or bot
13870 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a  h may be NULL..*
13880 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73  *.** Expr.x.pLis
13890 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61  t is a list of a
138a0 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20  rguments if the 
138b0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
138c0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a   SQL function,.*
138d0 2a 20 61 20 43 41 53 45 20 65 78 70 72 65 73 73  * a CASE express
138e0 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70  ion or an IN exp
138f0 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66  ression of the f
13900 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c  orm "<lhs> IN (<
13910 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a  y>, <z>...)"..**
13920 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
13930 69 73 20 75 73 65 64 20 69 66 20 74 68 65 20 65  is used if the e
13940 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
13950 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20  ub-select or an 
13960 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a  expression of.**
13970 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
13980 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29   IN (SELECT ...)
13990 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49 73  ". If the EP_xIs
139a0 53 65 6c 65 63 74 20 62 69 74 20 69 73 20 73 65  Select bit is se
139b0 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72  t in the.** Expr
139c0 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
139d0 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  n Expr.x.pSelect
139e0 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72   is valid. Other
139f0 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69  wise, Expr.x.pLi
13a00 73 74 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e  st is .** valid.
13a10 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73  .**.** An expres
13a20 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
13a30 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66   ID or ID.ID ref
13a40 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20  ers to a column 
13a50 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46  in a table..** F
13a60 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73 69  or such expressi
13a70 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20  ons, Expr.op is 
13a80 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e  set to TK_COLUMN
13a90 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65   and Expr.iTable
13aa0 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67   is.** the integ
13ab0 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  er cursor number
13ac0 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73 6f   of a VDBE curso
13ad0 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68  r pointing to th
13ae0 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20  at table and.** 
13af0 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20  Expr.iColumn is 
13b00 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  the column numbe
13b10 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66  r for the specif
13b20 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74  ic column.  If t
13b30 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  he.** expression
13b40 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72 65   is used as a re
13b50 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65  sult in an aggre
13b60 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65  gate SELECT, the
13b70 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  n the.** value i
13b80 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e  s also stored in
13b90 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20 63   the Expr.iAgg c
13ba0 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67  olumn in the agg
13bb0 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a  regate so that.*
13bc0 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63 65  * it can be acce
13bd0 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61  ssed after all a
13be0 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63 6f  ggregates are co
13bf0 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  mputed..**.** If
13c00 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
13c10 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61  is an unbound va
13c20 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61  riable marker (a
13c30 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a   question mark .
13c40 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f 27  ** character '?'
13c50 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
13c60 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45   SQL) then the E
13c70 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73  xpr.iTable holds
13c80 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e   the index .** n
13c90 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76  umber for that v
13ca0 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  ariable..**.** I
13cb0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
13cc0 20 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74   is a subquery t
13cd0 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  hen Expr.iColumn
13ce0 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
13cf0 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75  r.** register nu
13d00 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20  mber containing 
13d10 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
13d20 65 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20  e subquery.  If 
13d30 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20  the.** subquery 
13d40 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74  gives a constant
13d50 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54   result, then iT
13d60 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20  able is -1.  If 
13d70 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20  the subquery.** 
13d80 67 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e  gives a differen
13d90 74 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66  t answer at diff
13da0 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69  erent times duri
13db0 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f  ng statement pro
13dc0 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20  cessing.** then 
13dd0 69 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64  iTable is the ad
13de0 64 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f  dress of a subro
13df0 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75  utine that compu
13e00 74 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79  tes the subquery
13e10 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45  ..**.** If the E
13e20 78 70 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f  xpr is of type O
13e30 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68  P_Column, and th
13e40 65 20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65  e table it is se
13e50 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20  lecting from.** 
13e60 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20  is a disk table 
13e70 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70  or the "old.*" p
13e80 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65  seudo-table, the
13e90 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f  n pTab points to
13ea0 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
13eb0 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69  nding table defi
13ec0 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c  nition..**.** AL
13ed0 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a  LOCATION NOTES:.
13ee0 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63  **.** Expr objec
13ef0 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74  ts can use a lot
13f00 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65   of memory space
13f10 20 69 6e 20 64 61 74 61 62 61 73 65 20 73 63 68   in database sch
13f20 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70  ema.  To.** help
13f30 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72   reduce memory r
13f40 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d  equirements, som
13f50 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f  etimes an Expr o
13f60 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a  bject will be.**
13f70 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64   truncated.  And
13f80 20 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e   to reduce the n
13f90 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
13fa0 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d  allocations, som
13fb0 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72  etimes.** two or
13fc0 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63   more Expr objec
13fd0 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65  ts will be store
13fe0 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65  d in a single me
13ff0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c  mory allocation,
14000 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74  .** together wit
14010 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74  h Expr.zToken st
14020 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  rings..**.** If 
14030 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 61  the EP_Reduced a
14040 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  nd EP_TokenOnly 
14050 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 77 68  flags are set wh
14060 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62  en.** an Expr ob
14070 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61 74 65  ject is truncate
14080 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75  d.  When EP_Redu
14090 63 65 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e  ced is set, then
140a0 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c   all.** the chil
140b0 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69  d Expr objects i
140c0 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74  n the Expr.pLeft
140d0 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74   and Expr.pRight
140e0 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65   subtrees.** are
140f0 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69   contained withi
14100 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72  n the same memor
14110 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e  y allocation.  N
14120 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68  ote, however, th
14130 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65  at.** the subtre
14140 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69  es in Expr.x.pLi
14150 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65  st or Expr.x.pSe
14160 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20  lect are always 
14170 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c  separately.** al
14180 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c  located, regardl
14190 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f  ess of whether o
141a0 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64  r not EP_Reduced
141b0 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75   is set..*/.stru
141c0 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f  ct Expr {.  u8 o
141d0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
141e0 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20     /* Operation 
141f0 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69  performed by thi
14200 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72  s node */.  char
14210 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20   affinity;      
14220 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
14230 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ty of the column
14240 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63   or 0 if not a c
14250 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66  olumn */.  u32 f
14260 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
14270 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61    /* Various fla
14280 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65  gs.  EP_* See be
14290 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  low */.  union {
142a0 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65  .    char *zToke
142b0 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
142c0 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f  oken value. Zero
142d0 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20   terminated and 
142e0 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20  dequoted */.    
142f0 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20  int iValue;     
14300 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65         /* Non-ne
14310 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 20 76  gative integer v
14320 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61  alue if EP_IntVa
14330 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20  lue */.  } u;.. 
14340 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f   /* If the EP_To
14350 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20  kenOnly flag is 
14360 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e  set in the Expr.
14370 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
14380 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69   no.  ** space i
14390 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
143a0 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77  the fields below
143b0 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20   this point. An 
143c0 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20  attempt to.  ** 
143d0 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c  access them will
143e0 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67   result in a seg
143f0 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63  fault or malfunc
14400 74 69 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a  tion. .  *******
14410 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14420 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14430 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14440 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
14450 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20  .  Expr *pLeft; 
14460 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66            /* Lef
14470 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45  t subnode */.  E
14480 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20  xpr *pRight;    
14490 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73        /* Right s
144a0 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f  ubnode */.  unio
144b0 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74  n {.    ExprList
144c0 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20   *pList;     /* 
144d0 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c  op = IN, EXISTS,
144e0 20 53 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46   SELECT, CASE, F
144f0 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e  UNCTION, BETWEEN
14500 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
14510 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
14520 45 50 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64  EP_xIsSelect and
14530 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53   op = IN, EXISTS
14540 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20  , SELECT */.  } 
14550 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  x;..  /* If the 
14560 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20  EP_Reduced flag 
14570 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78  is set in the Ex
14580 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
14590 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63  hen no.  ** spac
145a0 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  e is allocated f
145b0 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65  or the fields be
145c0 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20  low this point. 
145d0 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20  An attempt to.  
145e0 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77  ** access them w
145f0 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ill result in a 
14600 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66  segfault or malf
14610 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a  unction..  *****
14620 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14630 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14640 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14650 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14660 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  /..#if SQLITE_MA
14670 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
14680 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20   int nHeight;   
14690 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68          /* Heigh
146a0 74 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65  t of the tree he
146b0 61 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64  aded by this nod
146c0 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  e */.#endif.  in
146d0 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
146e0 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d       /* TK_COLUM
146f0 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  N: cursor number
14700 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e   of table holdin
14710 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  g column.       
14720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14730 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    ** TK_REGISTER
14740 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  : register numbe
14750 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
14760 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
14770 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e  _TRIGGER: 1 -> n
14780 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20  ew, 0 -> old.   
14790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147a0 20 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69        ** EP_Unli
147b0 6b 65 6c 79 3a 20 20 31 30 30 30 20 74 69 6d 65  kely:  1000 time
147c0 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f 0a  s likelihood */.
147d0 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b    ynVar iColumn;
147e0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43           /* TK_C
147f0 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e  OLUMN: column in
14800 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77  dex.  -1 for row
14810 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  id..            
14820 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
14830 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72  TK_VARIABLE: var
14840 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c  iable number (al
14850 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20  ways >= 1). */. 
14860 20 69 31 36 20 69 41 67 67 3b 20 20 20 20 20 20   i16 iAgg;      
14870 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
14880 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e   entry in pAggIn
14890 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e  fo->aCol[] or ->
148a0 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36  aFunc[] */.  i16
148b0 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65   iRightJoinTable
148c0 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f  ;   /* If EP_Fro
148d0 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74  mJoin, the right
148e0 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f   table of the jo
148f0 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20  in */.  u8 op2; 
14900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14910 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f  * TK_REGISTER: o
14920 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66  riginal value of
14930 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20   Expr.op.       
14940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14950 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    ** TK_COLUMN: 
14960 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20  the value of p5 
14970 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20  for OP_Column.  
14980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14990 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47         ** TK_AGG
149a0 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69  _FUNCTION: nesti
149b0 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67  ng depth */.  Ag
149c0 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
149d0 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20       /* Used by 
149e0 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e  TK_AGG_COLUMN an
149f0 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  d TK_AGG_FUNCTIO
14a00 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  N */.  Table *pT
14a10 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ab;           /*
14a20 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f   Table for TK_CO
14a30 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73  LUMN expressions
14a40 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  . */.};../*.** T
14a50 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
14a60 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   the meanings of
14a70 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70   bits in the Exp
14a80 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
14a90 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f  /.#define EP_Fro
14aa0 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20  mJoin  0x000001 
14ab0 2f 2a 20 4f 72 69 67 69 6e 61 74 65 64 20 69 6e  /* Originated in
14ac0 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61   ON or USING cla
14ad0 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
14ae0 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20  .#define EP_Agg 
14af0 20 20 20 20 20 20 30 78 30 30 30 30 30 32 20 2f        0x000002 /
14b00 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  * Contains one o
14b10 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
14b20 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64   functions */.#d
14b30 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65  efine EP_Resolve
14b40 64 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20 49  d  0x000004 /* I
14b50 44 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73  Ds have been res
14b60 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73  olved to COLUMNs
14b70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 45   */.#define EP_E
14b80 72 72 6f 72 20 20 20 20 20 30 78 30 30 30 30 30  rror     0x00000
14b90 38 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20  8 /* Expression 
14ba0 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
14bb0 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a 23  more errors */.#
14bc0 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e  define EP_Distin
14bd0 63 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20  ct  0x000010 /* 
14be0 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  Aggregate functi
14bf0 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43 54  on with DISTINCT
14c00 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
14c10 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74  ine EP_VarSelect
14c20 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65   0x000020 /* pSe
14c30 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74  lect is correlat
14c40 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74  ed, not constant
14c50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
14c60 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30 34  blQuoted 0x00004
14c70 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73  0 /* token.z was
14c80 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22   originally in "
14c90 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ..." */.#define 
14ca0 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30  EP_InfixFunc 0x0
14cb0 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f  00080 /* True fo
14cc0 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74  r an infix funct
14cd0 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c  ion: LIKE, GLOB,
14ce0 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20   etc */.#define 
14cf0 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30  EP_Collate   0x0
14d00 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f  00100 /* Tree co
14d10 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c  ntains a TK_COLL
14d20 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a  ATE operator */.
14d30 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72  #define EP_Gener
14d40 69 63 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a  ic   0x000200 /*
14d50 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20   Ignore COLLATE 
14d60 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74  or affinity on t
14d70 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66  his tree */.#def
14d80 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20  ine EP_IntValue 
14d90 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74   0x000400 /* Int
14da0 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61  eger value conta
14db0 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65  ined in u.iValue
14dc0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78   */.#define EP_x
14dd0 49 73 53 65 6c 65 63 74 20 30 78 30 30 30 38 30  IsSelect 0x00080
14de0 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69  0 /* x.pSelect i
14df0 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69  s valid (otherwi
14e00 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a  se x.pList is) *
14e10 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69  /.#define EP_Ski
14e20 70 20 20 20 20 20 20 30 78 30 30 31 30 30 30 20  p      0x001000 
14e30 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20  /* COLLATE, AS, 
14e40 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23  or UNLIKELY */.#
14e50 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65  define EP_Reduce
14e60 64 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20  d   0x002000 /* 
14e70 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52  Expr struct EXPR
14e80 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62 79 74  _REDUCEDSIZE byt
14e90 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  es only */.#defi
14ea0 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  ne EP_TokenOnly 
14eb0 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72  0x004000 /* Expr
14ec0 20 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b   struct EXPR_TOK
14ed0 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73  ENONLYSIZE bytes
14ee0 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
14ef0 20 45 50 5f 53 74 61 74 69 63 20 20 20 20 30 78   EP_Static    0x
14f00 30 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20 69  008000 /* Held i
14f10 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74  n memory not obt
14f20 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f  ained from mallo
14f30 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  c() */.#define E
14f40 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31  P_MemToken  0x01
14f50 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20  0000 /* Need to 
14f60 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20  sqlite3DbFree() 
14f70 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23  Expr.zToken */.#
14f80 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75  define EP_NoRedu
14f90 63 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20  ce  0x020000 /* 
14fa0 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52  Cannot EXPRDUP_R
14fb0 45 44 55 43 45 20 74 68 69 73 20 45 78 70 72 20  EDUCE this Expr 
14fc0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e  */.#define EP_Un
14fd0 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30  likely  0x040000
14fe0 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f   /* unlikely() o
14ff0 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66  r likelihood() f
15000 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
15010 6e 65 20 45 50 5f 43 6f 6e 73 74 61 6e 74 20 20  ne EP_Constant  
15020 30 78 30 38 30 30 30 30 20 2f 2a 20 4e 6f 64 65  0x080000 /* Node
15030 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 2a   is a constant *
15040 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d  /../*.** These m
15050 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65  acros can be use
15060 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20  d to test, set, 
15070 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e  or clear bits in
15080 20 74 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c   the .** Expr.fl
15090 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
150a0 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f  efine ExprHasPro
150b0 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
150c0 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29  ((E)->flags&(P))
150d0 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70  !=0).#define Exp
150e0 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28  rHasAllProperty(
150f0 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61  E,P)  (((E)->fla
15100 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64  gs&(P))==(P)).#d
15110 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f  efine ExprSetPro
15120 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
15130 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23  E)->flags|=(P).#
15140 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72  define ExprClear
15150 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
15160 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29  (E)->flags&=~(P)
15170 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74  ../* The ExprSet
15180 56 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61  VVAProperty() ma
15190 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20  cro is used for 
151a0 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61  Verification, Va
151b0 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64  lidation,.** and
151c0 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f   Accreditation o
151d0 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c  nly.  It works l
151e0 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ike ExprSetPrope
151f0 72 74 79 28 29 20 64 75 72 69 6e 67 20 56 56 41  rty() during VVA
15200 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75  .** processes bu
15210 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72  t is a no-op for
15220 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69   delivery..*/.#i
15230 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
15240 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  G.# define ExprS
15250 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c  etVVAProperty(E,
15260 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d  P)  (E)->flags|=
15270 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  (P).#else.# defi
15280 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  ne ExprSetVVAPro
15290 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69  perty(E,P).#endi
152a0 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  f../*.** Macros 
152b0 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
152c0 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
152d0 20 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e   required by a n
152e0 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73  ormal Expr .** s
152f0 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73  truct, an Expr s
15300 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
15310 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73  P_Reduced flag s
15320 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73  et in Expr.flags
15330 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72   .** and an Expr
15340 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65   struct with the
15350 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
15360 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69  ag set..*/.#defi
15370 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45  ne EXPR_FULLSIZE
15380 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f             sizeo
15390 66 28 45 78 70 72 29 20 20 20 20 20 20 20 20 20  f(Expr)         
153a0 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a    /* Full size *
153b0 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52  /.#define EXPR_R
153c0 45 44 55 43 45 44 53 49 5a 45 20 20 20 20 20 20  EDUCEDSIZE      
153d0 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
153e0 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d  iTable)  /* Comm
153f0 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23  on features */.#
15400 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45  define EXPR_TOKE
15410 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f  NONLYSIZE      o
15420 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65  ffsetof(Expr,pLe
15430 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66  ft)   /* Fewer f
15440 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  eatures */../*.*
15450 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74  * Flags passed t
15460 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45 78 70  o the sqlite3Exp
15470 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e  rDup() function.
15480 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20   See the header 
15490 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76  comment .** abov
154a0 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
154b0 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a  () for details..
154c0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44  */.#define EXPRD
154d0 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20  UP_REDUCE       
154e0 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65    0x0001  /* Use
154f0 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45  d reduced-size E
15500 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a  xpr nodes */../*
15510 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78  .** A list of ex
15520 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68  pressions.  Each
15530 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
15540 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20  optionally have 
15550 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65  a.** name.  An e
15560 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61  xpr/name combina
15570 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64  tion can be used
15580 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
15590 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65  , such.** as the
155a0 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41   list of "expr A
155b0 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c  S ID" fields fol
155c0 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54  lowing a "SELECT
155d0 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c  " or in the.** l
155e0 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70  ist of "ID = exp
155f0 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55  r" items in an U
15600 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f  PDATE.  A list o
15610 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61  f expressions ca
15620 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65  n.** also be use
15630 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
15640 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c  t to a function,
15650 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74   in which case t
15660 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69  he a.zName.** fi
15670 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e  eld is not used.
15680 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c  .**.** By defaul
15690 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e  t the Expr.zSpan
156a0 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68   field holds a h
156b0 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65  uman-readable de
156c0 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20  scription of.** 
156d0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  the expression t
156e0 68 61 74 20 69 73 20 75 73 65 64 20 69 6e 20 74  hat is used in t
156f0 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
15700 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
15710 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61  and.** column la
15720 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63  bels.  In this c
15730 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20  ase, Expr.zSpan 
15740 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65  is typically the
15750 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f   text of a.** co
15760 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  lumn expression 
15770 61 73 20 69 74 20 65 78 69 73 74 73 20 69 6e 20  as it exists in 
15780 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
15790 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66  nt.  However, if
157a0 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54  .** the bSpanIsT
157b0 61 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  ab flag is set, 
157c0 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76  then zSpan is ov
157d0 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e  erloaded to mean
157e0 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20   the name.** of 
157f0 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  the result colum
15800 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44  n in the form: D
15810 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f  ATABASE.TABLE.CO
15820 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65  LUMN.  This late
15830 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65  r.** form is use
15840 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c  d for name resol
15850 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65  ution with neste
15860 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a  d FROM clauses..
15870 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69  */.struct ExprLi
15880 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72  st {.  int nExpr
15890 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
158a0 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65   Number of expre
158b0 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69  ssions on the li
158c0 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45  st */.  struct E
158d0 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f  xprList_item { /
158e0 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70 72 65  * For each expre
158f0 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73  ssion in the lis
15900 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  t */.    Expr *p
15910 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
15920 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20   /* The list of 
15930 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
15940 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
15950 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
15960 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ken associated w
15970 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73 73  ith this express
15980 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ion */.    char 
15990 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20  *zSpan;         
159a0 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74     /* Original t
159b0 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72 65  ext of the expre
159c0 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20  ssion */.    u8 
159d0 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  sortOrder;      
159e0 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45       /* 1 for DE
159f0 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20  SC or 0 for ASC 
15a00 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
15a10 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f  done :1;       /
15a20 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69  * A flag to indi
15a30 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73  cate when proces
15a40 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64  sing is finished
15a50 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
15a60 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20   bSpanIsTab :1; 
15a70 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44  /* zSpan holds D
15a80 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a  B.TABLE.COLUMN *
15a90 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72  /.    unsigned r
15aa0 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a  eusable :1;   /*
15ab0 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   Constant expres
15ac0 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65  sion is reusable
15ad0 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a   */.    union {.
15ae0 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20        struct {. 
15af0 20 20 20 20 20 20 20 75 31 36 20 69 4f 72 64 65         u16 iOrde
15b00 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20  rByCol;      /* 
15b10 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f  For ORDER BY, co
15b20 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72  lumn number in r
15b30 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20  esult set */.   
15b40 20 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b       u16 iAlias;
15b50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
15b60 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61  dex into Parse.a
15b70 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d  Alias[] for zNam
15b80 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a  e */.      } x;.
15b90 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74        int iConst
15ba0 45 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a  ExprReg;      /*
15bb0 20 52 65 67 69 73 74 65 72 20 69 6e 20 77 68 69   Register in whi
15bc0 63 68 20 45 78 70 72 20 76 61 6c 75 65 20 69 73  ch Expr value is
15bd0 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d   cached */.    }
15be0 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20   u;.  } *a;     
15bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15c00 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f 66  Alloc a power of
15c10 20 74 77 6f 20 67 72 65 61 74 65 72 20 6f 72 20   two greater or 
15c20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a  equal to nExpr *
15c30 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
15c40 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
15c50 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
15c60 64 20 62 79 20 74 68 65 20 70 61 72 73 65 72 20  d by the parser 
15c70 74 6f 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a  to record both.*
15c80 2a 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  * the parse tree
15c90 20 66 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69   for an expressi
15ca0 6f 6e 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20  on and the span 
15cb0 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f  of input text fo
15cc0 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69  r an.** expressi
15cd0 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  on..*/.struct Ex
15ce0 70 72 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20  prSpan {.  Expr 
15cf0 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
15d00 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73 73 69   /* The expressi
15d10 6f 6e 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f  on parse tree */
15d20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
15d30 53 74 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73  Start;   /* Firs
15d40 74 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 69  t character of i
15d50 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63  nput text */.  c
15d60 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b  onst char *zEnd;
15d70 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72       /* One char
15d80 61 63 74 65 72 20 70 61 73 74 20 74 68 65 20 65  acter past the e
15d90 6e 64 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  nd of input text
15da0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
15db0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
15dc0 73 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  s structure can 
15dd0 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69  hold a simple li
15de0 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72  st of identifier
15df0 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68  s,.** such as th
15e00 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69  e list "a,b,c" i
15e10 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
15e20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a  statements:.**.*
15e30 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  *      INSERT IN
15e40 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55  TO t(a,b,c) VALU
15e50 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20  ES ...;.**      
15e60 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 64 78  CREATE INDEX idx
15e70 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a   ON t(a,b,c);.**
15e80 20 20 20 20 20 20 43 52 45 41 54 45 20 54 52 49        CREATE TRI
15e90 47 47 45 52 20 74 72 69 67 20 42 45 46 4f 52 45  GGER trig BEFORE
15ea0 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62   UPDATE ON t(a,b
15eb0 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54  ,c) ...;.**.** T
15ec0 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20  he IdList.a.idx 
15ed0 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 77 68  field is used wh
15ee0 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20 72 65  en the IdList re
15ef0 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73  presents the lis
15f00 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e  t of.** column n
15f10 61 6d 65 73 20 61 66 74 65 72 20 61 20 74 61 62  ames after a tab
15f20 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e  le name in an IN
15f30 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  SERT statement. 
15f40 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e   In the statemen
15f50 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45  t.**.**     INSE
15f60 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29  RT INTO t(a,b,c)
15f70 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61   ....**.** If "a
15f80 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f  " is the k-th co
15f90 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74  lumn of table "t
15fa0 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61  ", then IdList.a
15fb0 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73  [0].idx==k..*/.s
15fc0 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20  truct IdList {. 
15fd0 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69   struct IdList_i
15fe0 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  tem {.    char *
15ff0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  zName;      /* N
16000 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74  ame of the ident
16010 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74  ifier */.    int
16020 20 69 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f   idx;          /
16030 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20  * Index in some 
16040 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20  Table.aCol[] of 
16050 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a  a column named z
16060 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a  Name */.  } *a;.
16070 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20    int nId;      
16080 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
16090 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74  identifiers on t
160a0 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  he list */.};../
160b0 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b  *.** The bitmask
160c0 20 64 61 74 61 74 79 70 65 20 64 65 66 69 6e 65   datatype define
160d0 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20  d below is used 
160e0 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69  for various opti
160f0 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  mizations..**.**
16100 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66   Changing this f
16110 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20  rom a 64-bit to 
16120 61 20 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69  a 32-bit type li
16130 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20  mits the number 
16140 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20  of.** tables in 
16150 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73  a join to 32 ins
16160 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74  tead of 64.  But
16170 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73   it also reduces
16180 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20   the size.** of 
16190 74 68 65 20 6c 69 62 72 61 72 79 20 62 79 20 37  the library by 7
161a0 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36  38 bytes on ix86
161b0 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75 36 34  ..*/.typedef u64
161c0 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a   Bitmask;../*.**
161d0 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   The number of b
161e0 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b  its in a Bitmask
161f0 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22  .  "BMS" means "
16200 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a  BitMask Size"..*
16210 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28  /.#define BMS  (
16220 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74  (int)(sizeof(Bit
16230 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a  mask)*8))../*.**
16240 20 41 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d   A bit in a Bitm
16250 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ask.*/.#define M
16260 41 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42  ASKBIT(n)   (((B
16270 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a  itmask)1)<<(n)).
16280 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33  #define MASKBIT3
16290 32 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64  2(n) (((unsigned
162a0 20 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f   int)1)<<(n))../
162b0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
162c0 6e 67 20 73 74 72 75 63 74 75 72 65 20 64 65 73  ng structure des
162d0 63 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20  cribes the FROM 
162e0 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
162f0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  CT statement..**
16300 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73   Each table or s
16310 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46  ubquery in the F
16320 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20  ROM clause is a 
16330 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74  separate element
16340 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69   of.** the SrcLi
16350 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a  st.a[] array..**
16360 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64 64  .** With the add
16370 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c  ition of multipl
16380 65 20 64 61 74 61 62 61 73 65 20 73 75 70 70 6f  e database suppo
16390 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  rt, the followin
163a0 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63  g structure.** c
163b0 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  an also be used 
163c0 74 6f 20 64 65 73 63 72 69 62 65 20 61 20 70 61  to describe a pa
163d0 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73  rticular table s
163e0 75 63 68 20 61 73 20 74 68 65 20 74 61 62 6c 65  uch as the table
163f0 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69   that.** is modi
16400 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52  fied by an INSER
16410 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50  T, DELETE, or UP
16420 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20  DATE statement. 
16430 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c   In standard SQL
16440 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c  ,.** such a tabl
16450 65 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70  e must be a simp
16460 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75  le name: ID.  Bu
16470 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65  t in SQLite, the
16480 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f   table can.** no
16490 77 20 62 65 20 69 64 65 6e 74 69 66 69 65 64 20  w be identified 
164a0 62 79 20 61 20 64 61 74 61 62 61 73 65 20 6e 61  by a database na
164b0 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20  me, a dot, then 
164c0 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20  the table name: 
164d0 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ID.ID..**.** The
164e0 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73   jointype starts
164f0 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65   out showing the
16500 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65   join type betwe
16510 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  en the current t
16520 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20  able.** and the 
16530 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68  next table on th
16540 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72  e list.  The par
16550 73 65 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c  ser builds the l
16560 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a  ist this way..**
16570 20 42 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c   But sqlite3SrcL
16580 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65  istShiftJoinType
16590 28 29 20 6c 61 74 65 72 20 73 68 69 66 74 73 20  () later shifts 
165a0 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f  the jointypes so
165b0 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f   that each.** jo
165c0 69 6e 74 79 70 65 20 65 78 70 72 65 73 73 65 73  intype expresses
165d0 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65   the join betwee
165e0 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20  n the table and 
165f0 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 61 62  the previous tab
16600 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  le..**.** In the
16610 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20   colUsed field, 
16620 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62  the high-order b
16630 69 74 20 28 62 69 74 20 36 33 29 20 69 73 20 73  it (bit 63) is s
16640 65 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a  et if the table.
16650 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65  ** contains more
16660 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73   than 63 columns
16670 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f   and the 64-th o
16680 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69  r later column i
16690 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63  s used..*/.struc
166a0 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e  t SrcList {.  in
166b0 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f  t nSrc;        /
166c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  * Number of tabl
166d0 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73  es or subqueries
166e0 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
166f0 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c  use */.  u32 nAl
16700 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  loc;      /* Num
16710 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61  ber of entries a
16720 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20  llocated in a[] 
16730 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63  below */.  struc
16740 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b  t SrcList_item {
16750 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63  .    Schema *pSc
16760 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61  hema;  /* Schema
16770 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69   to which this i
16780 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a  tem is fixed */.
16790 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62      char *zDatab
167a0 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66  ase;  /* Name of
167b0 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
167c0 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  g this table */.
167d0 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
167e0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
167f0 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
16800 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20    char *zAlias; 
16810 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70      /* The "B" p
16820 61 72 74 20 6f 66 20 61 20 22 41 20 41 53 20 42  art of a "A AS B
16830 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65  " phrase.  zName
16840 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20   is the "A" */. 
16850 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
16860 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74       /* An SQL t
16870 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  able correspondi
16880 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20  ng to zName */. 
16890 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65     Select *pSele
168a0 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54  ct;  /* A SELECT
168b0 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20   statement used 
168c0 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61  in place of a ta
168d0 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20  ble name */.    
168e0 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b  int addrFillSub;
168f0 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20    /* Address of 
16900 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61  subroutine to ma
16910 6e 69 66 65 73 74 20 61 20 73 75 62 71 75 65 72  nifest a subquer
16920 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  y */.    int reg
16930 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65  Return;    /* Re
16940 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
16950 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66  eturn address of
16960 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a   addrFillSub */.
16970 20 20 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c      int regResul
16980 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  t;    /* Registe
16990 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c  rs holding resul
169a0 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69  ts of a co-routi
169b0 6e 65 20 2a 2f 0a 20 20 20 20 75 38 20 6a 6f 69  ne */.    u8 joi
169c0 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54  ntype;      /* T
169d0 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77  ype of join betw
169e0 65 65 6e 20 74 68 69 73 20 61 62 6c 65 20 61 6e  een this able an
169f0 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a  d the previous *
16a00 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e  /.    unsigned n
16a10 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20  otIndexed :1;   
16a20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72   /* True if ther
16a30 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58  e is a NOT INDEX
16a40 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  ED clause */.   
16a50 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72   unsigned isCorr
16a60 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54  elated :1;  /* T
16a70 72 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79  rue if sub-query
16a80 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a   is correlated *
16a90 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76  /.    unsigned v
16aa0 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20  iaCoroutine :1; 
16ab0 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20   /* Implemented 
16ac0 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  as a co-routine 
16ad0 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
16ae0 69 73 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20  isRecursive :1; 
16af0 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65    /* True for re
16b00 63 75 72 73 69 76 65 20 72 65 66 65 72 65 6e 63  cursive referenc
16b10 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a 23 69 66  e in WITH */.#if
16b20 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
16b30 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20  _EXPLAIN.    u8 
16b40 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f  iSelectId;     /
16b50 2a 20 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c  * If pSelect!=0,
16b60 20 74 68 65 20 69 64 20 6f 66 20 74 68 65 20 73   the id of the s
16b70 75 62 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50  ub-select in EQP
16b80 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69   */.#endif.    i
16b90 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20  nt iCursor;     
16ba0 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
16bb0 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20  sor number used 
16bc0 74 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 74  to access this t
16bd0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72  able */.    Expr
16be0 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a   *pOn;        /*
16bf0 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f   The ON clause o
16c00 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20  f a join */.    
16c10 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20  IdList *pUsing; 
16c20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63    /* The USING c
16c30 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
16c40 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63  */.    Bitmask c
16c50 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20  olUsed;  /* Bit 
16c60 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20  N (1<<N) set if 
16c70 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62  column N of pTab
16c80 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20   is used */.    
16c90 63 68 61 72 20 2a 7a 49 6e 64 65 78 3b 20 20 20  char *zIndex;   
16ca0 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20    /* Identifier 
16cb0 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59  from "INDEXED BY
16cc0 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73   <zIndex>" claus
16cd0 65 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a  e */.    Index *
16ce0 70 49 6e 64 65 78 3b 20 20 20 20 2f 2a 20 49 6e  pIndex;    /* In
16cf0 64 65 78 20 73 74 72 75 63 74 75 72 65 20 63 6f  dex structure co
16d00 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a  rresponding to z
16d10 49 6e 64 65 78 2c 20 69 66 20 61 6e 79 20 2a 2f  Index, if any */
16d20 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20  .  } a[1];      
16d30 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e         /* One en
16d40 74 72 79 20 66 6f 72 20 65 61 63 68 20 69 64 65  try for each ide
16d50 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c  ntifier on the l
16d60 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
16d70 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65   Permitted value
16d80 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74  s of the SrcList
16d90 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c  .a.jointype fiel
16da0 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  d.*/.#define JT_
16db0 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30 31  INNER     0x0001
16dc0 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20      /* Any kind 
16dd0 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73  of inner or cros
16de0 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  s join */.#defin
16df0 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30  e JT_CROSS     0
16e00 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c  x0002    /* Expl
16e10 69 63 69 74 20 75 73 65 20 6f 66 20 74 68 65 20  icit use of the 
16e20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f  CROSS keyword */
16e30 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55  .#define JT_NATU
16e40 52 41 4c 20 20 20 30 78 30 30 30 34 20 20 20 20  RAL   0x0004    
16e50 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e  /* True for a "n
16e60 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a  atural" join */.
16e70 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20  #define JT_LEFT 
16e80 20 20 20 20 20 30 78 30 30 30 38 20 20 20 20 2f       0x0008    /
16e90 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69  * Left outer joi
16ea0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
16eb0 52 49 47 48 54 20 20 20 20 20 30 78 30 30 31 30  RIGHT     0x0010
16ec0 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74      /* Right out
16ed0 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
16ee0 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20  ne JT_OUTER     
16ef0 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65  0x0020    /* The
16f00 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64   "OUTER" keyword
16f10 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23   is present */.#
16f20 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20  define JT_ERROR 
16f30 20 20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a      0x0040    /*
16f40 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75   unknown or unsu
16f50 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70  pported join typ
16f60 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  e */.../*.** Fla
16f70 67 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 66  gs appropriate f
16f80 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67  or the wctrlFlag
16f90 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73  s parameter of s
16fa0 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e  qlite3WhereBegin
16fb0 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68  ().** and the Wh
16fc0 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61  ereInfo.wctrlFla
16fd0 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64  gs member..*/.#d
16fe0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
16ff0 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30  RBY_NORMAL   0x0
17000 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a  000 /* No-op */.
17010 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
17020 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30  DERBY_MIN      0
17030 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42  x0001 /* ORDER B
17040 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
17050 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23   min() func */.#
17060 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
17070 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78  ERBY_MAX      0x
17080 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59  0002 /* ORDER BY
17090 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
170a0 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64  max() func */.#d
170b0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50  efine WHERE_ONEP
170c0 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78 30  ASS_DESIRED  0x0
170d0 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64  004 /* Want to d
170e0 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54  o one-pass UPDAT
170f0 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66  E/DELETE */.#def
17100 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43  ine WHERE_DUPLIC
17110 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 30  ATES_OK    0x000
17120 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72  8 /* Ok to retur
17130 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61  n a row more tha
17140 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e  n once */.#defin
17150 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45  e WHERE_OMIT_OPE
17160 4e 5f 43 4c 4f 53 45 20 20 30 78 30 30 31 30 20  N_CLOSE  0x0010 
17170 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 73  /* Table cursors
17180 20 61 72 65 20 61 6c 72 65 61 64 79 20 6f 70 65   are already ope
17190 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  n */.#define WHE
171a0 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45 20 20  RE_FORCE_TABLE  
171b0 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20 44 6f      0x0020 /* Do
171c0 20 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e 64 65   not use an inde
171d0 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f  x-only search */
171e0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
171f0 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20  NETABLE_ONLY    
17200 30 78 30 30 34 30 20 2f 2a 20 4f 6e 6c 79 20 63  0x0040 /* Only c
17210 6f 64 65 20 74 68 65 20 31 73 74 20 74 61 62 6c  ode the 1st tabl
17220 65 20 69 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f  e in pTabList */
17230 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 41  .#define WHERE_A
17240 4e 44 5f 4f 4e 4c 59 20 20 20 20 20 20 20 20 20  ND_ONLY         
17250 30 78 30 30 38 30 20 2f 2a 20 44 6f 6e 27 74 20  0x0080 /* Don't 
17260 75 73 65 20 69 6e 64 69 63 65 73 20 66 6f 72 20  use indices for 
17270 4f 52 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66  OR terms */.#def
17280 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42  ine WHERE_GROUPB
17290 59 20 20 20 20 20 20 20 20 20 20 30 78 30 31 30  Y          0x010
172a0 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73  0 /* pOrderBy is
172b0 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20   really a GROUP 
172c0 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  BY */.#define WH
172d0 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20  ERE_DISTINCTBY  
172e0 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20 70       0x0200 /* p
172f0 4f 72 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c  Orderby is reall
17300 79 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61  y a DISTINCT cla
17310 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  use */.#define W
17320 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e  HERE_WANT_DISTIN
17330 43 54 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20  CT    0x0400 /* 
17340 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73  All output needs
17350 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20   to be distinct 
17360 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
17370 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20  _SORTBYGROUP    
17380 20 20 30 78 30 38 30 30 20 2f 2a 20 53 75 70 70    0x0800 /* Supp
17390 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  ort sqlite3Where
173a0 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64  IsSorted() */.#d
173b0 65 66 69 6e 65 20 57 48 45 52 45 5f 52 45 4f 50  efine WHERE_REOP
173c0 45 4e 5f 49 44 58 20 20 20 20 20 20 20 30 78 31  EN_IDX       0x1
173d0 30 30 30 20 2f 2a 20 54 72 79 20 74 6f 20 75 73  000 /* Try to us
173e0 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 20 2a  e OP_ReopenIdx *
173f0 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65  /../* Allowed re
17400 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d  turn values from
17410 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44   sqlite3WhereIsD
17420 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65  istinct().*/.#de
17430 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
17440 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20  NCT_NOOP      0 
17450 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79   /* DISTINCT key
17460 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f  word not used */
17470 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
17480 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20  ISTINCT_UNIQUE  
17490 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69    1  /* No dupli
174a0 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cates */.#define
174b0 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
174c0 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20  ORDERED   2  /* 
174d0 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61  All duplicates a
174e0 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23  re adjacent */.#
174f0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
17500 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20  TINCT_UNORDERED 
17510 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73  3  /* Duplicates
17520 20 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a   are scattered *
17530 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43  /../*.** A NameC
17540 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61  ontext defines a
17550 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63   context in whic
17560 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62  h to resolve tab
17570 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a  le and column.**
17580 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e   names.  The con
17590 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  text consists of
175a0 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65   a list of table
175b0 73 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29  s (the pSrcList)
175c0 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20   field and.** a 
175d0 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78  list of named ex
175e0 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74  pression (pEList
175f0 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78  ).  The named ex
17600 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61  pression list ma
17610 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54  y.** be NULL.  T
17620 68 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f  he pSrc correspo
17630 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20  nds to the FROM 
17640 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
17650 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20  CT or.** to the 
17660 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72  table being oper
17670 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52  ated on by INSER
17680 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45  T, UPDATE, or DE
17690 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45  LETE.  The.** pE
176a0 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  List corresponds
176b0 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73   to the result s
176c0 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61  et of a SELECT a
176d0 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a  nd is NULL for.*
176e0 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e  * other statemen
176f0 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f  ts..**.** NameCo
17700 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65  ntexts can be ne
17710 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f  sted.  When reso
17720 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65  lving names, the
17730 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20   inner-most .** 
17740 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72 63  context is searc
17750 68 65 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e  hed first.  If n
17760 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  o match is found
17770 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72  , the next outer
17780 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63  .** context is c
17790 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72  hecked.  If ther
177a0 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61  e is still no ma
177b0 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f  tch, the next co
177c0 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63  ntext.** is chec
177d0 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65  ked.  This proce
177e0 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74  ss continues unt
177f0 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74 63  il either a matc
17800 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72  h is found.** or
17810 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72   all contexts ar
17820 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61  e check.  When a
17830 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c   match is found,
17840 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72   the nRef member
17850 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   of.** the conte
17860 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  xt containing th
17870 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65  e match is incre
17880 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45  mented. .**.** E
17890 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65 74  ach subquery get
178a0 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74  s a new NameCont
178b0 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20  ext.  The pNext 
178c0 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20  field points to 
178d0 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
178e0 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74  xt in the parent
178f0 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74 68   query.  Thus th
17900 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61  e process of sca
17910 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d  nning the.** Nam
17920 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f  eContext list co
17930 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61  rresponds to sea
17940 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73  rching through s
17950 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65  uccessively oute
17960 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20  r.** subqueries 
17970 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61  looking for a ma
17980 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e  tch..*/.struct N
17990 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50  ameContext {.  P
179a0 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
179b0 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65      /* The parse
179c0 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  r */.  SrcList *
179d0 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f  pSrcList;   /* O
179e0 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65  ne or more table
179f0 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76  s used to resolv
17a00 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70  e names */.  Exp
17a10 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20  rList *pEList;  
17a20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69    /* Optional li
17a30 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74  st of result-set
17a40 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67   columns */.  Ag
17a50 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
17a60 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
17a70 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61 74  n about aggregat
17a80 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c  es at this level
17a90 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78   */.  NameContex
17aa0 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65  t *pNext;  /* Ne
17ab0 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f  xt outer name co
17ac0 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72  ntext.  NULL for
17ad0 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20   outermost */.  
17ae0 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20  int nRef;       
17af0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17b00 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64  f names resolved
17b10 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74   by this context
17b20 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
17b30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
17b40 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65  mber of errors e
17b50 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65  ncountered while
17b60 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
17b70 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61 67   */.  u16 ncFlag
17b80 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65  s;         /* Ze
17b90 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20  ro or more NC_* 
17ba0 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62 65  flags defined be
17bb0 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  low */.};../*.**
17bc0 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
17bd0 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74  for the NameCont
17be0 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65  ext, ncFlags fie
17bf0 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 3a 20  ld..**.** Note: 
17c00 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 6d 75   NC_MinMaxAgg mu
17c10 73 74 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  st have the same
17c20 20 76 61 6c 75 65 20 61 73 20 53 46 5f 4d 69 6e   value as SF_Min
17c30 4d 61 78 41 67 67 20 61 6e 64 0a 2a 2a 20 53 51  MaxAgg and.** SQ
17c40 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
17c50 2e 0a 2a 2a 20 0a 2a 2f 0a 23 64 65 66 69 6e 65  ..** .*/.#define
17c60 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78   NC_AllowAgg  0x
17c70 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61  0001  /* Aggrega
17c80 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  te functions are
17c90 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f   allowed here */
17ca0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41  .#define NC_HasA
17cb0 67 67 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a  gg    0x0002  /*
17cc0 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   One or more agg
17cd0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
17ce0 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   seen */.#define
17cf0 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78   NC_IsCheck   0x
17d00 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66  0004  /* True if
17d10 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
17d20 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73   in a CHECK cons
17d30 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
17d40 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30  e NC_InAggFunc 0
17d50 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20 69  x0008  /* True i
17d60 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75  f analyzing argu
17d70 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20  ments to an agg 
17d80 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
17d90 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30 78 30  NC_PartIdx   0x0
17da0 30 31 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  010  /* True if 
17db0 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74  resolving a part
17dc0 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20  ial index WHERE 
17dd0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69  */.#define NC_Mi
17de0 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30 20 20  nMaxAgg 0x1000  
17df0 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65  /* min/max aggre
17e00 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65  gates seen.  See
17e10 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a   note above */..
17e20 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
17e30 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
17e40 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
17e50 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d  tains all inform
17e60 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20  ation.** needed 
17e70 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65  to generate code
17e80 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45   for a single SE
17e90 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
17ea0 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20  **.** nLimit is 
17eb0 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65  set to -1 if the
17ec0 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63  re is no LIMIT c
17ed0 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20  lause.  nOffset 
17ee0 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20  is set to 0..** 
17ef0 49 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49  If there is a LI
17f00 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20  MIT clause, the 
17f10 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d  parser sets nLim
17f20 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  it to the value 
17f30 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20  of the.** limit 
17f40 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74  and nOffset to t
17f50 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
17f60 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20  offset (or 0 if 
17f70 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20  there is not.** 
17f80 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61  offset).  But la
17f90 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61  ter on, nLimit a
17fa0 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d  nd nOffset becom
17fb0 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  e the memory loc
17fc0 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65  ations.** in the
17fd0 20 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72   VDBE that recor
17fe0 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20  d the limit and 
17ff0 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e  offset counters.
18000 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45  .**.** addrOpenE
18010 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f  phm[] entries co
18020 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73  ntain the addres
18030 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65  s of OP_OpenEphe
18040 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a  meral opcodes..*
18050 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65  * These addresse
18060 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64  s must be stored
18070 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20   so that we can 
18080 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c  go back and fill
18090 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45   in.** the P4_KE
180a0 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72  YINFO and P2 par
180b0 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20  ameters later.  
180c0 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49  Neither the KeyI
180d0 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e  nfo nor.** the n
180e0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
180f0 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f   in P2 can be co
18100 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61  mputed at the sa
18110 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68  me time.** as th
18120 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e  e OP_OpenEphm in
18130 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64  struction is cod
18140 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a  ed because not.*
18150 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61  * enough informa
18160 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63  tion about the c
18170 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73  ompound query is
18180 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70   known at that p
18190 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79  oint..** The Key
181a0 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
181b0 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d  nTran[0] and [1]
181c0 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74   contains collat
181d0 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a  ing sequences.**
181e0 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20   for the result 
181f0 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  set.  The KeyInf
18200 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70  o for addrOpenEp
18210 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63  hm[2] contains c
18220 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75  ollating.** sequ
18230 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52  ences for the OR
18240 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
18250 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  /.struct Select 
18260 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  {.  ExprList *pE
18270 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68  List;      /* Th
18280 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20  e fields of the 
18290 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f  result */.  u8 o
182a0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
182b0 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b     /* One of: TK
182c0 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b  _UNION TK_ALL TK
182d0 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58  _INTERSECT TK_EX
182e0 43 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65  CEPT */.  u16 se
182f0 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  lFlags;         
18300 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a   /* Various SF_*
18310 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74   values */.  int
18320 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74   iLimit, iOffset
18330 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65  ;   /* Memory re
18340 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
18350 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63  LIMIT & OFFSET c
18360 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20 53  ounters */.#if S
18370 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
18380 45 44 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e 61  ED.  char zSelNa
18390 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53  me[12];     /* S
183a0 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20  ymbolic name of 
183b0 74 68 69 73 20 53 45 4c 45 43 54 20 75 73 65 20  this SELECT use 
183c0 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20 2a 2f  for debugging */
183d0 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 61 64  .#endif.  int ad
183e0 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20  drOpenEphm[2];  
183f0 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   /* OP_OpenEphem
18400 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64   opcodes related
18410 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20   to this select 
18420 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65 63 74  */.  u64 nSelect
18430 52 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a 20 45  Row;        /* E
18440 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20  stimated number 
18450 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a  of result rows *
18460 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
18470 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  c;         /* Th
18480 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
18490 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
184a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
184b0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f   WHERE clause */
184c0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
184d0 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  oupBy;    /* The
184e0 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
184f0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76   */.  Expr *pHav
18500 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ing;         /* 
18510 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  The HAVING claus
18520 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
18530 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a  *pOrderBy;    /*
18540 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
18550 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ause */.  Select
18560 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20   *pPrior;       
18570 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74   /* Prior select
18580 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73   in a compound s
18590 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20  elect statement 
185a0 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65  */.  Select *pNe
185b0 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
185c0 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68  ext select to th
185d0 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70  e left in a comp
185e0 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ound */.  Expr *
185f0 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20  pLimit;         
18600 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73   /* LIMIT expres
18610 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73  sion. NULL means
18620 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20   not used. */.  
18630 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20  Expr *pOffset;  
18640 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54         /* OFFSET
18650 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c   expression. NUL
18660 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64  L means not used
18670 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69  . */.  With *pWi
18680 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  th;           /*
18690 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74 74   WITH clause att
186a0 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73 65  ached to this se
186b0 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a  lect. Or NULL. *
186c0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
186d0 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53  wed values for S
186e0 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20  elect.selFlags. 
186f0 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78   The "SF" prefix
18700 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22   stands for.** "
18710 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f  Select Flag"..*/
18720 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74  .#define SF_Dist
18730 69 6e 63 74 20 20 20 20 20 20 20 20 30 78 30 30  inct        0x00
18740 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68  01  /* Output sh
18750 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54  ould be DISTINCT
18760 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52   */.#define SF_R
18770 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20 30  esolved        0
18780 78 30 30 30 32 20 20 2f 2a 20 49 64 65 6e 74 69  x0002  /* Identi
18790 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20  fiers have been 
187a0 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66  resolved */.#def
187b0 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65  ine SF_Aggregate
187c0 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
187d0 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  * Contains aggre
187e0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
187f0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65  /.#define SF_Use
18800 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78 30  sEphemeral   0x0
18810 30 30 38 20 20 2f 2a 20 55 73 65 73 20 74 68 65  008  /* Uses the
18820 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f   OpenEphemeral o
18830 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65  pcode */.#define
18840 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20   SF_Expanded    
18850 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 73      0x0010  /* s
18860 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61  qlite3SelectExpa
18870 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74  nd() called on t
18880 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  his */.#define S
18890 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20  F_HasTypeInfo   
188a0 20 20 30 78 30 30 32 30 20 20 2f 2a 20 46 52 4f    0x0020  /* FRO
188b0 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76  M subqueries hav
188c0 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61  e Table metadata
188d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43   */.#define SF_C
188e0 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 20 30  ompound        0
188f0 78 30 30 34 30 20 20 2f 2a 20 50 61 72 74 20 6f  x0040  /* Part o
18900 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  f a compound que
18910 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ry */.#define SF
18920 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20  _Values         
18930 20 30 78 30 30 38 30 20 20 2f 2a 20 53 79 6e 74   0x0080  /* Synt
18940 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c  hesized from VAL
18950 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  UES clause */.  
18960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18970 20 20 2f 2a 20 20 20 20 20 30 78 30 31 30 30 20    /*     0x0100 
18980 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0a 23 64 65   NOT USED */.#de
18990 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72  fine SF_NestedFr
189a0 6f 6d 20 20 20 20 20 20 30 78 30 32 30 30 20 20  om      0x0200  
189b0 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61 72  /* Part of a par
189c0 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20  enthesized FROM 
189d0 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
189e0 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72  e SF_MaybeConver
189f0 74 20 20 20 20 30 78 30 34 30 30 20 20 2f 2a 20  t    0x0400  /* 
18a00 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70  Need convertComp
18a10 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
18a20 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e  uery() */.#defin
18a30 65 20 53 46 5f 52 65 63 75 72 73 69 76 65 20 20  e SF_Recursive  
18a40 20 20 20 20 20 30 78 30 38 30 30 20 20 2f 2a 20       0x0800  /* 
18a50 54 68 65 20 72 65 63 75 72 73 69 76 65 20 70 61  The recursive pa
18a60 72 74 20 6f 66 20 61 20 72 65 63 75 72 73 69 76  rt of a recursiv
18a70 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  e CTE */.#define
18a80 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20   SF_MinMaxAgg   
18a90 20 20 20 20 30 78 31 30 30 30 20 20 2f 2a 20 41      0x1000  /* A
18aa0 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e  ggregate contain
18ab0 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78  ing min() or max
18ac0 28 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68  () */.../*.** Th
18ad0 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53  e results of a S
18ae0 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69 73  ELECT can be dis
18af0 74 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65  tributed in seve
18b00 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66  ral ways, as def
18b10 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f  ined.** by one o
18b20 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
18b30 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52  macros.  The "SR
18b40 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20  T" prefix means 
18b50 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a  "SELECT Result.*
18b60 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20  * Type"..**.**  
18b70 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20     SRT_Union    
18b80 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
18b90 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74   as a key in a t
18ba0 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 0a  emporary index .
18bb0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18bc0 20 20 20 20 20 20 20 69 64 65 6e 74 69 66 69 65         identifie
18bd0 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50  d by pDest->iSDP
18be0 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  arm..**.**     S
18bf0 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 52  RT_Except      R
18c00 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72  emove results fr
18c10 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  om the temporary
18c20 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53   index pDest->iS
18c30 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  DParm..**.**    
18c40 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20   SRT_Exists     
18c50 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65   Store a 1 in me
18c60 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d  mory cell pDest-
18c70 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68 65 20  >iSDParm if the 
18c80 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20  result.**       
18c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
18ca0 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a  t is not empty..
18cb0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
18cc0 73 63 61 72 64 20 20 20 20 20 54 68 72 6f 77 20  scard     Throw 
18cd0 74 68 65 20 72 65 73 75 6c 74 73 20 61 77 61 79  the results away
18ce0 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64 20  .  This is used 
18cf0 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20  by SELECT.**    
18d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d10 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
18d20 69 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f 73  in triggers whos
18d30 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69  e only purpose i
18d40 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
18d50 20 20 20 20 20 20 20 20 20 74 68 65 20 73 69 64           the sid
18d60 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e  e-effects of fun
18d70 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c  ctions..**.** Al
18d80 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61  l of the above a
18d90 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72  re free to ignor
18da0 65 20 74 68 65 69 72 20 4f 52 44 45 52 20 42 59  e their ORDER BY
18db0 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74   clause. Those t
18dc0 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75  hat.** follow mu
18dd0 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44  st honor the ORD
18de0 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a  ER BY clause..**
18df0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70  .**     SRT_Outp
18e00 75 74 20 20 20 20 20 20 47 65 6e 65 72 61 74 65  ut      Generate
18e10 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74   a row of output
18e20 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52   (using the OP_R
18e30 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20  esultRow.**     
18e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e50 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68  opcode) for each
18e60 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75   row in the resu
18e70 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  lt set..**.**   
18e80 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20    SRT_Mem       
18e90 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20    Only valid if 
18ea0 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 20  the result is a 
18eb0 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a  single column..*
18ec0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
18ed0 20 20 20 20 20 20 53 74 6f 72 65 20 74 68 65 20        Store the 
18ee0 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20  first column of 
18ef0 74 68 65 20 66 69 72 73 74 20 72 65 73 75 6c 74  the first result
18f00 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20   row.**         
18f10 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 20 72              in r
18f20 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69  egister pDest->i
18f30 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e  SDParm then aban
18f40 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20  don the rest.** 
18f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f60 20 20 20 20 6f 66 20 74 68 65 20 71 75 65 72 79      of the query
18f70 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e 61 74  .  This destinat
18f80 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d  ion implies "LIM
18f90 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  IT 1"..**.**    
18fa0 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20   SRT_Set        
18fb0 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74   The result must
18fc0 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c   be a single col
18fd0 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68  umn.  Store each
18fe0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18ff0 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72          row of r
19000 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79  esult as the key
19010 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d   in table pDest-
19020 3e 69 53 44 50 61 72 6d 2e 20 0a 2a 2a 20 20 20  >iSDParm. .**   
19030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19040 20 20 41 70 70 6c 79 20 74 68 65 20 61 66 66 69    Apply the affi
19050 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53  nity pDest->affS
19060 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69  dst before stori
19070 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ng.**           
19080 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
19090 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c  s.  Used to impl
190a0 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43  ement "IN (SELEC
190b0 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20  T ...)"..**.**  
190c0 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20     SRT_EphemTab 
190d0 20 20 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d     Create an tem
190e0 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
190f0 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20  st->iSDParm and 
19100 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20  store.**        
19110 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
19120 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54   result there. T
19130 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66  he cursor is lef
19140 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20  t open after.** 
19150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19160 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20      returning.  
19170 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54  This is like SRT
19180 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20 74 68  _Table except th
19190 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  at.**           
191a0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 64            this d
191b0 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20  estination uses 
191c0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
191d0 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20   to create.**   
191e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191f0 20 20 74 68 65 20 74 61 62 6c 65 20 66 69 72 73    the table firs
19200 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
19210 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e  _Coroutine   Gen
19220 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69  erate a co-routi
19230 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  ne that returns 
19240 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20  a new row of.** 
19250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19260 20 20 20 20 72 65 73 75 6c 74 73 20 65 61 63 68      results each
19270 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f   time it is invo
19280 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20  ked.  The entry 
19290 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20  point.**        
192a0 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20               of 
192b0 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69  the co-routine i
192c0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
192d0 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50  ster pDest->iSDP
192e0 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  arm.**          
192f0 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20 74             and t
19300 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73  he result row is
19310 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74   stored in pDest
19320 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65 72  ->nDest register
19330 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
19340 20 20 20 20 20 20 20 20 20 73 74 61 72 74 69 6e           startin
19350 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53  g with pDest->iS
19360 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  dst..**.**     S
19370 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53  RT_Table       S
19380 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
19390 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
193a0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
193b0 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20  **     SRT_Fifo 
193c0 20 20 20 20 20 20 20 54 68 69 73 20 69 73 20 6c         This is l
193d0 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62  ike SRT_EphemTab
193e0 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
193f0 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20   table.**       
19400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73                is
19410 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65   assumed to alre
19420 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52  ady be open.  SR
19430 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20  T_Fifo has.**   
19440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19450 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c    the additional
19460 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69   property of bei
19470 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72  ng able to ignor
19480 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
19490 20 20 20 20 20 20 20 20 20 74 68 65 20 4f 52 44           the ORD
194a0 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a  ER BY clause..**
194b0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74  .**     SRT_Dist
194c0 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65  Fifo    Store re
194d0 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f  sults in a tempo
194e0 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
194f0 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
19500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19510 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74    But also use t
19520 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
19530 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20  Dest->iSDParm+1 
19540 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  as.**           
19550 20 20 20 20 20 20 20 20 20 20 61 20 72 65 63 6f            a reco
19560 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20  rd of all prior 
19570 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f  results and igno
19580 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65  re any duplicate
19590 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
195a0 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e          rows.  N
195b0 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73  ame means:  "Dis
195c0 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a  tinct Fifo"..**.
195d0 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75 65  **     SRT_Queue
195e0 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
195f0 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79  ults in priority
19600 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53   queue pDest->iS
19610 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a  DParm (really.**
19620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19630 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20       an index). 
19640 20 41 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e   Append a sequen
19650 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61  ce number so tha
19660 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a  t all entries.**
19670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19680 20 20 20 20 20 61 72 65 20 64 69 73 74 69 6e 63       are distinc
19690 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
196a0 5f 44 69 73 74 51 75 65 75 65 20 20 20 53 74 6f  _DistQueue   Sto
196b0 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72  re results in pr
196c0 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65  iority queue pDe
196d0 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79  st->iSDParm only
196e0 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   if.**          
196f0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
19700 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e  ame record has n
19710 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64  ever been stored
19720 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a   before.  The.**
19730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19740 20 20 20 20 20 69 6e 64 65 78 20 61 74 20 70 44       index at pD
19750 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68  est->iSDParm+1 h
19760 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74  old all prior st
19770 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ores..*/.#define
19780 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
19790 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    1  /* Store re
197a0 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20  sult as keys in 
197b0 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
197c0 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20  ine SRT_Except  
197d0 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76       2  /* Remov
197e0 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20  e result from a 
197f0 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23  UNION index */.#
19800 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74  define SRT_Exist
19810 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74  s       3  /* St
19820 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73  ore 1 if the res
19830 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  ult is not empty
19840 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
19850 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20  Discard      4  
19860 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74  /* Do not save t
19870 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68  he results anywh
19880 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ere */.#define S
19890 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20  RT_Fifo         
198a0 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  5  /* Store resu
198b0 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20  lt as data with 
198c0 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77  an automatic row
198d0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  id */.#define SR
198e0 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20 36  T_DistFifo     6
198f0 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69    /* Like SRT_Fi
19900 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72  fo, but unique r
19910 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23  esults only */.#
19920 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65  define SRT_Queue
19930 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74          7  /* St
19940 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  ore result in an
19950 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e   queue */.#defin
19960 65 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20  e SRT_DistQueue 
19970 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52     8  /* Like SR
19980 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69  T_Queue, but uni
19990 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79  que results only
199a0 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45   */../* The ORDE
199b0 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69  R BY clause is i
199c0 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f  gnored for all o
199d0 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23  f the above */.#
199e0 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65  define Ignorable
199f0 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e  Orderby(X) ((X->
19a00 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74  eDest)<=SRT_Dist
19a10 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20  Queue)..#define 
19a20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
19a30 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61   9  /* Output ea
19a40 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  ch row of result
19a50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
19a60 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30 20 20  Mem         10  
19a70 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
19a80 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  in a memory cell
19a90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
19aa0 53 65 74 20 20 20 20 20 20 20 20 20 31 31 20 20  Set         11  
19ab0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73  /* Store results
19ac0 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
19ad0 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
19ae0 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20  SRT_EphemTab    
19af0 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72  12  /* Create tr
19b00 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20  ansient tab and 
19b10 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54  store like SRT_T
19b20 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
19b30 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20  SRT_Coroutine   
19b40 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20  13  /* Generate 
19b50 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  a single row of 
19b60 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  result */.#defin
19b70 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20  e SRT_Table     
19b80 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72    14  /* Store r
19b90 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69  esult as data wi
19ba0 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20  th an automatic 
19bb0 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  rowid */../*.** 
19bc0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
19bd0 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72  his object descr
19be0 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70 75  ibes where to pu
19bf0 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  t of the results
19c00 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20   of.** a SELECT 
19c10 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74  statement..*/.st
19c20 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20  ruct SelectDest 
19c30 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20 20  {.  u8 eDest;   
19c40 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20           /* How 
19c50 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68  to dispose of th
19c60 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f  e results.  On o
19c70 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a  f SRT_* above. *
19c80 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64 73 74  /.  char affSdst
19c90 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 66 66 69  ;        /* Affi
19ca0 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20 65  nity used when e
19cb0 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f  Dest==SRT_Set */
19cc0 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20  .  int iSDParm; 
19cd0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72          /* A par
19ce0 61 6d 65 74 65 72 20 75 73 65 64 20 62 79 20 74  ameter used by t
19cf0 68 65 20 65 44 65 73 74 20 64 69 73 70 6f 73 61  he eDest disposa
19d00 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e  l method */.  in
19d10 74 20 69 53 64 73 74 3b 20 20 20 20 20 20 20 20  t iSdst;        
19d20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73     /* Base regis
19d30 74 65 72 20 77 68 65 72 65 20 72 65 73 75 6c 74  ter where result
19d40 73 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f  s are written */
19d50 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20  .  int nSdst;   
19d60 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
19d70 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61  r of registers a
19d80 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 45 78  llocated */.  Ex
19d90 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79  prList *pOrderBy
19da0 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e  ;  /* Key column
19db0 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20  s for SRT_Queue 
19dc0 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65 75  and SRT_DistQueu
19dd0 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44  e */.};../*.** D
19de0 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72  uring code gener
19df0 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65  ation of stateme
19e00 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65  nts that do inse
19e10 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43  rts into AUTOINC
19e20 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c 65  REMENT .** table
19e30 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  s, the following
19e40 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
19e50 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
19e60 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e  Table.u.autoInc.
19e70 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20  p.** pointer of 
19e80 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65  each autoincreme
19e90 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f  nt table to reco
19ea0 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66  rd some side inf
19eb0 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a  ormation that.**
19ec0 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
19ed0 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68  tor needs.  We h
19ee0 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d  ave to keep per-
19ef0 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d  table autoincrem
19f00 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ent.** informati
19f10 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72  on in case inser
19f20 74 73 20 61 72 65 20 64 6f 77 6e 20 77 69 74 68  ts are down with
19f30 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72  in triggers.  Tr
19f40 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a  iggers do not.**
19f50 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69   normally coordi
19f60 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76  nate their activ
19f70 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f  ities, but we do
19f80 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e   need to coordin
19f90 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69  ate the.** loadi
19fa0 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66  ng and saving of
19fb0 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69   autoincrement i
19fc0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
19fd0 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
19fe0 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  o {.  AutoincInf
19ff0 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e  o *pNext;   /* N
1a000 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69  ext info block i
1a010 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d  n a list of them
1a020 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20   all */.  Table 
1a030 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
1a040 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e  /* Table this in
1a050 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20  fo block refers 
1a060 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  to */.  int iDb;
1a070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a080 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65   Index in sqlite
1a090 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62  3.aDb[] of datab
1a0a0 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62  ase holding pTab
1a0b0 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72   */.  int regCtr
1a0c0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
1a0d0 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68  emory register h
1a0e0 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64  olding the rowid
1a0f0 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a   counter */.};..
1a100 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68  /*.** Size of th
1a110 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a  e column cache.*
1a120 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1a130 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65  _N_COLCACHE.# de
1a140 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  fine SQLITE_N_CO
1a150 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66  LCACHE 10.#endif
1a160 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74  ../*.** At least
1a170 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66   one instance of
1a180 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1a190 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61  tructure is crea
1a1a0 74 65 64 20 66 6f 72 20 65 61 63 68 20 0a 2a 2a  ted for each .**
1a1b0 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61   trigger that ma
1a1c0 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65  y be fired while
1a1d0 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45   parsing an INSE
1a1e0 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45  RT, UPDATE or DE
1a1f0 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  LETE.** statemen
1a200 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65  t. All such obje
1a210 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  cts are stored i
1a220 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  n the linked lis
1a230 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50  t headed at.** P
1a240 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1a250 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63   and deleted onc
1a260 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70  e statement comp
1a270 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e  ilation has been
1a280 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a  .** completed..*
1a290 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d  *.** A Vdbe sub-
1a2a0 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70  program that imp
1a2b0 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79  lements the body
1a2c0 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65   and WHEN clause
1a2d0 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54   of trigger.** T
1a2e0 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67  riggerPrg.pTrigg
1a2f0 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64  er, assuming a d
1a300 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1a310 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20  CT clause of.** 
1a320 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e  TriggerPrg.orcon
1a330 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  f, is stored in 
1a340 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70  the TriggerPrg.p
1a350 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65  Program variable
1a360 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70  ..** The Parse.p
1a370 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
1a380 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74  never contains t
1a390 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20  wo entries with 
1a3a0 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75  the same.** valu
1a3b0 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69  es for both pTri
1a3c0 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e  gger and orconf.
1a3d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67  .**.** The Trigg
1a3e0 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30  erPrg.aColmask[0
1a3f0 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
1a400 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f  t to a mask of o
1a410 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  ld.* columns.** 
1a420 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74  accessed (or set
1a430 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65   to 0 for trigge
1a440 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65  rs fired as a re
1a450 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 20 0a  sult of INSERT .
1a460 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20  ** statements). 
1a470 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54  Similarly, the T
1a480 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61  riggerPrg.aColma
1a490 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69  sk[1] variable i
1a4a0 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61  s set to.** a ma
1a4b0 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
1a4c0 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20  mns used by the 
1a4d0 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75  program..*/.stru
1a4e0 63 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a  ct TriggerPrg {.
1a4f0 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
1a500 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69  ger;      /* Tri
1a510 67 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61  gger this progra
1a520 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d  m was coded from
1a530 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67   */.  TriggerPrg
1a540 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a   *pNext;      /*
1a550 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50   Next entry in P
1a560 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1a570 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72   list */.  SubPr
1a580 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b  ogram *pProgram;
1a590 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d     /* Program im
1a5a0 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67  plementing pTrig
1a5b0 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20  ger/orconf */.  
1a5c0 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20  int orconf;     
1a5d0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1a5e0 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
1a5f0 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61  olicy */.  u32 a
1a600 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20  Colmask[2];     
1a610 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f     /* Masks of o
1a620 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75  ld.*, new.* colu
1a630 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a  mns accessed */.
1a640 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44  };../*.** The yD
1a650 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66  bMask datatype f
1a660 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f  or the bitmask o
1a670 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  f all attached d
1a680 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66  atabases..*/.#if
1a690 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41   SQLITE_MAX_ATTA
1a6a0 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65  CHED>30.  typede
1a6b0 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  f unsigned char 
1a6c0 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f  yDbMask[(SQLITE_
1a6d0 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f  MAX_ATTACHED+9)/
1a6e0 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  8];.# define DbM
1a6f0 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20  askTest(M,I)    
1a700 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c  (((M)[(I)/8]&(1<
1a710 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23  <((I)&7)))!=0).#
1a720 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65   define DbMaskZe
1a730 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65  ro(M)      memse
1a740 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d  t((M),0,sizeof(M
1a750 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
1a760 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28  skSet(M,I)     (
1a770 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28  M)[(I)/8]|=(1<<(
1a780 28 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65  (I)&7)).# define
1a790 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d   DbMaskAllZero(M
1a7a0 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73  )   sqlite3DbMas
1a7b0 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65  kAllZero(M).# de
1a7c0 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65  fine DbMaskNonZe
1a7d0 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33  ro(M)   (sqlite3
1a7e0 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1a7f0 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70  ==0).#else.  typ
1a800 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e  edef unsigned in
1a810 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66  t yDbMask;.# def
1a820 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d  ine DbMaskTest(M
1a830 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28  ,I)    (((M)&(((
1a840 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29  yDbMask)1)<<(I))
1a850 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44  )!=0).# define D
1a860 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20  bMaskZero(M)    
1a870 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65    (M)=0.# define
1a880 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20   DbMaskSet(M,I) 
1a890 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d      (M)|=(((yDbM
1a8a0 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64  ask)1)<<(I)).# d
1a8b0 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a  efine DbMaskAllZ
1a8c0 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a  ero(M)   (M)==0.
1a8d0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e  # define DbMaskN
1a8e0 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21  onZero(M)   (M)!
1a8f0 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  =0.#endif../*.**
1a900 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63   An SQL parser c
1a910 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20  ontext.  A copy 
1a920 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
1a930 65 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f  e is passed thro
1a940 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65  ugh.** the parse
1a950 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20  r and down into 
1a960 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61  all the parser a
1a970 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e  ction routine in
1a980 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72   order to.** car
1a990 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d  ry around inform
1a9a0 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c  ation that is gl
1a9b0 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69  obal to the enti
1a9c0 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20  re parse..**.** 
1a9d0 54 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73  The structure is
1a9e0 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77   divided into tw
1a9f0 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74  o parts.  When t
1aa00 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f  he parser and co
1aa10 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63  de.** generate c
1aa20 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72  all themselves r
1aa30 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20  ecursively, the 
1aa40 66 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68  first part of th
1aa50 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69  e structure.** i
1aa60 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74  s constant but t
1aa70 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69  he second part i
1aa80 73 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62  s reset at the b
1aa90 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64  eginning and end
1aaa0 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75   of.** each recu
1aab0 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rsion..**.** The
1aac0 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20   nTableLock and 
1aad0 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61  aTableLock varia
1aae0 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73  bles are only us
1aaf0 65 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64  ed if the shared
1ab00 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65 61 74 75  -cache .** featu
1ab10 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69  re is enabled (i
1ab20 66 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e  f sqlite3Tsd()->
1ab30 75 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73  useSharedData is
1ab40 20 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65   true). They are
1ab50 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72  .** used to stor
1ab60 65 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62  e the set of tab
1ab70 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65  le-locks require
1ab80 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65  d by the stateme
1ab90 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70  nt being.** comp
1aba0 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73  iled. Function s
1abb0 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
1abc0 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64  ) is used to add
1abd0 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a   entries to the.
1abe0 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75  ** list..*/.stru
1abf0 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c  ct Parse {.  sql
1ac00 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
1ac10 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61    /* The main da
1ac20 74 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65  tabase structure
1ac30 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72   */.  char *zErr
1ac40 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e  Msg;       /* An
1ac50 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a   error message *
1ac60 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b  /.  Vdbe *pVdbe;
1ac70 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65           /* An e
1ac80 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74  ngine for execut
1ac90 69 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74  ing database byt
1aca0 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72  ecode */.  int r
1acb0 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
1acc0 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  /* Return code f
1acd0 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f  rom execution */
1ace0 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65  .  u8 colNamesSe
1acf0 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20  t;      /* TRUE 
1ad00 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e  after OP_ColumnN
1ad10 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73  ame has been iss
1ad20 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a  ued to pVdbe */.
1ad30 20 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61    u8 checkSchema
1ad40 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73  ;      /* Causes
1ad50 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63   schema cookie c
1ad60 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72  heck after an er
1ad70 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74  ror */.  u8 nest
1ad80 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
1ad90 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
1ada0 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70  d calls to the p
1adb0 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72  arser/code gener
1adc0 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65  ator */.  u8 nTe
1add0 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f  mpReg;         /
1ade0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70  * Number of temp
1adf0 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
1ae00 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f  in aTempReg[] */
1ae10 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69  .  u8 isMultiWri
1ae20 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20  te;     /* True 
1ae30 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
1ae40 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d   modify/insert m
1ae50 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
1ae60 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20    u8 mayAbort;  
1ae70 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1ae80 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
1ae90 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65  throw an ABORT e
1aea0 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  xception */.  u8
1aeb0 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20   hasCompound;   
1aec0 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e     /* Need to in
1aed0 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70  voke convertComp
1aee0 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1aef0 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f  uery() */.  u8 o
1af00 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20  kConstFactor;   
1af10 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72   /* OK to factor
1af20 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a   out constants *
1af30 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67  /.  int aTempReg
1af40 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64  [8];     /* Hold
1af50 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d  ing area for tem
1af60 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73  porary registers
1af70 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65   */.  int nRange
1af80 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69  Reg;       /* Si
1af90 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72  ze of the tempor
1afa0 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
1afb0 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e  ck */.  int iRan
1afc0 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  geReg;       /* 
1afd0 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69  First register i
1afe0 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  n temporary regi
1aff0 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
1b000 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
1b010 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1b020 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f  f errors seen */
1b030 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20  .  int nTab;    
1b040 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1b050 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20  r of previously 
1b060 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63  allocated VDBE c
1b070 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20  ursors */.  int 
1b080 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  nMem;           
1b090 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65   /* Number of me
1b0a0 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20  mory cells used 
1b0b0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1b0c0 6e 53 65 74 3b 20 20 20 20 20 20 20 20 20 20 20  nSet;           
1b0d0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65   /* Number of se
1b0e0 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ts used so far *
1b0f0 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20  /.  int nOnce;  
1b100 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1b110 65 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e  er of OP_Once in
1b120 73 74 72 75 63 74 69 6f 6e 73 20 73 6f 20 66 61  structions so fa
1b130 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c  r */.  int nOpAl
1b140 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  loc;        /* N
1b150 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61  umber of slots a
1b160 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62  llocated for Vdb
1b170 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  e.aOp[] */.  int
1b180 20 69 46 69 78 65 64 4f 70 3b 20 20 20 20 20 20   iFixedOp;      
1b190 20 20 2f 2a 20 4e 65 76 65 72 20 62 61 63 6b 20    /* Never back 
1b1a0 6f 75 74 20 6f 70 63 6f 64 65 73 20 69 46 69 78  out opcodes iFix
1b1b0 65 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c 69 65  edOp-1 or earlie
1b1c0 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73  r */.  int ckBas
1b1d0 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42  e;          /* B
1b1e0 61 73 65 20 72 65 67 69 73 74 65 72 20 6f 66 20  ase register of 
1b1f0 64 61 74 61 20 64 75 72 69 6e 67 20 63 68 65 63  data during chec
1b200 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  k constraints */
1b210 0a 20 20 69 6e 74 20 69 50 61 72 74 49 64 78 54  .  int iPartIdxT
1b220 61 62 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  ab;     /* Table
1b230 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
1b240 6f 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65  o a partial inde
1b250 78 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  x */.  int iCach
1b260 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43  eLevel;     /* C
1b270 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68  olCache valid wh
1b280 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69  en aColCache[].i
1b290 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76  Level<=iCacheLev
1b2a0 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63  el */.  int iCac
1b2b0 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20  heCnt;       /* 
1b2c0 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20  Counter used to 
1b2d0 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63  generate aColCac
1b2e0 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20  he[].lru values 
1b2f0 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b  */.  int nLabel;
1b300 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1b310 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73  ber of labels us
1b320 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61  ed */.  int *aLa
1b330 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  bel;         /* 
1b340 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68  Space to hold th
1b350 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74  e labels */.  st
1b360 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b  ruct yColCache {
1b370 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
1b380 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61             /* Ta
1b390 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ble cursor numbe
1b3a0 72 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f  r */.    i16 iCo
1b3b0 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  lumn;          /
1b3c0 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e  * Table column n
1b3d0 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20  umber */.    u8 
1b3e0 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20  tempReg;        
1b3f0 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20     /* iReg is a 
1b400 74 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68  temp register th
1b410 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66  at needs to be f
1b420 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20  reed */.    int 
1b430 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20  iLevel;         
1b440 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76    /* Nesting lev
1b450 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52  el */.    int iR
1b460 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eg;             
1b470 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75  /* Reg with valu
1b480 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
1b490 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20  . 0 means none. 
1b4a0 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20  */.    int lru; 
1b4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b4c0 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75  Least recently u
1b4d0 73 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68  sed entry has th
1b4e0 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65  e smallest value
1b4f0 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68   */.  } aColCach
1b500 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41  e[SQLITE_N_COLCA
1b510 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f  CHE];  /* One fo
1b520 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61  r each column ca
1b530 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45  che entry */.  E
1b540 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45  xprList *pConstE
1b550 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  xpr;/* Constant 
1b560 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
1b570 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e   Token constrain
1b580 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66  tName;/* Name of
1b590 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20   the constraint 
1b5a0 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
1b5b0 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d  parsed */.  yDbM
1b5c0 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20  ask writeMask;  
1b5d0 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74   /* Start a writ
1b5e0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  e transaction on
1b5f0 20 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73   these databases
1b600 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f   */.  yDbMask co
1b610 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69  okieMask;  /* Bi
1b620 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20  tmask of schema 
1b630 76 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73  verified databas
1b640 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b  es */.  int cook
1b650 69 65 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d  ieValue[SQLITE_M
1b660 41 58 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20  AX_ATTACHED+2]; 
1b670 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f   /* Values of co
1b680 6f 6b 69 65 73 20 74 6f 20 76 65 72 69 66 79 20  okies to verify 
1b690 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69  */.  int regRowi
1b6a0 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67  d;        /* Reg
1b6b0 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f  ister holding ro
1b6c0 77 69 64 20 6f 66 20 43 52 45 41 54 45 20 54 41  wid of CREATE TA
1b6d0 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69  BLE entry */.  i
1b6e0 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20  nt regRoot;     
1b6f0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
1b700 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67  holding root pag
1b710 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77  e number for new
1b720 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e   objects */.  in
1b730 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20  t nMaxArg;      
1b740 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70     /* Max args p
1b750 61 73 73 65 64 20 74 6f 20 75 73 65 72 20 66 75  assed to user fu
1b760 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72  nction by sub-pr
1b770 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c  ogram */.#if SEL
1b780 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
1b790 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20  .  int nSelect; 
1b7a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1b7b0 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74  r of SELECT stat
1b7c0 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20  ements seen */. 
1b7d0 20 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64 65   int nSelectInde
1b7e0 6e 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61 72  nt;   /* How far
1b7f0 20 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45 43   to indent SELEC
1b800 54 54 52 41 43 45 28 29 20 6f 75 74 70 75 74 20  TTRACE() output 
1b810 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
1b820 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
1b830 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74  ARED_CACHE.  int
1b840 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20   nTableLock;    
1b850 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1b860 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65   locks in aTable
1b870 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c  Lock */.  TableL
1b880 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b  ock *aTableLock;
1b890 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62   /* Required tab
1b8a0 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61  le locks for sha
1b8b0 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a  red-cache mode *
1b8c0 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69  /.#endif.  Autoi
1b8d0 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20  ncInfo *pAinc;  
1b8e0 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
1b8f0 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45  bout AUTOINCREME
1b900 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a  NT counters */..
1b910 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
1b920 20 75 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69   used while codi
1b930 6e 67 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  ng trigger progr
1b940 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20  ams. */.  Parse 
1b950 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f  *pToplevel;    /
1b960 2a 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72  * Parse structur
1b970 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72  e for main progr
1b980 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a  am (or NULL) */.
1b990 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65    Table *pTrigge
1b9a0 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20  rTab;  /* Table 
1b9b0 74 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69  triggers are bei
1b9c0 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a  ng coded for */.
1b9d0 20 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b    int addrCrTab;
1b9e0 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73         /* Addres
1b9f0 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61  s of OP_CreateTa
1ba00 62 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52  ble opcode on CR
1ba10 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20  EATE TABLE */.  
1ba20 69 6e 74 20 61 64 64 72 53 6b 69 70 50 4b 3b 20  int addrSkipPK; 
1ba30 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20       /* Address 
1ba40 6f 66 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  of instruction t
1ba50 6f 20 73 6b 69 70 20 50 52 49 4d 41 52 59 20 4b  o skip PRIMARY K
1ba60 45 59 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 33  EY index */.  u3
1ba70 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20  2 nQueryLoop;   
1ba80 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72     /* Est number
1ba90 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f   of iterations o
1baa0 66 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f  f a query (10*lo
1bab0 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20  g2(N)) */.  u32 
1bac0 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  oldmask;        
1bad0 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e   /* Mask of old.
1bae0 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
1baf0 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65  nced */.  u32 ne
1bb00 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  wmask;         /
1bb10 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20  * Mask of new.* 
1bb20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
1bb30 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67  ed */.  u8 eTrig
1bb40 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20  gerOp;       /* 
1bb50 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
1bb60 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54  SERT or TK_DELET
1bb70 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e  E */.  u8 eOrcon
1bb80 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  f;          /* D
1bb90 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1bba0 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72  CT policy for tr
1bbb0 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20  igger steps */. 
1bbc0 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67 67   u8 disableTrigg
1bbd0 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f  ers;  /* True to
1bbe0 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65 72   disable trigger
1bbf0 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a  s */..  /*******
1bc00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bc10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bc20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bc30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bc40 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20  *.  ** Above is 
1bc50 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e  constant between
1bc60 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65   recursions.  Be
1bc70 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66  low is reset bef
1bc80 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20  ore and after.  
1bc90 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f  ** each recursio
1bca0 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79  n.  The boundary
1bcb0 20 62 65 74 77 65 65 6e 20 74 68 65 73 65 20 74   between these t
1bcc0 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65  wo regions is de
1bcd0 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73  termined.  ** us
1bce0 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72  ing offsetof(Par
1bcf0 73 65 2c 6e 56 61 72 29 20 73 6f 20 74 68 65 20  se,nVar) so the 
1bd00 6e 56 61 72 20 66 69 65 6c 64 20 6d 75 73 74 20  nVar field must 
1bd10 62 65 20 74 68 65 20 66 69 72 73 74 20 66 69 65  be the first fie
1bd20 6c 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 72  ld.  ** in the r
1bd30 65 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e  ecursive region.
1bd40 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
1bd50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bd60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bd70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bd80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20  ***********/..  
1bd90 69 6e 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20  int nVar;       
1bda0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1bdb0 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61  ber of '?' varia
1bdc0 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65  bles seen in the
1bdd0 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20   SQL so far */. 
1bde0 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20   int nzVar;     
1bdf0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1be00 6d 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c  mber of availabl
1be10 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72  e slots in azVar
1be20 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f  [] */.  u8 iPkSo
1be30 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
1be40 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43    /* ASC or DESC
1be50 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49   for INTEGER PRI
1be60 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38  MARY KEY */.  u8
1be70 20 62 46 72 65 65 57 69 74 68 3b 20 20 20 20 20   bFreeWith;     
1be80 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1be90 69 66 20 70 57 69 74 68 20 73 68 6f 75 6c 64 20  if pWith should 
1bea0 62 65 20 66 72 65 65 64 20 77 69 74 68 20 70 61  be freed with pa
1beb0 72 73 65 72 20 2a 2f 0a 20 20 75 38 20 65 78 70  rser */.  u8 exp
1bec0 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lain;           
1bed0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
1bee0 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20  he EXPLAIN flag 
1bef0 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20  is found on the 
1bf00 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66  query */.#ifndef
1bf10 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
1bf20 54 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64  TUALTABLE.  u8 d
1bf30 65 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20  eclareVtab;     
1bf40 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1bf50 20 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f   inside sqlite3_
1bf60 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a  declare_vtab() *
1bf70 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63  /.  int nVtabLoc
1bf80 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  k;            /*
1bf90 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75   Number of virtu
1bfa0 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63  al tables to loc
1bfb0 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  k */.#endif.  in
1bfc0 74 20 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20  t nAlias;       
1bfd0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1bfe0 72 20 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73  r of aliased res
1bff0 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20  ult set columns 
1c000 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74  */.  int nHeight
1c010 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1c020 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65  * Expression tre
1c030 65 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72  e height of curr
1c040 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a  ent sub-select *
1c050 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1c060 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20  _OMIT_EXPLAIN.  
1c070 69 6e 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20  int iSelectId;  
1c080 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20            /* ID 
1c090 6f 66 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63  of current selec
1c0a0 74 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75  t for EXPLAIN ou
1c0b0 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e  tput */.  int iN
1c0c0 65 78 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20  extSelectId;    
1c0d0 20 20 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69      /* Next avai
1c0e0 6c 61 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20  lable select ID 
1c0f0 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
1c100 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63  ut */.#endif.  c
1c110 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20  har **azVar;    
1c120 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
1c130 74 65 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66  ters to names of
1c140 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20   parameters */. 
1c150 20 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72   Vdbe *pReprepar
1c160 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d  e;         /* VM
1c170 20 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65   being reprepare
1c180 64 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70  d (sqlite3Reprep
1c190 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73  are()) */.  cons
1c1a0 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20  t char *zTail;  
1c1b0 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c        /* All SQL
1c1c0 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c   text past the l
1c1d0 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61  ast semicolon pa
1c1e0 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20  rsed */.  Table 
1c1f0 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20  *pNewTable;     
1c200 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62      /* A table b
1c210 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64  eing constructed
1c220 20 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45   by CREATE TABLE
1c230 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
1c240 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20  NewTrigger;     
1c250 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72  /* Trigger under
1c260 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20   construct by a 
1c270 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a  CREATE TRIGGER *
1c280 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1c290 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a  zAuthContext; /*
1c2a0 20 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74   The 6th paramet
1c2b0 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20  er to db->xAuth 
1c2c0 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54  callbacks */.  T
1c2d0 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b  oken sNameToken;
1c2e0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
1c2f0 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69  n with unqualifi
1c300 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  ed schema object
1c310 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e   name */.  Token
1c320 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20   sLastToken;    
1c330 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74       /* The last
1c340 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f   token parsed */
1c350 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1c360 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
1c370 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20  E.  Token sArg; 
1c380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c390 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f   Complete text o
1c3a0 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d  f a module argum
1c3b0 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ent */.  Table *
1c3c0 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20  *apVtabLock;    
1c3d0 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
1c3e0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
1c3f0 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20  needing locking 
1c400 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c  */.#endif.  Tabl
1c410 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20  e *pZombieTab;  
1c420 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
1c430 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74   Table objects t
1c440 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63  o delete after c
1c450 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69  ode gen */.  Tri
1c460 67 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65  ggerPrg *pTrigge
1c470 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64  rPrg;  /* Linked
1c480 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74   list of coded t
1c490 72 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74  riggers */.  Wit
1c4a0 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20  h *pWith;       
1c4b0 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
1c4c0 74 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f  t WITH clause, o
1c4d0 72 20 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  r NULL */.};../*
1c4e0 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
1c4f0 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73  if currently ins
1c500 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64  ide an sqlite3_d
1c510 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61  eclare_vtab() ca
1c520 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ll..*/.#ifdef SQ
1c530 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
1c540 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65  LTABLE.  #define
1c550 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
1c560 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69   0.#else.  #defi
1c570 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54  ne IN_DECLARE_VT
1c580 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c  AB (pParse->decl
1c590 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a  areVtab).#endif.
1c5a0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1c5b0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
1c5c0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61  ing structure ca
1c5d0 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e  n be declared on
1c5e0 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65   a stack and use
1c5f0 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65  d.** to save the
1c600 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
1c610 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61  ext value so tha
1c620 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74  t it can be rest
1c630 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73  ored later..*/.s
1c640 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78  truct AuthContex
1c650 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  t {.  const char
1c660 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
1c670 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50    /* Put saved P
1c680 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
1c690 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73  t here */.  Pars
1c6a0 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
1c6b0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50          /* The P
1c6c0 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  arse structure *
1c6d0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66  /.};../*.** Bitf
1c6e0 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50  ield flags for P
1c6f0 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f  5 value in vario
1c700 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a  us opcodes..**.*
1c710 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  * Note that the 
1c720 76 61 6c 75 65 73 20 66 6f 72 20 49 53 4e 4f 4f  values for ISNOO
1c730 50 20 61 6e 64 20 4c 45 4e 47 54 48 41 52 47 20  P and LENGTHARG 
1c740 61 72 65 20 74 68 65 20 73 61 6d 65 2e 20 20 42  are the same.  B
1c750 75 74 20 61 73 20 0a 2a 2a 20 74 68 6f 73 65 20  ut as .** those 
1c760 62 69 74 73 20 61 72 65 20 6e 65 76 65 72 20 75  bits are never u
1c770 73 65 64 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  sed on the same 
1c780 6f 70 63 6f 64 65 2c 20 74 68 65 20 6f 76 65 72  opcode, the over
1c790 6c 61 70 20 69 73 20 68 61 72 6d 6c 65 73 73 2e  lap is harmless.
1c7a0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c  .*/.#define OPFL
1c7b0 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20  AG_NCHANGE      
1c7c0 20 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20   0x01    /* Set 
1c7d0 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43  to update db->nC
1c7e0 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65  hange */.#define
1c7f0 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20   OPFLAG_EPHEM   
1c800 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
1c810 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65   OP_Column: Ephe
1c820 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20  meral output is 
1c830 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ok */.#define OP
1c840 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20  FLAG_LASTROWID  
1c850 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65     0x02    /* Se
1c860 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e  t to update db->
1c870 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65  lastRowid */.#de
1c880 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50  fine OPFLAG_ISUP
1c890 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20  DATE      0x04  
1c8a0 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73    /* This OP_Ins
1c8b0 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50  ert is an sql UP
1c8c0 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
1c8d0 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20  OPFLAG_APPEND   
1c8e0 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20       0x08    /* 
1c8f0 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74  This is likely t
1c900 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a  o be an append *
1c910 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1c920 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30  _USESEEKRESULT 0
1c930 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f  x10    /* Try to
1c940 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e   avoid a seek in
1c950 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a   BtreeInsert() *
1c960 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1c970 5f 43 4c 45 41 52 43 41 43 48 45 20 20 20 20 30  _CLEARCACHE    0
1c980 78 32 30 20 20 20 20 2f 2a 20 43 6c 65 61 72 20  x20    /* Clear 
1c990 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 61 63  pseudo-table cac
1c9a0 68 65 20 69 6e 20 4f 50 5f 43 6f 6c 75 6d 6e 20  he in OP_Column 
1c9b0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1c9c0 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20 20 20  G_ISNOOP        
1c9d0 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65  0x40    /* OP_De
1c9e0 6c 65 74 65 20 64 6f 65 73 20 70 72 65 2d 75 70  lete does pre-up
1c9f0 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a  date-hook only *
1ca00 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1ca10 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20 30  _LENGTHARG     0
1ca20 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x40    /* OP_Col
1ca30 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
1ca40 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64  r length() */.#d
1ca50 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50  efine OPFLAG_TYP
1ca60 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30 20  EOFARG     0x80 
1ca70 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20     /* OP_Column 
1ca80 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79  only used for ty
1ca90 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e  peof() */.#defin
1caa0 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  e OPFLAG_BULKCSR
1cab0 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
1cac0 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64  * OP_Open** used
1cad0 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75   to open bulk cu
1cae0 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rsor */.#define 
1caf0 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20  OPFLAG_P2ISREG  
1cb00 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
1cb10 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20  P2 to OP_Open** 
1cb20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 6e 75  is a register nu
1cb30 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mber */.#define 
1cb40 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20  OPFLAG_PERMUTE  
1cb50 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
1cb60 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20  OP_Compare: use 
1cb70 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  the permutation 
1cb80 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74  */../*. * Each t
1cb90 72 69 67 67 65 72 20 70 72 65 73 65 6e 74 20 69  rigger present i
1cba0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
1cbb0 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20  chema is stored 
1cbc0 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  as an instance o
1cbd0 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69 67  f. * struct Trig
1cbe0 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e  ger. . *. * Poin
1cbf0 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65  ters to instance
1cc00 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  s of struct Trig
1cc10 67 65 72 20 61 72 65 20 73 74 6f 72 65 64 20 69  ger are stored i
1cc20 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31  n two ways.. * 1
1cc30 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67 48 61  . In the "trigHa
1cc40 73 68 22 20 68 61 73 68 20 74 61 62 6c 65 20 28  sh" hash table (
1cc50 70 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69  part of the sqli
1cc60 74 65 33 2a 20 74 68 61 74 20 72 65 70 72 65 73  te3* that repres
1cc70 65 6e 74 73 20 74 68 65 20 0a 20 2a 20 20 20 20  ents the . *    
1cc80 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73 20  database). This 
1cc90 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73  allows Trigger s
1cca0 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65 20  tructures to be 
1ccb0 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d  retrieved by nam
1ccc0 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69  e.. * 2. All tri
1ccd0 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65 64  ggers associated
1cce0 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74   with a single t
1ccf0 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b  able form a link
1cd00 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74  ed list, using t
1cd10 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d  he. *    pNext m
1cd20 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74 20  ember of struct 
1cd30 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74  Trigger. A point
1cd40 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
1cd50 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20  element of the. 
1cd60 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74  *    linked list
1cd70 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74 68   is stored as th
1cd80 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d  e "pTrigger" mem
1cd90 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63  ber of the assoc
1cda0 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75  iated. *    stru
1cdb0 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20  ct Table.. *. * 
1cdc0 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20  The "step_list" 
1cdd0 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f  member points to
1cde0 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
1cdf0 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c  nt of a linked l
1ce00 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e  ist. * containin
1ce10 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  g the SQL statem
1ce20 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 61  ents specified a
1ce30 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  s the trigger pr
1ce40 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63  ogram.. */.struc
1ce50 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68  t Trigger {.  ch
1ce60 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
1ce70 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d        /* The nam
1ce80 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  e of the trigger
1ce90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cea0 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61          */.  cha
1ceb0 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20  r *table;       
1cec0 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c       /* The tabl
1ced0 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69  e or view to whi
1cee0 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 61  ch the trigger a
1cef0 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f  pplies */.  u8 o
1cf00 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
1cf10 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
1cf20 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
1cf30 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20  TE, TK_INSERT   
1cf40 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72        */.  u8 tr
1cf50 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  _tm;            
1cf60 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49     /* One of TRI
1cf70 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49  GGER_BEFORE, TRI
1cf80 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20  GGER_AFTER */.  
1cf90 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20  Expr *pWhen;    
1cfa0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
1cfb0 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68  HEN clause of th
1cfc0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61  e expression (ma
1cfd0 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20  y be NULL) */.  
1cfe0 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73  IdList *pColumns
1cff0 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ;       /* If th
1d000 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45 20  is is an UPDATE 
1d010 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e  OF <column-list>
1d020 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20   trigger,.      
1d030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d040 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75         the <colu
1d050 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72  mn-list> is stor
1d060 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68  ed here */.  Sch
1d070 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
1d080 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
1d090 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72  ontaining the tr
1d0a0 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d  igger */.  Schem
1d0b0 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20  a *pTabSchema;  
1d0c0 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
1d0d0 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c  taining the tabl
1d0e0 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  e */.  TriggerSt
1d0f0 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f  ep *step_list; /
1d100 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74  * Link list of t
1d110 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73  rigger program s
1d120 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20 20  teps            
1d130 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
1d140 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
1d150 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61 73   Next trigger as
1d160 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
1d170 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e table */.};../
1d180 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69  *.** A trigger i
1d190 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f 52  s either a BEFOR
1d1a0 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72  E or an AFTER tr
1d1b0 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c  igger.  The foll
1d1c0 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a  owing constants.
1d1d0 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69  ** determine whi
1d1e0 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ch. .**.** If th
1d1f0 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65  ere are multiple
1d200 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d   triggers, you m
1d210 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46  ight of some BEF
1d220 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54  ORE and some AFT
1d230 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63  ER..** In that c
1d240 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61  ases, the consta
1d250 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65  nts below can be
1d260 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a   ORed together..
1d270 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47  */.#define TRIGG
1d280 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65  ER_BEFORE  1.#de
1d290 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54  fine TRIGGER_AFT
1d2a0 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e  ER   2../*. * An
1d2b0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72   instance of str
1d2c0 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
1d2d0 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
1d2e0 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74   a single SQL st
1d2f0 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20  atement. * that 
1d300 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20 74  is a part of a t
1d310 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 20  rigger-program. 
1d320 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73  . *. * Instances
1d330 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
1d340 65 72 53 74 65 70 20 61 72 65 20 73 74 6f 72 65  erStep are store
1d350 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69  d in a singly li
1d360 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65  nked list (linke
1d370 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22  d. * using the "
1d380 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72  pNext" member) r
1d390 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65  eferenced by the
1d3a0 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d   "step_list" mem
1d3b0 62 65 72 20 6f 66 20 74 68 65 20 0a 20 2a 20 61  ber of the . * a
1d3c0 73 73 6f 63 69 61 74 65 64 20 73 74 72 75 63 74  ssociated struct
1d3d0 20 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63   Trigger instanc
1d3e0 65 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  e. The first ele
1d3f0 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b  ment of the link
1d400 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68  ed list is. * th
1d410 65 20 66 69 72 73 74 20 73 74 65 70 20 6f 66 20  e first step of 
1d420 74 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67  the trigger-prog
1d430 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68 65 20  ram.. * . * The 
1d440 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69  "op" member indi
1d450 63 61 74 65 73 20 77 68 65 74 68 65 72 20 74 68  cates whether th
1d460 69 73 20 69 73 20 61 20 22 44 45 4c 45 54 45 22  is is a "DELETE"
1d470 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44  , "INSERT", "UPD
1d480 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45  ATE" or. * "SELE
1d490 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54  CT" statement. T
1d4a0 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74  he meanings of t
1d4b0 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73  he other members
1d4c0 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
1d4d0 79 20 74 68 65 20 0a 20 2a 20 76 61 6c 75 65 20  y the . * value 
1d4e0 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f  of "op" as follo
1d4f0 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  ws:. *. * (op ==
1d500 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f   TK_INSERT). * o
1d510 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72  rconf    -> stor
1d520 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  es the ON CONFLI
1d530 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20  CT algorithm. * 
1d540 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20  pSelect   -> If 
1d550 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
1d560 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43  T INTO ... SELEC
1d570 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c  T ... statement,
1d580 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20   then. *        
1d590 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65        this store
1d5a0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
1d5b0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
1d5c0 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e  ent. Otherwise N
1d5d0 55 4c 4c 2e 0a 20 2a 20 74 61 72 67 65 74 20 20  ULL.. * target  
1d5e0 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c    -> A token hol
1d5f0 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20  ding the quoted 
1d600 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
1d610 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f  e to insert into
1d620 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d  .. * pExprList -
1d630 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
1d640 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
1d650 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65  VALUES ... state
1d660 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20  ment, then. *   
1d670 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
1d680 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f  stores values to
1d690 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74   be inserted. Ot
1d6a0 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
1d6b0 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66   pIdList   -> If
1d6c0 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
1d6d0 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f  RT INTO ... (<co
1d6e0 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c  lumn-names>) VAL
1d6f0 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20 20 20  UES ... . *     
1d700 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
1d710 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74  nt, then this st
1d720 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d  ores the column-
1d730 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20  names to be. *  
1d740 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 65              inse
1d750 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a  rted into.. *. *
1d760 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54   (op == TK_DELET
1d770 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20  E). * target    
1d780 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69  -> A token holdi
1d790 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61  ng the quoted na
1d7a0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
1d7b0 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a  to delete from..
1d7c0 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
1d7d0 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
1d7e0 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73   of the DELETE s
1d7f0 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
1d800 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
1d810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
1d820 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
1d830 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55   . * (op == TK_U
1d840 50 44 41 54 45 29 0a 20 2a 20 74 61 72 67 65 74  PDATE). * target
1d850 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68      -> A token h
1d860 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65  olding the quote
1d870 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
1d880 62 6c 65 20 74 6f 20 75 70 64 61 74 65 20 72 6f  ble to update ro
1d890 77 73 20 6f 66 2e 0a 20 2a 20 70 57 68 65 72 65  ws of.. * pWhere
1d8a0 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
1d8b0 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55   clause of the U
1d8c0 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
1d8d0 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
1d8e0 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
1d8f0 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
1d900 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73  ULL.. * pExprLis
1d910 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74  t -> A list of t
1d920 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70  he columns to up
1d930 64 61 74 65 20 61 6e 64 20 74 68 65 20 65 78 70  date and the exp
1d940 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61  ressions to upda
1d950 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  te. *           
1d960 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20     them to. See 
1d970 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 29 20  sqlite3Update() 
1d980 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  documentation of
1d990 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20   "pChanges". *  
1d9a0 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 75              argu
1d9b0 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74  ment.. * . */.st
1d9c0 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
1d9d0 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20   {.  u8 op;     
1d9e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
1d9f0 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
1da00 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
1da10 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a  ERT, TK_SELECT *
1da20 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20  /.  u8 orconf;  
1da30 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52           /* OE_R
1da40 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a  ollback etc. */.
1da50 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
1da60 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72  ;      /* The tr
1da70 69 67 67 65 72 20 74 68 61 74 20 74 68 69 73 20  igger that this 
1da80 73 74 65 70 20 69 73 20 61 20 70 61 72 74 20 6f  step is a part o
1da90 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  f */.  Select *p
1daa0 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53  Select;     /* S
1dab0 45 4c 45 43 54 20 73 74 61 74 6d 65 6e 74 20 6f  ELECT statment o
1dac0 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20  r RHS of INSERT 
1dad0 49 4e 54 4f 20 2e 2e 20 53 45 4c 45 43 54 20 2e  INTO .. SELECT .
1dae0 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 74 61  .. */.  Token ta
1daf0 72 67 65 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  rget;        /* 
1db00 54 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72  Target table for
1db10 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c   DELETE, UPDATE,
1db20 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70   INSERT */.  Exp
1db30 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20  r *pWhere;      
1db40 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63    /* The WHERE c
1db50 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45  lause for DELETE
1db60 20 6f 72 20 55 50 44 41 54 45 20 73 74 65 70 73   or UPDATE steps
1db70 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1db80 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45  pExprList; /* SE
1db90 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44  T clause for UPD
1dba0 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74  ATE. */.  IdList
1dbb0 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f   *pIdList;     /
1dbc0 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66  * Column names f
1dbd0 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54  or INSERT */.  T
1dbe0 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78  riggerStep *pNex
1dbf0 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74  t;  /* Next in t
1dc00 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a  he link-list */.
1dc10 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70    TriggerStep *p
1dc20 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65  Last;  /* Last e
1dc30 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c  lement in link-l
1dc40 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31  ist. Valid for 1
1dc50 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a  st elem only */.
1dc60 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
1dc70 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1dc80 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  e contains infor
1dc90 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74  mation used by t
1dca0 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a  he sqliteFix....
1dcb0 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74  ** routines as t
1dcc0 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72  hey walk the par
1dcd0 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20  se tree to make 
1dce0 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65 6e  database referen
1dcf0 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e  ces.** explicit.
1dd00 20 20 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74    .*/.typedef st
1dd10 72 75 63 74 20 44 62 46 69 78 65 72 20 44 62 46  ruct DbFixer DbF
1dd20 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46  ixer;.struct DbF
1dd30 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a  ixer {.  Parse *
1dd40 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20  pParse;      /* 
1dd50 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74  The parsing cont
1dd60 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73  ext.  Error mess
1dd70 61 67 65 73 20 77 72 69 74 74 65 6e 20 68 65 72  ages written her
1dd80 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
1dd90 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69  Schema;    /* Fi
1dda0 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20  x items to this 
1ddb0 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20  schema */.  int 
1ddc0 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20  bVarOnly;       
1ddd0 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72  /* Check for var
1dde0 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73  iable references
1ddf0 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74   only */.  const
1de00 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f   char *zDb;    /
1de10 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20  * Make sure all 
1de20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74  objects are cont
1de30 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61  ained in this da
1de40 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73  tabase */.  cons
1de50 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20  t char *zType;  
1de60 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63  /* Type of the c
1de70 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20  ontainer - used 
1de80 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67  for error messag
1de90 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f  es */.  const To
1dea0 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e  ken *pName; /* N
1deb0 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61  ame of the conta
1dec0 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20  iner - used for 
1ded0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a  error messages *
1dee0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f  /.};../*.** An o
1def0 62 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20  bjected used to 
1df00 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74  accumulate the t
1df10 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20  ext of a string 
1df20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e  where we.** do n
1df30 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b  ot necessarily k
1df40 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20  now how big the 
1df50 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69  string will be i
1df60 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74  n the end..*/.st
1df70 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a  ruct StrAccum {.
1df80 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
1df90 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e         /* Option
1dfa0 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72 20  al database for 
1dfb0 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20  lookaside.  Can 
1dfc0 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61  be NULL */.  cha
1dfd0 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20  r *zBase;       
1dfe0 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f    /* A base allo
1dff0 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f  cation.  Not fro
1e000 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63  m malloc. */.  c
1e010 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20  har *zText;     
1e020 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e      /* The strin
1e030 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66  g collected so f
1e040 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68  ar */.  int  nCh
1e050 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ar;          /* 
1e060 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74  Length of the st
1e070 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20  ring so far */. 
1e080 20 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20   int  nAlloc;   
1e090 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20        /* Amount 
1e0a0 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74  of space allocat
1e0b0 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20  ed in zText */. 
1e0c0 20 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20   int  mxAlloc;  
1e0d0 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
1e0e0 20 61 6c 6c 6f 77 65 64 20 73 74 72 69 6e 67 20   allowed string 
1e0f0 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 75 38 20 20  length */.  u8  
1e100 20 75 73 65 4d 61 6c 6c 6f 63 3b 20 20 20 20 20   useMalloc;     
1e110 20 2f 2a 20 30 3a 20 6e 6f 6e 65 2c 20 20 31 3a   /* 0: none,  1:
1e120 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
1e130 2c 20 20 32 3a 20 73 71 6c 69 74 65 33 5f 6d 61  ,  2: sqlite3_ma
1e140 6c 6c 6f 63 20 2a 2f 0a 20 20 75 38 20 20 20 61  lloc */.  u8   a
1e150 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f  ccError;       /
1e160 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d  * STRACCUM_NOMEM
1e170 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f   or STRACCUM_TOO
1e180 42 49 47 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e  BIG */.};.#defin
1e190 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d  e STRACCUM_NOMEM
1e1a0 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 54 52     1.#define STR
1e1b0 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a  ACCUM_TOOBIG  2.
1e1c0 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72  ./*.** A pointer
1e1d0 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
1e1e0 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  re is used to co
1e1f0 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d  mmunicate inform
1e200 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71  ation.** from sq
1e210 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50  lite3Init and OP
1e220 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74  _ParseSchema int
1e230 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69  o the sqlite3Ini
1e240 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79  tCallback..*/.ty
1e250 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20  pedef struct {. 
1e260 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
1e270 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
1e280 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69  base being initi
1e290 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72  alized */.  char
1e2a0 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20   **pzErrMsg;    
1e2b0 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  /* Error message
1e2c0 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
1e2d0 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
1e2e0 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d        /* 0 for m
1e2f0 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31  ain database.  1
1e300 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66   for TEMP, 2.. f
1e310 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20  or ATTACHed */. 
1e320 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
1e330 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63       /* Result c
1e340 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72 65 20  ode stored here 
1e350 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a  */.} InitData;..
1e360 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20  /*.** Structure 
1e370 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61  containing globa
1e380 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  l configuration 
1e390 64 61 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c  data for the SQL
1e3a0 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a  ite library..**.
1e3b0 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72  ** This structur
1e3c0 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20  e also contains 
1e3d0 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72  some state infor
1e3e0 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
1e3f0 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20  t Sqlite3Config 
1e400 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74  {.  int bMemstat
1e410 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e420 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1e430 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73   enable memory s
1e440 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62  tatus */.  int b
1e450 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20  CoreMutex;      
1e460 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e470 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63  True to enable c
1e480 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a  ore mutexing */.
1e490 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78    int bFullMutex
1e4a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e4b0 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
1e4c0 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78  nable full mutex
1e4d0 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70  ing */.  int bOp
1e4e0 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20 20  enUri;          
1e4f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1e500 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20  ue to interpret 
1e510 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49  filenames as URI
1e520 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43  s */.  int bUseC
1e530 69 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  is;             
1e540 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
1e550 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73  covering indices
1e560 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20   for full-scans 
1e570 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65  */.  int mxStrle
1e580 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
1e590 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
1e5a0 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  m string length 
1e5b0 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f  */.  int neverCo
1e5c0 72 72 75 70 74 3b 20 20 20 20 20 20 20 20 20 20  rrupt;          
1e5d0 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
1e5e0 73 65 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c  se is always wel
1e5f0 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e  l-formed */.  in
1e600 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  t szLookaside;  
1e610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e620 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
1e630 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65  side buffer size
1e640 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61   */.  int nLooka
1e650 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  side;           
1e660 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1e670 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
1e680 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 73  fer count */.  s
1e690 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
1e6a0 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20  ds m;           
1e6b0 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65   /* Low-level me
1e6c0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1e6d0 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  interface */.  s
1e6e0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
1e6f0 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20  hods mutex;     
1e700 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75   /* Low-level mu
1e710 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  tex interface */
1e720 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68  .  sqlite3_pcach
1e730 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68  e_methods2 pcach
1e740 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65  e2;  /* Low-leve
1e750 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74  l page-cache int
1e760 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64  erface */.  void
1e770 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20 20   *pHeap;        
1e780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e790 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73 70   Heap storage sp
1e7a0 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65  ace */.  int nHe
1e7b0 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
1e7c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
1e7d0 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f  ze of pHeap[] */
1e7e0 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78  .  int mnReq, mx
1e7f0 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Req;            
1e800 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20       /* Min and 
1e810 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73 74  max heap request
1e820 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c  s sizes */.  sql
1e830 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61  ite3_int64 szMma
1e840 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  p;             /
1e850 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70  * mmap() space p
1e860 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a  er open file */.
1e870 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
1e880 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  mxMmap;         
1e890 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76      /* Maximum v
1e8a0 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20  alue for szMmap 
1e8b0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63 72 61  */.  void *pScra
1e8c0 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  tch;            
1e8d0 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61 74 63         /* Scratc
1e8e0 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e  h memory */.  in
1e8f0 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20 20 20  t szScratch;    
1e900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e910 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
1e920 73 63 72 61 74 63 68 20 62 75 66 66 65 72 20 2a  scratch buffer *
1e930 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74 63 68  /.  int nScratch
1e940 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e950 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1e960 6f 66 20 73 63 72 61 74 63 68 20 62 75 66 66 65  of scratch buffe
1e970 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  rs */.  void *pP
1e980 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
1e990 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
1e9a0 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a  e cache memory *
1e9b0 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20  /.  int szPage; 
1e9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9d0 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
1e9e0 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70 50   each page in pP
1e9f0 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  age[] */.  int n
1ea00 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
1ea10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ea20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  Number of pages 
1ea30 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20  in pPage[] */.  
1ea40 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61 63  int mxParserStac
1ea50 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  k;              
1ea60 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70    /* maximum dep
1ea70 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65 72  th of the parser
1ea80 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   stack */.  int 
1ea90 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c  sharedCacheEnabl
1eaa0 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
1eab0 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64 2d   true if shared-
1eac0 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c  cache mode enabl
1ead0 65 64 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61  ed */.  /* The a
1eae0 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e  bove might be in
1eaf0 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e  itialized to non
1eb00 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c  -zero.  The foll
1eb10 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c  owing need to al
1eb20 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61  ways.  ** initia
1eb30 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77  lly be zero, how
1eb40 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69  ever. */.  int i
1eb50 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  sInit;          
1eb60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1eb70 54 72 75 65 20 61 66 74 65 72 20 69 6e 69 74 69  True after initi
1eb80 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69  alization has fi
1eb90 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20  nished */.  int 
1eba0 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20  inProgress;     
1ebb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ebc0 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74   True while init
1ebd0 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72  ialization in pr
1ebe0 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20  ogress */.  int 
1ebf0 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20  isMutexInit;    
1ec00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ec10 20 54 72 75 65 20 61 66 74 65 72 20 6d 75 74 65   True after mute
1ec20 78 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69  xes are initiali
1ec30 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d  zed */.  int isM
1ec40 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20  allocInit;      
1ec50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1ec60 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
1ec70 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
1ec80 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68 65  /.  int isPCache
1ec90 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
1eca0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
1ecb0 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
1ecc0 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
1ecd0 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78  nt nRefInitMutex
1ece0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ecf0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
1ed00 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65  ers of pInitMute
1ed10 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  x */.  sqlite3_m
1ed20 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78  utex *pInitMutex
1ed30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65  ;        /* Mute
1ed40 78 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65  x used by sqlite
1ed50 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a  3_initialize() *
1ed60 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29  /.  void (*xLog)
1ed70 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
1ed80 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63   char*); /* Func
1ed90 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67  tion for logging
1eda0 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67   */.  void *pLog
1edb0 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
1edc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
1edd0 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
1ede0 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66  xLog() */.#ifdef
1edf0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
1ee00 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53  QLLOG.  void(*xS
1ee10 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c  qllog)(void*,sql
1ee20 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1ee30 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
1ee40 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e  *pSqllogArg;.#en
1ee50 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
1ee60 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a  E_VDBE_COVERAGE.
1ee70 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
1ee80 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20  ng callback (if 
1ee90 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76  not NULL) is inv
1eea0 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44  oked on every VD
1eeb0 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f  BE branch.  ** o
1eec0 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74  peration.  Set t
1eed0 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e  he callback usin
1eee0 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  g SQLITE_TESTCTR
1eef0 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e  L_VDBE_COVERAGE.
1ef00 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  .  */.  void (*x
1ef10 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64  VdbeBranch)(void
1ef20 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75  *,int iSrcLine,u
1ef30 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b  8 eThis,u8 eMx);
1ef40 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f    /* Callback */
1ef50 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72  .  void *pVdbeBr
1ef60 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20 20  anchArg;        
1ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ef90 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  1st argument */.
1efa0 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
1efb0 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
1efc0 49 4e 5f 54 45 53 54 0a 20 20 69 6e 74 20 28 2a  IN_TEST.  int (*
1efd0 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28 69  xTestCallback)(i
1efe0 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 49  nt);        /* I
1eff0 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74 65  nvoked by sqlite
1f000 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23  3FaultSim() */.#
1f010 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63  endif.  int bLoc
1f020 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20  altimeFault;    
1f030 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1f040 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74  e to fail localt
1f050 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 7d  ime() calls */.}
1f060 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61  ;../*.** This ma
1f070 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69  cro is used insi
1f080 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20 73  de of assert() s
1f090 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64  tatements to ind
1f0a0 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68  icate that.** th
1f0b0 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79  e assert is only
1f0c0 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c   valid on a well
1f0d0 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  -formed database
1f0e0 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a  .  Instead of:.*
1f0f0 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
1f100 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20   X );.**.** One 
1f110 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  writes:.**.**   
1f120 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43    assert( X || C
1f130 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a  ORRUPT_DB );.**.
1f140 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73  ** CORRUPT_DB is
1f150 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72   true during nor
1f160 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  mal operation.  
1f170 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20  CORRUPT_DB does 
1f180 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20  not indicate.** 
1f190 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61 73  that the databas
1f1a0 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20  e is definitely 
1f1b0 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68  corrupt, only th
1f1c0 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20 63  at it might be c
1f1d0 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d  orrupt..** For m
1f1e0 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c 20  ost test cases, 
1f1f0 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73 65  CORRUPT_DB is se
1f200 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67  t to false using
1f210 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71   a special.** sq
1f220 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
1f230 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62  ol().  This enab
1f240 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74 61  les assert() sta
1f250 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65  tements to prove
1f260 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20  .** things that 
1f270 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65 20  are always true 
1f280 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  for well-formed 
1f290 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64  databases..*/.#d
1f2a0 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42  efine CORRUPT_DB
1f2b0 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67    (sqlite3Config
1f2c0 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30  .neverCorrupt==0
1f2d0 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74  )../*.** Context
1f2e0 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20   pointer passed 
1f2f0 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65  down through the
1f300 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73   tree-walk..*/.s
1f310 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20  truct Walker {. 
1f320 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c   int (*xExprCall
1f330 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45  back)(Walker*, E
1f340 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61  xpr*);     /* Ca
1f350 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65  llback for expre
1f360 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  ssions */.  int 
1f370 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63  (*xSelectCallbac
1f380 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63  k)(Walker*,Selec
1f390 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63  t*);  /* Callbac
1f3a0 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f  k for SELECTs */
1f3b0 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63  .  void (*xSelec
1f3c0 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b  tCallback2)(Walk
1f3d0 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20  er*,Select*);/* 
1f3e0 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20  Second callback 
1f3f0 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20  for SELECTs */. 
1f400 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
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 20 20 20 20 2f 2a 20 50 61             /* Pa
1f430 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a  rser context.  *
1f440 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65  /.  int walkerDe
1f450 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  pth;            
1f460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f470 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75   Number of subqu
1f480 65 72 69 65 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e  eries */.  union
1f490 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
1f4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4b0 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61       /* Extra da
1f4c0 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20  ta for callback 
1f4d0 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65  */.    NameConte
1f4e0 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20  xt *pNC;        
1f4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f500 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74    /* Naming cont
1f510 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ext */.    int i
1f520 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f540 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
1f550 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 53 72   value */.    Sr
1f560 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
1f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f580 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d           /* FROM
1f590 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73   clause */.    s
1f5a0 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a  truct SrcCount *
1f5b0 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20  pSrcCount;      
1f5c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75            /* Cou
1f5d0 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66  nting column ref
1f5e0 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 75  erences */.  } u
1f5f0 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64  ;.};../* Forward
1f600 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f   declarations */
1f610 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
1f620 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78  Expr(Walker*, Ex
1f630 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
1f640 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61  3WalkExprList(Wa
1f650 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  lker*, ExprList*
1f660 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
1f670 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a  lkSelect(Walker*
1f680 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
1f690 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
1f6a0 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53  tExpr(Walker*, S
1f6b0 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
1f6c0 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72  ite3WalkSelectFr
1f6d0 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  om(Walker*, Sele
1f6e0 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  ct*);../*.** Ret
1f6f0 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68  urn code from th
1f700 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c  e parse-tree wal
1f710 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20  king primitives 
1f720 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c  and their.** cal
1f730 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69  lbacks..*/.#defi
1f740 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20  ne WRC_Continue 
1f750 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e     0   /* Contin
1f760 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69  ue down into chi
1f770 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ldren */.#define
1f780 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20   WRC_Prune      
1f790 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69   1   /* Omit chi
1f7a0 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e  ldren but contin
1f7b0 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69  ue walking sibli
1f7c0 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ngs */.#define W
1f7d0 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32  RC_Abort       2
1f7e0 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68     /* Abandon th
1f7f0 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a  e tree walk */..
1f800 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1f810 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
1f820 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20 61  ure represents a
1f830 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d   set of one or m
1f840 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d  ore CTEs.** (com
1f850 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
1f860 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62  sions) created b
1f870 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20  y a single WITH 
1f880 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63  clause..*/.struc
1f890 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e  t With {.  int n
1f8a0 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cte;            
1f8b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1f8c0 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20  mber of CTEs in 
1f8d0 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20  the WITH clause 
1f8e0 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65  */.  With *pOute
1f8f0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
1f900 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69       /* Containi
1f910 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20  ng WITH clause, 
1f920 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72  or NULL */.  str
1f930 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20 20  uct Cte {       
1f940 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f950 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e 20  For each CTE in 
1f960 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e  the WITH clause.
1f970 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ... */.    char 
1f980 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
1f990 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
1f9a0 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a  me of this CTE *
1f9b0 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  /.    ExprList *
1f9c0 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20  pCols;          
1f9d0 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
1f9e0 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e   explicit column
1f9f0 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20   names, or NULL 
1fa00 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
1fa10 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20  Select;         
1fa20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
1fa30 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73  finition of this
1fa40 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73   CTE */.    cons
1fa50 74 20 63 68 61 72 20 2a 7a 45 72 72 3b 20 20 20  t char *zErr;   
1fa60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
1fa70 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72  rror message for
1fa80 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72 65   circular refere
1fa90 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d  nces */.  } a[1]
1faa0 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75  ;.};../*.** Assu
1fab0 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20  ming zIn points 
1fac0 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
1fad0 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61  e of a UTF-8 cha
1fae0 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e  racter,.** advan
1faf0 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20  ce zIn to point 
1fb00 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
1fb10 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54  e of the next UT
1fb20 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a  F-8 character..*
1fb30 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
1fb40 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20  _SKIP_UTF8(zIn) 
1fb50 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
1fb60 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28           \.  if(
1fb70 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63   (*(zIn++))>=0xc
1fb80 30 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20  0 ){            
1fb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fba0 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28    \.    while( (
1fbb0 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78  *zIn & 0xc0)==0x
1fbc0 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20  80 ){ zIn++; }  
1fbd0 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d             \.  }
1fbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc10 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54      \.}../*.** T
1fc20 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54  he SQLITE_*_BKPT
1fc30 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62 73   macros are subs
1fc40 74 69 74 75 74 65 73 20 66 6f 72 20 74 68 65 20  titutes for the 
1fc50 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68  error codes with
1fc60 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  .** the same nam
1fc70 65 20 62 75 74 20 77 69 74 68 6f 75 74 20 74 68  e but without th
1fc80 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20  e _BKPT suffix. 
1fc90 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e   These macros in
1fca0 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73  voke.** routines
1fcb0 20 74 68 61 74 20 72 65 70 6f 72 74 20 74 68 65   that report the
1fcc0 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20   line-number on 
1fcd0 77 68 69 63 68 20 74 68 65 20 65 72 72 6f 72 20  which the error 
1fce0 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73  originated.** us
1fcf0 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28  ing sqlite3_log(
1fd00 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73  ).  The routines
1fd10 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20   also provide a 
1fd20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65  convenient place
1fd30 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62  .** to set a deb
1fd40 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74  ugger breakpoint
1fd50 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
1fd60 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74  CorruptError(int
1fd70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69  );.int sqlite3Mi
1fd80 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a  suseError(int);.
1fd90 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f  int sqlite3Canto
1fda0 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23  penError(int);.#
1fdb0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f  define SQLITE_CO
1fdc0 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74  RRUPT_BKPT sqlit
1fdd0 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f  e3CorruptError(_
1fde0 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65  _LINE__).#define
1fdf0 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42   SQLITE_MISUSE_B
1fe00 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73  KPT sqlite3Misus
1fe10 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  eError(__LINE__)
1fe20 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
1fe30 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71  CANTOPEN_BKPT sq
1fe40 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
1fe50 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f  or(__LINE__).../
1fe60 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61  *.** FTS4 is rea
1fe70 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e  lly an extension
1fe80 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69   for FTS3.  It i
1fe90 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20  s enabled using 
1fea0 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e  the.** SQLITE_EN
1feb0 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e  ABLE_FTS3 macro.
1fec0 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63    But to avoid c
1fed0 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f  onfusion we also
1fee0 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c   call.** the SQL
1fef0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20  ITE_ENABLE_FTS4 
1ff00 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61  macro to serve a
1ff10 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53  s an alias for S
1ff20 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1ff30 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  3..*/.#if define
1ff40 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
1ff50 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e 65  FTS4) && !define
1ff60 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
1ff70 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53  FTS3).# define S
1ff80 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1ff90 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  3.#endif../*.** 
1ffa0 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64  The ctype.h head
1ffb0 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72  er is needed for
1ffc0 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65   non-ASCII syste
1ffd0 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a  ms.  It is also.
1ffe0 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53  ** needed by FTS
1fff0 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69  3 when FTS3 is i
20000 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61  ncluded in the a
20010 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  malgamation..*/.
20020 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
20030 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a  ITE_ASCII) || \.
20040 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c      (defined(SQL
20050 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
20060 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
20070 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29  TE_AMALGAMATION)
20080 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79  ).# include <cty
20090 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a  pe.h>.#endif../*
200a0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
200b0 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74  g macros mimic t
200c0 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72  he standard libr
200d0 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f  ary functions to
200e0 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70  upper(),.** issp
200f0 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29  ace(), isalnum()
20100 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20  , isdigit() and 
20110 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70  isxdigit(), resp
20120 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a  ectively. The.**
20130 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73   sqlite versions
20140 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41   only work for A
20150 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c  SCII characters,
20160 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c   regardless of l
20170 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  ocale..*/.#ifdef
20180 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20   SQLITE_ASCII.# 
20190 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
201a0 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e  upper(x)  ((x)&~
201b0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
201c0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
201d0 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65  (x)]&0x20)).# de
201e0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
201f0 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65  ace(x)   (sqlite
20200 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
20210 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
20220 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  01).# define sql
20230 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
20240 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
20250 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
20260 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65  )(x)]&0x06).# de
20270 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
20280 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65  pha(x)   (sqlite
20290 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
202a0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
202b0 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  02).# define sql
202c0 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20  ite3Isdigit(x)  
202d0 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
202e0 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
202f0 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65  )(x)]&0x04).# de
20300 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
20310 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65  igit(x)  (sqlite
20320 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
20330 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
20340 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  08).# define sql
20350 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20  ite3Tolower(x)  
20360 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f   (sqlite3UpperTo
20370 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20  Lower[(unsigned 
20380 63 68 61 72 29 28 78 29 5d 29 0a 23 65 6c 73 65  char)(x)]).#else
20390 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
203a0 33 54 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f  3Toupper(x)   to
203b0 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20  upper((unsigned 
203c0 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
203d0 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  ne sqlite3Isspac
203e0 65 28 78 29 20 20 20 69 73 73 70 61 63 65 28 28  e(x)   isspace((
203f0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
20400 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
20410 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20  te3Isalnum(x)   
20420 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65  isalnum((unsigne
20430 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
20440 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
20450 70 68 61 28 78 29 20 20 20 69 73 61 6c 70 68 61  pha(x)   isalpha
20460 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
20470 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
20480 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20  lite3Isdigit(x) 
20490 20 20 69 73 64 69 67 69 74 28 28 75 6e 73 69 67    isdigit((unsig
204a0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
204b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
204c0 78 64 69 67 69 74 28 78 29 20 20 69 73 78 64 69  xdigit(x)  isxdi
204d0 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68  git((unsigned ch
204e0 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
204f0 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28   sqlite3Tolower(
20500 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e  x)   tolower((un
20510 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
20520 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
20530 74 65 33 49 73 49 64 43 68 61 72 28 75 38 29 3b  te3IsIdChar(u8);
20540 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c  ../*.** Internal
20550 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74   function protot
20560 79 70 65 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ypes.*/.#define 
20570 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 20 73  sqlite3StrICmp s
20580 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 0a 69  qlite3_stricmp.i
20590 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  nt sqlite3Strlen
205a0 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  30(const char*);
205b0 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
205c0 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33  StrNICmp sqlite3
205d0 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73  _strnicmp..int s
205e0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74  qlite3MallocInit
205f0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
20600 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f  ite3MallocEnd(vo
20610 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  id);.void *sqlit
20620 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76  e3Malloc(u64);.v
20630 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
20640 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69  ocZero(u64);.voi
20650 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  d *sqlite3DbMall
20660 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c  ocZero(sqlite3*,
20670 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
20680 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
20690 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a  sqlite3*, u64);.
206a0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53  char *sqlite3DbS
206b0 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63  trDup(sqlite3*,c
206c0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61  onst char*);.cha
206d0 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e  r *sqlite3DbStrN
206e0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  Dup(sqlite3*,con
206f0 73 74 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a  st char*, u64);.
20700 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61  void *sqlite3Rea
20710 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34 29  lloc(void*, u64)
20720 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
20730 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73  bReallocOrFree(s
20740 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a  qlite3 *, void *
20750 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
20760 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 73  lite3DbRealloc(s
20770 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a  qlite3 *, void *
20780 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 73 71 6c  , u64);.void sql
20790 69 74 65 33 44 62 46 72 65 65 28 73 71 6c 69 74  ite3DbFree(sqlit
207a0 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74  e3*, void*);.int
207b0 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69   sqlite3MallocSi
207c0 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73  ze(void*);.int s
207d0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69  qlite3DbMallocSi
207e0 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  ze(sqlite3*, voi
207f0 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  d*);.void *sqlit
20800 65 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63 28  e3ScratchMalloc(
20810 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
20820 65 33 53 63 72 61 74 63 68 46 72 65 65 28 76 6f  e3ScratchFree(vo
20830 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  id*);.void *sqli
20840 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e  te3PageMalloc(in
20850 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
20860 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b  PageFree(void*);
20870 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d  .void sqlite3Mem
20880 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29  SetDefault(void)
20890 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
208a0 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28  nignMallocHooks(
208b0 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20  void (*)(void), 
208c0 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b  void (*)(void));
208d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70  .int sqlite3Heap
208e0 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29  NearlyFull(void)
208f0 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74  ;../*.** On syst
20900 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73  ems with ample s
20910 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74  tack space and t
20920 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f  hat support allo
20930 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73  ca(), make.** us
20940 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f  e of alloca() to
20950 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f   obtain space fo
20960 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69  r large automati
20970 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64  c objects.  By d
20980 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69  efault,.** obtai
20990 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c  n space from mal
209a0 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  loc()..**.** The
209b0 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e   alloca() routin
209c0 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20  e never returns 
209d0 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c  NULL.  This will
209e0 20 63 61 75 73 65 20 63 6f 64 65 20 70 61 74 68   cause code path
209f0 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77  s.** that deal w
20a00 69 74 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ith sqlite3Stack
20a10 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73  Alloc() failures
20a20 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62   to be unreachab
20a30 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  le..*/.#ifdef SQ
20a40 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a  LITE_USE_ALLOCA.
20a50 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20a60 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c  StackAllocRaw(D,
20a70 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23  N)   alloca(N).#
20a80 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
20a90 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c  tackAllocZero(D,
20aa0 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63  N)  memset(alloc
20ab0 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65  a(N), 0, N).# de
20ac0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
20ad0 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20  kFree(D,P)      
20ae0 20 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65   .#else.# define
20af0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
20b00 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c  ocRaw(D,N)   sql
20b10 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
20b20 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  D,N).# define sq
20b30 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a  lite3StackAllocZ
20b40 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65  ero(D,N)  sqlite
20b50 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c  3DbMallocZero(D,
20b60 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
20b70 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50  te3StackFree(D,P
20b80 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  )       sqlite3D
20b90 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69  bFree(D,P).#endi
20ba0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
20bb0 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a  _ENABLE_MEMSYS3.
20bc0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65  const sqlite3_me
20bd0 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74  m_methods *sqlit
20be0 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28  e3MemGetMemsys3(
20bf0 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69  void);.#endif.#i
20c00 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
20c10 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74  LE_MEMSYS5.const
20c20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
20c30 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d  hods *sqlite3Mem
20c40 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29  GetMemsys5(void)
20c50 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64  ;.#endif...#ifnd
20c60 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ef SQLITE_MUTEX_
20c70 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d  OMIT.  sqlite3_m
20c80 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e  utex_methods con
20c90 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75  st *sqlite3Defau
20ca0 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20  ltMutex(void);. 
20cb0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
20cc0 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71  ethods const *sq
20cd0 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76  lite3NoopMutex(v
20ce0 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  oid);.  sqlite3_
20cf0 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75  mutex *sqlite3Mu
20d00 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20  texAlloc(int);. 
20d10 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65   int sqlite3Mute
20d20 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69  xInit(void);.  i
20d30 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45  nt sqlite3MutexE
20d40 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  nd(void);.#endif
20d50 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  ..int sqlite3Sta
20d60 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76  tusValue(int);.v
20d70 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
20d80 73 41 64 64 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  sAdd(int, int);.
20d90 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
20da0 75 73 53 65 74 28 69 6e 74 2c 20 69 6e 74 29 3b  usSet(int, int);
20db0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
20dc0 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
20dd0 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74  OINT.  int sqlit
20de0 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b  e3IsNaN(double);
20df0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
20e00 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20  sqlite3IsNaN(X) 
20e10 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
20e20 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
20e30 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
20e40 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e  ructure holds in
20e50 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
20e60 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  SQL.** functions
20e70 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20   arguments that 
20e80 61 72 65 20 74 68 65 20 70 61 72 61 6d 65 74 65  are the paramete
20e90 72 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66  rs to the printf
20ea0 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a  () function..*/.
20eb0 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67  struct PrintfArg
20ec0 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e  uments {.  int n
20ed0 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
20ee0 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d      /* Total num
20ef0 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
20f00 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b   */.  int nUsed;
20f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20f20 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
20f30 6d 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61  ments used so fa
20f40 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  r */.  sqlite3_v
20f50 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20  alue **apArg;   
20f60 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  /* The argument 
20f70 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 23 64  values */.};..#d
20f80 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49  efine SQLITE_PRI
20f90 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30  NTF_INTERNAL 0x0
20fa0 31 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  1.#define SQLITE
20fb0 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20  _PRINTF_SQLFUNC 
20fc0 20 30 78 30 32 0a 76 6f 69 64 20 73 71 6c 69 74   0x02.void sqlit
20fd0 65 33 56 58 50 72 69 6e 74 66 28 53 74 72 41 63  e3VXPrintf(StrAc
20fe0 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74  cum*, u32, const
20ff0 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29   char*, va_list)
21000 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50  ;.void sqlite3XP
21010 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c  rintf(StrAccum*,
21020 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61 72   u32, const char
21030 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73  *, ...);.char *s
21040 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71  qlite3MPrintf(sq
21050 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
21060 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a  r*, ...);.char *
21070 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28  sqlite3VMPrintf(
21080 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
21090 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a  har*, va_list);.
210a0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 41 70  char *sqlite3MAp
210b0 70 65 6e 64 66 28 73 71 6c 69 74 65 33 2a 2c 63  pendf(sqlite3*,c
210c0 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
210d0 2c 2e 2e 2e 29 3b 0a 23 69 66 20 64 65 66 69 6e  ,...);.#if defin
210e0 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20  ed(SQLITE_TEST) 
210f0 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
21100 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20  E_DEBUG).  void 
21110 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
21120 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  tf(const char*, 
21130 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  ...);.#endif.#if
21140 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
21150 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71  TEST).  void *sq
21160 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f 50  lite3TestTextToP
21170 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  tr(const char*);
21180 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 75 74 70  .#endif../* Outp
21190 75 74 20 66 6f 72 6d 61 74 74 69 6e 67 20 66 6f  ut formatting fo
211a0 72 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  r SQLITE_TESTCTR
211b0 4c 5f 45 58 50 4c 41 49 4e 20 2a 2f 0a 23 69 66  L_EXPLAIN */.#if
211c0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
211d0 45 4e 41 42 4c 45 5f 54 52 45 45 5f 45 58 50 4c  ENABLE_TREE_EXPL
211e0 41 49 4e 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  AIN).  void sqli
211f0 74 65 33 45 78 70 6c 61 69 6e 42 65 67 69 6e 28  te3ExplainBegin(
21200 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Vdbe*);.  void s
21210 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 72 69  qlite3ExplainPri
21220 6e 74 66 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74  ntf(Vdbe*, const
21230 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20   char*, ...);.  
21240 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
21250 61 69 6e 4e 4c 28 56 64 62 65 2a 29 3b 0a 20 20  ainNL(Vdbe*);.  
21260 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
21270 61 69 6e 50 75 73 68 28 56 64 62 65 2a 29 3b 0a  ainPush(Vdbe*);.
21280 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
21290 70 6c 61 69 6e 50 6f 70 28 56 64 62 65 2a 29 3b  plainPop(Vdbe*);
212a0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
212b0 78 70 6c 61 69 6e 46 69 6e 69 73 68 28 56 64 62  xplainFinish(Vdb
212c0 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
212d0 74 65 33 45 78 70 6c 61 69 6e 53 65 6c 65 63 74  te3ExplainSelect
212e0 28 56 64 62 65 2a 2c 20 53 65 6c 65 63 74 2a 29  (Vdbe*, Select*)
212f0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
21300 45 78 70 6c 61 69 6e 45 78 70 72 28 56 64 62 65  ExplainExpr(Vdbe
21310 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69  *, Expr*);.  voi
21320 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
21330 45 78 70 72 4c 69 73 74 28 56 64 62 65 2a 2c 20  ExprList(Vdbe*, 
21340 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 63 6f  ExprList*);.  co
21350 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
21360 33 56 64 62 65 45 78 70 6c 61 6e 61 74 69 6f 6e  3VdbeExplanation
21370 28 56 64 62 65 2a 29 3b 0a 23 65 6c 73 65 0a 23  (Vdbe*);.#else.#
21380 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45   define sqlite3E
21390 78 70 6c 61 69 6e 42 65 67 69 6e 28 58 29 0a 23  xplainBegin(X).#
213a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45   define sqlite3E
213b0 78 70 6c 61 69 6e 53 65 6c 65 63 74 28 41 2c 42  xplainSelect(A,B
213c0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
213d0 65 33 45 78 70 6c 61 69 6e 45 78 70 72 28 41 2c  e3ExplainExpr(A,
213e0 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
213f0 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72 4c 69  te3ExplainExprLi
21400 73 74 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  st(A,B).# define
21410 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 46   sqlite3ExplainF
21420 69 6e 69 73 68 28 58 29 0a 23 20 64 65 66 69 6e  inish(X).# defin
21430 65 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 70  e sqlite3VdbeExp
21440 6c 61 6e 61 74 69 6f 6e 28 58 29 20 30 0a 23 65  lanation(X) 0.#e
21450 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69  ndif...void sqli
21460 74 65 33 53 65 74 53 74 72 69 6e 67 28 63 68 61  te3SetString(cha
21470 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20  r **, sqlite3*, 
21480 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
21490 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
214a0 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20  rrorMsg(Parse*, 
214b0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
214c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65  );.int sqlite3De
214d0 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 69 6e  quote(char*);.in
214e0 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64  t sqlite3Keyword
214f0 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67  Code(const unsig
21500 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  ned char*, int);
21510 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50  .int sqlite3RunP
21520 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f  arser(Parse*, co
21530 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20  nst char*, char 
21540 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
21550 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61  3FinishCoding(Pa
21560 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
21570 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61 72  e3GetTempReg(Par
21580 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
21590 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67  e3ReleaseTempReg
215a0 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e  (Parse*,int);.in
215b0 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70  t sqlite3GetTemp
215c0 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
215d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
215e0 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28  eleaseTempRange(
215f0 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b  Parse*,int,int);
21600 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65  .void sqlite3Cle
21610 61 72 54 65 6d 70 52 65 67 43 61 63 68 65 28 50  arTempRegCache(P
21620 61 72 73 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71  arse*);.Expr *sq
21630 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73  lite3ExprAlloc(s
21640 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
21650 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45  t Token*,int);.E
21660 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
21670 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
21680 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
21690 20 73 71 6c 69 74 65 33 45 78 70 72 41 74 74 61   sqlite3ExprAtta
216a0 63 68 53 75 62 74 72 65 65 73 28 73 71 6c 69 74  chSubtrees(sqlit
216b0 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c  e3*,Expr*,Expr*,
216c0 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  Expr*);.Expr *sq
216d0 6c 69 74 65 33 50 45 78 70 72 28 50 61 72 73 65  lite3PExpr(Parse
216e0 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45  *, int, Expr*, E
216f0 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  xpr*, const Toke
21700 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  n*);.Expr *sqlit
21710 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74 65  e3ExprAnd(sqlite
21720 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  3*,Expr*, Expr*)
21730 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
21740 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72 73  xprFunction(Pars
21750 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f  e*,ExprList*, To
21760 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
21770 74 65 33 45 78 70 72 41 73 73 69 67 6e 56 61 72  te3ExprAssignVar
21780 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45  Number(Parse*, E
21790 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
217a0 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73 71  te3ExprDelete(sq
217b0 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a  lite3*, Expr*);.
217c0 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
217d0 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28  3ExprListAppend(
217e0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
217f0 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,Expr*);.void sq
21800 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74  lite3ExprListSet
21810 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72  Name(Parse*,Expr
21820 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  List*,Token*,int
21830 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
21840 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50  xprListSetSpan(P
21850 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
21860 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64  ExprSpan*);.void
21870 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
21880 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
21890 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
218a0 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c   sqlite3Init(sql
218b0 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  ite3*, char**);.
218c0 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43  int sqlite3InitC
218d0 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69  allback(void*, i
218e0 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72  nt, char**, char
218f0 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
21900 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54  3Pragma(Parse*,T
21910 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  oken*,Token*,Tok
21920 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  en*,int);.void s
21930 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63  qlite3ResetAllSc
21940 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f  hemasOfConnectio
21950 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  n(sqlite3*);.voi
21960 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e  d sqlite3ResetOn
21970 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a  eSchema(sqlite3*
21980 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
21990 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62  te3CollapseDatab
219a0 61 73 65 41 72 72 61 79 28 73 71 6c 69 74 65 33  aseArray(sqlite3
219b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
219c0 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65  BeginParse(Parse
219d0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
219e0 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e  ite3CommitIntern
219f0 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65  alChanges(sqlite
21a00 33 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  3*);.Table *sqli
21a10 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65  te3ResultSetOfSe
21a20 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65  lect(Parse*,Sele
21a30 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ct*);.void sqlit
21a40 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c  e3OpenMasterTabl
21a50 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b  e(Parse *, int);
21a60 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50  .Index *sqlite3P
21a70 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54  rimaryKeyIndex(T
21a80 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69  able*);.i16 sqli
21a90 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78  te3ColumnOfIndex
21aa0 28 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76  (Index*, i16);.v
21ab0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74  oid sqlite3Start
21ac0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
21ad0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
21ae0 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69  nt,int,int);.voi
21af0 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75  d sqlite3AddColu
21b00 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  mn(Parse*,Token*
21b10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
21b20 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a  ddNotNull(Parse*
21b30 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
21b40 69 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65  ite3AddPrimaryKe
21b50 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
21b60 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  st*, int, int, i
21b70 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21b80 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61  3AddCheckConstra
21b90 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  int(Parse*, Expr
21ba0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21bb0 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61  AddColumnType(Pa
21bc0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  rse*,Token*);.vo
21bd0 69 64 20 73 71 6c 69 74 65 33 41 64 64 44 65 66  id sqlite3AddDef
21be0 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a  aultValue(Parse*
21bf0 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69  ,ExprSpan*);.voi
21c00 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c  d sqlite3AddColl
21c10 61 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20  ateType(Parse*, 
21c20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
21c30 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61  lite3EndTable(Pa
21c40 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
21c50 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a  n*,u8,Select*);.
21c60 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
21c70 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  Uri(const char*,
21c80 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69  const char*,unsi
21c90 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20  gned int*,.     
21ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
21cb0 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61  qlite3_vfs**,cha
21cc0 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74  r**,char **);.Bt
21cd0 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61  ree *sqlite3DbNa
21ce0 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65  meToBtree(sqlite
21cf0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  3*,const char*);
21d00 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65  .int sqlite3Code
21d10 4f 6e 63 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a  Once(Parse *);..
21d20 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
21d30 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
21d40 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
21d50 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c 49  FaultSim(X) SQLI
21d60 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e  TE_OK.#else.  in
21d70 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  t sqlite3FaultSi
21d80 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  m(int);.#endif..
21d90 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42  Bitvec *sqlite3B
21da0 69 74 76 65 63 43 72 65 61 74 65 28 75 33 32 29  itvecCreate(u32)
21db0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
21dc0 76 65 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c  vecTest(Bitvec*,
21dd0 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74   u32);.int sqlit
21de0 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74 76  e3BitvecSet(Bitv
21df0 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20  ec*, u32);.void 
21e00 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65  sqlite3BitvecCle
21e10 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c  ar(Bitvec*, u32,
21e20 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71   void*);.void sq
21e30 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74 72  lite3BitvecDestr
21e40 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32  oy(Bitvec*);.u32
21e50 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 69   sqlite3BitvecSi
21e60 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 69 6e 74  ze(Bitvec*);.int
21e70 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42 75   sqlite3BitvecBu
21e80 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e  iltinTest(int,in
21e90 74 2a 29 3b 0a 0a 52 6f 77 53 65 74 20 2a 73 71  t*);..RowSet *sq
21ea0 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28  lite3RowSetInit(
21eb0 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c  sqlite3*, void*,
21ec0 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a   unsigned int);.
21ed0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
21ee0 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29  etClear(RowSet*)
21ef0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
21f00 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65  wSetInsert(RowSe
21f10 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71  t*, i64);.int sq
21f20 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
21f30 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61  RowSet*, int iBa
21f40 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  tch, i64);.int s
21f50 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
21f60 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b  (RowSet*, i64*);
21f70 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ..void sqlite3Cr
21f80 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c  eateView(Parse*,
21f90 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
21fa0 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  ken*,Select*,int
21fb0 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66  ,int);..#if !def
21fc0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
21fd0 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e  _VIEW) || !defin
21fe0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
21ff0 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69  IRTUALTABLE).  i
22000 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  nt sqlite3ViewGe
22010 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72  tColumnNames(Par
22020 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c  se*,Table*);.#el
22030 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
22040 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
22050 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e  Names(A,B) 0.#en
22060 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  dif..#if SQLITE_
22070 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a  MAX_ATTACHED>30.
22080 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d    int sqlite3DbM
22090 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61  askAllZero(yDbMa
220a0 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  sk);.#endif.void
220b0 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c   sqlite3DropTabl
220c0 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
220d0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  t*, int, int);.v
220e0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44  oid sqlite3CodeD
220f0 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
22100 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
22110 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22120 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
22130 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23  te3*, Table*);.#
22140 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
22150 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
22160 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
22170 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69  utoincrementBegi
22180 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  n(Parse *pParse)
22190 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
221a0 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
221b0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
221c0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
221d0 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
221e0 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64  mentBegin(X).# d
221f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
22200 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29  oincrementEnd(X)
22210 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
22220 69 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65  ite3Insert(Parse
22230 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c  *, SrcList*, Sel
22240 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69  ect*, IdList*, i
22250 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
22260 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28  e3ArrayAllocate(
22270 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69  sqlite3*,void*,i
22280 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49  nt,int*,int*);.I
22290 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64  dList *sqlite3Id
222a0 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74  ListAppend(sqlit
222b0 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f  e3*, IdList*, To
222c0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
222d0 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64  e3IdListIndex(Id
222e0 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72  List*,const char
222f0 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  *);.SrcList *sql
22300 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72  ite3SrcListEnlar
22310 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  ge(sqlite3*, Src
22320 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  List*, int, int)
22330 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
22340 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28  e3SrcListAppend(
22350 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
22360 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  t*, Token*, Toke
22370 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  n*);.SrcList *sq
22380 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65  lite3SrcListAppe
22390 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65  ndFromTerm(Parse
223a0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
223b0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20  en*, Token*,.   
223c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223e0 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63     Token*, Selec
223f0 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73  t*, Expr*, IdLis
22400 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
22410 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42  3SrcListIndexedB
22420 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69  y(Parse *, SrcLi
22430 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a  st *, Token *);.
22440 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78  int sqlite3Index
22450 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65  edByLookup(Parse
22460 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69   *, struct SrcLi
22470 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64  st_item *);.void
22480 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
22490 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63  hiftJoinType(Src
224a0 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
224b0 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69 67  ite3SrcListAssig
224c0 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c  nCursors(Parse*,
224d0 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64   SrcList*);.void
224e0 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65   sqlite3IdListDe
224f0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49  lete(sqlite3*, I
22500 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  dList*);.void sq
22510 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65  lite3SrcListDele
22520 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  te(sqlite3*, Src
22530 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  List*);.Index *s
22540 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e  qlite3AllocateIn
22550 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65  dexObject(sqlite
22560 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a  3*,i16,int,char*
22570 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
22580 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50 61  e3CreateIndex(Pa
22590 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
225a0 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  n*,SrcList*,Expr
225b0 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a  List*,int,Token*
225c0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
225d0 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
225e0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
225f0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e  id sqlite3DropIn
22600 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  dex(Parse*, SrcL
22610 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
22620 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61  sqlite3Select(Pa
22630 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53  rse*, Select*, S
22640 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c  electDest*);.Sel
22650 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
22660 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70  ctNew(Parse*,Exp
22670 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  rList*,SrcList*,
22680 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
22690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
226a0 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
226b0 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78  ExprList*,u16,Ex
226c0 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64  pr*,Expr*);.void
226d0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65   sqlite3SelectDe
226e0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  lete(sqlite3*, S
226f0 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a  elect*);.Table *
22700 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f  sqlite3SrcListLo
22710 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63  okup(Parse*, Src
22720 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
22730 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61  te3IsReadOnly(Pa
22740 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
22750 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22760 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a  OpenTable(Parse*
22770 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20  , int iCur, int 
22780 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  iDb, Table*, int
22790 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
227a0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44  QLITE_ENABLE_UPD
227b0 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54  ATE_DELETE_LIMIT
227c0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
227d0 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45  LITE_OMIT_SUBQUE
227e0 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  RY).Expr *sqlite
227f0 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73  3LimitWhere(Pars
22800 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  e*,SrcList*,Expr
22810 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
22820 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a  *,Expr*,char*);.
22830 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
22840 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61  te3DeleteFrom(Pa
22850 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
22860 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
22870 69 74 65 33 55 70 64 61 74 65 28 50 61 72 73 65  ite3Update(Parse
22880 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
22890 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69  rList*, Expr*, i
228a0 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a  nt);.WhereInfo *
228b0 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69  sqlite3WhereBegi
228c0 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  n(Parse*,SrcList
228d0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
228e0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c  *,ExprList*,u16,
228f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22900 65 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65  e3WhereEnd(Where
22910 49 6e 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69  Info*);.u64 sqli
22920 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f  te3WhereOutputRo
22930 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f  wCount(WhereInfo
22940 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
22950 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 57  hereIsDistinct(W
22960 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
22970 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72  sqlite3WhereIsOr
22980 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a  dered(WhereInfo*
22990 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
229a0 65 72 65 49 73 53 6f 72 74 65 64 28 57 68 65 72  ereIsSorted(Wher
229b0 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
229c0 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75  ite3WhereContinu
229d0 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  eLabel(WhereInfo
229e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
229f0 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57  hereBreakLabel(W
22a00 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
22a10 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e  sqlite3WhereOkOn
22a20 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a  ePass(WhereInfo*
22a30 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
22a40 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
22a50 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61  olumn(Parse*, Ta
22a60 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
22a70 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  int, u8);.void s
22a80 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
22a90 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56  tColumnOfTable(V
22aa0 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  dbe*, Table*, in
22ab0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
22ac0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
22ad0 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69  deMove(Parse*, i
22ae0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
22af0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
22b00 61 63 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a  acheStore(Parse*
22b10 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
22b20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
22b30 70 72 43 61 63 68 65 50 75 73 68 28 50 61 72 73  prCachePush(Pars
22b40 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
22b50 33 45 78 70 72 43 61 63 68 65 50 6f 70 28 50 61  3ExprCachePop(Pa
22b60 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
22b70 74 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f  te3ExprCacheRemo
22b80 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ve(Parse*, int, 
22b90 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22ba0 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72  e3ExprCacheClear
22bb0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
22bc0 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41  qlite3ExprCacheA
22bd0 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61  ffinityChange(Pa
22be0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
22bf0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
22c00 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78  rCode(Parse*, Ex
22c10 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
22c20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46  sqlite3ExprCodeF
22c30 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a  actorable(Parse*
22c40 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
22c50 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
22c60 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a  odeAtInit(Parse*
22c70 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38  , Expr*, int, u8
22c80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
22c90 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65  prCodeTemp(Parse
22ca0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  *, Expr*, int*);
22cb0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
22cc0 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65  CodeTarget(Parse
22cd0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
22ce0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
22cf0 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72  CodeAndCache(Par
22d00 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
22d10 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
22d20 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61  rCodeExprList(Pa
22d30 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
22d40 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69   int, u8);.#defi
22d50 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44  ne SQLITE_ECEL_D
22d60 55 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a  UP      0x01  /*
22d70 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c   Deep, not shall
22d80 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65  ow copies */.#de
22d90 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
22da0 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20  _FACTOR   0x02  
22db0 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f  /* Factor out co
22dc0 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a  nstant terms */.
22dd0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
22de0 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45  IfTrue(Parse*, E
22df0 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
22e00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
22e10 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c  rIfFalse(Parse*,
22e20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
22e30 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
22e40 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74  3FindTable(sqlit
22e50 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
22e60 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54   const char*);.T
22e70 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
22e80 61 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ateTable(Parse*,
22e90 69 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e 73 74  int isView,const
22ea0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
22eb0 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ar*);.Table *sql
22ec0 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49  ite3LocateTableI
22ed0 74 65 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20 69  tem(Parse*,int i
22ee0 73 56 69 65 77 2c 73 74 72 75 63 74 20 53 72 63  sView,struct Src
22ef0 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e  List_item *);.In
22f00 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  dex *sqlite3Find
22f10 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63  Index(sqlite3*,c
22f20 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
22f30 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
22f40 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
22f50 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
22f60 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
22f70 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
22f80 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
22f90 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  eIndex(sqlite3*,
22fa0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
22fb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
22fc0 63 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e  cuum(Parse*);.in
22fd0 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75  t sqlite3RunVacu
22fe0 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74  um(char**, sqlit
22ff0 65 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  e3*);.char *sqli
23000 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e  te3NameFromToken
23010 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
23020 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
23030 78 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a  xprCompare(Expr*
23040 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
23050 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  nt sqlite3ExprLi
23060 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69  stCompare(ExprLi
23070 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  st*, ExprList*, 
23080 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
23090 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72  3ExprImpliesExpr
230a0 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  (Expr*, Expr*, i
230b0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
230c0 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72  3ExprAnalyzeAggr
230d0 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65  egates(NameConte
230e0 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  xt*, Expr*);.voi
230f0 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
23100 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65  lyzeAggList(Name
23110 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73  Context*,ExprLis
23120 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
23130 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73  FunctionUsesThis
23140 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69  Src(Expr*, SrcLi
23150 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69  st*);.Vdbe *sqli
23160 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65  te3GetVdbe(Parse
23170 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23180 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f  PrngSaveState(vo
23190 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
231a0 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74  3PrngRestoreStat
231b0 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  e(void);.void sq
231c0 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c  lite3RollbackAll
231d0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
231e0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
231f0 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61 72  VerifySchema(Par
23200 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
23210 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
23220 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72  yNamedSchema(Par
23230 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  se*, const char 
23240 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69  *zDb);.void sqli
23250 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74  te3BeginTransact
23260 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ion(Parse*, int)
23270 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
23280 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f 6e 28  mmitTransaction(
23290 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
232a0 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61  lite3RollbackTra
232b0 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29  nsaction(Parse*)
232c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61  ;.void sqlite3Sa
232d0 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20  vepoint(Parse*, 
232e0 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  int, Token*);.vo
232f0 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53  id sqlite3CloseS
23300 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65  avepoints(sqlite
23310 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  3 *);.void sqlit
23320 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43  e3LeaveMutexAndC
23330 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74  loseZombie(sqlit
23340 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
23350 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28  3ExprIsConstant(
23360 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
23370 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
23380 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b  tNotJoin(Expr*);
23390 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
233a0 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63  IsConstantOrFunc
233b0 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b  tion(Expr*, u8);
233c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
233d0 49 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c  IsInteger(Expr*,
233e0 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
233f0 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c  te3ExprCanBeNull
23400 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69  (const Expr*);.i
23410 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65  nt sqlite3ExprNe
23420 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61  edsNoAffinityCha
23430 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c  nge(const Expr*,
23440 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69   char);.int sqli
23450 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74  te3IsRowid(const
23460 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
23470 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77  lite3GenerateRow
23480 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 54 61  Delete(Parse*,Ta
23490 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e  ble*,Trigger*,in
234a0 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38  t,int,int,i16,u8
234b0 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71  ,u8,u8);.void sq
234c0 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77  lite3GenerateRow
234d0 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72 73  IndexDelete(Pars
234e0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
234f0 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74   int, int*);.int
23500 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
23510 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c  IndexKey(Parse*,
23520 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e   Index*, int, in
23530 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64  t, int, int*,Ind
23540 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ex*,int);.void s
23550 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72  qlite3ResolvePar
23560 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65 2a  tIdxLabel(Parse*
23570 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
23580 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74  te3GenerateConst
23590 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73  raintChecks(Pars
235a0 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69  e*,Table*,int*,i
235b0 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a  nt,int,int,int,.
235c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235e0 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69       u8,u8,int,i
235f0 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  nt*);.void sqlit
23600 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74  e3CompleteInsert
23610 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ion(Parse*,Table
23620 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
23630 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b  t*,int,int,int);
23640 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e  .int sqlite3Open
23650 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28  TableAndIndices(
23660 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
23670 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69  int, int, u8*, i
23680 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64  nt*, int*);.void
23690 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69   sqlite3BeginWri
236a0 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73  teOperation(Pars
236b0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
236c0 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69  oid sqlite3Multi
236d0 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76  Write(Parse*);.v
236e0 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62  oid sqlite3MayAb
236f0 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ort(Parse*);.voi
23700 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e  d sqlite3HaltCon
23710 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
23720 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c  int, int, char*,
23730 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73   i8, u8);.void s
23740 71 6c 69 74 65 33 55 6e 69 71 75 65 43 6f 6e 73  qlite3UniqueCons
23750 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  traint(Parse*, i
23760 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  nt, Index*);.voi
23770 64 20 73 71 6c 69 74 65 33 52 6f 77 69 64 43 6f  d sqlite3RowidCo
23780 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
23790 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45   int, Table*);.E
237a0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
237b0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  Dup(sqlite3*,Exp
237c0 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73  r*,int);.ExprLis
237d0 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
237e0 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45  stDup(sqlite3*,E
237f0 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53  xprList*,int);.S
23800 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
23810 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  rcListDup(sqlite
23820 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29  3*,SrcList*,int)
23830 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
23840 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74  3IdListDup(sqlit
23850 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65  e3*,IdList*);.Se
23860 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c  lect *sqlite3Sel
23870 65 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  ectDup(sqlite3*,
23880 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 23 69  Select*,int);.#i
23890 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  f SELECTTRACE_EN
238a0 41 42 4c 45 44 0a 76 6f 69 64 20 73 71 6c 69 74  ABLED.void sqlit
238b0 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28  e3SelectSetName(
238c0 53 65 6c 65 63 74 2a 2c 63 6f 6e 73 74 20 63 68  Select*,const ch
238d0 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ar*);.#else.# de
238e0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65  fine sqlite3Sele
238f0 63 74 53 65 74 4e 61 6d 65 28 41 2c 42 29 0a 23  ctSetName(A,B).#
23900 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
23910 65 33 46 75 6e 63 44 65 66 49 6e 73 65 72 74 28  e3FuncDefInsert(
23920 46 75 6e 63 44 65 66 48 61 73 68 2a 2c 20 46 75  FuncDefHash*, Fu
23930 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63 44 65 66  ncDef*);.FuncDef
23940 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e   *sqlite3FindFun
23950 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63  ction(sqlite3*,c
23960 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69  onst char*,int,i
23970 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20  nt,u8,u8);.void 
23980 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42  sqlite3RegisterB
23990 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28  uiltinFunctions(
239a0 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
239b0 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 44  sqlite3RegisterD
239c0 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73  ateTimeFunctions
239d0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
239e0 69 74 65 33 52 65 67 69 73 74 65 72 47 6c 6f 62  ite3RegisterGlob
239f0 61 6c 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  alFunctions(void
23a00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  );.int sqlite3Sa
23a10 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69  fetyCheckOk(sqli
23a20 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
23a30 65 33 53 61 66 65 74 79 43 68 65 63 6b 53 69 63  e3SafetyCheckSic
23a40 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b  kOrOk(sqlite3*);
23a50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61  .void sqlite3Cha
23a60 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a  ngeCookie(Parse*
23a70 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65  , int);..#if !de
23a80 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
23a90 54 5f 56 49 45 57 29 20 26 26 20 21 64 65 66 69  T_VIEW) && !defi
23aa0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
23ab0 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73 71  TRIGGER).void sq
23ac0 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a 65  lite3Materialize
23ad0 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61 62  View(Parse*, Tab
23ae0 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  le*, Expr*, int)
23af0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ;.#endif..#ifnde
23b00 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
23b10 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71 6c  IGGER.  void sql
23b20 69 74 65 33 42 65 67 69 6e 54 72 69 67 67 65 72  ite3BeginTrigger
23b30 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
23b40 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49  Token*,int,int,I
23b50 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  dList*,SrcList*,
23b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23b70 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
23b80 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  *,int, int);.  v
23b90 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73  oid sqlite3Finis
23ba0 68 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  hTrigger(Parse*,
23bb0 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20 54   TriggerStep*, T
23bc0 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73  oken*);.  void s
23bd0 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
23be0 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  r(Parse*, SrcLis
23bf0 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  t*, int);.  void
23c00 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
23c10 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20 54  gerPtr(Parse*, T
23c20 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69 67  rigger*);.  Trig
23c30 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67  ger *sqlite3Trig
23c40 67 65 72 73 45 78 69 73 74 28 50 61 72 73 65 20  gersExist(Parse 
23c50 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
23c60 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a  ExprList*, int *
23c70 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67 65  pMask);.  Trigge
23c80 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  r *sqlite3Trigge
23c90 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54  rList(Parse *, T
23ca0 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20  able *);.  void 
23cb0 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
23cc0 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
23cd0 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78  igger *, int, Ex
23ce0 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61  prList*, int, Ta
23cf0 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20 20  ble *,.         
23d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d10 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74     int, int, int
23d20 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
23d30 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44  3CodeRowTriggerD
23d40 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20 54  irect(Parse *, T
23d50 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65 20  rigger *, Table 
23d60 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
23d70 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
23d80 56 69 65 77 54 72 69 67 67 65 72 73 28 50 61 72  ViewTriggers(Par
23d90 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
23da0 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73  r*, int, ExprLis
23db0 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
23dc0 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
23dd0 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20 54  Step(sqlite3*, T
23de0 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20 20  riggerStep*);.  
23df0 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
23e00 69 74 65 33 54 72 69 67 67 65 72 53 65 6c 65 63  ite3TriggerSelec
23e10 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 53  tStep(sqlite3*,S
23e20 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69 67 67  elect*);.  Trigg
23e30 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
23e40 72 69 67 67 65 72 49 6e 73 65 72 74 53 74 65 70  riggerInsertStep
23e50 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a  (sqlite3*,Token*
23e60 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20  , IdList*,.     
23e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e90 20 20 20 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a     Select*,u8);.
23ea0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
23eb0 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70 64  qlite3TriggerUpd
23ec0 61 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ateStep(sqlite3*
23ed0 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
23ee0 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20  *, Expr*, u8);. 
23ef0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
23f00 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65  lite3TriggerDele
23f10 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  teStep(sqlite3*,
23f20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a  Token*, Expr*);.
23f30 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
23f40 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
23f50 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  te3*, Trigger*);
23f60 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55  .  void sqlite3U
23f70 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
23f80 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69  igger(sqlite3*,i
23f90 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
23fa0 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54 72  .  u32 sqlite3Tr
23fb0 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72  iggerColmask(Par
23fc0 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70  se*,Trigger*,Exp
23fd0 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54  rList*,int,int,T
23fe0 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65  able*,int);.# de
23ff0 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
24000 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70  eToplevel(p) ((p
24010 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28  )->pToplevel ? (
24020 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20  p)->pToplevel : 
24030 28 70 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  (p)).#else.# def
24040 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
24050 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45  ersExist(B,C,D,E
24060 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73  ,F) 0.# define s
24070 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
24080 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  ger(A,B).# defin
24090 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  e sqlite3DropTri
240a0 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64  ggerPtr(A,B).# d
240b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c  efine sqlite3Unl
240c0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
240d0 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66  ger(A,B,C).# def
240e0 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52  ine sqlite3CodeR
240f0 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c  owTrigger(A,B,C,
24100 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64  D,E,F,G,H,I).# d
24110 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
24120 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
24130 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23  t(A,B,C,D,E,F).#
24140 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
24150 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29  riggerList(X, Y)
24160 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   0.# define sqli
24170 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
24180 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73  (p) p.# define s
24190 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c  qlite3TriggerCol
241a0 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  mask(A,B,C,D,E,F
241b0 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e  ,G) 0.#endif..in
241c0 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70  t sqlite3JoinTyp
241d0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
241e0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
241f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
24200 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28  reateForeignKey(
24210 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
24220 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c  *, Token*, ExprL
24230 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ist*, int);.void
24240 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72   sqlite3DeferFor
24250 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20  eignKey(Parse*, 
24260 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
24270 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52  LITE_OMIT_AUTHOR
24280 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73  IZATION.  void s
24290 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50  qlite3AuthRead(P
242a0 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65  arse*,Expr*,Sche
242b0 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20  ma*,SrcList*);. 
242c0 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68   int sqlite3Auth
242d0 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74  Check(Parse*,int
242e0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
242f0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
24300 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
24310 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
24320 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20  extPush(Parse*, 
24330 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f  AuthContext*, co
24340 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
24350 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
24360 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e  ntextPop(AuthCon
24370 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  text*);.  int sq
24380 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c  lite3AuthReadCol
24390 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
243a0 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  har *, const cha
243b0 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65  r *, int);.#else
243c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
243d0 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c  3AuthRead(a,b,c,
243e0 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  d).# define sqli
243f0 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62  te3AuthCheck(a,b
24400 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54  ,c,d,e)    SQLIT
24410 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71  E_OK.# define sq
24420 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
24430 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65  Push(a,b,c).# de
24440 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
24450 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28  ContextPop(a)  (
24460 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69  (void)(a)).#endi
24470 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74  f.void sqlite3At
24480 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
24490 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  r*, Expr*, Expr*
244a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
244b0 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  etach(Parse*, Ex
244c0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
244d0 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65  e3FixInit(DbFixe
244e0 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c  r*, Parse*, int,
244f0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
24500 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  nst Token*);.int
24510 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69   sqlite3FixSrcLi
24520 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63  st(DbFixer*, Src
24530 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
24540 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46  te3FixSelect(DbF
24550 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ixer*, Select*);
24560 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45  .int sqlite3FixE
24570 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78  xpr(DbFixer*, Ex
24580 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
24590 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46  3FixExprList(DbF
245a0 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ixer*, ExprList*
245b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
245c0 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46  xTriggerStep(DbF
245d0 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74  ixer*, TriggerSt
245e0 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ep*);.int sqlite
245f0 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72  3AtoF(const char
24600 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e   *z, double*, in
24610 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
24620 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73  te3GetInt32(cons
24630 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b  t char *, int*);
24640 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69  .int sqlite3Atoi
24650 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  (const char*);.i
24660 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42  nt sqlite3Utf16B
24670 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69  yteLen(const voi
24680 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43  d *pData, int nC
24690 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  har);.int sqlite
246a0 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e  3Utf8CharLen(con
246b0 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20  st char *pData, 
246c0 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20  int nByte);.u32 
246d0 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28  sqlite3Utf8Read(
246e0 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67  const u8**);.Log
246f0 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
24700 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73  t(u64);.LogEst s
24710 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28  qlite3LogEstAdd(
24720 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a  LogEst,LogEst);.
24730 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
24740 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
24750 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
24760 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28  ogEstFromDouble(
24770 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a  double);.#endif.
24780 75 36 34 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  u64 sqlite3LogEs
24790 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a  tToInt(LogEst);.
247a0 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20  ./*.** Routines 
247b0 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74  to read and writ
247c0 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  e variable-lengt
247d0 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65  h integers.  The
247e0 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  se used to.** be
247f0 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79   defined locally
24800 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65  , but now we use
24810 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74   the varint rout
24820 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c  ines in the util
24830 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69  .c.** file..*/.i
24840 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  nt sqlite3PutVar
24850 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61  int(unsigned cha
24860 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c  r*, u64);.u8 sql
24870 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f  ite3GetVarint(co
24880 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
24890 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20  r *, u64 *);.u8 
248a0 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
248b0 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  32(const unsigne
248c0 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29  d char *, u32 *)
248d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72  ;.int sqlite3Var
248e0 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a  intLen(u64 v);..
248f0 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e  /*.** The common
24900 20 63 61 73 65 20 69 73 20 66 6f 72 20 61 20 76   case is for a v
24910 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69  arint to be a si
24920 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79  ngle byte.  They
24930 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61   following.** ma
24940 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20  cros handle the 
24950 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68  common case with
24960 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72 65 20  out a procedure 
24970 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63  call, but then c
24980 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65  all.** the proce
24990 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20  dure for larger 
249a0 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66  varints..*/.#def
249b0 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28  ine getVarint32(
249c0 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
249d0 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28  *(A)<(u8)0x80)?(
249e0 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31  (B)=(u32)*(A)),1
249f0 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e  :sqlite3GetVarin
24a00 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26  t32((A),(u32 *)&
24a10 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75  (B))).#define pu
24a20 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20  tVarint32(A,B)  
24a30 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29 28  \.  (u8)(((u32)(
24a40 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a  B)<(u32)0x80)?(*
24a50 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68  (A)=(unsigned ch
24a60 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71  ar)(B)),1:\.  sq
24a70 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 28  lite3PutVarint((
24a80 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65  A),(B))).#define
24a90 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73 71   getVarint    sq
24aa0 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23  lite3GetVarint.#
24ab0 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74  define putVarint
24ac0 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56 61      sqlite3PutVa
24ad0 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61  rint...const cha
24ae0 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41  r *sqlite3IndexA
24af0 66 66 69 6e 69 74 79 53 74 72 28 56 64 62 65 20  ffinityStr(Vdbe 
24b00 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 76 6f 69  *, Index *);.voi
24b10 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66  d sqlite3TableAf
24b20 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61  finity(Vdbe*, Ta
24b30 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72  ble*, int);.char
24b40 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41   sqlite3CompareA
24b50 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45  ffinity(Expr *pE
24b60 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b  xpr, char aff2);
24b70 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65  .int sqlite3Inde
24b80 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72  xAffinityOk(Expr
24b90 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69 64   *pExpr, char id
24ba0 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61  x_affinity);.cha
24bb0 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66 66  r sqlite3ExprAff
24bc0 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70  inity(Expr *pExp
24bd0 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  r);.int sqlite3A
24be0 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72  toi64(const char
24bf0 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38  *, i64*, int, u8
24c00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65  );.int sqlite3De
24c10 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73  cOrHexToI64(cons
24c20 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a  t char*, i64*);.
24c30 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
24c40 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33  rWithMsg(sqlite3
24c50 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
24c60 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  ar*,...);.void s
24c70 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69  qlite3Error(sqli
24c80 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
24c90 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f  *sqlite3HexToBlo
24ca0 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73  b(sqlite3*, cons
24cb0 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e  t char *z, int n
24cc0 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78  );.u8 sqlite3Hex
24cd0 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e  ToInt(int h);.in
24ce0 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74  t sqlite3TwoPart
24cf0 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f  Name(Parse *, To
24d00 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20  ken *, Token *, 
24d10 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20  Token **);..#if 
24d20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
24d30 45 53 54 29 20 0a 63 6f 6e 73 74 20 63 68 61 72  EST) .const char
24d40 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65   *sqlite3ErrName
24d50 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63  (int);.#endif..c
24d60 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
24d70 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69  e3ErrStr(int);.i
24d80 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  nt sqlite3ReadSc
24d90 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72  hema(Parse *pPar
24da0 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  se);.CollSeq *sq
24db0 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71  lite3FindCollSeq
24dc0 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63  (sqlite3*,u8 enc
24dd0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  , const char*,in
24de0 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  t);.CollSeq *sql
24df0 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65  ite3LocateCollSe
24e00 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
24e10 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d   const char*zNam
24e20 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
24e30 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28  ite3ExprCollSeq(
24e40 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
24e50 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70  xpr *pExpr);.Exp
24e60 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64  r *sqlite3ExprAd
24e70 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61  dCollateToken(Pa
24e80 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
24e90 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
24ea0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
24eb0 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74  ExprAddCollateSt
24ec0 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72  ring(Parse*,Expr
24ed0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
24ee0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
24ef0 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70  rSkipCollate(Exp
24f00 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
24f10 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72  CheckCollSeq(Par
24f20 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29  se *, CollSeq *)
24f30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
24f40 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72  ckObjectName(Par
24f50 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  se *, const char
24f60 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
24f70 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
24f80 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b  sqlite3 *, int);
24f90 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49  .int sqlite3AddI
24fa0 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
24fb0 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e  int sqlite3SubIn
24fc0 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
24fd0 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74  nt sqlite3MulInt
24fe0 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
24ff0 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33  t sqlite3AbsInt3
25000 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53  2(int);.#ifdef S
25010 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33  QLITE_ENABLE_8_3
25020 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69  _NAMES.void sqli
25030 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 63  te3FileSuffix3(c
25040 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72  onst char*, char
25050 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
25060 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75  ne sqlite3FileSu
25070 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69  ffix3(X,Y).#endi
25080 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 42  f.u8 sqlite3GetB
25090 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61  oolean(const cha
250a0 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74  r *z,u8);..const
250b0 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61   void *sqlite3Va
250c0 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f  lueText(sqlite3_
250d0 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74  value*, u8);.int
250e0 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74   sqlite3ValueByt
250f0 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  es(sqlite3_value
25100 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  *, u8);.void sql
25110 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28  ite3ValueSetStr(
25120 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
25130 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  int, const void 
25140 2a 2c 75 38 2c 20 0a 20 20 20 20 20 20 20 20 20  *,u8, .         
25150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
25160 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a  oid(*)(void*));.
25170 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
25180 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33  eSetNull(sqlite3
25190 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73  _value*);.void s
251a0 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
251b0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b  sqlite3_value*);
251c0 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  .sqlite3_value *
251d0 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28  sqlite3ValueNew(
251e0 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61 72  sqlite3 *);.char
251f0 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f   *sqlite3Utf16to
25200 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  8(sqlite3 *, con
25210 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75  st void*, int, u
25220 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  8);.int sqlite3V
25230 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c  alueFromExpr(sql
25240 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20  ite3 *, Expr *, 
25250 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f  u8, u8, sqlite3_
25260 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20  value **);.void 
25270 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c  sqlite3ValueAppl
25280 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65  yAffinity(sqlite
25290 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75  3_value *, u8, u
252a0 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  8);.#ifndef SQLI
252b0 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a  TE_AMALGAMATION.
252c0 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
252d0 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
252e0 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  e3OpcodeProperty
252f0 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
25300 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
25310 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
25320 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  er[];.extern con
25330 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
25340 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70   sqlite3CtypeMap
25350 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
25360 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e   Token sqlite3In
25370 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72  tTokens[];.exter
25380 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72  n SQLITE_WSD str
25390 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
253a0 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b  g sqlite3Config;
253b0 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57  .extern SQLITE_W
253c0 53 44 20 46 75 6e 63 44 65 66 48 61 73 68 20 73  SD FuncDefHash s
253d0 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75 6e 63  qlite3GlobalFunc
253e0 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53  tions;.#ifndef S
253f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65  QLITE_OMIT_WSD.e
25400 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
25410 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65  3PendingByte;.#e
25420 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64  ndif.#endif.void
25430 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65   sqlite3RootPage
25440 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20  Moved(sqlite3*, 
25450 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
25460 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e  void sqlite3Rein
25470 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  dex(Parse*, Toke
25480 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  n*, Token*);.voi
25490 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75  d sqlite3AlterFu
254a0 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
254b0 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
254c0 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73  RenameTable(Pars
254d0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
254e0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
254f0 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74  e3GetToken(const
25500 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
25510 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73  , int *);.void s
25520 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73  qlite3NestedPars
25530 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  e(Parse*, const 
25540 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
25550 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50  d sqlite3ExpireP
25560 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
25570 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  s(sqlite3*);.int
25580 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73   sqlite3CodeSubs
25590 65 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20 45  elect(Parse *, E
255a0 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  xpr *, int, int)
255b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
255c0 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c  lectPrep(Parse*,
255d0 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
255e0 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  ntext*);.int sql
255f0 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d  ite3MatchSpanNam
25600 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  e(const char*, c
25610 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
25620 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
25630 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
25640 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d  e3ResolveExprNam
25650 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
25660 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
25670 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65  lite3ResolveSele
25680 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20  ctNames(Parse*, 
25690 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e  Select*, NameCon
256a0 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  text*);.void sql
256b0 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52  ite3ResolveSelfR
256c0 65 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c  eference(Parse*,
256d0 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a  Table*,int,Expr*
256e0 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74  ,ExprList*);.int
256f0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f   sqlite3ResolveO
25700 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72 73  rderGroupBy(Pars
25710 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  e*, Select*, Exp
25720 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
25730 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
25740 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28  e3ColumnDefault(
25750 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c  Vdbe *, Table *,
25760 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
25770 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e   sqlite3AlterFin
25780 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ishAddColumn(Par
25790 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a  se *, Token *);.
257a0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
257b0 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28  rBeginAddColumn(
257c0 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
257d0 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71   *);.CollSeq *sq
257e0 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28  lite3GetCollSeq(
257f0 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c  Parse*, u8, Coll
25800 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Seq *, const cha
25810 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  r*);.char sqlite
25820 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f  3AffinityType(co
25830 6e 73 74 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b  nst char*, u8*);
25840 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61  .void sqlite3Ana
25850 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  lyze(Parse*, Tok
25860 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  en*, Token*);.in
25870 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42  t sqlite3InvokeB
25880 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48  usyHandler(BusyH
25890 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71  andler*);.int sq
258a0 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69  lite3FindDb(sqli
258b0 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  te3*, Token*);.i
258c0 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62  nt sqlite3FindDb
258d0 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  Name(sqlite3 *, 
258e0 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69  const char *);.i
258f0 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73  nt sqlite3Analys
25900 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c  isLoad(sqlite3*,
25910 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73  int iDB);.void s
25920 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65  qlite3DeleteInde
25930 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33  xSamples(sqlite3
25940 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  *,Index*);.void 
25950 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f  sqlite3DefaultRo
25960 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f  wEst(Index*);.vo
25970 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
25980 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28  erLikeFunctions(
25990 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a  sqlite3*, int);.
259a0 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b  int sqlite3IsLik
259b0 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  eFunction(sqlite
259c0 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68  3*,Expr*,int*,ch
259d0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
259e0 65 33 4d 69 6e 69 6d 75 6d 46 69 6c 65 46 6f 72  e3MinimumFileFor
259f0 6d 61 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  mat(Parse*, int,
25a00 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
25a10 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76  te3SchemaClear(v
25a20 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a  oid *);.Schema *
25a30 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74  sqlite3SchemaGet
25a40 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65  (sqlite3 *, Btre
25a50 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e *);.int sqlite
25a60 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73  3SchemaToIndex(s
25a70 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65  qlite3 *db, Sche
25a80 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a  ma *);.KeyInfo *
25a90 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c  sqlite3KeyInfoAl
25aa0 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  loc(sqlite3*,int
25ab0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
25ac0 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28  te3KeyInfoUnref(
25ad0 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e  KeyInfo*);.KeyIn
25ae0 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
25af0 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b  foRef(KeyInfo*);
25b00 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
25b10 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28  3KeyInfoOfIndex(
25b20 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b  Parse*, Index*);
25b30 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
25b40 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33  EBUG.int sqlite3
25b50 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62  KeyInfoIsWriteab
25b60 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65  le(KeyInfo*);.#e
25b70 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
25b80 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74  CreateFunc(sqlit
25b90 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
25ba0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f   *, int, int, vo
25bb0 69 64 20 2a 2c 20 0a 20 20 76 6f 69 64 20 28 2a  id *, .  void (*
25bc0 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
25bd0 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
25be0 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64  alue **),.  void
25bf0 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
25c00 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
25c10 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69  3_value **), voi
25c20 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
25c30 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44  ntext*),.  FuncD
25c40 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74  estructor *pDest
25c50 72 75 63 74 6f 72 0a 29 3b 0a 69 6e 74 20 73 71  ructor.);.int sq
25c60 6c 69 74 65 33 41 70 69 45 78 69 74 28 73 71 6c  lite3ApiExit(sql
25c70 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a  ite3 *db, int);.
25c80 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  int sqlite3OpenT
25c90 65 6d 70 44 61 74 61 62 61 73 65 28 50 61 72 73  empDatabase(Pars
25ca0 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  e *);..void sqli
25cb0 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28  te3StrAccumInit(
25cc0 53 74 72 41 63 63 75 6d 2a 2c 20 63 68 61 72 2a  StrAccum*, char*
25cd0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
25ce0 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
25cf0 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d  mAppend(StrAccum
25d00 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
25d10 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25d20 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c  StrAccumAppendAl
25d30 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73  l(StrAccum*,cons
25d40 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
25d50 71 6c 69 74 65 33 41 70 70 65 6e 64 53 70 61 63  qlite3AppendSpac
25d60 65 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74 29  e(StrAccum*,int)
25d70 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53  ;.char *sqlite3S
25d80 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74  trAccumFinish(St
25d90 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73  rAccum*);.void s
25da0 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52 65  qlite3StrAccumRe
25db0 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a  set(StrAccum*);.
25dc0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
25dd0 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65 63  ctDestInit(Selec
25de0 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b  tDest*,int,int);
25df0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72  .Expr *sqlite3Cr
25e00 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73  eateColumnExpr(s
25e10 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69 73  qlite3 *, SrcLis
25e20 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  t *, int, int);.
25e30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63  .void sqlite3Bac
25e40 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c 69 74  kupRestart(sqlit
25e50 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f  e3_backup *);.vo
25e60 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
25e70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f 62  Update(sqlite3_b
25e80 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63  ackup *, Pgno, c
25e90 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66  onst u8 *);..#if
25ea0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
25eb0 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
25ec0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61  .void sqlite3Ana
25ed0 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f  lyzeFunctions(vo
25ee0 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  id);.int sqlite3
25ef0 53 74 61 74 34 50 72 6f 62 65 53 65 74 56 61 6c  Stat4ProbeSetVal
25f00 75 65 28 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a  ue(Parse*,Index*
25f10 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a  ,UnpackedRecord*
25f20 2a 2c 45 78 70 72 2a 2c 75 38 2c 69 6e 74 2c 69  *,Expr*,u8,int,i
25f30 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
25f40 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45  3Stat4ValueFromE
25f50 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72  xpr(Parse*, Expr
25f60 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76  *, u8, sqlite3_v
25f70 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  alue**);.void sq
25f80 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 46  lite3Stat4ProbeF
25f90 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f  ree(UnpackedReco
25fa0 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  rd*);.int sqlite
25fb0 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c  3Stat4Column(sql
25fc0 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69  ite3*, const voi
25fd0 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71  d*, int, int, sq
25fe0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
25ff0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
26000 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74  e interface to t
26010 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74  he LEMON-generat
26020 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69  ed parser.*/.voi
26030 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72  d *sqlite3Parser
26040 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75  Alloc(void*(*)(u
26050 36 34 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  64));.void sqlit
26060 65 33 50 61 72 73 65 72 46 72 65 65 28 76 6f 69  e3ParserFree(voi
26070 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64  d*, void(*)(void
26080 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *));.void sqlite
26090 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69  3Parser(void*, i
260a0 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65  nt, Token, Parse
260b0 2a 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41  *);.#ifdef YYTRA
260c0 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a  CKMAXSTACKDEPTH.
260d0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72    int sqlite3Par
260e0 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69  serStackPeak(voi
260f0 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69  d*);.#endif..voi
26100 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61  d sqlite3AutoLoa
26110 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69  dExtensions(sqli
26120 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  te3*);.#ifndef S
26130 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f  QLITE_OMIT_LOAD_
26140 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64  EXTENSION.  void
26150 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
26160 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  ensions(sqlite3*
26170 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
26180 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78  e sqlite3CloseEx
26190 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64  tensions(X).#end
261a0 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
261b0 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
261c0 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69  ACHE.  void sqli
261d0 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72  te3TableLock(Par
261e0 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  se *, int, int, 
261f0 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  u8, const char *
26200 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
26210 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  ne sqlite3TableL
26220 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23  ock(v,w,x,y,z).#
26230 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
26240 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20  LITE_TEST.  int 
26250 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75  sqlite3Utf8To8(u
26260 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a  nsigned char*);.
26270 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
26280 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
26290 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e  ALTABLE.#  defin
262a0 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65  e sqlite3VtabCle
262b0 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20  ar(Y).#  define 
262c0 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
262d0 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  X,Y) SQLITE_OK.#
262e0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
262f0 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a  VtabRollback(X).
26300 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
26310 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23  3VtabCommit(X).#
26320 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
26330 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30  VtabInSync(db) 0
26340 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
26350 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23  e3VtabLock(X) .#
26360 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
26370 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20  VtabUnlock(X).# 
26380 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
26390 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29  tabUnlockList(X)
263a0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
263b0 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
263c0 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f  X, Y, Z) SQLITE_
263d0 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  OK.#  define sql
263e0 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c  ite3GetVTable(X,
263f0 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29  Y)  ((VTable*)0)
26400 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73  .#else.   void s
26410 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28  qlite3VtabClear(
26420 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62  sqlite3 *db, Tab
26430 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  le*);.   void sq
26440 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e  lite3VtabDisconn
26450 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ect(sqlite3 *db,
26460 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69   Table *p);.   i
26470 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 79  nt sqlite3VtabSy
26480 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  nc(sqlite3 *db, 
26490 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73  Vdbe*);.   int s
264a0 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
264b0 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ck(sqlite3 *db);
264c0 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
264d0 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65  tabCommit(sqlite
264e0 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20  3 *db);.   void 
264f0 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28  sqlite3VtabLock(
26500 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f  VTable *);.   vo
26510 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  id sqlite3VtabUn
26520 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a  lock(VTable *);.
26530 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
26540 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71  tabUnlockList(sq
26550 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20  lite3*);.   int 
26560 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
26570 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20  oint(sqlite3 *, 
26580 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f  int, int);.   vo
26590 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d  id sqlite3VtabIm
265a0 70 6f 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a  portErrmsg(Vdbe*
265b0 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29  , sqlite3_vtab*)
265c0 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c  ;.   VTable *sql
265d0 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 73 71  ite3GetVTable(sq
265e0 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b  lite3*, Table*);
265f0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
26600 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29  e3VtabInSync(db)
26610 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e   ((db)->nVTrans>
26620 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61  0 && (db)->aVTra
26630 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 76 6f  ns==0).#endif.vo
26640 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61  id sqlite3VtabMa
26650 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72 73 65  keWritable(Parse
26660 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20  *,Table*);.void 
26670 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
26680 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f  Parse(Parse*, To
26690 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ken*, Token*, To
266a0 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ken*, int);.void
266b0 20 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69   sqlite3VtabFini
266c0 73 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  shParse(Parse*, 
266d0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
266e0 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74  lite3VtabArgInit
266f0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
26700 71 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74  qlite3VtabArgExt
26710 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  end(Parse*, Toke
26720 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
26730 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73  VtabCallCreate(s
26740 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
26750 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72  nst char *, char
26760 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   **);.int sqlite
26770 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74  3VtabCallConnect
26780 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29  (Parse*, Table*)
26790 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
267a0 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c  bCallDestroy(sql
267b0 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
267c0 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73  t char *);.int s
267d0 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28  qlite3VtabBegin(
267e0 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c  sqlite3 *, VTabl
267f0 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73  e *);.FuncDef *s
26800 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f  qlite3VtabOverlo
26810 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  adFunction(sqlit
26820 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69  e3 *,FuncDef*, i
26830 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b  nt nArg, Expr*);
26840 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76  .void sqlite3Inv
26850 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  alidFunction(sql
26860 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
26870 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
26880 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36  *);.sqlite3_int6
26890 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72  4 sqlite3StmtCur
268a0 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33  rentTime(sqlite3
268b0 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20  _context*);.int 
268c0 73 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d  sqlite3VdbeParam
268d0 65 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c  eterIndex(Vdbe*,
268e0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e   const char*, in
268f0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  t);.int sqlite3T
26900 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28  ransferBindings(
26910 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20  sqlite3_stmt *, 
26920 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b  sqlite3_stmt *);
26930 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72  .void sqlite3Par
26940 73 65 72 52 65 73 65 74 28 50 61 72 73 65 2a 29  serReset(Parse*)
26950 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70  ;.int sqlite3Rep
26960 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76  repare(Vdbe*);.v
26970 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
26980 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50  istCheckLength(P
26990 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
269a0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
269b0 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
269c0 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c  BinaryCompareCol
269d0 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78  lSeq(Parse *, Ex
269e0 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69  pr *, Expr *);.i
269f0 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e  nt sqlite3TempIn
26a00 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c  Memory(const sql
26a10 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68  ite3*);.const ch
26a20 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e  ar *sqlite3Journ
26a30 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b  alModename(int);
26a40 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
26a50 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73  OMIT_WAL.  int s
26a60 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74  qlite3Checkpoint
26a70 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
26a80 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29  int, int*, int*)
26a90 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57  ;.  int sqlite3W
26aa0 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f  alDefaultHook(vo
26ab0 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  id*,sqlite3*,con
26ac0 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23  st char*,int);.#
26ad0 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
26ae0 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20  LITE_OMIT_CTE.  
26af0 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74  With *sqlite3Wit
26b00 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68  hAdd(Parse*,With
26b10 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73  *,Token*,ExprLis
26b20 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76  t*,Select*);.  v
26b30 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 44  oid sqlite3WithD
26b40 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57  elete(sqlite3*,W
26b50 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ith*);.  void sq
26b60 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 50 61  lite3WithPush(Pa
26b70 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29  rse*, With*, u8)
26b80 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  ;.#else.#define 
26b90 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28  sqlite3WithPush(
26ba0 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73  x,y,z).#define s
26bb0 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65  qlite3WithDelete
26bc0 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (x,y).#endif../*
26bd0 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f   Declarations fo
26be0 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66  r functions in f
26bf0 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68  key.c. All of th
26c00 65 73 65 20 61 72 65 20 72 65 70 6c 61 63 65 64  ese are replaced
26c10 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63   by.** no-op mac
26c20 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45  ros if OMIT_FORE
26c30 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e  IGN_KEY is defin
26c40 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ed. In this case
26c50 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b   no foreign.** k
26c60 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  ey functionality
26c70 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49   is available. I
26c80 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69  f OMIT_TRIGGER i
26c90 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a  s defined but.**
26ca0 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45   OMIT_FOREIGN_KE
26cb0 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73  Y is not, only s
26cc0 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ome of the funct
26cd0 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64  ions are no-oped
26ce0 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73  . In.** this cas
26cf0 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61  e foreign keys a
26d00 72 65 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e  re parsed, but n
26d10 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e  o other function
26d20 61 6c 69 74 79 20 69 73 20 0a 2a 2a 20 70 72 6f  ality is .** pro
26d30 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65  vided (enforceme
26d40 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61  nt of FK constra
26d50 69 6e 74 73 20 72 65 71 75 69 72 65 73 20 74 68  ints requires th
26d60 65 20 74 72 69 67 67 65 72 73 20 73 75 62 2d 73  e triggers sub-s
26d70 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21  ystem)..*/.#if !
26d80 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
26d90 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29  MIT_FOREIGN_KEY)
26da0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
26db0 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
26dc0 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
26dd0 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20  FkCheck(Parse*, 
26de0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
26df0 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
26e00 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72  void sqlite3FkDr
26e10 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
26e20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65  SrcList *, Table
26e30 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
26e40 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73  e3FkActions(Pars
26e50 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
26e60 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a  List*, int, int*
26e70 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  , int);.  int sq
26e80 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28  lite3FkRequired(
26e90 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
26ea0 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33  int*, int);.  u3
26eb0 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61  2 sqlite3FkOldma
26ec0 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  sk(Parse*, Table
26ed0 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69  *);.  FKey *sqli
26ee0 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28  te3FkReferences(
26ef0 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a  Table *);.#else.
26f00 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
26f10 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63  3FkActions(a,b,c
26f20 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e  ,d,e,f).  #defin
26f30 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b  e sqlite3FkCheck
26f40 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20  (a,b,c,d,e,f).  
26f50 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
26f60 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63  kDropTable(a,b,c
26f70 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
26f80 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62  te3FkOldmask(a,b
26f90 29 20 20 20 20 20 20 20 20 20 30 0a 20 20 23 64  )         0.  #d
26fa0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52  efine sqlite3FkR
26fb0 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29  equired(a,b,c,d)
26fc0 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66      0.#endif.#if
26fd0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
26fe0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76  _FOREIGN_KEY.  v
26ff0 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  oid sqlite3FkDel
27000 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54  ete(sqlite3 *, T
27010 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71  able*);.  int sq
27020 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
27030 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ex(Parse*,Table*
27040 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69  ,FKey*,Index**,i
27050 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  nt**);.#else.  #
27060 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
27070 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64  Delete(a,b).  #d
27080 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c  efine sqlite3FkL
27090 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63  ocateIndex(a,b,c
270a0 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f  ,d,e).#endif.../
270b0 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66  *.** Available f
270c0 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20  ault injectors. 
270d0 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65   Should be numbe
270e0 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  red beginning wi
270f0 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  th 0..*/.#define
27100 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a   SQLITE_FAULTINJ
27110 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20  ECTOR_MALLOC    
27120 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54   0.#define SQLIT
27130 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f  E_FAULTINJECTOR_
27140 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a  COUNT      1../*
27150 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
27160 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e  e to the code in
27170 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f   fault.c used fo
27180 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62  r identifying "b
27190 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63  enign".** malloc
271a0 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20   failures. This 
271b0 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20  is only present 
271c0 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  if SQLITE_OMIT_B
271d0 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69  UILTIN_TEST.** i
271e0 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a  s not defined..*
271f0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
27200 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
27210 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ST.  void sqlite
27220 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
27230 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64  oc(void);.  void
27240 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
27250 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23  nMalloc(void);.#
27260 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
27270 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
27280 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66  nMalloc().  #def
27290 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65  ine sqlite3EndBe
272a0 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e  nignMalloc().#en
272b0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  dif../*.** Allow
272c0 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73  ed return values
272d0 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e   from sqlite3Fin
272e0 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64  dInIndex().*/.#d
272f0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52  efine IN_INDEX_R
27300 4f 57 49 44 20 20 20 20 20 20 20 20 31 20 20 20  OWID        1   
27310 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 72 6f  /* Search the ro
27320 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65  wid of the table
27330 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
27340 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20 20  NDEX_EPH        
27350 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68 20    2   /* Search 
27360 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d 74  an ephemeral b-t
27370 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ree */.#define I
27380 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53  N_INDEX_INDEX_AS
27390 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69 73  C    3   /* Exis
273a0 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45 4e  ting index ASCEN
273b0 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DING */.#define 
273c0 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44  IN_INDEX_INDEX_D
273d0 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78 69  ESC   4   /* Exi
273e0 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53 43  sting index DESC
273f0 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e  ENDING */.#defin
27400 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20  e IN_INDEX_NOOP 
27410 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20 4e          5   /* N
27420 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62 6c  o table availabl
27430 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73 6f  e. Use compariso
27440 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ns */./*.** Allo
27450 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74 68  wed flags for th
27460 65 20 33 72 64 20 70 61 72 61 6d 65 74 65 72 20  e 3rd parameter 
27470 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  to sqlite3FindIn
27480 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66  Index()..*/.#def
27490 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  ine IN_INDEX_NOO
274a0 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31 20  P_OK     0x0001 
274b0 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e   /* OK to return
274c0 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a   IN_INDEX_NOOP *
274d0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
274e0 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20 30  EX_MEMBERSHIP  0
274f0 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65  x0002  /* IN ope
27500 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20 6d  rator used for m
27510 65 6d 62 65 72 73 68 69 70 20 74 65 73 74 20 2a  embership test *
27520 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
27530 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20 30  EX_LOOP        0
27540 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65  x0004  /* IN ope
27550 72 61 74 6f 72 20 75 73 65 64 20 61 73 20 61 20  rator used as a 
27560 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  loop */.int sqli
27570 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50  te3FindInIndex(P
27580 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
27590 75 33 32 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69 66  u32, int*);..#if
275a0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
275b0 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20  E_ATOMIC_WRITE. 
275c0 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
275d0 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  nalOpen(sqlite3_
275e0 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  vfs *, const cha
275f0 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c  r *, sqlite3_fil
27600 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  e *, int, int);.
27610 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
27620 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33  rnalSize(sqlite3
27630 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74 20 73  _vfs *);.  int s
27640 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65  qlite3JournalCre
27650 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  ate(sqlite3_file
27660 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74   *);.  int sqlit
27670 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28  e3JournalExists(
27680 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29  sqlite3_file *p)
27690 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
276a0 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  e sqlite3Journal
276b0 53 69 7a 65 28 70 56 66 73 29 20 28 28 70 56 66  Size(pVfs) ((pVf
276c0 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a 20 20  s)->szOsFile).  
276d0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a  #define sqlite3J
276e0 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 70 29 20  ournalExists(p) 
276f0 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73  1.#endif..void s
27700 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c  qlite3MemJournal
27710 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c  Open(sqlite3_fil
27720 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e *);.int sqlite
27730 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65 28  3MemJournalSize(
27740 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74  void);.int sqlit
27750 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73  e3IsMemJournal(s
27760 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
27770 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
27780 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 76  EXPR_DEPTH>0.  v
27790 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53  oid sqlite3ExprS
277a0 65 74 48 65 69 67 68 74 28 50 61 72 73 65 20 2a  etHeight(Parse *
277b0 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29  pParse, Expr *p)
277c0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53  ;.  int sqlite3S
277d0 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28  electExprHeight(
277e0 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74  Select *);.  int
277f0 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
27800 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20  kHeight(Parse*, 
27810 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  int);.#else.  #d
27820 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
27830 72 53 65 74 48 65 69 67 68 74 28 78 2c 79 29 0a  rSetHeight(x,y).
27840 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
27850 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68  3SelectExprHeigh
27860 74 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65  t(x) 0.  #define
27870 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
27880 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e  kHeight(x,y).#en
27890 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33  dif..u32 sqlite3
278a0 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75  Get4byte(const u
278b0 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
278c0 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75  3Put4byte(u8*, u
278d0 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  32);..#ifdef SQL
278e0 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43  ITE_ENABLE_UNLOC
278f0 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20  K_NOTIFY.  void 
27900 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
27910 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33  nBlocked(sqlite3
27920 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a   *, sqlite3 *);.
27930 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
27940 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64  nnectionUnlocked
27950 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
27960 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
27970 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71  nectionClosed(sq
27980 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73  lite3 *db);.#els
27990 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
279a0 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f  te3ConnectionBlo
279b0 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66  cked(x,y).  #def
279c0 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
279d0 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29  ctionUnlocked(x)
279e0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
279f0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73  e3ConnectionClos
27a00 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ed(x).#endif..#i
27a10 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
27a20 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  G.  void sqlite3
27a30 50 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45  ParserTrace(FILE
27a40 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64  *, char *);.#end
27a50 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65  if../*.** If the
27a60 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49   SQLITE_ENABLE I
27a70 4f 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68  OTRACE exists th
27a80 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  en the global va
27a90 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65  riable.** sqlite
27aa0 33 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f  3IoTrace is a po
27ab0 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74  inter to a print
27ac0 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75  f-like routine u
27ad0 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20  sed to.** print 
27ae0 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73  I/O tracing mess
27af0 61 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65 66  ages. .*/.#ifdef
27b00 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49   SQLITE_ENABLE_I
27b10 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20  OTRACE.# define 
27b20 49 4f 54 52 41 43 45 28 41 29 20 20 69 66 28 20  IOTRACE(A)  if( 
27b30 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29  sqlite3IoTrace )
27b40 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  { sqlite3IoTrace
27b50 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c   A; }.  void sql
27b60 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
27b70 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54  ql(Vdbe*);.SQLIT
27b80 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 2a  E_EXTERN void (*
27b90 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28  sqlite3IoTrace)(
27ba0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
27bb0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
27bc0 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65   IOTRACE(A).# de
27bd0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65  fine sqlite3Vdbe
27be0 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65  IOTraceSql(X).#e
27bf0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  ndif../*.** Thes
27c00 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61  e routines are a
27c10 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65  vailable for the
27c20 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69 6e   mem2.c debuggin
27c30 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  g memory allocat
27c40 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65  or.** only.  The
27c50 79 20 61 72 65 20 75 73 65 64 20 74 6f 20 76 65  y are used to ve
27c60 72 69 66 79 20 74 68 61 74 20 64 69 66 66 65 72  rify that differ
27c70 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20 6d  ent "types" of m
27c80 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  emory.** allocat
27c90 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72 6c  ions are properl
27ca0 79 20 74 72 61 63 6b 65 64 20 62 79 20 74 68 65  y tracked by the
27cb0 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73   system..**.** s
27cc0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
27cd0 74 54 79 70 65 28 29 20 73 65 74 73 20 74 68 65  tType() sets the
27ce0 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61 6c   "type" of an al
27cf0 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20  location to one 
27d00 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50  of.** the MEMTYP
27d10 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e  E_* macros defin
27d20 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74  ed below.  The t
27d30 79 70 65 20 6d 75 73 74 20 62 65 20 61 20 62 69  ype must be a bi
27d40 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20  tmask with.** a 
27d50 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e 0a  single bit set..
27d60 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  **.** sqlite3Mem
27d70 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20 72  debugHasType() r
27d80 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 61  eturns true if a
27d90 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73 20 69  ny of the bits i
27da0 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20  n its second.** 
27db0 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74  argument match t
27dc0 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74  he type set by t
27dd0 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69  he previous sqli
27de0 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
27df0 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33  pe()..** sqlite3
27e00 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
27e10 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f  ) is intended fo
27e20 72 20 75 73 65 20 69 6e 73 69 64 65 20 61 73 73  r use inside ass
27e30 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
27e40 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  ..**.** sqlite3M
27e50 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29 20  emdebugNoType() 
27e60 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20  returns true if 
27e70 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74 73  none of the bits
27e80 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a   in its second.*
27e90 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68  * argument match
27ea0 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79   the type set by
27eb0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71   the previous sq
27ec0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
27ed0 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65  Type()..**.** Pe
27ee0 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20 69  rhaps the most i
27ef0 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20 69  mportant point i
27f00 73 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65  s the difference
27f10 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50 45   between MEMTYPE
27f20 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d  _HEAP.** and MEM
27f30 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20  TYPE_LOOKASIDE. 
27f40 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f   If an allocatio
27f50 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f  n is MEMTYPE_LOO
27f60 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65 61  KASIDE, that mea
27f70 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20 68  ns.** it might h
27f80 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74  ave been allocat
27f90 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c  ed by lookaside,
27fa0 20 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f   except the allo
27fb0 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f  cation was.** to
27fc0 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61  o large or looka
27fd0 73 69 64 65 20 77 61 73 20 61 6c 72 65 61 64 79  side was already
27fe0 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d   full.  It is im
27ff0 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66  portant to verif
28000 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61  y.** that alloca
28010 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74  tions that might
28020 20 68 61 76 65 20 62 65 65 6e 20 73 61 74 69 73   have been satis
28030 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64  fied by lookasid
28040 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73  e are not.** pas
28050 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d  sed back to non-
28060 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29  lookaside free()
28070 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65   routines.  Asse
28080 72 74 73 20 73 75 63 68 20 61 73 20 74 68 65 0a  rts such as the.
28090 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65  ** example above
280a0 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20 74   are placed on t
280b0 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65  he non-lookaside
280c0 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73   free() routines
280d0 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68   to verify.** th
280e0 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a  is constraint. .
280f0 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69  **.** All of thi
28100 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61  s is no-op for a
28110 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c   production buil
28120 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65  d.  It only come
28130 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77  s into.** play w
28140 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d  hen the SQLITE_M
28150 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d  EMDEBUG compile-
28160 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75  time option is u
28170 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  sed..*/.#ifdef S
28180 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20  QLITE_MEMDEBUG. 
28190 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d   void sqlite3Mem
281a0 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f 69  debugSetType(voi
281b0 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71  d*,u8);.  int sq
281c0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
281d0 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
281e0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d    int sqlite3Mem
281f0 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64  debugNoType(void
28200 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64  *,u8);.#else.# d
28210 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
28220 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c 59  debugSetType(X,Y
28230 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23  )  /* no-op */.#
28240 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
28250 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 58  emdebugHasType(X
28260 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20  ,Y)  1.# define 
28270 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
28280 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23  oType(X,Y)   1.#
28290 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45  endif.#define ME
282a0 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20 20  MTYPE_HEAP      
282b0 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61   0x01  /* Genera
282c0 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f  l heap allocatio
282d0 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
282e0 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20  MTYPE_LOOKASIDE 
282f0 20 30 78 30 32 20 20 2f 2a 20 4d 69 67 68 74 20   0x02  /* Might 
28300 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73  have been lookas
28310 69 64 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 23 64  ide memory */.#d
28320 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43  efine MEMTYPE_SC
28330 52 41 54 43 48 20 20 20 20 30 78 30 34 20 20 2f  RATCH    0x04  /
28340 2a 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61  * Scratch alloca
28350 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
28360 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20   MEMTYPE_PCACHE 
28370 20 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67      0x08  /* Pag
28380 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69  e cache allocati
28390 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
283a0 45 4d 54 59 50 45 5f 44 42 20 20 20 20 20 20 20  EMTYPE_DB       
283b0 20 20 30 78 31 30 20 20 2f 2a 20 55 73 65 73 20    0x10  /* Uses 
283c0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c  sqlite3DbMalloc,
283d0 20 6e 6f 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c   not sqlite_mall
283e0 6f 63 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72  oc */../*.** Thr
283f0 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65  eading interface
28400 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
28410 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
28420 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  S>0.int sqlite3T
28430 68 72 65 61 64 43 72 65 61 74 65 28 53 51 4c 69  hreadCreate(SQLi
28440 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a  teThread**,void*
28450 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a  (*)(void*),void*
28460 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68  );.int sqlite3Th
28470 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54  readJoin(SQLiteT
28480 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b  hread*, void**);
28490 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20  .#endif..#endif 
284a0 2f 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  /* _SQLITEINT_H_
284b0 20 2a 2f 0a                                       */.