/ Hex Artifact Content
Login

Artifact 59b0796cd2fa201510ae9850b3b407fa9f997512:


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 5c 0a 20 20 20 20 26 26 20 28 64 65 66  G) \.    && (def
5c90: 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
5ca0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
5cb0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45 43  ITE_ENABLE_SELEC
5cc0: 54 54 52 41 43 45 29 29 0a 23 20 64 65 66 69 6e  TTRACE)).# defin
5cd0: 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  e SELECTTRACE_EN
5ce0: 41 42 4c 45 44 20 31 0a 23 65 6c 73 65 0a 23 20  ABLED 1.#else.# 
5cf0: 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41  define SELECTTRA
5d00: 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a 23 65 6e  CE_ENABLED 0.#en
5d10: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
5d20: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
5d30: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
5d40: 65 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  e is used to sto
5d50: 72 65 20 74 68 65 20 62 75 73 79 2d 68 61 6e 64  re the busy-hand
5d60: 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20  ler.** callback 
5d70: 66 6f 72 20 61 20 67 69 76 65 6e 20 73 71 6c 69  for a given sqli
5d80: 74 65 20 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a  te handle. .**.*
5d90: 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62 75 73  * The sqlite.bus
5da0: 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20  yHandler member 
5db0: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20 73 74  of the sqlite st
5dc0: 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  ruct contains th
5dd0: 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61  e busy.** callba
5de0: 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  ck for the datab
5df0: 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61 63 68  ase handle. Each
5e00: 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20 76 69   pager opened vi
5e10: 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20  a the sqlite.** 
5e20: 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73 65 64  handle is passed
5e30: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 73 71   a pointer to sq
5e40: 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72  lite.busyHandler
5e50: 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e 64 6c  . The busy-handl
5e60: 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69  er.** callback i
5e70: 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f  s currently invo
5e80: 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69  ked only from wi
5e90: 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f  thin pager.c..*/
5ea0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5eb0: 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75 73 79  BusyHandler Busy
5ec0: 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63 74 20  Handler;.struct 
5ed0: 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20  BusyHandler {.  
5ee0: 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76 6f 69  int (*xFunc)(voi
5ef0: 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68  d *,int);  /* Th
5f00: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
5f10: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 3b  */.  void *pArg;
5f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f30: 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f 20  /* First arg to 
5f40: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  busy callback */
5f50: 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20 20  .  int nBusy;   
5f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
5f70: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
5f80: 68 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c  h each busy call
5f90: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61   */.};../*.** Na
5fa0: 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72  me of the master
5fb0: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e   database table.
5fc0: 20 20 54 68 65 20 6d 61 73 74 65 72 20 64 61 74    The master dat
5fd0: 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69  abase table.** i
5fe0: 73 20 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c  s a special tabl
5ff0: 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  e that holds the
6000: 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69   names and attri
6010: 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20  butes of all.** 
6020: 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20  user tables and 
6030: 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66  indices..*/.#def
6040: 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20  ine MASTER_NAME 
6050: 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61        "sqlite_ma
6060: 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45  ster".#define TE
6070: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20  MP_MASTER_NAME  
6080: 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
6090: 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ter"../*.** The 
60a0: 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65  root-page of the
60b0: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
60c0: 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69   table..*/.#defi
60d0: 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20  ne MASTER_ROOT  
60e0: 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
60f0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63  e name of the sc
6100: 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23  hema table..*/.#
6110: 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41  define SCHEMA_TA
6120: 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f  BLE(x)  ((!OMIT_
6130: 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f  TEMPDB)&&(x==1)?
6140: 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45  TEMP_MASTER_NAME
6150: 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f  :MASTER_NAME)../
6160: 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e  *.** A convenien
6170: 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65  ce macro that re
6180: 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
6190: 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a   of elements in.
61a0: 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a  ** an array..*/.
61b0: 23 64 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a  #define ArraySiz
61c0: 65 28 58 29 20 20 20 20 28 28 69 6e 74 29 28 73  e(X)    ((int)(s
61d0: 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28  izeof(X)/sizeof(
61e0: 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44  X[0])))../*.** D
61f0: 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20  etermine if the 
6200: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f  argument is a po
6210: 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64  wer of two.*/.#d
6220: 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54  efine IsPowerOfT
6230: 77 6f 28 58 29 20 28 28 28 58 29 26 28 28 58 29  wo(X) (((X)&((X)
6240: 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  -1))==0)../*.** 
6250: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61  The following va
6260: 6c 75 65 20 61 73 20 61 20 64 65 73 74 72 75 63  lue as a destruc
6270: 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65  tor means to use
6280: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
6290: 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33  ..** The sqlite3
62a0: 44 62 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65  DbFree() routine
62b0: 20 72 65 71 75 69 72 65 73 20 74 77 6f 20 70 61   requires two pa
62c0: 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64  rameters instead
62d0: 20 6f 66 20 74 68 65 20 0a 2a 2a 20 6f 6e 65 20   of the .** one 
62e0: 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20 64  parameter that d
62f0: 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61  estructors norma
6300: 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77 65  lly want.  So we
6310: 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64 75   have to introdu
6320: 63 65 20 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69  ce .** this magi
6330: 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  c value that the
6340: 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68   code knows to h
6350: 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c  andle differentl
6360: 79 2e 20 20 41 6e 79 20 0a 2a 2a 20 70 6f 69 6e  y.  Any .** poin
6370: 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65  ter will work he
6380: 72 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74  re as long as it
6390: 20 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f   is distinct fro
63a0: 6d 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a  m SQLITE_STATIC.
63b0: 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52  ** and SQLITE_TR
63c0: 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66  ANSIENT..*/.#def
63d0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d  ine SQLITE_DYNAM
63e0: 49 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64  IC   ((sqlite3_d
63f0: 65 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73  estructor_type)s
6400: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
6410: 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51  )../*.** When SQ
6420: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73  LITE_OMIT_WSD is
6430: 20 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61   defined, it mea
6440: 6e 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67  ns that the targ
6450: 65 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73  et platform does
6460: 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  .** not support 
6470: 57 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20  Writable Static 
6480: 44 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20  Data (WSD) such 
6490: 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74  as global and st
64a0: 61 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a  atic variables..
64b0: 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73  ** All variables
64c0: 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20   must either be 
64d0: 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20  on the stack or 
64e0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
64f0: 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68  cated from.** th
6500: 65 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53  e heap.  When WS
6510: 44 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64  D is unsupported
6520: 2c 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64  , the variable d
6530: 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74  eclarations scat
6540: 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68  tered.** through
6550: 6f 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63  out the SQLite c
6560: 6f 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20  ode must become 
6570: 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61  constants instea
6580: 64 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57  d.  The SQLITE_W
6590: 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75  SD.** macro is u
65a0: 73 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72  sed for this pur
65b0: 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65  pose.  And inste
65c0: 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e  ad of referencin
65d0: 67 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a  g the variable.*
65e0: 2a 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75  * directly, we u
65f0: 73 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20  se its constant 
6600: 61 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b  as a key to look
6610: 75 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  up the run-time 
6620: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66  allocated.** buf
6630: 66 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72  fer that holds r
6640: 65 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54  eal variable.  T
6650: 68 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61  he constant is a
6660: 6c 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69  lso the initiali
6670: 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  zer.** for the r
6680: 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65  un-time allocate
6690: 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20  d buffer..**.** 
66a0: 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73  In the usual cas
66b0: 65 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73  e where WSD is s
66c0: 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51  upported, the SQ
66d0: 4c 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f  LITE_WSD and GLO
66e0: 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65  BAL.** macros be
66f0: 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20  come no-ops and 
6700: 68 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72  have zero perfor
6710: 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f  mance impact..*/
6720: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
6730: 4d 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  MIT_WSD.  #defin
6740: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e  e SQLITE_WSD con
6750: 73 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f  st.  #define GLO
6760: 42 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73  BAL(t,v) (*(t*)s
6770: 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28  qlite3_wsd_find(
6780: 28 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a  (void*)&(v), siz
6790: 65 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69  eof(v))).  #defi
67a0: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
67b0: 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74  Config GLOBAL(st
67c0: 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
67d0: 69 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  ig, sqlite3Confi
67e0: 67 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  g).  int sqlite3
67f0: 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c  _wsd_init(int N,
6800: 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20   int J);.  void 
6810: 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e  *sqlite3_wsd_fin
6820: 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c  d(void *K, int L
6830: 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
6840: 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 0a 20  ne SQLITE_WSD . 
6850: 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28   #define GLOBAL(
6860: 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65  t,v) v.  #define
6870: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
6880: 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66  nfig sqlite3Conf
6890: 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ig.#endif../*.**
68a0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
68b0: 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74  acros are used t
68c0: 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69  o suppress compi
68d0: 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64  ler warnings and
68e0: 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63   to.** make it c
68f0: 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65  lear to human re
6900: 61 64 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e  aders when a fun
6910: 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20  ction parameter 
6920: 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79 20  is deliberately 
6930: 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64 20  .** left unused 
6940: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
6950: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54  of a function. T
6960: 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70 70  his usually happ
6970: 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75  ens when.** a fu
6980: 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64  nction is called
6990: 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e 20   via a function 
69a0: 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78 61  pointer. For exa
69b0: 6d 70 6c 65 20 74 68 65 20 0a 2a 2a 20 69 6d 70  mple the .** imp
69c0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
69d0: 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20  n SQL aggregate 
69e0: 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61  step callback ma
69f0: 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a  y not use the.**
6a00: 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63   parameter indic
6a10: 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72  ating the number
6a20: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61   of arguments pa
6a30: 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72  ssed to the aggr
6a40: 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20  egate,.** if it 
6a50: 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20  knows that this 
6a60: 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65  is enforced else
6a70: 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  where..**.** Whe
6a80: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
6a90: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
6aa0: 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e  ed at all within
6ab0: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66   the body of a f
6ac0: 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69  unction,.** it i
6ad0: 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65  s generally name
6ae0: 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22  d "NotUsed" or "
6af0: 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b  NotUsed2" to mak
6b00: 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c  e things even cl
6b10: 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65  earer..** Howeve
6b20: 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20  r, these macros 
6b30: 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64  may also be used
6b40: 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72   to suppress war
6b50: 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f  nings related to
6b60: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74  .** parameters t
6b70: 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e  hat may or may n
6b80: 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e  ot be used depen
6b90: 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74  ding on compilat
6ba0: 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20  ion options..** 
6bb0: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73  For example thos
6bc0: 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c  e parameters onl
6bd0: 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74  y used in assert
6be0: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49  () statements. I
6bf0: 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73  n these.** cases
6c00: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
6c10: 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72  are named as per
6c20: 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65   the usual conve
6c30: 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ntions..*/.#defi
6c40: 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  ne UNUSED_PARAME
6c50: 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29  TER(x) (void)(x)
6c60: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
6c70: 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20  PARAMETER2(x,y) 
6c80: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
6c90: 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d  (x),UNUSED_PARAM
6ca0: 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46  ETER(y)../*.** F
6cb0: 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65  orward reference
6cc0: 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a  s to structures.
6cd0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
6ce0: 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66  t AggInfo AggInf
6cf0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
6d00: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75  t AuthContext Au
6d10: 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  thContext;.typed
6d20: 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e  ef struct Autoin
6d30: 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66  cInfo AutoincInf
6d40: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
6d50: 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b  t Bitvec Bitvec;
6d60: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6d70: 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b  CollSeq CollSeq;
6d80: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6d90: 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74  Column Column;.t
6da0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
6db0: 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72   Db;.typedef str
6dc0: 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d  uct Schema Schem
6dd0: 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  a;.typedef struc
6de0: 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70  t Expr Expr;.typ
6df0: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
6e00: 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74  List ExprList;.t
6e10: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
6e20: 70 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e 3b  prSpan ExprSpan;
6e30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6e40: 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64  FKey FKey;.typed
6e50: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
6e60: 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73  structor FuncDes
6e70: 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66  tructor;.typedef
6e80: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20   struct FuncDef 
6e90: 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66  FuncDef;.typedef
6ea0: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48   struct FuncDefH
6eb0: 61 73 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b  ash FuncDefHash;
6ec0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6ed0: 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74  IdList IdList;.t
6ee0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
6ef0: 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64  dex Index;.typed
6f00: 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 53  ef struct IndexS
6f10: 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c  ample IndexSampl
6f20: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
6f30: 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c  t KeyClass KeyCl
6f40: 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ass;.typedef str
6f50: 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49  uct KeyInfo KeyI
6f60: 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nfo;.typedef str
6f70: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f  uct Lookaside Lo
6f80: 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66  okaside;.typedef
6f90: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
6fa0: 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53  eSlot LookasideS
6fb0: 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  lot;.typedef str
6fc0: 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c  uct Module Modul
6fd0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
6fe0: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61  t NameContext Na
6ff0: 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  meContext;.typed
7000: 65 66 20 73 74 72 75 63 74 20 50 61 72 73 65 20  ef struct Parse 
7010: 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73  Parse;.typedef s
7020: 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75  truct PrintfArgu
7030: 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72 67 75  ments PrintfArgu
7040: 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66 20 73  ments;.typedef s
7050: 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77  truct RowSet Row
7060: 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Set;.typedef str
7070: 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61  uct Savepoint Sa
7080: 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66  vepoint;.typedef
7090: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 53   struct Select S
70a0: 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73  elect;.typedef s
70b0: 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72 65  truct SQLiteThre
70c0: 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64 3b  ad SQLiteThread;
70d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
70e0: 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63  SelectDest Selec
70f0: 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73  tDest;.typedef s
7100: 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53 72  truct SrcList Sr
7110: 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  cList;.typedef s
7120: 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 53  truct StrAccum S
7130: 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66  trAccum;.typedef
7140: 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61   struct Table Ta
7150: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
7160: 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61  uct TableLock Ta
7170: 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66  bleLock;.typedef
7180: 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f   struct Token To
7190: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
71a0: 75 63 74 20 54 72 69 67 67 65 72 20 54 72 69 67  uct Trigger Trig
71b0: 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ger;.typedef str
71c0: 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 54  uct TriggerPrg T
71d0: 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64  riggerPrg;.typed
71e0: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
71f0: 72 53 74 65 70 20 54 72 69 67 67 65 72 53 74 65  rStep TriggerSte
7200: 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  p;.typedef struc
7210: 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
7220: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b   UnpackedRecord;
7230: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7240: 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74  VTable VTable;.t
7250: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 74  ypedef struct Vt
7260: 61 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74  abCtx VtabCtx;.t
7270: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61  ypedef struct Wa
7280: 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70  lker Walker;.typ
7290: 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72  edef struct Wher
72a0: 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b  eInfo WhereInfo;
72b0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
72c0: 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a  With With;../*.*
72d0: 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67  * Defer sourcing
72e0: 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65   vdbe.h and btre
72f0: 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20  e.h until after 
7300: 74 68 65 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a  the "u8" and .**
7310: 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74   "BusyHandler" t
7320: 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20  ypedefs. vdbe.h 
7330: 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61 20  also requires a 
7340: 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75  few of the opaqu
7350: 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70  e.** pointer typ
7360: 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66  es (i.e. FuncDef
7370: 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e  ) defined above.
7380: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74  .*/.#include "bt
7390: 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ree.h".#include 
73a0: 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64  "vdbe.h".#includ
73b0: 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63  e "pager.h".#inc
73c0: 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a  lude "pcache.h".
73d0: 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22  .#include "os.h"
73e0: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78  .#include "mutex
73f0: 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  .h".../*.** Each
7400: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
7410: 6f 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79  o be accessed by
7420: 20 74 68 65 20 73 79 73 74 65 6d 20 69 73 20 61   the system is a
7430: 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
7440: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
7450: 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 72 65  tructure.  There
7460: 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77   are normally tw
7470: 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63  o of these struc
7480: 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tures.** in the 
7490: 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72  sqlite.aDb[] arr
74a0: 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74  ay.  aDb[0] is t
74b0: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
74c0: 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62   file and.** aDb
74d0: 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74 61 62  [1] is the datab
74e0: 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
74f0: 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20   hold temporary 
7500: 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f  tables.  Additio
7510: 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73  nal.** databases
7520: 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64   may be attached
7530: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b  ..*/.struct Db {
7540: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
7550: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
7560: 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65  of this database
7570: 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
7580: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
7590: 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75  e B*Tree structu
75a0: 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61  re for this data
75b0: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
75c0: 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20  8 safety_level; 
75d0: 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65      /* How aggre
75e0: 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67  ssive at syncing
75f0: 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f   data to disk */
7600: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
7610: 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ma;     /* Point
7620: 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73  er to database s
7630: 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20  chema (possibly 
7640: 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f  shared) */.};../
7650: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
7660: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
7670: 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72  g structure stor
7680: 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63  es a database sc
7690: 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74  hema..**.** Most
76a0: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20   Schema objects 
76b0: 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  are associated w
76c0: 69 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68  ith a Btree.  Th
76d0: 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a  e exception is.*
76e0: 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72  * the Schema for
76f0: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
7700: 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b  es (sqlite3.aDb[
7710: 31 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65  1]) which is fre
7720: 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49  e-standing..** I
7730: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
7740: 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63  ode, a single Sc
7750: 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20  hema object can 
7760: 62 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c  be shared by mul
7770: 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20  tiple.** Btrees 
7780: 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
7790: 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e  e same underlyin
77a0: 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63  g BtShared objec
77b0: 74 2e 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61  t..** .** Schema
77c0: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75 74   objects are aut
77d0: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c  omatically deall
77e0: 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68 65 20  ocated when the 
77f0: 6c 61 73 74 20 42 74 72 65 65 20 74 68 61 74 0a  last Btree that.
7800: 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74 68  ** references th
7810: 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e  em is destroyed.
7820: 20 20 20 54 68 65 20 54 45 4d 50 20 53 63 68 65     The TEMP Sche
7830: 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66  ma is manually f
7840: 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  reed by.** sqlit
7850: 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a  e3_close()..*.**
7860: 20 41 20 74 68 72 65 61 64 20 6d 75 73 74 20 62   A thread must b
7870: 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65  e holding a mute
7880: 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70  x on the corresp
7890: 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20  onding Btree in 
78a0: 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65  order.** to acce
78b0: 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e  ss Schema conten
78c0: 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73  t.  This implies
78d0: 20 74 68 61 74 20 74 68 65 20 74 68 72 65 61 64   that the thread
78e0: 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a   must also be.**
78f0: 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78   holding a mutex
7900: 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20   on the sqlite3 
7910: 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74  connection point
7920: 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65  er that owns the
7930: 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61   Btree..** For a
7940: 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e   TEMP Schema, on
7950: 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ly the connectio
7960: 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71 75 69  n mutex is requi
7970: 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  red..*/.struct S
7980: 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63  chema {.  int sc
7990: 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f  hema_cookie;   /
79a0: 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d  * Database schem
79b0: 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  a version number
79c0: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
79d0: 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74  /.  int iGenerat
79e0: 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65  ion;     /* Gene
79f0: 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20  ration counter. 
7a00: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
7a10: 68 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f  h each change */
7a20: 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b  .  Hash tblHash;
7a30: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74          /* All t
7a40: 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79  ables indexed by
7a50: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
7a60: 69 64 78 48 61 73 68 3b 20 20 20 20 20 20 20 20  idxHash;        
7a70: 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69  /* All (named) i
7a80: 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64 20 62  ndices indexed b
7a90: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
7aa0: 20 74 72 69 67 48 61 73 68 3b 20 20 20 20 20 20   trigHash;      
7ab0: 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73   /* All triggers
7ac0: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
7ad0: 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48   */.  Hash fkeyH
7ae0: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
7af0: 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62  l foreign keys b
7b00: 79 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62  y referenced tab
7b10: 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62  le name */.  Tab
7b20: 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20  le *pSeqTab;    
7b30: 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f    /* The sqlite_
7b40: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75  sequence table u
7b50: 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45  sed by AUTOINCRE
7b60: 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c  MENT */.  u8 fil
7b70: 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f  e_format;      /
7b80: 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  * Schema format 
7b90: 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73  version for this
7ba0: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e   file */.  u8 en
7bb0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
7bc0: 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
7bd0: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 64 61   used by this da
7be0: 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20  tabase */.  u16 
7bf0: 73 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20  schemaFlags;    
7c00: 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69   /* Flags associ
7c10: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 73  ated with this s
7c20: 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63  chema */.  int c
7c30: 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20  ache_size;      
7c40: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
7c50: 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65  es to use in the
7c60: 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   cache */.};../*
7c70: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
7c80: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
7c90: 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
7ca0: 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20  ear bits in the 
7cb0: 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e  .** Db.pSchema->
7cc0: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
7cd0: 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f  #define DbHasPro
7ce0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
7cf0: 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70   (((D)->aDb[I].p
7d00: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
7d10: 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23  ags&(P))==(P)).#
7d20: 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50  define DbHasAnyP
7d30: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
7d40: 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53  (((D)->aDb[I].pS
7d50: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
7d60: 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
7d70: 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74  ine DbSetPropert
7d80: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29  y(D,I,P)     (D)
7d90: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
7da0: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28  ->schemaFlags|=(
7db0: 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65  P).#define DbCle
7dc0: 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  arProperty(D,I,P
7dd0: 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e  )   (D)->aDb[I].
7de0: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
7df0: 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a  lags&=~(P)../*.*
7e00: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
7e10: 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68   for the DB.pSch
7e20: 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64  ema->flags field
7e30: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53  ..**.** The DB_S
7e40: 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67  chemaLoaded flag
7e50: 20 69 73 20 73 65 74 20 61 66 74 65 72 20 74 68   is set after th
7e60: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
7e70: 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65  a has been.** re
7e80: 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c  ad into internal
7e90: 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a   hash tables..**
7ea0: 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69  .** DB_UnresetVi
7eb0: 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f  ews means that o
7ec0: 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73  ne or more views
7ed0: 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d   have column nam
7ee0: 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20  es that.** have 
7ef0: 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e  been filled out.
7f00: 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20    If the schema 
7f10: 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63  changes, these c
7f20: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68  olumn names migh
7f30: 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64  t.** changes and
7f40: 20 73 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c   so the view wil
7f50: 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73  l need to be res
7f60: 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  et..*/.#define D
7f70: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20  B_SchemaLoaded  
7f80: 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65    0x0001  /* The
7f90: 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e   schema has been
7fa0: 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69   loaded */.#defi
7fb0: 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65  ne DB_UnresetVie
7fc0: 77 73 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a  ws    0x0002  /*
7fd0: 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65   Some views have
7fe0: 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20   defined column 
7ff0: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
8000: 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20   DB_Empty       
8010: 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54      0x0004  /* T
8020: 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79  he file is empty
8030: 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73   (length 0 bytes
8040: 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ) */../*.** The 
8050: 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72  number of differ
8060: 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69  ent kinds of thi
8070: 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ngs that can be 
8080: 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67  limited.** using
8090: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d   the sqlite3_lim
80a0: 69 74 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a  it() interface..
80b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
80c0: 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54  E_N_LIMIT (SQLIT
80d0: 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54  E_LIMIT_WORKER_T
80e0: 48 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a  HREADS+1)../*.**
80f0: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   Lookaside mallo
8100: 63 20 69 73 20 61 20 73 65 74 20 6f 66 20 66 69  c is a set of fi
8110: 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73  xed-size buffers
8120: 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65   that can be use
8130: 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20  d.** to satisfy 
8140: 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20  small transient 
8150: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
8160: 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f  n requests for o
8170: 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69  bjects.** associ
8180: 61 74 65 64 20 77 69 74 68 20 61 20 70 61 72 74  ated with a part
8190: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
81a0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65  connection.  The
81b0: 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61   use of.** looka
81c0: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76  side malloc prov
81d0: 69 64 65 73 20 61 20 73 69 67 6e 69 66 69 63 61  ides a significa
81e0: 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65  nt performance e
81f0: 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61  nhancement.** (a
8200: 70 70 72 6f 78 20 31 30 25 29 20 62 79 20 61 76  pprox 10%) by av
8210: 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20  oiding numerous 
8220: 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75  malloc/free requ
8230: 65 73 74 73 20 77 68 69 6c 65 20 70 61 72 73 69  ests while parsi
8240: 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d  ng.** SQL statem
8250: 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ents..**.** The 
8260: 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74  Lookaside struct
8270: 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67  ure holds config
8280: 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  uration informat
8290: 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a  ion about the.**
82a0: 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   lookaside mallo
82b0: 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61  c subsystem.  Ea
82c0: 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d  ch available mem
82d0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  ory allocation i
82e0: 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69  n.** the lookasi
82f0: 64 65 20 73 75 62 73 79 73 74 65 6d 20 69 73 20  de subsystem is 
8300: 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b  stored on a link
8310: 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61  ed list of Looka
8320: 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65  sideSlot.** obje
8330: 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61  cts..**.** Looka
8340: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
8350: 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65   are only allowe
8360: 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68  d for objects th
8370: 61 74 20 61 72 65 20 61 73 73 6f 63 69 61 74 65  at are associate
8380: 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74  d.** with a part
8390: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
83a0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e  connection.  Hen
83b0: 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  ce, schema infor
83c0: 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a  mation cannot.**
83d0: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f   be stored in lo
83e0: 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73 65 20  okaside because 
83f0: 69 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20  in shared cache 
8400: 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61 20  mode the schema 
8410: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69  information.** i
8420: 73 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74  s shared by mult
8430: 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f  iple database co
8440: 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72  nnections.  Ther
8450: 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72  efore, while par
8460: 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69  sing.** schema i
8470: 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20  nformation, the 
8480: 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c  Lookaside.bEnabl
8490: 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  ed flag is clear
84a0: 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f  ed so that.** lo
84b0: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
84c0: 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64  ons are not used
84d0: 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68   to construct th
84e0: 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  e schema objects
84f0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b  ..*/.struct Look
8500: 61 73 69 64 65 20 7b 0a 20 20 75 31 36 20 73 7a  aside {.  u16 sz
8510: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8520: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
8530: 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65  h buffer in byte
8540: 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e 61 62 6c  s */.  u8 bEnabl
8550: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ed;            /
8560: 2a 20 46 61 6c 73 65 20 74 6f 20 64 69 73 61 62  * False to disab
8570: 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73 69 64 65  le new lookaside
8580: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
8590: 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20    u8 bMalloced; 
85a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
85b0: 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61  e if pStart obta
85c0: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
85d0: 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20  3_malloc() */.  
85e0: 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20 20 20  int nOut;       
85f0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
8600: 72 20 6f 66 20 62 75 66 66 65 72 73 20 63 75 72  r of buffers cur
8610: 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64 20 6f  rently checked o
8620: 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f 75  ut */.  int mxOu
8630: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
8640: 2f 2a 20 48 69 67 68 77 61 74 65 72 20 6d 61 72  /* Highwater mar
8650: 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20 20  k for nOut */.  
8660: 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20  int anStat[3];  
8670: 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 68 69          /* 0: hi
8680: 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69 73  ts.  1: size mis
8690: 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69  ses.  2: full mi
86a0: 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73  sses */.  Lookas
86b0: 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20  ideSlot *pFree; 
86c0: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61    /* List of ava
86d0: 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a  ilable buffers *
86e0: 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74  /.  void *pStart
86f0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
8700: 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61  irst byte of ava
8710: 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70  ilable memory sp
8720: 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
8730: 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
8740: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70   /* First byte p
8750: 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c  ast end of avail
8760: 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b  able space */.};
8770: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
8780: 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73  eSlot {.  Lookas
8790: 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20  ideSlot *pNext; 
87a0: 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65     /* Next buffe
87b0: 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66  r in the list of
87c0: 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f   free buffers */
87d0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73  .};../*.** A has
87e0: 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63  h table for func
87f0: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73  tion definitions
8800: 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63  ..**.** Hash eac
8810: 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  h FuncDef struct
8820: 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20  ure into one of 
8830: 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68 2e  the FuncDefHash.
8840: 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f  a[] slots..** Co
8850: 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20  llisions are on 
8860: 74 68 65 20 46 75 6e 63 44 65 66 2e 70 48 61 73  the FuncDef.pHas
8870: 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75  h chain..*/.stru
8880: 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 7b  ct FuncDefHash {
8890: 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b 32 33  .  FuncDef *a[23
88a0: 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68  ];       /* Hash
88b0: 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74   table for funct
88c0: 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64  ions */.};..#ifd
88d0: 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  ef SQLITE_USER_A
88e0: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a  UTHENTICATION./*
88f0: 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** Information 
8900: 68 65 6c 64 20 69 6e 20 74 68 65 20 22 73 71 6c  held in the "sql
8910: 69 74 65 33 22 20 64 61 74 61 62 61 73 65 20 63  ite3" database c
8920: 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74  onnection object
8930: 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20   and used.** to 
8940: 6d 61 6e 61 67 65 20 75 73 65 72 20 61 75 74 68  manage user auth
8950: 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74  entication..*/.t
8960: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 73 71  ypedef struct sq
8970: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 73  lite3_userauth s
8980: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 3b  qlite3_userauth;
8990: 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f  .struct sqlite3_
89a0: 75 73 65 72 61 75 74 68 20 7b 0a 20 20 75 38 20  userauth {.  u8 
89b0: 61 75 74 68 4c 65 76 65 6c 3b 20 20 20 20 20 20  authLevel;      
89c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
89d0: 72 72 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61  rrent authentica
89e0: 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  tion level */.  
89f0: 69 6e 74 20 6e 41 75 74 68 50 57 3b 20 20 20 20  int nAuthPW;    
8a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8a10: 20 53 69 7a 65 20 6f 66 20 74 68 65 20 7a 41 75   Size of the zAu
8a20: 74 68 50 57 20 69 6e 20 62 79 74 65 73 20 2a 2f  thPW in bytes */
8a30: 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68 50 57  .  char *zAuthPW
8a40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8a50: 20 2f 2a 20 50 61 73 73 77 6f 72 64 20 75 73 65   /* Password use
8a60: 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74  d to authenticat
8a70: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75  e */.  char *zAu
8a80: 74 68 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  thUser;         
8a90: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d       /* User nam
8aa0: 65 20 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e  e used to authen
8ab0: 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ticate */.};../*
8ac0: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
8ad0: 66 6f 72 20 73 71 6c 69 74 65 33 5f 75 73 65 72  for sqlite3_user
8ae0: 61 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a  auth.authLevel *
8af0: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
8b00: 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20 20  Unknown     0   
8b10: 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74    /* Authenticat
8b20: 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68 65 63  ion not yet chec
8b30: 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ked */.#define U
8b40: 41 55 54 48 5f 46 61 69 6c 20 20 20 20 20 20 20  AUTH_Fail       
8b50: 20 31 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61   1     /* User a
8b60: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61  uthentication fa
8b70: 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  iled */.#define 
8b80: 55 41 55 54 48 5f 55 73 65 72 20 20 20 20 20 20  UAUTH_User      
8b90: 20 20 32 20 20 20 20 20 2f 2a 20 41 75 74 68 65    2     /* Authe
8ba0: 6e 74 69 63 61 74 65 64 20 61 73 20 61 20 6e 6f  nticated as a no
8bb0: 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65  rmal user */.#de
8bc0: 66 69 6e 65 20 55 41 55 54 48 5f 41 64 6d 69 6e  fine UAUTH_Admin
8bd0: 20 20 20 20 20 20 20 33 20 20 20 20 20 2f 2a 20         3     /* 
8be0: 41 75 74 68 65 6e 74 69 63 61 74 65 64 20 61 73  Authenticated as
8bf0: 20 61 6e 20 61 64 6d 69 6e 69 73 74 72 61 74 6f   an administrato
8c00: 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f  r */../* Functio
8c10: 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20  ns used only by 
8c20: 75 73 65 72 20 61 75 74 68 6f 72 69 7a 61 74 69  user authorizati
8c30: 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20  on logic */.int 
8c40: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 54  sqlite3UserAuthT
8c50: 61 62 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  able(const char*
8c60: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73  );.int sqlite3Us
8c70: 65 72 41 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e  erAuthCheckLogin
8c80: 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
8c90: 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64  char*,u8*);.void
8ca0: 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68   sqlite3UserAuth
8cb0: 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a  Init(sqlite3*);.
8cc0: 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 79 70  void sqlite3Cryp
8cd0: 74 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f  tFunc(sqlite3_co
8ce0: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
8cf0: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65  e3_value**);..#e
8d00: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55  ndif /* SQLITE_U
8d10: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
8d20: 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70  ON */../*.** typ
8d30: 65 64 65 66 20 66 6f 72 20 74 68 65 20 61 75 74  edef for the aut
8d40: 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62  horization callb
8d50: 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f  ack function..*/
8d60: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
8d70: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
8d80: 4f 4e 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74  ON.  typedef int
8d90: 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68   (*sqlite3_xauth
8da0: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
8db0: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
8dc0: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
8dd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8df0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
8e00: 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65  st char*);.#else
8e10: 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28  .  typedef int (
8e20: 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28  *sqlite3_xauth)(
8e30: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
8e40: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
8e50: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20  *,const char*,. 
8e60: 20 20 20 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 63 6f                co
8e80: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  nst char*);.#end
8e90: 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  if.../*.** Each 
8ea0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
8eb0: 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ion is an instan
8ec0: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
8ed0: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
8ee0: 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  /.struct sqlite3
8ef0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73   {.  sqlite3_vfs
8f00: 20 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20 20   *pVfs;         
8f10: 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61     /* OS Interfa
8f20: 63 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56  ce */.  struct V
8f30: 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20  dbe *pVdbe;     
8f40: 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
8f50: 20 61 63 74 69 76 65 20 76 69 72 74 75 61 6c 20   active virtual 
8f60: 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f  machines */.  Co
8f70: 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c  llSeq *pDfltColl
8f80: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
8f90: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
8fa0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42  ting sequence (B
8fb0: 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69  INARY) */.  sqli
8fc0: 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78  te3_mutex *mutex
8fd0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  ;         /* Con
8fe0: 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f  nection mutex */
8ff0: 0a 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20  .  Db *aDb;     
9000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9010: 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73   /* All backends
9020: 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20   */.  int nDb;  
9030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9040: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
9050: 20 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e   backends curren
9060: 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20  tly in use */.  
9070: 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20  int flags;      
9080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9090: 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66   Miscellaneous f
90a0: 6c 61 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20  lags. See below 
90b0: 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77  */.  i64 lastRow
90c0: 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  id;             
90d0: 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d     /* ROWID of m
90e0: 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72  ost recent inser
90f0: 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
9100: 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20  .  i64 szMmap;  
9110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9120: 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70   /* Default mmap
9130: 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f  _size setting */
9140: 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  .  unsigned int 
9150: 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20  openFlags;      
9160: 20 2f 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64   /* Flags passed
9170: 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e   to sqlite3_vfs.
9180: 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74  xOpen() */.  int
9190: 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20   errCode;       
91a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
91b0: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
91c0: 63 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20  code (SQLITE_*) 
91d0: 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b  */.  int errMask
91e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
91f0: 20 20 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63     /* & result c
9200: 6f 64 65 73 20 77 69 74 68 20 74 68 69 73 20 62  odes with this b
9210: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20  efore returning 
9220: 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c  */.  u16 dbOptFl
9230: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
9240: 20 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65     /* Flags to e
9250: 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70  nable/disable op
9260: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20  timizations */. 
9270: 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20   u8 autoCommit; 
9280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9290: 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  * The auto-commi
92a0: 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20  t flag. */.  u8 
92b0: 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20  temp_store;     
92c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a             /* 1:
92d0: 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20   file 2: memory 
92e0: 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  0: default */.  
92f0: 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b  u8 mallocFailed;
9300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9310: 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65   True if we have
9320: 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66   seen a malloc f
9330: 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64  ailure */.  u8 d
9340: 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20  fltLockMode;    
9350: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
9360: 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64  ault locking-mod
9370: 65 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64  e for attached d
9380: 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63  bs */.  signed c
9390: 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b  har nextAutovac;
93a0: 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63        /* Autovac
93b0: 20 73 65 74 74 69 6e 67 20 61 66 74 65 72 20 56   setting after V
93c0: 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a  ACUUM if >=0 */.
93d0: 20 20 75 38 20 73 75 70 70 72 65 73 73 45 72 72    u8 suppressErr
93e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
93f0: 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20  /* Do not issue 
9400: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69  error messages i
9410: 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76  f true */.  u8 v
9420: 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20  tabOnConflict;  
9430: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
9440: 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72  ue to return for
9450: 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66   s3_vtab_on_conf
9460: 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69  lict() */.  u8 i
9470: 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
9480: 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75  point;    /* Tru
9490: 65 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f  e if the outermo
94a0: 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20  st savepoint is 
94b0: 61 20 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65  a TS */.  int ne
94c0: 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20  xtPagesize;     
94d0: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73          /* Pages
94e0: 69 7a 65 20 61 66 74 65 72 20 56 41 43 55 55 4d  ize after VACUUM
94f0: 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20   if >0 */.  u32 
9500: 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20 20 20  magic;          
9510: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67            /* Mag
9520: 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65  ic number for de
9530: 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73  tect library mis
9540: 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68  use */.  int nCh
9550: 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  ange;           
9560: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
9570: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
9580: 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  te3_changes() */
9590: 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61  .  int nTotalCha
95a0: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
95b0: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
95c0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f  ed by sqlite3_to
95d0: 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  tal_changes() */
95e0: 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51  .  int aLimit[SQ
95f0: 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20  LITE_N_LIMIT];  
9600: 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20   /* Limits */.  
9610: 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d  int nMaxSorterMm
9620: 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ap;           /*
9630: 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66   Maximum size of
9640: 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20   regions mapped 
9650: 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73  by sorter */.  s
9660: 74 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69  truct sqlite3Ini
9670: 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20  tInfo {      /* 
9680: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  Information used
9690: 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
96a0: 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  zation */.    in
96b0: 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20  t newTnum;      
96c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
96d0: 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62  tpage of table b
96e0: 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
96f0: 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20   */.    u8 iDb; 
9700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9710: 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20      /* Which db 
9720: 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e  file is being in
9730: 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20  itialized */.   
9740: 20 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20   u8 busy;       
9750: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9760: 54 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c  TRUE if currentl
9770: 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a  y initializing *
9780: 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54  /.    u8 orphanT
9790: 72 69 67 67 65 72 3b 20 20 20 20 20 20 20 20 20  rigger;         
97a0: 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d    /* Last statem
97b0: 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20  ent is orphaned 
97c0: 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a  TEMP trigger */.
97d0: 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20    } init;.  int 
97e0: 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20 20  nVdbeActive;    
97f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
9800: 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72  ber of VDBEs cur
9810: 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a  rently running *
9820: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61  /.  int nVdbeRea
9830: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
9840: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
9850: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
9860: 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a   read or write *
9870: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69  /.  int nVdbeWri
9880: 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
9890: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
98a0: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
98b0: 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
98c0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78  */.  int nVdbeEx
98d0: 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
98e0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
98f0: 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
9900: 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20  VdbeExec() */.  
9910: 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20  int nExtension; 
9920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9930: 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65   Number of loade
9940: 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a  d extensions */.
9950: 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73    void **aExtens
9960: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ion;            
9970: 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72  /* Array of shar
9980: 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c  ed library handl
9990: 65 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  es */.  void (*x
99a0: 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  Trace)(void*,con
99b0: 73 74 20 63 68 61 72 2a 29 3b 20 20 20 20 20 20  st char*);      
99c0: 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74    /* Trace funct
99d0: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
99e0: 54 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20  TraceArg;       
99f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a00: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
9a10: 6f 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63  o the trace func
9a20: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tion */.  void (
9a30: 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a  *xProfile)(void*
9a40: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34  ,const char*,u64
9a50: 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67  );  /* Profiling
9a60: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
9a70: 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67  oid *pProfileArg
9a80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9a90: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
9aa0: 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20  ment to profile 
9ab0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
9ac0: 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20  id *pCommitArg; 
9ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ae0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
9af0: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29  CommitCallback()
9b00: 20 2a 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a 78   */   .  int (*x
9b10: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28  CommitCallback)(
9b20: 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e  void*);    /* In
9b30: 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63  voked at every c
9b40: 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64  ommit. */.  void
9b50: 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20   *pRollbackArg; 
9b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9b70: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f   Argument to xRo
9b80: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29  llbackCallback()
9b90: 20 2a 2f 20 20 20 0a 20 20 76 6f 69 64 20 28 2a   */   .  void (*
9ba0: 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63  xRollbackCallbac
9bb0: 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e  k)(void*); /* In
9bc0: 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63  voked at every c
9bd0: 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64  ommit. */.  void
9be0: 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20   *pUpdateArg;.  
9bf0: 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61  void (*xUpdateCa
9c00: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e  llback)(void*,in
9c10: 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  t, const char*,c
9c20: 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74  onst char*,sqlit
9c30: 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 6e 64 65  e_int64);.#ifnde
9c40: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
9c50: 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61  L.  int (*xWalCa
9c60: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20  llback)(void *, 
9c70: 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
9c80: 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20   char *, int);. 
9c90: 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a   void *pWalArg;.
9ca0: 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78  #endif.  void(*x
9cb0: 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64  CollNeeded)(void
9cc0: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65  *,sqlite3*,int e
9cd0: 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68  TextRep,const ch
9ce0: 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43  ar*);.  void(*xC
9cf0: 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69  ollNeeded16)(voi
9d00: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
9d10: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76  eTextRep,const v
9d20: 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70  oid*);.  void *p
9d30: 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20  CollNeededArg;. 
9d40: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
9d50: 70 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f  pErr;          /
9d60: 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  * Most recent er
9d70: 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20  ror message */. 
9d80: 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c   union {.    vol
9d90: 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65  atile int isInte
9da0: 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65  rrupted; /* True
9db0: 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65   if sqlite3_inte
9dc0: 72 72 75 70 74 20 68 61 73 20 62 65 65 6e 20 63  rrupt has been c
9dd0: 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75  alled */.    dou
9de0: 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20  ble notUsed1;   
9df0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
9e00: 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20  er */.  } u1;.  
9e10: 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73  Lookaside lookas
9e20: 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ide;          /*
9e30: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   Lookaside mallo
9e40: 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  c configuration 
9e50: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
9e60: 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
9e70: 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78  TION.  sqlite3_x
9e80: 61 75 74 68 20 78 41 75 74 68 3b 20 20 20 20 20  auth xAuth;     
9e90: 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61       /* Access a
9ea0: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e  uthorization fun
9eb0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
9ec0: 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20 20 20  *pAuthArg;      
9ed0: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
9ee0: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
9ef0: 61 63 63 65 73 73 20 61 75 74 68 20 66 75 6e 63  access auth func
9f00: 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tion */.#endif.#
9f10: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
9f20: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
9f30: 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72  BACK.  int (*xPr
9f40: 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b  ogress)(void *);
9f50: 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67       /* The prog
9f60: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
9f70: 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65  .  void *pProgre
9f80: 73 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ssArg;          
9f90: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
9fa0: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
9fb0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67  lback */.  unsig
9fc0: 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4f 70 73  ned nProgressOps
9fd0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
9fe0: 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f  er of opcodes fo
9ff0: 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  r progress callb
a000: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ack */.#endif.#i
a010: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
a020: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
a030: 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20   int nVTrans;   
a040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a050: 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65  * Allocated size
a060: 20 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20   of aVTrans */. 
a070: 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20   Hash aModule;  
a080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a090: 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73  * populated by s
a0a0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f  qlite3_create_mo
a0b0: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62  dule() */.  Vtab
a0c0: 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20  Ctx *pVtabCtx;  
a0d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
a0e0: 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20  text for active 
a0f0: 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65  vtab connect/cre
a100: 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ate */.  VTable 
a110: 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20  **aVTrans;      
a120: 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61         /* Virtua
a130: 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70  l tables with op
a140: 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  en transactions 
a150: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69  */.  VTable *pDi
a160: 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20  sconnect;    /* 
a170: 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65  Disconnect these
a180: 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33   in next sqlite3
a190: 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65  _prepare() */.#e
a1a0: 6e 64 69 66 0a 20 20 46 75 6e 63 44 65 66 48 61  ndif.  FuncDefHa
a1b0: 73 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20  sh aFunc;       
a1c0: 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62       /* Hash tab
a1d0: 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e  le of connection
a1e0: 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20   functions */.  
a1f0: 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20  Hash aCollSeq;  
a200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a210: 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73   All collating s
a220: 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75  equences */.  Bu
a230: 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61  syHandler busyHa
a240: 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42  ndler;      /* B
a250: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
a260: 20 20 44 62 20 61 44 62 53 74 61 74 69 63 5b 32    Db aDbStatic[2
a270: 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ];              
a280: 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63 65 20  /* Static space 
a290: 66 6f 72 20 74 68 65 20 32 20 64 65 66 61 75 6c  for the 2 defaul
a2a0: 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  t backends */.  
a2b0: 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65  Savepoint *pSave
a2c0: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a  point;        /*
a2d0: 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20   List of active 
a2e0: 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20  savepoints */.  
a2f0: 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b  int busyTimeout;
a300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a310: 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69   Busy handler ti
a320: 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a  meout, in msec *
a330: 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69  /.  int nSavepoi
a340: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
a350: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
a360: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
a370: 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69  avepoints */.  i
a380: 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20  nt nStatement;  
a390: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a3a0: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
a3b0: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
a3c0: 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36  actions  */.  i6
a3d0: 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  4 nDeferredCons;
a3e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
a3f0: 65 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  et deferred cons
a400: 74 72 61 69 6e 74 73 20 74 68 69 73 20 74 72 61  traints this tra
a410: 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69  nsaction. */.  i
a420: 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  64 nDeferredImmC
a430: 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ons;         /* 
a440: 4e 65 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d  Net deferred imm
a450: 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e  ediate constrain
a460: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42  ts */.  int *pnB
a470: 79 74 65 73 46 72 65 65 64 3b 20 20 20 20 20 20  ytesFreed;      
a480: 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20        /* If not 
a490: 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20  NULL, increment 
a4a0: 74 68 69 73 20 69 6e 20 44 62 46 72 65 65 28 29  this in DbFree()
a4b0: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
a4c0: 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f  E_ENABLE_UNLOCK_
a4d0: 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20  NOTIFY.  /* The 
a4e0: 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62  following variab
a4f0: 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74  les are all prot
a500: 65 63 74 65 64 20 62 79 20 74 68 65 20 53 54 41  ected by the STA
a510: 54 49 43 5f 4d 41 53 54 45 52 20 0a 20 20 2a 2a  TIC_MASTER .  **
a520: 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73   mutex, not by s
a530: 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68  qlite3.mutex. Th
a540: 65 79 20 61 72 65 20 75 73 65 64 20 62 79 20 63  ey are used by c
a550: 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e  ode in notify.c.
a560: 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e   .  **.  ** When
a570: 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63   X.pUnlockConnec
a580: 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65  tion==Y, that me
a590: 61 6e 73 20 74 68 61 74 20 58 20 69 73 20 77 61  ans that X is wa
a5a0: 69 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20  iting for Y to. 
a5b0: 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68   ** unlock so th
a5c0: 61 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65  at it can procee
a5d0: 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65  d..  **.  ** Whe
a5e0: 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e  n X.pBlockingCon
a5f0: 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74  nection==Y, that
a600: 20 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65   means that some
a610: 74 68 69 6e 67 20 74 68 61 74 20 58 20 74 72 69  thing that X tri
a620: 65 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f  ed.  ** tried to
a630: 20 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69   do recently fai
a640: 6c 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49  led with an SQLI
a650: 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20  TE_LOCKED error 
a660: 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a  due to locks.  *
a670: 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a  * held by Y..  *
a680: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c  /.  sqlite3 *pBl
a690: 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e  ockingConnection
a6a0: 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20  ; /* Connection 
a6b0: 74 68 61 74 20 63 61 75 73 65 64 20 53 51 4c 49  that caused SQLI
a6c0: 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73  TE_LOCKED */.  s
a6d0: 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43  qlite3 *pUnlockC
a6e0: 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20  onnection;      
a6f0: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
a700: 6f 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20  on to watch for 
a710: 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  unlock */.  void
a720: 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20   *pUnlockArg;   
a730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a740: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
a750: 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a   xUnlockNotify *
a760: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f  /.  void (*xUnlo
a770: 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a  ckNotify)(void *
a780: 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c  *, int);  /* Unl
a790: 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62  ock notify callb
a7a0: 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ack */.  sqlite3
a7b0: 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20   *pNextBlocked; 
a7c0: 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69         /* Next i
a7d0: 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c  n list of all bl
a7e0: 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  ocked connection
a7f0: 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64  s */.#endif.#ifd
a800: 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  ef SQLITE_USER_A
a810: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20  UTHENTICATION.  
a820: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
a830: 20 61 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a   auth;        /*
a840: 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   User authentica
a850: 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tion information
a860: 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f   */.#endif.};../
a870: 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20  *.** A macro to 
a880: 64 69 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63  discover the enc
a890: 6f 64 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62  oding of a datab
a8a0: 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ase..*/.#define 
a8b0: 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61  ENC(db) ((db)->a
a8c0: 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65  Db[0].pSchema->e
a8d0: 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  nc)../*.** Possi
a8e0: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ble values for t
a8f0: 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  he sqlite3.flags
a900: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
a910: 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 20 20  ITE_VdbeTrace   
a920: 20 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f     0x00000001  /
a930: 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63 65 20  * True to trace 
a940: 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a  VDBE execution *
a950: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a960: 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20  _InternChanges  
a970: 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55  0x00000002  /* U
a980: 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20  ncommitted Hash 
a990: 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f  table changes */
a9a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a9b0: 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30  FullFSync      0
a9c0: 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20 55 73  x00000004  /* Us
a9d0: 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20  e full fsync on 
a9e0: 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23  the backend */.#
a9f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b  define SQLITE_Ck
aa00: 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30  ptFullFSync  0x0
aa10: 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20  0000008  /* Use 
aa20: 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63  full fsync for c
aa30: 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65  heckpoint */.#de
aa40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68  fine SQLITE_Cach
aa50: 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30  eSpill     0x000
aa60: 30 30 30 31 30 20 20 2f 2a 20 4f 4b 20 74 6f 20  00010  /* OK to 
aa70: 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68  spill pager cach
aa80: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
aa90: 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73  ITE_FullColNames
aaa0: 20 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f     0x00000020  /
aab0: 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75  * Show full colu
aac0: 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45  mn names on SELE
aad0: 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  CT */.#define SQ
aae0: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
aaf0: 65 73 20 20 30 78 30 30 30 30 30 30 34 30 20 20  es  0x00000040  
ab00: 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f  /* Show short co
ab10: 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23  lumns names */.#
ab20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
ab30: 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78 30  untRows      0x0
ab40: 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e  0000080  /* Coun
ab50: 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62  t rows changed b
ab60: 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20  y INSERT, */.   
ab70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab90: 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45         /*   DELE
aba0: 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e  TE, or UPDATE an
abb0: 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20  d return */.    
abc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abe0: 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63        /*   the c
abf0: 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c  ount using a cal
ac00: 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e  lback. */.#defin
ac10: 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c  e SQLITE_NullCal
ac20: 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30 30 31  lback   0x000001
ac30: 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  00  /* Invoke th
ac40: 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20  e callback once 
ac50: 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20  if the */.      
ac60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac80: 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20      /*   result 
ac90: 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  set is empty */.
aca0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
acb0: 71 6c 54 72 61 63 65 20 20 20 20 20 20 20 30 78  qlTrace       0x
acc0: 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44 65 62  00000200  /* Deb
acd0: 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20  ug print SQL as 
ace0: 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23  it executes */.#
acf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
ad00: 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78 30  beListing    0x0
ad10: 30 30 30 30 34 30 30 20 20 2f 2a 20 44 65 62 75  0000400  /* Debu
ad20: 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44  g listings of VD
ad30: 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23  BE programs */.#
ad40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72  define SQLITE_Wr
ad50: 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78 30  iteSchema    0x0
ad60: 30 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74  0000800  /* OK t
ad70: 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f  o update SQLITE_
ad80: 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e  MASTER */.#defin
ad90: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64  e SQLITE_VdbeAdd
ada0: 6f 70 54 72 61 63 65 20 30 78 30 30 30 30 31 30  opTrace 0x000010
adb0: 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c  00  /* Trace sql
adc0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 29 20  ite3VdbeAddOp() 
add0: 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65  calls */.#define
ade0: 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68   SQLITE_IgnoreCh
adf0: 65 63 6b 73 20 20 20 30 78 30 30 30 30 32 30 30  ecks   0x0000200
ae00: 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66  0  /* Do not enf
ae10: 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74  orce check const
ae20: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
ae30: 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63  e SQLITE_ReadUnc
ae40: 6f 6d 6d 69 74 74 65 64 20 30 78 30 30 30 34 30  ommitted 0x00040
ae50: 30 30 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65  00  /* For share
ae60: 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
ae70: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
ae80: 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78  egacyFileFmt  0x
ae90: 30 30 30 30 38 30 30 30 20 20 2f 2a 20 43 72 65  00008000  /* Cre
aea0: 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65  ate new database
aeb0: 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f  s in format 1 */
aec0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
aed0: 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30  RecoveryMode   0
aee0: 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 49 67  x00010000  /* Ig
aef0: 6e 6f 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f  nore schema erro
af00: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
af10: 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65  LITE_ReverseOrde
af20: 72 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20  r   0x00020000  
af30: 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64  /* Reverse unord
af40: 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a  ered SELECTs */.
af50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
af60: 65 63 54 72 69 67 67 65 72 73 20 20 20 20 30 78  ecTriggers    0x
af70: 30 30 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 61  00040000  /* Ena
af80: 62 6c 65 20 72 65 63 75 72 73 69 76 65 20 74 72  ble recursive tr
af90: 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e  iggers */.#defin
afa0: 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e  e SQLITE_Foreign
afb0: 4b 65 79 73 20 20 20 20 30 78 30 30 30 38 30 30  Keys    0x000800
afc0: 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66  00  /* Enforce f
afd0: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
afe0: 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69  raints  */.#defi
aff0: 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e  ne SQLITE_AutoIn
b000: 64 65 78 20 20 20 20 20 20 30 78 30 30 31 30 30  dex      0x00100
b010: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61  000  /* Enable a
b020: 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73  utomatic indexes
b030: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b040: 54 45 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e  TE_PreferBuiltin
b050: 20 20 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a    0x00200000  /*
b060: 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62   Preference to b
b070: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f  uilt-in funcs */
b080: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b090: 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30  LoadExtension  0
b0a0: 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e  x00400000  /* En
b0b0: 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  able load_extens
b0c0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
b0d0: 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67  QLITE_EnableTrig
b0e0: 67 65 72 20 20 30 78 30 30 38 30 30 30 30 30 20  ger  0x00800000 
b0f0: 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
b100: 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  le triggers */.#
b110: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65  define SQLITE_De
b120: 66 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30  ferFKs       0x0
b130: 31 30 30 30 30 30 30 20 20 2f 2a 20 44 65 66 65  1000000  /* Defe
b140: 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61  r all FK constra
b150: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
b160: 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
b170: 20 20 20 20 20 20 30 78 30 32 30 30 30 30 30 30        0x02000000
b180: 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74    /* Disable dat
b190: 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f  abase changes */
b1a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b1b0: 56 64 62 65 45 51 50 20 20 20 20 20 20 20 20 30  VdbeEQP        0
b1c0: 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20 44 65  x04000000  /* De
b1d0: 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52  bug EXPLAIN QUER
b1e0: 59 20 50 4c 41 4e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  Y PLAN */.../*.*
b1f0: 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20 73 71  * Bits of the sq
b200: 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73  lite3.dbOptFlags
b210: 20 66 69 65 6c 64 20 74 68 61 74 20 61 72 65 20   field that are 
b220: 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73  used by the.** s
b230: 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
b240: 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43  rol(SQLITE_TESTC
b250: 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  TRL_OPTIMIZATION
b260: 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65  S,...) interface
b270: 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65   to.** selective
b280: 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f  ly disable vario
b290: 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
b2a0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
b2b0: 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e  ITE_QueryFlatten
b2c0: 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51  er 0x0001   /* Q
b2d0: 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20  uery flattening 
b2e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b2f0: 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20  E_ColumnCache   
b300: 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c   0x0002   /* Col
b310: 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65  umn cache */.#de
b320: 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75  fine SQLITE_Grou
b330: 70 42 79 4f 72 64 65 72 20 20 20 30 78 30 30 30  pByOrder   0x000
b340: 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63  4   /* GROUPBY c
b350: 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20  over of ORDERBY 
b360: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b370: 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74  E_FactorOutConst
b380: 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e   0x0008   /* Con
b390: 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20  stant factoring 
b3a0: 2a 2f 0a 2f 2a 20 20 20 20 20 20 20 20 20 20 20  */./*           
b3b0: 20 20 20 20 20 6e 6f 74 20 75 73 65 64 20 20 20       not used   
b3c0: 20 30 78 30 30 31 30 20 20 20 2f 2f 20 57 61 73   0x0010   // Was
b3d0: 3a 20 53 51 4c 49 54 45 5f 49 64 78 52 65 61 6c  : SQLITE_IdxReal
b3e0: 41 73 49 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  AsInt */.#define
b3f0: 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74   SQLITE_Distinct
b400: 4f 70 74 20 20 20 20 30 78 30 30 32 30 20 20 20  Opt    0x0020   
b410: 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e  /* DISTINCT usin
b420: 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  g indexes */.#de
b430: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65  fine SQLITE_Cove
b440: 72 49 64 78 53 63 61 6e 20 20 20 30 78 30 30 34  rIdxScan   0x004
b450: 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20  0   /* Covering 
b460: 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23  index scans */.#
b470: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72  define SQLITE_Or
b480: 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30  derByIdxJoin 0x0
b490: 30 38 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42  080   /* ORDER B
b4a0: 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69  Y of joins via i
b4b0: 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
b4c0: 53 51 4c 49 54 45 5f 53 75 62 71 43 6f 72 6f 75  SQLITE_SubqCorou
b4d0: 74 69 6e 65 20 20 30 78 30 31 30 30 20 20 20 2f  tine  0x0100   /
b4e0: 2a 20 45 76 61 6c 75 61 74 65 20 73 75 62 71 75  * Evaluate subqu
b4f0: 65 72 69 65 73 20 61 73 20 63 6f 72 6f 75 74 69  eries as corouti
b500: 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nes */.#define S
b510: 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65  QLITE_Transitive
b520: 20 20 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a       0x0200   /*
b530: 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73   Transitive cons
b540: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69  traints */.#defi
b550: 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f  ne SQLITE_OmitNo
b560: 6f 70 4a 6f 69 6e 20 20 20 30 78 30 34 30 30 20  opJoin   0x0400 
b570: 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64    /* Omit unused
b580: 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73   tables in joins
b590: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b5a0: 54 45 5f 53 74 61 74 33 20 20 20 20 20 20 20 20  TE_Stat3        
b5b0: 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73    0x0800   /* Us
b5c0: 65 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 41  e the SQLITE_STA
b5d0: 54 33 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  T3 table */.#def
b5e0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70  ine SQLITE_AllOp
b5f0: 74 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66  ts        0xffff
b600: 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69     /* All optimi
b610: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a  zations */../*.*
b620: 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73  * Macros for tes
b630: 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
b640: 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  not optimization
b650: 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72  s are enabled or
b660: 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69   disabled..*/.#i
b670: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
b680: 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23  T_BUILTIN_TEST.#
b690: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
b6a0: 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20  ionDisabled(db, 
b6b0: 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64  mask)  (((db)->d
b6c0: 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29  bOptFlags&(mask)
b6d0: 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70  )!=0).#define Op
b6e0: 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65  timizationEnable
b6f0: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28  d(db, mask)   ((
b700: 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73  (db)->dbOptFlags
b710: 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c  &(mask))==0).#el
b720: 73 65 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d  se.#define Optim
b730: 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28  izationDisabled(
b740: 64 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65  db, mask)  0.#de
b750: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
b760: 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  nEnabled(db, mas
b770: 6b 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  k)   1.#endif../
b780: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
b790: 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63   if it OK to fac
b7a0: 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70  tor constant exp
b7b0: 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68  ressions into th
b7c0: 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
b7d0: 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72  .** code. The ar
b7e0: 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73  gument is a Pars
b7f0: 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65  e object for the
b800: 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e   code generator.
b810: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73  .*/.#define Cons
b820: 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50  tFactorOk(P) ((P
b830: 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72  )->okConstFactor
b840: 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  )../*.** Possibl
b850: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  e values for the
b860: 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69   sqlite.magic fi
b870: 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  eld..** The numb
b880: 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64  ers are obtained
b890: 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68   at random and h
b8a0: 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d  ave no special m
b8b0: 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a  eaning, other.**
b8c0: 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74   than being dist
b8d0: 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e  inct from one an
b8e0: 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  other..*/.#defin
b8f0: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f  e SQLITE_MAGIC_O
b900: 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61 36  PEN     0xa029a6
b910: 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  97  /* Database 
b920: 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69  is open */.#defi
b930: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
b940: 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63 32  CLOSED   0x9f3c2
b950: 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65  d33  /* Database
b960: 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64   is closed */.#d
b970: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
b980: 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62  IC_SICK     0x4b
b990: 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72  771290  /* Error
b9a0: 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c   and awaiting cl
b9b0: 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ose */.#define S
b9c0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
b9d0: 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36 20       0xf03b7906 
b9e0: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75 72   /* Database cur
b9f0: 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f  rently in use */
ba00: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ba10: 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30  MAGIC_ERROR    0
ba20: 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e  xb5357930  /* An
ba30: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65   SQLITE_MISUSE e
ba40: 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f  rror occurred */
ba50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ba60: 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30  MAGIC_ZOMBIE   0
ba70: 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c  x64cffc7f  /* Cl
ba80: 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20 73 74  ose with last st
ba90: 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f  atement close */
baa0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
bab0: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66   function is def
bac0: 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61  ined by an insta
bad0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
bae0: 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72  wing.** structur
baf0: 65 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  e.  A pointer to
bb00: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
bb10: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
bb20: 20 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a   sqlite.aFunc.**
bb30: 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57 68   hash table.  Wh
bb40: 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63  en multiple func
bb50: 74 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20 73  tions have the s
bb60: 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68 61  ame name, the ha
bb70: 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e  sh table.** poin
bb80: 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c  ts to a linked l
bb90: 69 73 74 20 6f 66 20 74 68 65 73 65 20 73 74 72  ist of these str
bba0: 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75  uctures..*/.stru
bbb0: 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69  ct FuncDef {.  i
bbc0: 31 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20  16 nArg;        
bbd0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
bbe0: 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20   arguments.  -1 
bbf0: 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20  means unlimited 
bc00: 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61  */.  u16 funcFla
bc10: 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d  gs;       /* Som
bc20: 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66  e combination of
bc30: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a   SQLITE_FUNC_* *
bc40: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  /.  void *pUserD
bc50: 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72  ata;     /* User
bc60: 20 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20   data parameter 
bc70: 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e  */.  FuncDef *pN
bc80: 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ext;      /* Nex
bc90: 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  t function with 
bca0: 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76  same name */.  v
bcb0: 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c  oid (*xFunc)(sql
bcc0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
bcd0: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
bce0: 2a 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20 66  *); /* Regular f
bcf0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
bd00: 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74  d (*xStep)(sqlit
bd10: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
bd20: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
bd30: 3b 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 73  ; /* Aggregate s
bd40: 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  tep */.  void (*
bd50: 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74  xFinalize)(sqlit
bd60: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20  e3_context*);   
bd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bd80: 41 67 67 72 65 67 61 74 65 20 66 69 6e 61 6c 69  Aggregate finali
bd90: 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  zer */.  char *z
bda0: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
bdb0: 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65   SQL name of the
bdc0: 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20   function. */.  
bdd0: 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20  FuncDef *pHash; 
bde0: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74       /* Next wit
bdf0: 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61  h a different na
be00: 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20  me but the same 
be10: 68 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65  hash */.  FuncDe
be20: 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72  structor *pDestr
be30: 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65  uctor;   /* Refe
be40: 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65  rence counted de
be50: 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f  structor functio
be60: 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  n */.};../*.** T
be70: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 65 6e  his structure en
be80: 63 61 70 73 75 6c 61 74 65 73 20 61 20 75 73 65  capsulates a use
be90: 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72  r-function destr
bea0: 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28  uctor callback (
beb0: 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  as.** configured
bec0: 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75   using create_fu
bed0: 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64  nction_v2()) and
bee0: 20 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75   a reference cou
bef0: 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72  nter. When.** cr
bf00: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32  eate_function_v2
bf10: 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20  () is called to 
bf20: 63 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f  create a functio
bf30: 6e 20 77 69 74 68 20 61 20 64 65 73 74 72 75 63  n with a destruc
bf40: 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65  tor,.** a single
bf50: 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20   object of this 
bf60: 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  type is allocate
bf70: 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  d. FuncDestructo
bf80: 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f  r.nRef is set to
bf90: 20 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20   .** the number 
bfa0: 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  of FuncDef objec
bfb0: 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68  ts created (eith
bfc0: 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e  er 1 or 3, depen
bfd0: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
bfe0: 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70  ** or not the sp
bff0: 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67  ecified encoding
c000: 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e   is SQLITE_ANY).
c010: 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65   The FuncDef.pDe
c020: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62  structor.** memb
c030: 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68  er of each of th
c040: 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62  e new FuncDef ob
c050: 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20  jects is set to 
c060: 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c  point to the all
c070: 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65  ocated.** FuncDe
c080: 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  structor..**.** 
c090: 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e  Thereafter, when
c0a0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
c0b0: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64  Def objects is d
c0c0: 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65  eleted, the refe
c0d0: 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f  rence.** count o
c0e0: 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73  n this object is
c0f0: 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68   decremented. Wh
c100: 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c  en it reaches 0,
c110: 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a   the destructor.
c120: 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e  ** is invoked an
c130: 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75  d the FuncDestru
c140: 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66  ctor structure f
c150: 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  reed..*/.struct 
c160: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b  FuncDestructor {
c170: 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76  .  int nRef;.  v
c180: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
c190: 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20  void *);.  void 
c1a0: 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a  *pUserData;.};..
c1b0: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
c1c0: 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65  alues for FuncDe
c1d0: 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74  f.flags.  Note t
c1e0: 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20  hat the _LENGTH 
c1f0: 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76  and _TYPEOF.** v
c200: 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65  alues must corre
c210: 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f  spond to OPFLAG_
c220: 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50  LENGTHARG and OP
c230: 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20  FLAG_TYPEOFARG. 
c240: 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73   There.** are as
c250: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
c260: 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f  s in the code to
c270: 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2f   verify this..*/
c280: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c290: 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78  FUNC_ENCMASK  0x
c2a0: 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54  003 /* SQLITE_UT
c2b0: 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  F8, SQLITE_UTF16
c2c0: 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f  BE or UTF16LE */
c2d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c2e0: 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78  FUNC_LIKE     0x
c2f0: 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65  004 /* Candidate
c300: 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70   for the LIKE op
c310: 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64  timization */.#d
c320: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
c330: 43 5f 43 41 53 45 20 20 20 20 20 30 78 30 30 38  C_CASE     0x008
c340: 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69   /* Case-sensiti
c350: 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e  ve LIKE-type fun
c360: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
c370: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48   SQLITE_FUNC_EPH
c380: 45 4d 20 20 20 20 30 78 30 31 30 20 2f 2a 20 45  EM    0x010 /* E
c390: 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74  phemeral.  Delet
c3a0: 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23  e with VDBE */.#
c3b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
c3c0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 32  NC_NEEDCOLL 0x02
c3d0: 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46  0 /* sqlite3GetF
c3e0: 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67  uncCollSeq() mig
c3f0: 68 74 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f 0a  ht be called */.
c400: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
c410: 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30  UNC_LENGTH   0x0
c420: 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c  40 /* Built-in l
c430: 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e  ength() function
c440: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c450: 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20  TE_FUNC_TYPEOF  
c460: 20 30 78 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d   0x080 /* Built-
c470: 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  in typeof() func
c480: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
c490: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e  SQLITE_FUNC_COUN
c4a0: 54 20 20 20 20 30 78 31 30 30 20 2f 2a 20 42 75  T    0x100 /* Bu
c4b0: 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20  ilt-in count(*) 
c4c0: 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65  aggregate */.#de
c4d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
c4e0: 5f 43 4f 41 4c 45 53 43 45 20 30 78 32 30 30 20  _COALESCE 0x200 
c4f0: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c  /* Built-in coal
c500: 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c  esce() or ifnull
c510: 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  () */.#define SQ
c520: 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45  LITE_FUNC_UNLIKE
c530: 4c 59 20 30 78 34 30 30 20 2f 2a 20 42 75 69 6c  LY 0x400 /* Buil
c540: 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20  t-in unlikely() 
c550: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
c560: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
c570: 43 4f 4e 53 54 41 4e 54 20 30 78 38 30 30 20 2f  CONSTANT 0x800 /
c580: 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74  * Constant input
c590: 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e  s give a constan
c5a0: 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66  t output */.#def
c5b0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
c5c0: 4d 49 4e 4d 41 58 20 20 30 78 31 30 30 30 20 2f  MINMAX  0x1000 /
c5d0: 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29  * True for min()
c5e0: 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65   and max() aggre
c5f0: 67 61 74 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  gates */../*.** 
c600: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  The following th
c610: 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43  ree macros, FUNC
c620: 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43  TION(), LIKEFUNC
c630: 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54 45  () and AGGREGATE
c640: 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  () are.** used t
c650: 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e 69  o create the ini
c660: 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68  tializers for th
c670: 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  e FuncDef struct
c680: 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55  ures..**.**   FU
c690: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
c6a0: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
c6b0: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65  Func).**     Use
c6c0: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
c6d0: 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
c6e0: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
c6f0: 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a  nction zName .**
c700: 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64       implemented
c710: 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78   by C function x
c720: 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74  Func that accept
c730: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
c740: 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c  . The.**     val
c750: 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72  ue passed as iAr
c760: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
c770: 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20  void*) and made 
c780: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20  available.**    
c790: 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74   as the user-dat
c7a0: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
c7b0: 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20  data()) for the 
c7c0: 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a 2a  function. If .**
c7d0: 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e       argument bN
c7e0: 43 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  C is true, then 
c7f0: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
c800: 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73  NEEDCOLL flag is
c810: 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46   set..**.**   VF
c820: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
c830: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
c840: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69  xFunc).**     Li
c850: 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65  ke FUNCTION exce
c860: 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20  pt it omits the 
c870: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
c880: 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a  TANT flag..**.**
c890: 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61     AGGREGATE(zNa
c8a0: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
c8b0: 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e  bNC, xStep, xFin
c8c0: 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  al).**     Used 
c8d0: 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67  to create an agg
c8e0: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
c8f0: 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65  definition imple
c900: 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20  mented by.**    
c910: 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73   the C functions
c920: 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61   xStep and xFina
c930: 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75  l. The first fou
c940: 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20  r parameters.** 
c950: 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65      are interpre
c960: 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ted in the same 
c970: 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74  way as the first
c980: 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f   4 parameters to
c990: 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e  .**     FUNCTION
c9a0: 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45  ()..**.**   LIKE
c9b0: 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  FUNC(zName, nArg
c9c0: 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a  , pArg, flags).*
c9d0: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
c9e0: 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75  eate a scalar fu
c9f0: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
ca00: 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  n of a function 
ca10: 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68  zName .**     th
ca20: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
ca30: 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73  arguments and is
ca40: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
ca50: 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20  a call to C .** 
ca60: 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b      function lik
ca70: 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20  eFunc. Argument 
ca80: 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  pArg is cast to 
ca90: 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d  a (void *) and m
caa0: 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c  ade.**     avail
cab0: 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63  able as the func
cac0: 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28  tion user-data (
cad0: 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
cae0: 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20  a()). The.**    
caf0: 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76   FuncDef.flags v
cb00: 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
cb10: 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73  o the value pass
cb20: 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a  ed as the flags.
cb30: 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72  **     parameter
cb40: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e  ..*/.#define FUN
cb50: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
cb60: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
cb70: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
cb80: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
cb90: 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
cba0: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
cbb0: 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
cbc0: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
cbd0: 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
cbe0: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
cbf0: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
cc00: 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   VFUNCTION(zName
cc10: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
cc20: 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
cc30: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
cc40: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
cc50: 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
cc60: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
cc70: 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
cc80: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
cc90: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
cca0: 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65   FUNCTION2(zName
ccb0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
ccc0: 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46  C, xFunc, extraF
ccd0: 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
cce0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
ccf0: 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
cd00: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
cd10: 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72  C_NEEDCOLL)|extr
cd20: 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49  aFlags,\.   SQLI
cd30: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
cd40: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
cd50: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
cd60: 30 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46  0}.#define STR_F
cd70: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
cd80: 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20  Arg, pArg, bNC, 
cd90: 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
cda0: 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  , SQLITE_FUNC_CO
cdb0: 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
cdc0: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
cdd0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
cde0: 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75  .   pArg, 0, xFu
cdf0: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
ce00: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
ce10: 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
ce20: 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73  nArg, arg, flags
ce30: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
ce40: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
ce50: 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c  T|SQLITE_UTF8|fl
ce60: 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20  ags, \.   (void 
ce70: 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75  *)arg, 0, likeFu
ce80: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
ce90: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
cea0: 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
ceb0: 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
cec0: 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c  xStep, xFinal) \
ced0: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
cee0: 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45  _UTF8|(nc*SQLITE
cef0: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
cf00: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
cf10: 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c  _TO_PTR(arg), 0,
cf20: 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c   0, xStep,xFinal
cf30: 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 23 64 65  ,#zName,0,0}.#de
cf40: 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 32 28  fine AGGREGATE2(
cf50: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
cf60: 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69  , nc, xStep, xFi
cf70: 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61 67 73 29  nal, extraFlags)
cf80: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
cf90: 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49  TE_UTF8|(nc*SQLI
cfa0: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
cfb0: 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a  )|extraFlags, \.
cfc0: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
cfd0: 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c  _PTR(arg), 0, 0,
cfe0: 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a   xStep,xFinal,#z
cff0: 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a  Name,0,0}../*.**
d000: 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76   All current sav
d010: 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72  epoints are stor
d020: 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed in a linked l
d030: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a  ist starting at.
d040: 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65  ** sqlite3.pSave
d050: 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74  point. The first
d060: 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20   element in the 
d070: 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74  list is the most
d080: 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65   recently.** ope
d090: 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53  ned savepoint. S
d0a0: 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64  avepoints are ad
d0b0: 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20  ded to the list 
d0c0: 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f  by the vdbe.** O
d0d0: 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
d0e0: 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ruction..*/.stru
d0f0: 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20  ct Savepoint {. 
d100: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
d110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d120: 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e       /* Savepoin
d130: 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d  t name (nul-term
d140: 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34  inated) */.  i64
d150: 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20   nDeferredCons; 
d160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d170: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
d180: 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74  ferred fk violat
d190: 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ions */.  i64 nD
d1a0: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
d1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d1c0: 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   Number of defer
d1d0: 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20  red imm fk. */. 
d1e0: 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78   Savepoint *pNex
d1f0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
d200: 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73       /* Parent s
d210: 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79  avepoint (if any
d220: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ) */.};../*.** T
d230: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
d240: 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63   used as the sec
d250: 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f  ond parameter to
d260: 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e   sqlite3Savepoin
d270: 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74  t(),.** and as t
d280: 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
d290: 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69  o the OP_Savepoi
d2a0: 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
d2b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50  */.#define SAVEP
d2c0: 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20  OINT_BEGIN      
d2d0: 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  0.#define SAVEPO
d2e0: 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31  INT_RELEASE    1
d2f0: 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
d300: 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a  NT_ROLLBACK   2.
d310: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
d320: 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74  ite module (virt
d330: 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ual table defini
d340: 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64  tion) is defined
d350: 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
d360: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
d370: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73  ing structure, s
d380: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
d390: 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20  ite3.aModule.** 
d3a0: 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73  hash table..*/.s
d3b0: 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20  truct Module {. 
d3c0: 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
d3d0: 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20  odule *pModule; 
d3e0: 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63        /* Callbac
d3f0: 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20  k pointers */.  
d400: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
d410: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
d420: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73       /* Name pas
d430: 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
d440: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
d450: 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20   *pAux;         
d460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d470: 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20   /* pAux passed 
d480: 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
d490: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
d4a0: 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
d4b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
d4c0: 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f  Module destructo
d4d0: 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b  r function */.};
d4e0: 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  ../*.** informat
d4f0: 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63  ion about each c
d500: 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20  olumn of an SQL 
d510: 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e  table is held in
d520: 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
d530: 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
d540: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c  e..*/.struct Col
d550: 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  umn {.  char *zN
d560: 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ame;     /* Name
d570: 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20   of this column 
d580: 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74  */.  Expr *pDflt
d590: 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74  ;     /* Default
d5a0: 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
d5b0: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20  olumn */.  char 
d5c0: 2a 7a 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 4f  *zDflt;     /* O
d5d0: 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20  riginal text of 
d5e0: 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
d5f0: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 79  e */.  char *zTy
d600: 70 65 3b 20 20 20 20 20 2f 2a 20 44 61 74 61 20  pe;     /* Data 
d610: 74 79 70 65 20 66 6f 72 20 74 68 69 73 20 63 6f  type for this co
d620: 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  lumn */.  char *
d630: 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  zColl;     /* Co
d640: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
d650: 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20  .  If NULL, use 
d660: 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20  the default */. 
d670: 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20   u8 notNull;    
d680: 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65    /* An OE_ code
d690: 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20   for handling a 
d6a0: 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
d6b0: 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  int */.  char af
d6c0: 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65  finity;   /* One
d6d0: 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41   of the SQLITE_A
d6e0: 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f  FF_... values */
d6f0: 0a 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20  .  u8 szEst;    
d700: 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
d710: 20 73 69 7a 65 20 6f 66 20 74 68 69 73 20 63 6f   size of this co
d720: 6c 75 6d 6e 2e 20 20 49 4e 54 3d 3d 31 20 2a 2f  lumn.  INT==1 */
d730: 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20  .  u8 colFlags; 
d740: 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70      /* Boolean p
d750: 72 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20  roperties.  See 
d760: 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73  COLFLAG_ defines
d770: 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   below */.};../*
d780: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
d790: 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c  for Column.colFl
d7a0: 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ags:.*/.#define 
d7b0: 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20  COLFLAG_PRIMKEY 
d7c0: 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f   0x0001    /* Co
d7d0: 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20  lumn is part of 
d7e0: 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  the primary key 
d7f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
d800: 41 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30  AG_HIDDEN   0x00
d810: 30 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65  02    /* A hidde
d820: 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69  n column in a vi
d830: 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a  rtual table */..
d840: 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69  /*.** A "Collati
d850: 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20  ng Sequence" is 
d860: 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e  defined by an in
d870: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
d880: 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63  llowing.** struc
d890: 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c  ture. Conceptual
d8a0: 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20  ly, a collating 
d8b0: 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74  sequence consist
d8c0: 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a  s of a name and.
d8d0: 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20  ** a comparison 
d8e0: 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66  routine that def
d8f0: 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f  ines the order o
d900: 66 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e  f that sequence.
d910: 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65  .**.** If CollSe
d920: 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20  q.xCmp is NULL, 
d930: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
d940: 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73  e.** collating s
d950: 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66  equence is undef
d960: 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62  ined.  Indices b
d970: 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66  uilt on an undef
d980: 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e  ined.** collatin
d990: 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e  g sequence may n
d9a0: 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72  ot be read or wr
d9b0: 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  itten..*/.struct
d9c0: 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61   CollSeq {.  cha
d9d0: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
d9e0: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
d9f0: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
da00: 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f  ence, UTF-8 enco
da10: 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ded */.  u8 enc;
da20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
da30: 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
da40: 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28  handled by xCmp(
da50: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73  ) */.  void *pUs
da60: 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
da70: 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
da80: 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e  o xCmp() */.  in
da90: 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c  t (*xCmp)(void*,
daa0: 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  int, const void*
dab0: 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
dac0: 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44  d*);.  void (*xD
dad0: 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20  el)(void*);  /* 
dae0: 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70  Destructor for p
daf0: 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  User */.};../*.*
db00: 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63  * A sort order c
db10: 61 6e 20 62 65 20 65 69 74 68 65 72 20 41 53 43  an be either ASC
db20: 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65   or DESC..*/.#de
db30: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41  fine SQLITE_SO_A
db40: 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53  SC       0  /* S
db50: 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ort in ascending
db60: 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e   order */.#defin
db70: 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43  e SQLITE_SO_DESC
db80: 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74        1  /* Sort
db90: 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72   in ascending or
dba0: 64 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f  der */../*.** Co
dbb0: 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79  lumn affinity ty
dbc0: 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65  pes..**.** These
dbd0: 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e   used to have mn
dbe0: 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65  emonic name like
dbf0: 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f   'i' for SQLITE_
dc00: 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a  AFF_INTEGER and.
dc10: 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54  ** 't' for SQLIT
dc20: 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74  E_AFF_TEXT.  But
dc30: 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c   we can save a l
dc40: 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20  ittle space and 
dc50: 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73  improve.** the s
dc60: 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79  peed a little by
dc70: 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76   numbering the v
dc80: 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76  alues consecutiv
dc90: 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75 74  ely.  .**.** But
dca0: 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61   rather than sta
dcb0: 72 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20  rt with 0 or 1, 
dcc0: 77 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 41  we begin with 'A
dcd0: 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a  '.  That way,.**
dce0: 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61   when multiple a
dcf0: 66 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72  ffinity types ar
dd00: 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69  e concatenated i
dd10: 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64  nto a string and
dd20: 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20  .** used as the 
dd30: 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79  P4 operand, they
dd40: 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65   will be more re
dd50: 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  adable..**.** No
dd60: 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65  te also that the
dd70: 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61   numeric types a
dd80: 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74  re grouped toget
dd90: 68 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74  her so that test
dda0: 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d  ing.** for a num
ddb0: 65 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73  eric type is a s
ddc0: 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e  ingle comparison
ddd0: 2e 20 20 41 6e 64 20 74 68 65 20 4e 4f 4e 45 20  .  And the NONE 
dde0: 74 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a  type is first..*
ddf0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
de00: 5f 41 46 46 5f 4e 4f 4e 45 20 20 20 20 20 27 41  _AFF_NONE     'A
de10: 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
de20: 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20 27 42  _AFF_TEXT     'B
de30: 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
de40: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 43  _AFF_NUMERIC  'C
de50: 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
de60: 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27 44  _AFF_INTEGER  'D
de70: 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
de80: 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27 45  _AFF_REAL     'E
de90: 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  '..#define sqlit
dea0: 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e  e3IsNumericAffin
deb0: 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51  ity(X)  ((X)>=SQ
dec0: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
ded0: 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  )../*.** The SQL
dee0: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c  ITE_AFF_MASK val
def0: 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68  ues masks off th
df00: 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69  e significant bi
df10: 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69  ts of an.** affi
df20: 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a  nity value. .*/.
df30: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
df40: 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34 37  FF_MASK     0x47
df50: 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e  ../*.** Addition
df60: 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74 68  al bit values th
df70: 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77  at can be ORed w
df80: 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20  ith an affinity 
df90: 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67  without.** chang
dfa0: 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79  ing the affinity
dfb0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ..**.** The SQLI
dfc0: 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20  TE_NOTNULL flag 
dfd0: 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  is a combination
dfe0: 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a   of NULLEQ and J
dff0: 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74  UMPIFNULL..** It
e000: 20 63 61 75 73 65 73 20 61 6e 20 61 73 73 65 72   causes an asser
e010: 74 28 29 20 74 6f 20 66 69 72 65 20 69 66 20 65  t() to fire if e
e020: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74 6f  ither operand to
e030: 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a   a comparison.**
e040: 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55 4c   operator is NUL
e050: 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65 64 20  L.  It is added 
e060: 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70 61  to certain compa
e070: 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20  rison operators 
e080: 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61 74  to.** prove that
e090: 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61 72   the operands ar
e0a0: 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c  e always NOT NUL
e0b0: 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  L..*/.#define SQ
e0c0: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
e0d0: 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73    0x10  /* jumps
e0e0: 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
e0f0: 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64  nd is NULL */.#d
e100: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f  efine SQLITE_STO
e110: 52 45 50 32 20 20 20 20 20 20 30 78 32 30 20 20  REP2      0x20  
e120: 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
e130: 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65  in reg[P2] rathe
e140: 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23  r than jump */.#
e150: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55  define SQLITE_NU
e160: 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38 30 20  LLEQ       0x80 
e170: 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f   /* NULL=NULL */
e180: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e190: 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78 39  NOTNULL      0x9
e1a0: 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61  0  /* Assert tha
e1b0: 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e  t operands are n
e1c0: 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a  ever NULL */../*
e1d0: 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66  .** An object of
e1e0: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63 72   this type is cr
e1f0: 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 76  eated for each v
e200: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65  irtual table pre
e210: 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64  sent in.** the d
e220: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
e230: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61  .**.** If the da
e240: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
e250: 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68   shared, then th
e260: 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61  ere is one insta
e270: 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73  nce of this.** s
e280: 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63  tructure for eac
e290: 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
e2a0: 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29  ction (sqlite3*)
e2b0: 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73   that uses the s
e2c0: 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e  hared.** schema.
e2d0: 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65   This is because
e2e0: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
e2f0: 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72  onnection requir
e300: 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75  es its own uniqu
e310: 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  e.** instance of
e320: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
e330: 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74  b* handle used t
e340: 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72  o access the vir
e350: 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20 69  tual table .** i
e360: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73  mplementation. s
e370: 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
e380: 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20  dles can not be 
e390: 73 68 61 72 65 64 20 62 65 74 77 65 65 6e 20 0a  shared between .
e3a0: 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ** database conn
e3b0: 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68  ections, even wh
e3c0: 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20 74  en the rest of t
e3d0: 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74  he in-memory dat
e3e0: 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d 61  abase .** schema
e3f0: 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20 74   is shared, as t
e400: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
e410: 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74  n often stores t
e420: 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  he database.** c
e430: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
e440: 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76 69   passed to it vi
e450: 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29  a the xConnect()
e460: 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d 65   or xCreate() me
e470: 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69  thod.** during i
e480: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e  nitialization in
e490: 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64  ternally. This d
e4a0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
e4b0: 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a  on handle may.**
e4c0: 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62 79   then be used by
e4d0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
e4e0: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
e4f0: 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c  n to access real
e500: 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74 68   tables .** with
e510: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  in the database.
e520: 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70   So that they ap
e530: 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20  pear as part of 
e540: 74 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a 20  the callers .** 
e550: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
e560: 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64  se accesses need
e570: 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20   to be made via 
e580: 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
e590: 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  e .** connection
e5a0: 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f   as that used to
e5b0: 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65   execute SQL ope
e5c0: 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76  rations on the v
e5d0: 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a  irtual table..**
e5e0: 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f  .** All VTable o
e5f0: 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72  bjects that corr
e600: 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67  espond to a sing
e610: 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68  le table in a sh
e620: 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65  ared.** database
e630: 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74   schema are init
e640: 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20  ially stored in 
e650: 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f  a linked-list po
e660: 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74  inted to by.** t
e670: 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65  he Table.pVTable
e680: 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65   member variable
e690: 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f   of the correspo
e6a0: 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65  nding Table obje
e6b0: 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73  ct..** When an s
e6c0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
e6d0: 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65   operation is re
e6e0: 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73  quired to access
e6f0: 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20   the virtual.** 
e700: 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68  table, it search
e710: 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20  es the list for 
e720: 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20  the VTable that 
e730: 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
e740: 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  he.** database c
e750: 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20  onnection doing 
e760: 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f  the preparing so
e770: 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63   as to use the c
e780: 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65  orrect.** sqlite
e790: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69  3_vtab* handle i
e7a0: 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71  n the compiled q
e7b0: 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e  uery..**.** When
e7c0: 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61   an in-memory Ta
e7d0: 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65  ble object is de
e7e0: 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70  leted (for examp
e7f0: 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73  le when the.** s
e800: 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72  chema is being r
e810: 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65  eloaded for some
e820: 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54   reason), the VT
e830: 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65  able objects are
e840: 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65 64   not .** deleted
e850: 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33   and the sqlite3
e860: 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61  _vtab* handles a
e870: 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65  re not xDisconne
e880: 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65 64  ct()ed .** immed
e890: 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c  iately. Instead,
e8a0: 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20   they are moved 
e8b0: 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70  from the Table.p
e8c0: 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a  VTable list to.*
e8d0: 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64  * another linked
e8e0: 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20   list headed by 
e8f0: 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73  the sqlite3.pDis
e900: 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f  connect member o
e910: 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70  f the.** corresp
e920: 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73  onding sqlite3 s
e930: 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61  tructure. They a
e940: 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f  re then deleted/
e950: 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a 2a  xDisconnected .*
e960: 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74  * next time a st
e970: 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61  atement is prepa
e980: 72 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73  red using said s
e990: 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73  qlite3*. This is
e9a0: 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69   done.** to avoi
e9b0: 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65  d deadlock issue
e9c0: 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74  s involving mult
e9d0: 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74  iple sqlite3.mut
e9e0: 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52  ex mutexes..** R
e9f0: 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73  efer to comments
ea00: 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20   above function 
ea10: 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
ea20: 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a  kList() for an.*
ea30: 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73  * explanation as
ea40: 20 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61   to why it is sa
ea50: 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74  fe to add an ent
ea60: 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  ry to an sqlite3
ea70: 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20  .pDisconnect.** 
ea80: 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c  list without hol
ea90: 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70  ding the corresp
eaa0: 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d  onding sqlite3.m
eab0: 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a  utex mutex..**.*
eac0: 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72  * The memory for
ead0: 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73   objects of this
eae0: 20 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20   type is always 
eaf0: 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a  allocated by .**
eb00: 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
eb10: 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f  (), using the co
eb20: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
eb30: 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65  stored in VTable
eb40: 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68 65 20 66  .db as .** the f
eb50: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a  irst argument..*
eb60: 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  /.struct VTable 
eb70: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
eb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
eb90: 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   Database connec
eba0: 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20  tion associated 
ebb0: 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20  with this table 
ebc0: 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f  */.  Module *pMo
ebd0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  d;             /
ebe0: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64  * Pointer to mod
ebf0: 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
ec00: 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  on */.  sqlite3_
ec10: 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20  vtab *pVtab;    
ec20: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
ec30: 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f  vtab instance */
ec40: 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20  .  int nRef;    
ec50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ec60: 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
ec70: 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  rs to this struc
ec80: 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f  ture */.  u8 bCo
ec90: 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20  nstraint;       
eca0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
ecb0: 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73  onstraints are s
ecc0: 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e  upported */.  in
ecd0: 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t iSavepoint;   
ece0: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68          /* Depth
ecf0: 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e   of the SAVEPOIN
ed00: 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61  T stack */.  VTa
ed10: 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ble *pNext;     
ed20: 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69         /* Next i
ed30: 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73  n linked list (s
ed40: 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a  ee above) */.};.
ed50: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
ed60: 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65  table is represe
ed70: 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62  nted in memory b
ed80: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
ed90: 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e   the.** followin
eda0: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
edb0: 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65 20 69  ** Table.zName i
edc0: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
edd0: 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 63 61  e table.  The ca
ede0: 73 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e  se of the origin
edf0: 61 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54 41 42  al.** CREATE TAB
ee00: 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  LE statement is 
ee10: 73 74 6f 72 65 64 2c 20 62 75 74 20 63 61 73 65  stored, but case
ee20: 20 69 73 20 6e 6f 74 20 73 69 67 6e 69 66 69 63   is not signific
ee30: 61 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70 61  ant for.** compa
ee40: 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 61  risons..**.** Ta
ee50: 62 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68 65 20  ble.nCol is the 
ee60: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
ee70: 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 2e  s in this table.
ee80: 20 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69 73 20    Table.aCol is 
ee90: 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20  a.** pointer to 
eea0: 61 6e 20 61 72 72 61 79 20 6f 66 20 43 6f 6c 75  an array of Colu
eeb0: 6d 6e 20 73 74 72 75 63 74 75 72 65 73 2c 20 6f  mn structures, o
eec0: 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  ne for each colu
eed0: 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  mn..**.** If the
eee0: 20 74 61 62 6c 65 20 68 61 73 20 61 6e 20 49 4e   table has an IN
eef0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
ef00: 59 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e 69 50  Y, then Table.iP
ef10: 4b 65 79 20 69 73 20 74 68 65 20 69 6e 64 65 78  Key is the index
ef20: 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c 75 6d   of.** the colum
ef30: 6e 20 74 68 61 74 20 69 73 20 74 68 61 74 20 6b  n that is that k
ef40: 65 79 2e 20 20 20 4f 74 68 65 72 77 69 73 65 20  ey.   Otherwise 
ef50: 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 6e  Table.iPKey is n
ef60: 65 67 61 74 69 76 65 2e 20 20 4e 6f 74 65 0a 2a  egative.  Note.*
ef70: 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61 74  * that the datat
ef80: 79 70 65 20 6f 66 20 74 68 65 20 50 52 49 4d 41  ype of the PRIMA
ef90: 52 59 20 4b 45 59 20 6d 75 73 74 20 62 65 20 49  RY KEY must be I
efa0: 4e 54 45 47 45 52 20 66 6f 72 20 74 68 69 73 20  NTEGER for this 
efb0: 66 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65 20 73  field to.** be s
efc0: 65 74 2e 20 20 41 6e 20 49 4e 54 45 47 45 52 20  et.  An INTEGER 
efd0: 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 75  PRIMARY KEY is u
efe0: 73 65 64 20 61 73 20 74 68 65 20 72 6f 77 69 64  sed as the rowid
eff0: 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66   for each row of
f000: 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e 20 20  .** the table.  
f010: 49 66 20 61 20 74 61 62 6c 65 20 68 61 73 20 6e  If a table has n
f020: 6f 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  o INTEGER PRIMAR
f030: 59 20 4b 45 59 2c 20 74 68 65 6e 20 61 20 72 61  Y KEY, then a ra
f040: 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20 69 73  ndom rowid.** is
f050: 20 67 65 6e 65 72 61 74 65 64 20 66 6f 72 20 65   generated for e
f060: 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74  ach row of the t
f070: 61 62 6c 65 2e 20 20 54 46 5f 48 61 73 50 72 69  able.  TF_HasPri
f080: 6d 61 72 79 4b 65 79 20 69 73 20 73 65 74 20 69  maryKey is set i
f090: 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 68  f.** the table h
f0a0: 61 73 20 61 6e 79 20 50 52 49 4d 41 52 59 20 4b  as any PRIMARY K
f0b0: 45 59 2c 20 49 4e 54 45 47 45 52 20 6f 72 20 6f  EY, INTEGER or o
f0c0: 74 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a 20  therwise..**.** 
f0d0: 54 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20 74 68  Table.tnum is th
f0e0: 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f  e page number fo
f0f0: 72 20 74 68 65 20 72 6f 6f 74 20 42 54 72 65 65  r the root BTree
f100: 20 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62   page of the tab
f110: 6c 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64 61 74  le in the.** dat
f120: 61 62 61 73 65 20 66 69 6c 65 2e 20 20 49 66 20  abase file.  If 
f130: 54 61 62 6c 65 2e 69 44 62 20 69 73 20 74 68 65  Table.iDb is the
f140: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
f150: 74 61 62 61 73 65 20 74 61 62 6c 65 20 62 61 63  tabase table bac
f160: 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c 69 74  kend.** in sqlit
f170: 65 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73 20 66  e.aDb[].  0 is f
f180: 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  or the main data
f190: 62 61 73 65 20 61 6e 64 20 31 20 69 73 20 66 6f  base and 1 is fo
f1a0: 72 20 74 68 65 20 66 69 6c 65 20 74 68 61 74 0a  r the file that.
f1b0: 2a 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f 72 61  ** holds tempora
f1c0: 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  ry tables and in
f1d0: 64 69 63 65 73 2e 20 20 49 66 20 54 46 5f 45 70  dices.  If TF_Ep
f1e0: 68 65 6d 65 72 61 6c 20 69 73 20 73 65 74 0a 2a  hemeral is set.*
f1f0: 2a 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  * then the table
f200: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20   is stored in a 
f210: 66 69 6c 65 20 74 68 61 74 20 69 73 20 61 75 74  file that is aut
f220: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74  omatically delet
f230: 65 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20 56  ed.** when the V
f240: 44 42 45 20 63 75 72 73 6f 72 20 74 6f 20 74 68  DBE cursor to th
f250: 65 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65  e table is close
f260: 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65  d.  In this case
f270: 20 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20   Table.tnum .** 
f280: 72 65 66 65 72 73 20 56 44 42 45 20 63 75 72 73  refers VDBE curs
f290: 6f 72 20 6e 75 6d 62 65 72 20 74 68 61 74 20 68  or number that h
f2a0: 6f 6c 64 73 20 74 68 65 20 74 61 62 6c 65 20 6f  olds the table o
f2b0: 70 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65 20  pen, not to the 
f2c0: 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75 6d  root.** page num
f2d0: 62 65 72 2e 20 20 54 72 61 6e 73 69 65 6e 74 20  ber.  Transient 
f2e0: 74 61 62 6c 65 73 20 61 72 65 20 75 73 65 64 20  tables are used 
f2f0: 74 6f 20 68 6f 6c 64 20 74 68 65 20 72 65 73 75  to hold the resu
f300: 6c 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62 2d  lts of a.** sub-
f310: 71 75 65 72 79 20 74 68 61 74 20 61 70 70 65 61  query that appea
f320: 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20  rs instead of a 
f330: 72 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 20  real table name 
f340: 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
f350: 73 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c 45  se .** of a SELE
f360: 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f  CT statement..*/
f370: 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a  .struct Table {.
f380: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
f390: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
f3a0: 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76  f the table or v
f3b0: 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20  iew */.  Column 
f3c0: 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a  *aCol;        /*
f3d0: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
f3e0: 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  ut each column *
f3f0: 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65  /.  Index *pInde
f400: 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  x;       /* List
f410: 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20   of SQL indexes 
f420: 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a  on this table. *
f430: 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
f440: 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c  ect;     /* NULL
f450: 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f   for tables.  Po
f460: 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69  ints to definiti
f470: 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f  on if a view. */
f480: 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20  .  FKey *pFKey; 
f490: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65          /* Linke
f4a0: 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f  d list of all fo
f4b0: 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68  reign keys in th
f4c0: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68  is table */.  ch
f4d0: 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20  ar *zColAff;    
f4e0: 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
f4f0: 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
f500: 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
f510: 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  n */.#ifndef SQL
f520: 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20  ITE_OMIT_CHECK. 
f530: 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63   ExprList *pChec
f540: 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45  k;    /* All CHE
f550: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  CK constraints *
f560: 2f 0a 23 65 6e 64 69 66 0a 20 20 4c 6f 67 45 73  /.#endif.  LogEs
f570: 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20  t nRowLogEst;   
f580: 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77  /* Estimated row
f590: 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f  s in table - fro
f5a0: 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  m sqlite_stat1 t
f5b0: 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 74 6e  able */.  int tn
f5c0: 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  um;            /
f5d0: 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 6e 6f 64  * Root BTree nod
f5e0: 65 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65  e for this table
f5f0: 20 28 73 65 65 20 6e 6f 74 65 20 61 62 6f 76 65   (see note above
f600: 29 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79  ) */.  i16 iPKey
f610: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
f620: 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20  f not negative, 
f630: 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20  use aCol[iPKey] 
f640: 61 73 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  as the primary k
f650: 65 79 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c  ey */.  i16 nCol
f660: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
f670: 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
f680: 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
f690: 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20  */.  u16 nRef;  
f6a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
f6b0: 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ber of pointers 
f6c0: 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f  to this Table */
f6d0: 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52  .  LogEst szTabR
f6e0: 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d  ow;     /* Estim
f6f0: 61 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63  ated size of eac
f700: 68 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62  h table row in b
f710: 79 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  ytes */.#ifdef S
f720: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53  QLITE_ENABLE_COS
f730: 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63  TMULT.  LogEst c
f740: 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20  ostMult;     /* 
f750: 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20  Cost multiplier 
f760: 66 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20 74  for using this t
f770: 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  able */.#endif. 
f780: 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20   u8 tabFlags;   
f790: 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
f7a0: 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   TF_* values */.
f7b0: 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20    u8 keyConf;   
f7c0: 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74         /* What t
f7d0: 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20  o do in case of 
f7e0: 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c  uniqueness confl
f7f0: 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a  ict on iPKey */.
f800: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
f810: 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20  MIT_ALTERTABLE. 
f820: 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65   int addColOffse
f830: 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20  t;    /* Offset 
f840: 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  in CREATE TABLE 
f850: 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65  stmt to add a ne
f860: 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64  w column */.#end
f870: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
f880: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
f890: 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c  BLE.  int nModul
f8a0: 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75  eArg;      /* Nu
f8b0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
f8c0: 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20  s to the module 
f8d0: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f  */.  char **azMo
f8e0: 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65 78  duleArg;  /* Tex
f8f0: 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20  t of all module 
f900: 61 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64  args. [0] is mod
f910: 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 56 54  ule name */.  VT
f920: 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20  able *pVTable;  
f930: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54     /* List of VT
f940: 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f  able objects. */
f950: 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65  .#endif.  Trigge
f960: 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f  r *pTrigger;   /
f970: 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65  * List of trigge
f980: 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63  rs stored in pSc
f990: 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61  hema */.  Schema
f9a0: 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f   *pSchema;     /
f9b0: 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f  * Schema that co
f9c0: 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c  ntains this tabl
f9d0: 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e  e */.  Table *pN
f9e0: 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e  extZombie;  /* N
f9f0: 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65  ext on the Parse
fa00: 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74  .pZombieTab list
fa10: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
fa20: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
fa30: 20 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e   Table.tabFlags.
fa40: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52  .*/.#define TF_R
fa50: 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30  eadonly        0
fa60: 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  x01    /* Read-o
fa70: 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
fa80: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
fa90: 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
faa0: 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68  x02    /* An eph
fab0: 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  emeral table */.
fac0: 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72  #define TF_HasPr
fad0: 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20  imaryKey   0x04 
fae0: 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
faf0: 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
fb00: 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
fb10: 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38  increment   0x08
fb20: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70      /* Integer p
fb30: 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75  rimary key is au
fb40: 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23  toincrement */.#
fb50: 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61  define TF_Virtua
fb60: 6c 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20  l         0x10  
fb70: 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61    /* Is a virtua
fb80: 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
fb90: 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77  ne TF_WithoutRow
fba0: 69 64 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a  id    0x20    /*
fbb0: 20 4e 6f 20 72 6f 77 69 64 20 75 73 65 64 2e 20   No rowid used. 
fbc0: 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74  PRIMARY KEY is t
fbd0: 68 65 20 6b 65 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  he key */.../*.*
fbe0: 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68  * Test to see wh
fbf0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74  ether or not a t
fc00: 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61  able is a virtua
fc10: 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69  l table.  This i
fc20: 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d  s.** done as a m
fc30: 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20  acro so that it 
fc40: 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65  will be optimize
fc50: 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75  d out when virtu
fc60: 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70  al.** table supp
fc70: 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66  ort is omitted f
fc80: 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a  rom the build..*
fc90: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
fca0: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
fcb0: 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  LE.#  define IsV
fcc0: 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28  irtual(X)      (
fcd0: 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
fce0: 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29   TF_Virtual)!=0)
fcf0: 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64  .#  define IsHid
fd00: 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28  denColumn(X) (((
fd10: 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
fd20: 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
fd30: 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  0).#else.#  defi
fd40: 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
fd50: 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65       0.#  define
fd60: 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
fd70: 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  X) 0.#endif../* 
fd80: 44 6f 65 73 20 74 68 65 20 74 61 62 6c 65 20 68  Does the table h
fd90: 61 76 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23  ave a rowid */.#
fda0: 64 65 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28  define HasRowid(
fdb0: 58 29 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61  X)     (((X)->ta
fdc0: 62 46 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68  bFlags & TF_With
fdd0: 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f  outRowid)==0)../
fde0: 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67  *.** Each foreig
fdf0: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
fe00: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
fe10: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
fe20: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
fe30: 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  * A foreign key 
fe40: 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  is associated wi
fe50: 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20  th two tables.  
fe60: 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65  The "from" table
fe70: 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65   is.** the table
fe80: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
fe90: 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
fea0: 61 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65  ause that create
feb0: 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a  s the foreign.**
fec0: 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20   key.  The "to" 
fed0: 74 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62  table is the tab
fee0: 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64  le that is named
fef0: 20 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43   in the REFERENC
ff00: 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f  ES clause..** Co
ff10: 6e 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d  nsider this exam
ff20: 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  ple:.**.**     C
ff30: 52 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28  REATE TABLE ex1(
ff40: 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45  .**       a INTE
ff50: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
ff60: 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45  .**       b INTE
ff70: 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66  GER CONSTRAINT f
ff80: 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78  k1 REFERENCES ex
ff90: 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a  2(x).**     );.*
ffa0: 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e  *.** For foreign
ffb0: 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20   key "fk1", the 
ffc0: 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65  from-table is "e
ffd0: 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74  x1" and the to-t
ffe0: 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a  able is "ex2"..*
fff0: 2a 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d  * Equivalent nam
10000 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72  es:.**.**     fr
10010 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c  om-table == chil
10020 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20  d-table.**      
10030 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72   to-table == par
10040 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20  ent-table.**.** 
10050 45 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20  Each REFERENCES 
10060 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73  clause generates
10070 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
10080 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
10090 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68  ructure.** which
100a0 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20   is attached to 
100b0 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20  the from-table. 
100c0 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65   The to-table ne
100d0 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65  ed not exist whe
100e0 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61  n.** the from-ta
100f0 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20  ble is created. 
10100 20 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f   The existence o
10110 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69  f the to-table i
10120 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a  s not checked..*
10130 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66  *.** The list of
10140 20 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72   all parents for
10150 20 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69   child Table X i
10160 73 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65  s held at X.pFKe
10170 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20  y..**.** A list 
10180 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20  of all children 
10190 66 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65  for a table name
101a0 64 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74  d Z (which might
101b0 20 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29   not even exist)
101c0 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53  .** is held in S
101d0 63 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77  chema.fkeyHash w
101e0 69 74 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f  ith a hash key o
101f0 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  f Z..*/.struct F
10200 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70  Key {.  Table *p
10210 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62  From;     /* Tab
10220 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
10230 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
10240 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29  use (aka: Child)
10250 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78   */.  FKey *pNex
10260 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20  tFrom;  /* Next 
10270 46 4b 65 79 20 77 69 74 68 20 74 68 65 20 73 61  FKey with the sa
10280 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78  me in pFrom. Nex
10290 74 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f  t parent of pFro
102a0 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f  m */.  char *zTo
102b0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ;        /* Name
102c0 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74   of table that t
102d0 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f  he key points to
102e0 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a   (aka: Parent) *
102f0 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54  /.  FKey *pNextT
10300 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69  o;    /* Next wi
10310 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e  th the same zTo.
10320 20 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a   Next child of z
10330 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  To. */.  FKey *p
10340 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72  PrevTo;    /* Pr
10350 65 76 69 6f 75 73 20 77 69 74 68 20 74 68 65 20  evious with the 
10360 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e  same zTo */.  in
10370 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  t nCol;         
10380 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
10390 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79  umns in this key
103a0 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33   */.  /* EV: R-3
103b0 30 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20  0323-21917 */.  
103c0 75 38 20 69 73 44 65 66 65 72 72 65 64 3b 20 20  u8 isDeferred;  
103d0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
103e0 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b  constraint check
103f0 69 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20  ing is deferred 
10400 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20  till COMMIT */. 
10410 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20   u8 aAction[2]; 
10420 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c         /* ON DEL
10430 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54  ETE and ON UPDAT
10440 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65  E actions, respe
10450 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69  ctively */.  Tri
10460 67 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b  gger *apTrigger[
10470 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66  2];/* Triggers f
10480 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74  or aAction[] act
10490 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  ions */.  struct
104a0 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20   sColMap {      
104b0 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f  /* Mapping of co
104c0 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74  lumns in pFrom t
104d0 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f  o columns in zTo
104e0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f   */.    int iFro
104f0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
10500 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e   Index of column
10510 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20   in pFrom */.   
10520 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20   char *zCol;    
10530 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
10540 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e  f column in zTo.
10550 20 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52    If NULL use PR
10560 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d  IMARY KEY */.  }
10570 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20   aCol[1];       
10580 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72       /* One entr
10590 79 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43  y for each of nC
105a0 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b  ol columns */.};
105b0 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73  ../*.** SQLite s
105c0 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66  upports many dif
105d0 66 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72  ferent ways to r
105e0 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61  esolve a constra
105f0 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52  int.** error.  R
10600 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69  OLLBACK processi
10610 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20  ng means that a 
10620 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
10630 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74  tion.** causes t
10640 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
10650 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20  process to fail 
10660 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72  and for the curr
10670 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
10680 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ** to be rolled 
10690 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f  back.  ABORT pro
106a0 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
106b0 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
106c0 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20  rocess.** fails 
106d0 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68  and any prior ch
106e0 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20  anges from that 
106f0 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  one operation ar
10700 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a  e backed out,.**
10710 20 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63   but the transac
10720 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c  tion is not roll
10730 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70  ed back.  FAIL p
10740 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
10750 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72  that.** the oper
10760 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
10770 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75  s stops and retu
10780 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  rns an error cod
10790 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a  e.  But prior.**
107a0 20 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20   changes due to 
107b0 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
107c0 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65  on are not backe
107d0 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c  d out and no rol
107e0 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e  lback.** occurs.
107f0 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74    IGNORE means t
10800 68 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c  hat the particul
10810 61 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73  ar row that caus
10820 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ed the constrain
10830 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f  t.** error is no
10840 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70  t inserted or up
10850 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69  dated.  Processi
10860 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64  ng continues and
10870 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20   no error.** is 
10880 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41  returned.  REPLA
10890 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72  CE means that pr
108a0 65 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61  eexisting databa
108b0 73 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75  se rows that cau
108c0 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20  sed.** a UNIQUE 
108d0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
108e0 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64  tion are removed
108f0 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77   so that the new
10900 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70   insert or.** up
10910 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64  date can proceed
10920 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
10930 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
10940 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64  rror is reported
10950 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54  ..**.** RESTRICT
10960 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43  , SETNULL, and C
10970 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61  ASCADE actions a
10980 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72  pply only to for
10990 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45  eign keys..** RE
109a0 53 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61  STRICT is the sa
109b0 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20  me as ABORT for 
109c0 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67  IMMEDIATE foreig
109d0 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a  n keys and the.*
109e0 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41  * same as ROLLBA
109f0 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20  CK for DEFERRED 
10a00 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d  keys.  SETNULL m
10a10 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f  eans that the fo
10a20 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20  reign.** key is 
10a30 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41  set to NULL.  CA
10a40 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74  SCADE means that
10a50 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44   a DELETE or UPD
10a60 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65  ATE of the.** re
10a70 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72  ferenced table r
10a80 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64  ow is propagated
10a90 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68   into the row th
10aa0 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20  at holds the.** 
10ab0 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20  foreign key..** 
10ac0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
10ad0 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65  g symbolic value
10ae0 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 72 65  s are used to re
10af0 63 6f 72 64 20 77 68 69 63 68 20 74 79 70 65 0a  cord which type.
10b00 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20  ** of action to 
10b10 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  take..*/.#define
10b20 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20   OE_None     0  
10b30 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20   /* There is no 
10b40 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68  constraint to ch
10b50 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  eck */.#define O
10b60 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f  E_Rollback 1   /
10b70 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61  * Fail the opera
10b80 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63  tion and rollbac
10b90 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  k the transactio
10ba0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  n */.#define OE_
10bb0 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20  Abort    2   /* 
10bc0 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73  Back out changes
10bd0 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62   but do no rollb
10be0 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ack transaction 
10bf0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61  */.#define OE_Fa
10c00 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74  il     3   /* St
10c10 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  op the operation
10c20 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70   but leave all p
10c30 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a  rior changes */.
10c40 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72  #define OE_Ignor
10c50 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72  e   4   /* Ignor
10c60 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20  e the error. Do 
10c70 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52  not do the INSER
10c80 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23  T or UPDATE */.#
10c90 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63  define OE_Replac
10ca0 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65  e  5   /* Delete
10cb0 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64   existing record
10cc0 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54  , then do INSERT
10cd0 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23   or UPDATE */..#
10ce0 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69  define OE_Restri
10cf0 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f  ct 6   /* OE_Abo
10d00 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  rt for IMMEDIATE
10d10 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f  , OE_Rollback fo
10d20 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64  r DEFERRED */.#d
10d30 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c  efine OE_SetNull
10d40 20 20 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65    7   /* Set the
10d50 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c   foreign key val
10d60 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64  ue to NULL */.#d
10d70 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74  efine OE_SetDflt
10d80 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65    8   /* Set the
10d90 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c   foreign key val
10da0 75 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c  ue to its defaul
10db0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  t */.#define OE_
10dc0 43 61 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20  Cascade  9   /* 
10dd0 43 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e  Cascade the chan
10de0 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ges */..#define 
10df0 4f 45 5f 44 65 66 61 75 6c 74 20 20 31 30 20 20  OE_Default  10  
10e00 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20 74  /* Do whatever t
10e10 68 65 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f  he default actio
10e20 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  n is */.../*.** 
10e30 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
10e40 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
10e50 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64  ucture is passed
10e60 20 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   as the first.**
10e70 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c   argument to sql
10e80 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61  ite3VdbeKeyCompa
10e90 72 65 20 61 6e 64 20 69 73 20 75 73 65 64 20 74  re and is used t
10ea0 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a  o control the .*
10eb0 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20  * comparison of 
10ec0 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65  the two index ke
10ed0 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74  ys..**.** Note t
10ee0 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d  hat aSortOrder[]
10ef0 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76   and aColl[] hav
10f00 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73  e nField+1 slots
10f10 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20  .  There.** are 
10f20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72  nField slots for
10f30 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   the columns of 
10f40 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e  an index then on
10f50 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20  e extra slot.** 
10f60 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 74  for the rowid at
10f70 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72   the end..*/.str
10f80 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20  uct KeyInfo {.  
10f90 75 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20 20  u32 nRef;       
10fa0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
10fb0 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74   references to t
10fc0 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65  his KeyInfo obje
10fd0 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ct */.  u8 enc; 
10fe0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
10ff0 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f  ext encoding - o
11000 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45  ne of the SQLITE
11010 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a  _UTF* values */.
11020 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
11030 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
11040 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69  of key columns i
11050 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  n the index */. 
11060 20 75 31 36 20 6e 58 46 69 65 6c 64 3b 20 20 20   u16 nXField;   
11070 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
11080 66 20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64  f columns beyond
11090 20 74 68 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73   the key columns
110a0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
110b0 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  b;        /* The
110c0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
110d0 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53  tion */.  u8 *aS
110e0 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a  ortOrder;     /*
110f0 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20   Sort order for 
11100 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a  each column. */.
11110 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c    CollSeq *aColl
11120 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  [1];  /* Collati
11130 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20  ng sequence for 
11140 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65  each term of the
11150 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a   key */.};../*.*
11160 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
11170 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
11180 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69  tructure holds i
11190 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
111a0 20 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64   a.** single ind
111b0 65 78 20 72 65 63 6f 72 64 20 74 68 61 74 20 68  ex record that h
111c0 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  as already been 
111d0 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20  parsed out into 
111e0 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61  individual.** va
111f0 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65  lues..**.** A re
11200 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63  cord is an objec
11210 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  t that contains 
11220 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c  one or more fiel
11230 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52  ds of data..** R
11240 65 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20  ecords are used 
11250 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e  to store the con
11260 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20  tent of a table 
11270 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65  row and to store
11280 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61  .** the key of a
11290 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62  n index.  A blob
112a0 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72   encoding of a r
112b0 65 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64  ecord is created
112c0 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61   by.** the OP_Ma
112d0 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
112e0 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20  of the VDBE and 
112f0 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20  is disassembled 
11300 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c  by the.** OP_Col
11310 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  umn opcode..**.*
11320 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
11330 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20   holds a record 
11340 74 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79  that has already
11350 20 62 65 65 6e 20 64 69 73 61 73 73 65 6d 62 6c   been disassembl
11360 65 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63  ed.** into its c
11370 6f 6e 73 74 69 74 75 65 6e 74 20 66 69 65 6c 64  onstituent field
11380 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20  s..**.** The r1 
11390 61 6e 64 20 72 32 20 6d 65 6d 62 65 72 20 76 61  and r2 member va
113a0 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79  riables are only
113b0 20 75 73 65 64 20 62 79 20 74 68 65 20 6f 70 74   used by the opt
113c0 69 6d 69 7a 65 64 20 63 6f 6d 70 61 72 69 73 6f  imized compariso
113d0 6e 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 76  n.** functions v
113e0 64 62 65 52 65 63 6f 72 64 43 6f 6d 70 61 72 65  dbeRecordCompare
113f0 49 6e 74 28 29 20 61 6e 64 20 76 64 62 65 52 65  Int() and vdbeRe
11400 63 6f 72 64 43 6f 6d 70 61 72 65 53 74 72 69 6e  cordCompareStrin
11410 67 28 29 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55  g()..*/.struct U
11420 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a  npackedRecord {.
11430 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
11440 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  nfo;  /* Collati
11450 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65  on and sort-orde
11460 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f  r information */
11470 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20  .  u16 nField;  
11480 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
11490 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
114a0 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64  pMem[] */.  i8 d
114b0 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20  efault_rc;      
114c0 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65  /* Comparison re
114d0 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65  sult if keys are
114e0 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65   equal */.  u8 e
114f0 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20  rrCode;         
11500 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74 65  /* Error detecte
11510 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70  d by xRecordComp
11520 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20  are (CORRUPT or 
11530 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 4d 65 6d 20  NOMEM) */.  Mem 
11540 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *aMem;          
11550 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20 69  /* Values */.  i
11560 6e 74 20 72 31 3b 20 20 20 20 20 20 20 20 20 20  nt r1;          
11570 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
11580 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20  eturn if (lhs > 
11590 72 68 73 29 20 2a 2f 0a 20 20 69 6e 74 20 72 32  rhs) */.  int r2
115a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
115b0 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
115c0 20 69 66 20 28 72 68 73 20 3c 20 6c 68 73 29 20   if (rhs < lhs) 
115d0 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  */.};.../*.** Ea
115e0 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20  ch SQL index is 
115f0 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
11600 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69  emory by an.** i
11610 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
11620 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
11630 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  re..**.** The co
11640 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62  lumns of the tab
11650 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62  le that are to b
11660 65 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65  e indexed are de
11670 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68  scribed.** by th
11680 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65  e aiColumn[] fie
11690 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ld of this struc
116a0 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  ture.  For examp
116b0 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77  le, suppose.** w
116c0 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f  e have the follo
116d0 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69  wing table and i
116e0 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ndex:.**.**     
116f0 43 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31  CREATE TABLE Ex1
11700 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c  (c1 int, c2 int,
11710 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20   c3 text);.**   
11720 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45    CREATE INDEX E
11730 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29  x2 ON Ex1(c3,c1)
11740 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54  ;.**.** In the T
11750 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64  able structure d
11760 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e  escribing Ex1, n
11770 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74  Col==3 because t
11780 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65  here are.** thre
11790 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
117a0 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20   table.  In the 
117b0 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20  Index structure 
117c0 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78  describing.** Ex
117d0 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69  2, nColumn==2 si
117e0 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63  nce 2 of the 3 c
117f0 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72  olumns of Ex1 ar
11800 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68  e indexed..** Th
11810 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c  e value of aiCol
11820 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20  umn is {2, 0}.  
11830 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62  aiColumn[0]==2 b
11840 65 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20 66  ecause the .** f
11850 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  irst column to b
11860 65 20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68  e indexed (c3) h
11870 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32  as an index of 2
11880 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a   in Ex1.aCol[]..
11890 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f  ** The second co
118a0 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
118b0 65 64 20 28 63 31 29 20 68 61 73 20 61 6e 20 69  ed (c1) has an i
118c0 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20  ndex of 0 in.** 
118d0 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63  Ex1.aCol[], henc
118e0 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31  e Ex2.aiColumn[1
118f0 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ]==0..**.** The 
11900 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69  Index.onError fi
11910 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77  eld determines w
11920 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
11930 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  e indexed column
11940 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69  s.** must be uni
11950 71 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20  que and what to 
11960 64 6f 20 69 66 20 74 68 65 79 20 61 72 65 20 6e  do if they are n
11970 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e  ot.  When Index.
11980 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c  onError=OE_None,
11990 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69  .** it means thi
119a0 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75  s is not a uniqu
119b0 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77  e index.  Otherw
119c0 69 73 65 20 69 74 20 69 73 20 61 20 75 6e 69 71  ise it is a uniq
119d0 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20  ue index.** and 
119e0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64  the value of Ind
119f0 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63  ex.onError indic
11a00 61 74 65 20 74 68 65 20 77 68 69 63 68 20 63 6f  ate the which co
11a10 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
11a20 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20  n .** algorithm 
11a30 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76  to employ whenev
11a40 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73  er an attempt is
11a50 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20   made to insert 
11a60 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20  a non-unique.** 
11a70 65 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  element..*/.stru
11a80 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61  ct Index {.  cha
11a90 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
11aa0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
11ab0 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
11ac0 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20   i16 *aiColumn; 
11ad0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
11ae0 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75  ch columns are u
11af0 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65  sed by this inde
11b00 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a  x.  1st is 0 */.
11b10 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c    LogEst *aiRowL
11b20 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72  ogEst;     /* Fr
11b30 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e  om ANALYZE: Est.
11b40 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62   rows selected b
11b50 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  y each column */
11b60 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65  .  Table *pTable
11b70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
11b80 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69  he SQL table bei
11b90 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20  ng indexed */.  
11ba0 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
11bb0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69           /* Stri
11bc0 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20  ng defining the 
11bd0 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68  affinity of each
11be0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64   column */.  Ind
11bf0 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ex *pNext;      
11c00 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78        /* The nex
11c10 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74  t index associat
11c20 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ed with the same
11c30 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65   table */.  Sche
11c40 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
11c50 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
11c60 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69  ontaining this i
11c70 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53  ndex */.  u8 *aS
11c80 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
11c90 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63     /* for each c
11ca0 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53  olumn: True==DES
11cb0 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f  C, False==ASC */
11cc0 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c  .  char **azColl
11cd0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  ;           /* A
11ce0 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f  rray of collatio
11cf0 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73  n sequence names
11d00 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20   for index */.  
11d10 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68  Expr *pPartIdxWh
11d20 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52  ere;     /* WHER
11d30 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72  E clause for par
11d40 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a  tial indices */.
11d50 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
11d60 6e 66 6f 3b 20 20 20 20 20 20 20 2f 2a 20 41 20  nfo;       /* A 
11d70 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 73  KeyInfo object s
11d80 75 69 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73  uitable for this
11d90 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
11da0 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
11db0 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20       /* DB Page 
11dc0 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20  containing root 
11dd0 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  of this index */
11de0 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52  .  LogEst szIdxR
11df0 6f 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45  ow;         /* E
11e00 73 74 69 6d 61 74 65 64 20 61 76 65 72 61 67 65  stimated average
11e10 20 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74   row size in byt
11e20 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79  es */.  u16 nKey
11e30 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
11e40 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
11e50 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68  lumns forming th
11e60 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e  e key */.  u16 n
11e70 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
11e80 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11e90 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20   columns stored 
11ea0 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  in the index */.
11eb0 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20    u8 onError;   
11ec0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45             /* OE
11ed0 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72  _Abort, OE_Ignor
11ee0 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f  e, OE_Replace, o
11ef0 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75  r OE_None */.  u
11f00 6e 73 69 67 6e 65 64 20 69 64 78 54 79 70 65 3a  nsigned idxType:
11f10 32 3b 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e  2;      /* 1==UN
11f20 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59  IQUE, 2==PRIMARY
11f30 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20   KEY, 0==CREATE 
11f40 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67  INDEX */.  unsig
11f50 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31  ned bUnordered:1
11f60 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20  ;   /* Use this 
11f70 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20  index for == or 
11f80 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20  IN queries only 
11f90 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e  */.  unsigned un
11fa0 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a  iqNotNull:1;  /*
11fb0 20 54 72 75 65 20 69 66 20 55 4e 49 51 55 45 20   True if UNIQUE 
11fc0 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72  and NOT NULL for
11fd0 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a   all columns */.
11fe0 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73    unsigned isRes
11ff0 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72  ized:1;    /* Tr
12000 75 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65  ue if resizeInde
12010 78 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62 65  xObject() has be
12020 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75  en called */.  u
12030 6e 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69  nsigned isCoveri
12040 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  ng:1;   /* True 
12050 69 66 20 74 68 69 73 20 69 73 20 61 20 63 6f 76  if this is a cov
12060 65 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 23  ering index */.#
12070 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
12080 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
12090 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  T4.  int nSample
120a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
120b0 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   Number of eleme
120c0 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d  nts in aSample[]
120d0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c   */.  int nSampl
120e0 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  eCol;          /
120f0 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53  * Size of IndexS
12100 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64  ample.anEq[] and
12110 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77   so on */.  tRow
12120 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20  cnt *aAvgEq;    
12130 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20       /* Average 
12140 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b  nEq values for k
12150 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70  eys not in aSamp
12160 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d  le */.  IndexSam
12170 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20  ple *aSample;   
12180 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74   /* Samples of t
12190 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79  he left-most key
121a0 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f   */.#endif.};../
121b0 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
121c0 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64  ues for Index.id
121d0 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65  xType.*/.#define
121e0 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
121f0 41 50 50 44 45 46 20 20 20 20 20 20 30 20 20 20  APPDEF      0   
12200 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e 67  /* Created using
12210 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f   CREATE INDEX */
12220 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
12230 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20  IDXTYPE_UNIQUE  
12240 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65      1   /* Imple
12250 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63  ments a UNIQUE c
12260 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
12270 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
12280 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20  YPE_PRIMARYKEY  
12290 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52  2   /* Is the PR
122a0 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68  IMARY KEY for th
122b0 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52  e table */../* R
122c0 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e  eturn true if in
122d0 64 65 78 20 58 20 69 73 20 61 20 50 52 49 4d 41  dex X is a PRIMA
122e0 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a  RY KEY index */.
122f0 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72  #define IsPrimar
12300 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28 28  yKeyIndex(X)  ((
12310 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c  X)->idxType==SQL
12320 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d  ITE_IDXTYPE_PRIM
12330 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75  ARYKEY)../* Retu
12340 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78  rn true if index
12350 20 58 20 69 73 20 61 20 55 4e 49 51 55 45 20 69   X is a UNIQUE i
12360 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
12370 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29  IsUniqueIndex(X)
12380 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72        ((X)->onEr
12390 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f  ror!=OE_None)../
123a0 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65  *.** Each sample
123b0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73   stored in the s
123c0 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
123d0 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  e is represented
123e0 20 69 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75   in memory .** u
123f0 73 69 6e 67 20 61 20 73 74 72 75 63 74 75 72 65  sing a structure
12400 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20 20   of this type.  
12410 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  See documentatio
12420 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20  n at the top of 
12430 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63  the.** analyze.c
12440 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72   source file for
12450 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
12460 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
12470 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b  ct IndexSample {
12480 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20  .  void *p;     
12490 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
124a0 74 6f 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72  to sampled recor
124b0 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20  d */.  int n;   
124c0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
124d0 20 6f 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79   of record in by
124e0 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  tes */.  tRowcnt
124f0 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73   *anEq;    /* Es
12500 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  t. number of row
12510 73 20 77 68 65 72 65 20 74 68 65 20 6b 65 79 20  s where the key 
12520 65 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70  equals this samp
12530 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  le */.  tRowcnt 
12540 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74  *anLt;    /* Est
12550 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  . number of rows
12560 20 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65   where key is le
12570 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d  ss than this sam
12580 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  ple */.  tRowcnt
12590 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73   *anDLt;   /* Es
125a0 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73  t. number of dis
125b0 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20  tinct keys less 
125c0 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65  than this sample
125d0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61   */.};../*.** Ea
125e0 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20  ch token coming 
125f0 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72  out of the lexer
12600 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
12610 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63  of.** this struc
12620 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72  ture.  Tokens ar
12630 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70  e also used as p
12640 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73  art of an expres
12650 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  sion..**.** Note
12660 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74   if Token.z==0 t
12670 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e  hen Token.dyn an
12680 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e  d Token.n are un
12690 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d  defined and.** m
126a0 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f  ay contain rando
126b0 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f  m values.  Do no
126c0 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d  t make any assum
126d0 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b  ptions about Tok
126e0 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f  en.dyn.** and To
126f0 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e  ken.n when Token
12700 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74  .z==0..*/.struct
12710 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74   Token {.  const
12720 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a   char *z;     /*
12730 20 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b   Text of the tok
12740 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65  en.  Not NULL-te
12750 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75  rminated! */.  u
12760 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20  nsigned int n;  
12770 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
12780 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 69  haracters in thi
12790 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f  s token */.};../
127a0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
127b0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
127c0 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
127d0 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74  rmation needed t
127e0 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f  o generate.** co
127f0 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20  de for a SELECT 
12800 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67  that contains ag
12810 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
12820 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72  s..**.** If Expr
12830 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55  .op==TK_AGG_COLU
12840 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e  MN or TK_AGG_FUN
12850 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e  CTION then Expr.
12860 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a  pAggInfo is a.**
12870 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
12880 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65   structure.  The
12890 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69   Expr.iColumn fi
128a0 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65 78  eld is the index
128b0 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61   in.** AggInfo.a
128c0 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f  Col[] or AggInfo
128d0 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f  .aFunc[] of info
128e0 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74  rmation needed t
128f0 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f  o generate.** co
12900 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65  de for that node
12910 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e  ..**.** AggInfo.
12920 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67  pGroupBy and Agg
12930 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72  Info.aFunc.pExpr
12940 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73   point to fields
12950 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f   within the.** o
12960 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73  riginal Select s
12970 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65  tructure that de
12980 73 63 72 69 62 65 73 20 74 68 65 20 53 45 4c 45  scribes the SELE
12990 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  CT statement.  T
129a0 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64  hese.** fields d
129b0 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65  o not need to be
129c0 20 66 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c   freed when deal
129d0 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67 67  locating the Agg
129e0 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a  Info structure..
129f0 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66  */.struct AggInf
12a00 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d  o {.  u8 directM
12a10 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ode;          /*
12a20 20 44 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e   Direct renderin
12a30 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b  g mode means tak
12a40 65 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a  e data directly.
12a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a60 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f            ** fro
12a70 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20  m source tables 
12a80 72 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d  rather than from
12a90 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f   accumulators */
12aa0 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67  .  u8 useSorting
12ab0 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e  Idx;       /* In
12ac0 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65   direct mode, re
12ad0 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74  ference the sort
12ae0 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65 72  ing index rather
12af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12b00 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68             ** th
12b10 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  an the source ta
12b20 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72  ble */.  int sor
12b30 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20  tingIdx;        
12b40 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
12b50 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67  r of the sorting
12b60 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
12b70 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20  sortingIdxPTab; 
12b80 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
12b90 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74  mber of pseudo-t
12ba0 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  able */.  int nS
12bb0 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20  ortingColumn;   
12bc0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
12bd0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f  olumns in the so
12be0 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
12bf0 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65   int mnReg, mxRe
12c00 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67  g;       /* Rang
12c10 65 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61  e of registers a
12c20 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f  llocated for aCo
12c30 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20  l and aFunc */. 
12c40 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
12c50 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  pBy;     /* The 
12c60 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20  group by clause 
12c70 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49  */.  struct AggI
12c80 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20  nfo_col {    /* 
12c90 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  For each column 
12ca0 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74  used in source t
12cb0 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62  ables */.    Tab
12cc0 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
12cd0 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20        /* Source 
12ce0 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
12cf0 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
12d00 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
12d10 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f  number of the so
12d20 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
12d30 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20    int iColumn;  
12d40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
12d50 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68  lumn number with
12d60 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  in the source ta
12d70 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
12d80 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20  SorterColumn;   
12d90 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
12da0 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74  mber in the sort
12db0 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20  ing index */.   
12dc0 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20   int iMem;      
12dd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
12de0 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
12df0 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75  t acts as accumu
12e00 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70  lator */.    Exp
12e10 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
12e20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69        /* The ori
12e30 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e  ginal expression
12e40 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20   */.  } *aCol;. 
12e50 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20   int nColumn;   
12e60 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
12e70 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69  er of used entri
12e80 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a  es in aCol[] */.
12e90 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74    int nAccumulat
12ea0 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  or;       /* Num
12eb0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74  ber of columns t
12ec0 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68  hat show through
12ed0 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a   to the output..
12ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ef0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64            ** Add
12f00 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20  itional columns 
12f10 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73  are used only as
12f20 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20   parameters to. 
12f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f40 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72           ** aggr
12f50 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
12f60 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49  */.  struct AggI
12f70 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20  nfo_func {   /* 
12f80 46 6f 72 20 65 61 63 68 20 61 67 67 72 65 67 61  For each aggrega
12f90 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  te function */. 
12fa0 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
12fb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
12fc0 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69  xpression encodi
12fd0 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  ng the function 
12fe0 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a  */.    FuncDef *
12ff0 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  pFunc;          
13000 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61 74 65  /* The aggregate
13010 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d   function implem
13020 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  entation */.    
13030 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20  int iMem;       
13040 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
13050 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
13060 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c   acts as accumul
13070 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ator */.    int 
13080 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20  iDistinct;      
13090 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61       /* Ephemera
130a0 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20  l table used to 
130b0 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54  enforce DISTINCT
130c0 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a   */.  } *aFunc;.
130d0 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20    int nFunc;    
130e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
130f0 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
13100 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a  n aFunc[] */.};.
13110 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74  ./*.** The datat
13120 79 70 65 20 79 6e 56 61 72 20 69 73 20 61 20 73  ype ynVar is a s
13130 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65  igned integer, e
13140 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20  ither 16-bit or 
13150 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c  32-bit..** Usual
13160 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69 74 73  ly it is 16-bits
13170 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49 54 45  .  But if SQLITE
13180 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
13190 4d 42 45 52 20 69 73 20 67 72 65 61 74 65 72 0a  MBER is greater.
131a0 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77 65  ** than 32767 we
131b0 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74   have to make it
131c0 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74   32-bit.  16-bit
131d0 20 69 73 20 70 72 65 66 65 72 72 65 64 20 62 65   is preferred be
131e0 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73  cause.** it uses
131f0 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20   less memory in 
13200 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c  the Expr object,
13210 20 77 68 69 63 68 20 69 73 20 61 20 62 69 67 20   which is a big 
13220 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69  memory user.** i
13230 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c  n systems with l
13240 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65 64 20  ots of prepared 
13250 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64  statements.  And
13260 20 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e   few application
13270 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74  s.** need more t
13280 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20  han about 10 or 
13290 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42  20 variables.  B
132a0 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20  ut some extreme 
132b0 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f  users want.** to
132c0 20 68 61 76 65 20 70 72 65 70 61 72 65 64 20 73   have prepared s
132d0 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f  tatements with o
132e0 76 65 72 20 33 32 37 36 37 20 76 61 72 69 61 62  ver 32767 variab
132f0 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65  les, and for the
13300 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20  m.** the option 
13310 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74  is available (at
13320 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a   compile-time)..
13330 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
13340 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
13350 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66  R<=32767.typedef
13360 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73   i16 ynVar;.#els
13370 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e  e.typedef int yn
13380 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  Var;.#endif../*.
13390 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20  ** Each node of 
133a0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  an expression in
133b0 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
133c0 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  is an instance.*
133d0 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
133e0 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ure..**.** Expr.
133f0 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65  op is the opcode
13400 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 70 61  . The integer pa
13410 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73  rser token codes
13420 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61   are reused.** a
13430 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20  s opcodes here. 
13440 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
13450 20 70 61 72 73 65 72 20 64 65 66 69 6e 65 73 20   parser defines 
13460 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69  TK_GE to be an i
13470 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72  nteger.** code r
13480 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
13490 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54  ">=" operator. T
134a0 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72  his same integer
134b0 20 63 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a   code is reused.
134c0 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20  ** to represent 
134d0 74 68 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e  the greater-than
134e0 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65  -or-equal-to ope
134f0 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70  rator in the exp
13500 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e  ression.** tree.
13510 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
13520 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
13530 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49  QL literal (TK_I
13540 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54  NTEGER, TK_FLOAT
13550 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20 6f  , TK_BLOB, .** o
13560 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68  r TK_STRING), th
13570 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
13580 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74 20  ntains the text 
13590 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72  of the SQL liter
135a0 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78  al. If.** the ex
135b0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61  pression is a va
135c0 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41  riable (TK_VARIA
135d0 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  BLE), then Expr.
135e0 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
135f0 68 65 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20  he .** variable 
13600 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69  name. Finally, i
13610 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
13620 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
13630 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e  ion (TK_FUNCTION
13640 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e  ),.** then Expr.
13650 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
13660 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
13670 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45  unction..**.** E
13680 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45  xpr.pRight and E
13690 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68  xpr.pLeft are th
136a0 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
136b0 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20   subexpressions 
136c0 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f  of a.** binary o
136d0 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20  perator. Either 
136e0 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e  or both may be N
136f0 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ULL..**.** Expr.
13700 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73  x.pList is a lis
13710 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69  t of arguments i
13720 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
13730 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
13740 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65  ion,.** a CASE e
13750 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20  xpression or an 
13760 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  IN expression of
13770 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
13780 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e   IN (<y>, <z>...
13790 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53  )"..** Expr.x.pS
137a0 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69 66  elect is used if
137b0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
137c0 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20  is a sub-select 
137d0 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
137e0 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20   of.** the form 
137f0 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43  "<lhs> IN (SELEC
13800 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20  T ...)". If the 
13810 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74  EP_xIsSelect bit
13820 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a   is set in the.*
13830 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  * Expr.flags mas
13840 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70  k, then Expr.x.p
13850 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e  Select is valid.
13860 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70 72   Otherwise, Expr
13870 2e 78 2e 70 4c 69 73 74 20 69 73 20 0a 2a 2a 20  .x.pList is .** 
13880 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  valid..**.** An 
13890 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68  expression of th
138a0 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e  e form ID or ID.
138b0 49 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63  ID refers to a c
138c0 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65  olumn in a table
138d0 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78  ..** For such ex
138e0 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e  pressions, Expr.
138f0 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f  op is set to TK_
13900 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e  COLUMN and Expr.
13910 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65  iTable is.** the
13920 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20   integer cursor 
13930 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45  number of a VDBE
13940 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
13950 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61   to that table a
13960 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75  nd.** Expr.iColu
13970 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e  mn is the column
13980 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
13990 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e  specific column.
139a0 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72    If the.** expr
139b0 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61  ession is used a
139c0 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  s a result in an
139d0 20 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43   aggregate SELEC
139e0 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76  T, then the.** v
139f0 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f  alue is also sto
13a00 72 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e  red in the Expr.
13a10 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  iAgg column in t
13a20 68 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20  he aggregate so 
13a30 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62  that.** it can b
13a40 65 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72  e accessed after
13a50 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20   all aggregates 
13a60 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a  are computed..**
13a70 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
13a80 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f  ssion is an unbo
13a90 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72  und variable mar
13aa0 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20  ker (a question 
13ab0 6d 61 72 6b 20 0a 2a 2a 20 63 68 61 72 61 63 74  mark .** charact
13ac0 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72  er '?' in the or
13ad0 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e  iginal SQL) then
13ae0 20 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65   the Expr.iTable
13af0 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78   holds the index
13b00 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20   .** number for 
13b10 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a  that variable..*
13b20 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
13b30 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71  ession is a subq
13b40 75 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69  uery then Expr.i
13b50 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20  Column holds an 
13b60 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73  integer.** regis
13b70 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61  ter number conta
13b80 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74  ining the result
13b90 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72 79   of the subquery
13ba0 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62  .  If the.** sub
13bb0 71 75 65 72 79 20 67 69 76 65 73 20 61 20 63 6f  query gives a co
13bc0 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74  nstant result, t
13bd0 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31  hen iTable is -1
13be0 2e 20 20 49 66 20 74 68 65 20 73 75 62 71 75 65  .  If the subque
13bf0 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69  ry.** gives a di
13c00 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61  fferent answer a
13c10 74 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65  t different time
13c20 73 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65  s during stateme
13c30 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a  nt processing.**
13c40 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20   then iTable is 
13c50 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61  the address of a
13c60 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74   subroutine that
13c70 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75   computes the su
13c80 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66  bquery..**.** If
13c90 20 74 68 65 20 45 78 70 72 20 69 73 20 6f 66 20   the Expr is of 
13ca0 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20  type OP_Column, 
13cb0 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 74  and the table it
13cc0 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72   is selecting fr
13cd0 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20  om.** is a disk 
13ce0 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c  table or the "ol
13cf0 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c  d.*" pseudo-tabl
13d00 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69  e, then pTab poi
13d10 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f  nts to the.** co
13d20 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c  rresponding tabl
13d30 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a  e definition..**
13d40 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e  .** ALLOCATION N
13d50 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72  OTES:.**.** Expr
13d60 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65   objects can use
13d70 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79   a lot of memory
13d80 20 73 70 61 63 65 20 69 6e 20 64 61 74 61 62 61   space in databa
13d90 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a  se schema.  To.*
13da0 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65  * help reduce me
13db0 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74  mory requirement
13dc0 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20  s, sometimes an 
13dd0 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c  Expr object will
13de0 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64   be.** truncated
13df0 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65  .  And to reduce
13e00 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d   the number of m
13e10 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
13e20 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20  s, sometimes.** 
13e30 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72  two or more Expr
13e40 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65   objects will be
13e50 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e   stored in a sin
13e60 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  gle memory alloc
13e70 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68  ation,.** togeth
13e80 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f  er with Expr.zTo
13e90 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a  ken strings..**.
13ea0 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64  ** If the EP_Red
13eb0 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65  uced and EP_Toke
13ec0 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20  nOnly flags are 
13ed0 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45  set when.** an E
13ee0 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72  xpr object is tr
13ef0 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45  uncated.  When E
13f00 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74  P_Reduced is set
13f10 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68  , then all.** th
13f20 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a  e child Expr obj
13f30 65 63 74 73 20 69 6e 20 74 68 65 20 45 78 70 72  ects in the Expr
13f40 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e  .pLeft and Expr.
13f50 70 52 69 67 68 74 20 73 75 62 74 72 65 65 73 0a  pRight subtrees.
13f60 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  ** are contained
13f70 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
13f80 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
13f90 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76  on.  Note, howev
13fa0 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  er, that.** the 
13fb0 73 75 62 74 72 65 65 73 20 69 6e 20 45 78 70 72  subtrees in Expr
13fc0 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72  .x.pList or Expr
13fd0 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61  .x.pSelect are a
13fe0 6c 77 61 79 73 20 73 65 70 61 72 61 74 65 6c 79  lways separately
13ff0 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72  .** allocated, r
14000 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
14010 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52  ther or not EP_R
14020 65 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a  educed is set..*
14030 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a  /.struct Expr {.
14040 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
14050 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72           /* Oper
14060 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20  ation performed 
14070 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a  by this node */.
14080 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
14090 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
140a0 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20  affinity of the 
140b0 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e  column or 0 if n
140c0 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  ot a column */. 
140d0 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20   u32 flags;     
140e0 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f          /* Vario
140f0 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20  us flags.  EP_* 
14100 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75  See below */.  u
14110 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20  nion {.    char 
14120 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20  *zToken;        
14130 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65    /* Token value
14140 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65  . Zero terminate
14150 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a  d and dequoted *
14160 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65  /.    int iValue
14170 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
14180 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74  Non-negative int
14190 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 45 50  eger value if EP
141a0 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d  _IntValue */.  }
141b0 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   u;..  /* If the
141c0 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
141d0 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  ag is set in the
141e0 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
141f0 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73  , then no.  ** s
14200 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  pace is allocate
14210 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73  d for the fields
14220 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e   below this poin
14230 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f  t. An attempt to
14240 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65  .  ** access the
14250 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  m will result in
14260 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d   a segfault or m
14270 61 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a 20 20 2a  alfunction. .  *
14280 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14290 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
142a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
142b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
142c0 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70  ****/..  Expr *p
142d0 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20 20 20  Left;           
142e0 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20  /* Left subnode 
142f0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68  */.  Expr *pRigh
14300 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  t;          /* R
14310 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a  ight subnode */.
14320 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78    union {.    Ex
14330 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20  prList *pList;  
14340 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45     /* op = IN, E
14350 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43  XISTS, SELECT, C
14360 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42  ASE, FUNCTION, B
14370 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65  ETWEEN */.    Se
14380 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
14390 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65     /* EP_xIsSele
143a0 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20  ct and op = IN, 
143b0 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a  EXISTS, SELECT *
143c0 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49  /.  } x;..  /* I
143d0 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  f the EP_Reduced
143e0 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
143f0 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
14400 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
14410 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
14420 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
14430 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
14440 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
14450 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
14460 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
14470 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
14480 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20  r malfunction.. 
14490 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
144a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
144b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
144c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
144d0 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c  ******/..#if SQL
144e0 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
144f0 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67  TH>0.  int nHeig
14500 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ht;           /*
14510 20 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74   Height of the t
14520 72 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68  ree headed by th
14530 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69  is node */.#endi
14540 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20  f.  int iTable; 
14550 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
14560 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20  _COLUMN: cursor 
14570 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20  number of table 
14580 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20  holding column. 
14590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145a0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45          ** TK_RE
145b0 47 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72  GISTER: register
145c0 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20   number.        
145d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145e0 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20   ** TK_TRIGGER: 
145f0 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f  1 -> new, 0 -> o
14600 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ld.             
14610 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45              ** E
14620 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 30 30  P_Unlikely:  100
14630 30 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f  0 times likeliho
14640 6f 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43  od */.  ynVar iC
14650 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f  olumn;         /
14660 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c  * TK_COLUMN: col
14670 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66  umn index.  -1 f
14680 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20  or rowid..      
14690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146a0 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c     ** TK_VARIABL
146b0 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62  E: variable numb
146c0 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29  er (always >= 1)
146d0 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b  . */.  i16 iAgg;
146e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
146f0 20 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20   Which entry in 
14700 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d  pAggInfo->aCol[]
14710 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f   or ->aFunc[] */
14720 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69  .  i16 iRightJoi
14730 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20  nTable;   /* If 
14740 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65  EP_FromJoin, the
14750 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20   right table of 
14760 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38  the join */.  u8
14770 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20   op2;           
14780 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53       /* TK_REGIS
14790 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61  TER: original va
147a0 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20  lue of Expr.op. 
147b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147c0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f          ** TK_CO
147d0 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20  LUMN: the value 
147e0 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c  of p5 for OP_Col
147f0 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  umn.            
14800 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
14810 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a  TK_AGG_FUNCTION:
14820 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a   nesting depth *
14830 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67  /.  AggInfo *pAg
14840 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73  gInfo;     /* Us
14850 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c  ed by TK_AGG_COL
14860 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46  UMN and TK_AGG_F
14870 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62  UNCTION */.  Tab
14880 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
14890 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72      /* Table for
148a0 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65   TK_COLUMN expre
148b0 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f  ssions. */.};../
148c0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
148d0 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69  ng are the meani
148e0 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74  ngs of bits in t
148f0 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  he Expr.flags fi
14900 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
14910 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30  EP_FromJoin  0x0
14920 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61  00001 /* Origina
14930 74 65 64 20 69 6e 20 4f 4e 20 6f 72 20 55 53 49  ted in ON or USI
14940 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  NG clause of a j
14950 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  oin */.#define E
14960 50 5f 41 67 67 20 20 20 20 20 20 20 30 78 30 30  P_Agg       0x00
14970 30 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  0002 /* Contains
14980 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   one or more agg
14990 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
149a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52   */.#define EP_R
149b0 65 73 6f 6c 76 65 64 20 20 30 78 30 30 30 30 30  esolved  0x00000
149c0 34 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65  4 /* IDs have be
149d0 65 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43  en resolved to C
149e0 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e  OLUMNs */.#defin
149f0 65 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20 30  e EP_Error     0
14a00 78 30 30 30 30 30 38 20 2f 2a 20 45 78 70 72 65  x000008 /* Expre
14a10 73 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f  ssion contains o
14a20 6e 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72  ne or more error
14a30 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
14a40 44 69 73 74 69 6e 63 74 20 20 30 78 30 30 30 30  Distinct  0x0000
14a50 31 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  10 /* Aggregate 
14a60 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49  function with DI
14a70 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a  STINCT keyword *
14a80 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72  /.#define EP_Var
14a90 53 65 6c 65 63 74 20 30 78 30 30 30 30 32 30 20  Select 0x000020 
14aa0 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f  /* pSelect is co
14ab0 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f  rrelated, not co
14ac0 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  nstant */.#defin
14ad0 65 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30  e EP_DblQuoted 0
14ae0 78 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e  x000040 /* token
14af0 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c  .z was originall
14b00 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64  y in "..." */.#d
14b10 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75  efine EP_InfixFu
14b20 6e 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54  nc 0x000080 /* T
14b30 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78  rue for an infix
14b40 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c   function: LIKE,
14b50 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64   GLOB, etc */.#d
14b60 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65  efine EP_Collate
14b70 20 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54     0x000100 /* T
14b80 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54  ree contains a T
14b90 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74  K_COLLATE operat
14ba0 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  or */.#define EP
14bb0 5f 47 65 6e 65 72 69 63 20 20 20 30 78 30 30 30  _Generic   0x000
14bc0 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f  200 /* Ignore CO
14bd0 4c 4c 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74  LLATE or affinit
14be0 79 20 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a  y on this tree *
14bf0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74  /.#define EP_Int
14c00 56 61 6c 75 65 20 20 30 78 30 30 30 34 30 30 20  Value  0x000400 
14c10 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
14c20 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e   contained in u.
14c30 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e  iValue */.#defin
14c40 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30  e EP_xIsSelect 0
14c50 78 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65  x000800 /* x.pSe
14c60 6c 65 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f  lect is valid (o
14c70 74 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74  therwise x.pList
14c80 20 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20   is) */.#define 
14c90 45 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30  EP_Skip      0x0
14ca0 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45  01000 /* COLLATE
14cb0 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c  , AS, or UNLIKEL
14cc0 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  Y */.#define EP_
14cd0 52 65 64 75 63 65 64 20 20 20 30 78 30 30 32 30  Reduced   0x0020
14ce0 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
14cf0 74 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49  t EXPR_REDUCEDSI
14d00 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f  ZE bytes only */
14d10 0a 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65  .#define EP_Toke
14d20 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f  nOnly 0x004000 /
14d30 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58  * Expr struct EX
14d40 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45  PR_TOKENONLYSIZE
14d50 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
14d60 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63  define EP_Static
14d70 20 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20      0x008000 /* 
14d80 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e  Held in memory n
14d90 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ot obtained from
14da0 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65   malloc() */.#de
14db0 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e  fine EP_MemToken
14dc0 20 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65    0x010000 /* Ne
14dd0 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46  ed to sqlite3DbF
14de0 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65  ree() Expr.zToke
14df0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
14e00 4e 6f 52 65 64 75 63 65 20 20 30 78 30 32 30 30  NoReduce  0x0200
14e10 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50  00 /* Cannot EXP
14e20 52 44 55 50 5f 52 45 44 55 43 45 20 74 68 69 73  RDUP_REDUCE this
14e30 20 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65   Expr */.#define
14e40 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78   EP_Unlikely  0x
14e50 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65  040000 /* unlike
14e60 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f  ly() or likeliho
14e70 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  od() function */
14e80 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73  .#define EP_Cons
14e90 74 61 6e 74 20 20 30 78 30 38 30 30 30 30 20 2f  tant  0x080000 /
14ea0 2a 20 4e 6f 64 65 20 69 73 20 61 20 63 6f 6e 73  * Node is a cons
14eb0 74 61 6e 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  tant */../*.** T
14ec0 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20  hese macros can 
14ed0 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c  be used to test,
14ee0 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62   set, or clear b
14ef0 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 45  its in the .** E
14f00 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e  xpr.flags field.
14f10 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72  .*/.#define Expr
14f20 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29  HasProperty(E,P)
14f30 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67       (((E)->flag
14f40 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69  s&(P))!=0).#defi
14f50 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f  ne ExprHasAllPro
14f60 70 65 72 74 79 28 45 2c 50 29 20 20 28 28 28 45  perty(E,P)  (((E
14f70 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28  )->flags&(P))==(
14f80 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  P)).#define Expr
14f90 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29  SetProperty(E,P)
14fa0 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c       (E)->flags|
14fb0 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70  =(P).#define Exp
14fc0 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45  rClearProperty(E
14fd0 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73  ,P)   (E)->flags
14fe0 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45  &=~(P)../* The E
14ff0 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
15000 79 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65  y() macro is use
15010 64 20 66 6f 72 20 56 65 72 69 66 69 63 61 74 69  d for Verificati
15020 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a  on, Validation,.
15030 2a 2a 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  ** and Accredita
15040 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77  tion only.  It w
15050 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65  orks like ExprSe
15060 74 50 72 6f 70 65 72 74 79 28 29 20 64 75 72 69  tProperty() duri
15070 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73  ng VVA.** proces
15080 73 65 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d  ses but is a no-
15090 6f 70 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e  op for delivery.
150a0 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
150b0 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65  E_DEBUG.# define
150c0 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65   ExprSetVVAPrope
150d0 72 74 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66  rty(E,P)  (E)->f
150e0 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a  lags|=(P).#else.
150f0 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  # define ExprSet
15100 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29  VVAProperty(E,P)
15110 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
15120 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
15130 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ne the number of
15140 20 62 79 74 65 73 20 72 65 71 75 69 72 65 64 20   bytes required 
15150 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72  by a normal Expr
15160 20 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20   .** struct, an 
15170 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68  Expr struct with
15180 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
15190 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70 72  flag set in Expr
151a0 2e 66 6c 61 67 73 20 0a 2a 2a 20 61 6e 64 20 61  .flags .** and a
151b0 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69  n Expr struct wi
151c0 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f  th the EP_TokenO
151d0 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f  nly flag set..*/
151e0 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55  .#define EXPR_FU
151f0 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20 20  LLSIZE          
15200 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20   sizeof(Expr)   
15210 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20          /* Full 
15220 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  size */.#define 
15230 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45  EXPR_REDUCEDSIZE
15240 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66          offsetof
15250 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f  (Expr,iTable)  /
15260 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65  * Common feature
15270 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  s */.#define EXP
15280 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20  R_TOKENONLYSIZE 
15290 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78       offsetof(Ex
152a0 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46  pr,pLeft)   /* F
152b0 65 77 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f  ewer features */
152c0 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61  ../*.** Flags pa
152d0 73 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69  ssed to the sqli
152e0 74 65 33 45 78 70 72 44 75 70 28 29 20 66 75 6e  te3ExprDup() fun
152f0 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68  ction. See the h
15300 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a  eader comment .*
15310 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45  * above sqlite3E
15320 78 70 72 44 75 70 28 29 20 66 6f 72 20 64 65 74  xprDup() for det
15330 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
15340 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
15350 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20          0x0001  
15360 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65 64 2d  /* Used reduced-
15370 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20  size Expr nodes 
15380 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74  */../*.** A list
15390 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e   of expressions.
153a0 20 20 45 61 63 68 20 65 78 70 72 65 73 73 69 6f    Each expressio
153b0 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79  n may optionally
153c0 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e   have a.** name.
153d0 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63    An expr/name c
153e0 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62  ombination can b
153f0 65 20 75 73 65 64 20 69 6e 20 73 65 76 65 72 61  e used in severa
15400 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20  l ways, such.** 
15410 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22  as the list of "
15420 65 78 70 72 20 41 53 20 49 44 22 20 66 69 65 6c  expr AS ID" fiel
15430 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22  ds following a "
15440 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68  SELECT" or in th
15450 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44  e.** list of "ID
15460 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20 69   = expr" items i
15470 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20  n an UPDATE.  A 
15480 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
15490 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20  ons can.** also 
154a0 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61  be used as the a
154b0 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e  rgument to a fun
154c0 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20  ction, in which 
154d0 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65  case the a.zName
154e0 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74  .** field is not
154f0 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20   used..**.** By 
15500 64 65 66 61 75 6c 74 20 74 68 65 20 45 78 70 72  default the Expr
15510 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c  .zSpan field hol
15520 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61  ds a human-reada
15530 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20  ble description 
15540 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73  of.** the expres
15550 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65  sion that is use
15560 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74  d in the generat
15570 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73  ion of error mes
15580 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c  sages and.** col
15590 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20  umn labels.  In 
155a0 74 68 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e  this case, Expr.
155b0 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c  zSpan is typical
155c0 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  ly the text of a
155d0 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65  .** column expre
155e0 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73  ssion as it exis
155f0 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73  ts in a SELECT s
15600 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76  tatement.  Howev
15610 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53  er, if.** the bS
15620 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73  panIsTab flag is
15630 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e   set, then zSpan
15640 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74   is overloaded t
15650 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a  o mean the name.
15660 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ** of the result
15670 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66   column in the f
15680 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41  orm: DATABASE.TA
15690 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69  BLE.COLUMN.  Thi
156a0 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20  s later.** form 
156b0 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65  is used for name
156c0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68   resolution with
156d0 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61   nested FROM cla
156e0 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  uses..*/.struct 
156f0 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74  ExprList {.  int
15700 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20 20   nExpr;         
15710 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
15720 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20   expressions on 
15730 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74  the list */.  st
15740 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74  ruct ExprList_it
15750 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68  em { /* For each
15760 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
15770 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45  he list */.    E
15780 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
15790 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 69         /* The li
157a0 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
157b0 73 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  s */.    char *z
157c0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
157d0 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69   /* Token associ
157e0 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 65  ated with this e
157f0 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20  xpression */.   
15800 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20   char *zSpan;   
15810 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67           /* Orig
15820 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65  inal text of the
15830 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
15840 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b     u8 sortOrder;
15850 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20             /* 1 
15860 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f  for DESC or 0 fo
15870 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73  r ASC */.    uns
15880 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20  igned done :1;  
15890 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74       /* A flag t
158a0 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20  o indicate when 
158b0 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69  processing is fi
158c0 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e  nished */.    un
158d0 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61  signed bSpanIsTa
158e0 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68  b :1; /* zSpan h
158f0 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f  olds DB.TABLE.CO
15900 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69  LUMN */.    unsi
15910 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a 31  gned reusable :1
15920 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  ;   /* Constant 
15930 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72 65  expression is re
15940 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e  usable */.    un
15950 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74 72 75  ion {.      stru
15960 63 74 20 7b 0a 20 20 20 20 20 20 20 20 75 31 36  ct {.        u16
15970 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20   iOrderByCol;   
15980 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20     /* For ORDER 
15990 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  BY, column numbe
159a0 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20  r in result set 
159b0 2a 2f 0a 20 20 20 20 20 20 20 20 75 31 36 20 69  */.        u16 i
159c0 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20  Alias;          
159d0 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50   /* Index into P
159e0 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f  arse.aAlias[] fo
159f0 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20  r zName */.     
15a00 20 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e 74 20   } x;.      int 
15a10 69 43 6f 6e 73 74 45 78 70 72 52 65 67 3b 20 20  iConstExprReg;  
15a20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
15a30 69 6e 20 77 68 69 63 68 20 45 78 70 72 20 76 61  in which Expr va
15a40 6c 75 65 20 69 73 20 63 61 63 68 65 64 20 2a 2f  lue is cached */
15a50 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20 2a 61  .    } u;.  } *a
15a60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
15a70 20 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f     /* Alloc a po
15a80 77 65 72 20 6f 66 20 74 77 6f 20 67 72 65 61 74  wer of two great
15a90 65 72 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e  er or equal to n
15aa0 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  Expr */.};../*.*
15ab0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
15ac0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
15ad0 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70  is used by the p
15ae0 61 72 73 65 72 20 74 6f 20 72 65 63 6f 72 64 20  arser to record 
15af0 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61 72 73  both.** the pars
15b00 65 20 74 72 65 65 20 66 6f 72 20 61 6e 20 65 78  e tree for an ex
15b10 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65  pression and the
15b20 20 73 70 61 6e 20 6f 66 20 69 6e 70 75 74 20 74   span of input t
15b30 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78  ext for an.** ex
15b40 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  pression..*/.str
15b50 75 63 74 20 45 78 70 72 53 70 61 6e 20 7b 0a 20  uct ExprSpan {. 
15b60 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
15b70 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65 78         /* The ex
15b80 70 72 65 73 73 69 6f 6e 20 70 61 72 73 65 20 74  pression parse t
15b90 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ree */.  const c
15ba0 68 61 72 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f  har *zStart;   /
15bb0 2a 20 46 69 72 73 74 20 63 68 61 72 61 63 74 65  * First characte
15bc0 72 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20  r of input text 
15bd0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
15be0 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e  *zEnd;     /* On
15bf0 65 20 63 68 61 72 61 63 74 65 72 20 70 61 73 74  e character past
15c00 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75   the end of inpu
15c10 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  t text */.};../*
15c20 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
15c30 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
15c40 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d  e can hold a sim
15c50 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e  ple list of iden
15c60 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68  tifiers,.** such
15c70 20 61 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c   as the list "a,
15c80 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c  b,c" in the foll
15c90 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73  owing statements
15ca0 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53  :.**.**      INS
15cb0 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63  ERT INTO t(a,b,c
15cc0 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a  ) VALUES ...;.**
15cd0 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44        CREATE IND
15ce0 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c  EX idx ON t(a,b,
15cf0 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  c);.**      CREA
15d00 54 45 20 54 52 49 47 47 45 52 20 74 72 69 67 20  TE TRIGGER trig 
15d10 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e  BEFORE UPDATE ON
15d20 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a   t(a,b,c) ...;.*
15d30 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e  *.** The IdList.
15d40 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20 75  a.idx field is u
15d50 73 65 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c  sed when the IdL
15d60 69 73 74 20 72 65 70 72 65 73 65 6e 74 73 20 74  ist represents t
15d70 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f  he list of.** co
15d80 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72  lumn names after
15d90 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e   a table name in
15da0 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65   an INSERT state
15db0 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74  ment.  In the st
15dc0 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20  atement.**.**   
15dd0 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28    INSERT INTO t(
15de0 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a  a,b,c) ....**.**
15df0 20 49 66 20 22 61 22 20 69 73 20 74 68 65 20 6b   If "a" is the k
15e00 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61  -th column of ta
15e10 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64  ble "t", then Id
15e20 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b  List.a[0].idx==k
15e30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69  ..*/.struct IdLi
15e40 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64  st {.  struct Id
15e50 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20  List_item {.    
15e60 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
15e70 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
15e80 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20   identifier */. 
15e90 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20     int idx;     
15ea0 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
15eb0 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c   some Table.aCol
15ec0 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e  [] of a column n
15ed0 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20  amed zName */.  
15ee0 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b  } *a;.  int nId;
15ef0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15f00 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72  er of identifier
15f10 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  s on the list */
15f20 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62  .};../*.** The b
15f30 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20  itmask datatype 
15f40 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73  defined below is
15f50 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75   used for variou
15f60 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e  s optimizations.
15f70 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20  .**.** Changing 
15f80 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62  this from a 64-b
15f90 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74  it to a 32-bit t
15fa0 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e  ype limits the n
15fb0 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c  umber of.** tabl
15fc0 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20  es in a join to 
15fd0 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34  32 instead of 64
15fe0 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72  .  But it also r
15ff0 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a  educes the size.
16000 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72  ** of the librar
16010 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f  y by 738 bytes o
16020 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74 79 70 65 64  n ix86..*/.typed
16030 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a  ef u64 Bitmask;.
16040 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
16050 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42  r of bits in a B
16060 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d  itmask.  "BMS" m
16070 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69  eans "BitMask Si
16080 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ze"..*/.#define 
16090 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65  BMS  ((int)(size
160a0 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a  of(Bitmask)*8)).
160b0 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20  ./*.** A bit in 
160c0 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65  a Bitmask.*/.#de
160d0 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20  fine MASKBIT(n) 
160e0 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c    (((Bitmask)1)<
160f0 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d 41  <(n)).#define MA
16100 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75 6e  SKBIT32(n) (((un
16110 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28  signed int)1)<<(
16120 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  n))../*.** The f
16130 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
16140 72 65 20 64 65 73 63 72 69 62 65 73 20 74 68 65  re describes the
16150 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
16160 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
16170 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c  nt..** Each tabl
16180 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e  e or subquery in
16190 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
161a0 20 69 73 20 61 20 73 65 70 61 72 61 74 65 20 65   is a separate e
161b0 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65  lement of.** the
161c0 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72   SrcList.a[] arr
161d0 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74  ay..**.** With t
161e0 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d  he addition of m
161f0 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65  ultiple database
16200 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f   support, the fo
16210 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
16220 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65  e.** can also be
16230 20 75 73 65 64 20 74 6f 20 64 65 73 63 72 69 62   used to describ
16240 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74  e a particular t
16250 61 62 6c 65 20 73 75 63 68 20 61 73 20 74 68 65  able such as the
16260 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69   table that.** i
16270 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e  s modified by an
16280 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c   INSERT, DELETE,
16290 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65   or UPDATE state
162a0 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61  ment.  In standa
162b0 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20  rd SQL,.** such 
162c0 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20  a table must be 
162d0 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49  a simple name: I
162e0 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74  D.  But in SQLit
162f0 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e  e, the table can
16300 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74  .** now be ident
16310 69 66 69 65 64 20 62 79 20 61 20 64 61 74 61 62  ified by a datab
16320 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c  ase name, a dot,
16330 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
16340 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a  name: ID.ID..**.
16350 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20  ** The jointype 
16360 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69  starts out showi
16370 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65  ng the join type
16380 20 62 65 74 77 65 65 6e 20 74 68 65 20 63 75 72   between the cur
16390 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e  rent table.** an
163a0 64 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65  d the next table
163b0 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54   on the list.  T
163c0 68 65 20 70 61 72 73 65 72 20 62 75 69 6c 64 73  he parser builds
163d0 20 74 68 65 20 6c 69 73 74 20 74 68 69 73 20 77   the list this w
163e0 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74  ay..** But sqlit
163f0 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f  e3SrcListShiftJo
16400 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20 73  inType() later s
16410 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79  hifts the jointy
16420 70 65 73 20 73 6f 20 74 68 61 74 20 65 61 63 68  pes so that each
16430 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70  .** jointype exp
16440 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20  resses the join 
16450 62 65 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c  between the tabl
16460 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f  e and the previo
16470 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  us table..**.** 
16480 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66  In the colUsed f
16490 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f  ield, the high-o
164a0 72 64 65 72 20 62 69 74 20 28 62 69 74 20 36 33  rder bit (bit 63
164b0 29 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20  ) is set if the 
164c0 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e  table.** contain
164d0 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63  s more than 63 c
164e0 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36  olumns and the 6
164f0 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f  4-th or later co
16500 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f  lumn is used..*/
16510 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20  .struct SrcList 
16520 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20  {.  int nSrc;   
16530 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16540 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71  f tables or subq
16550 75 65 72 69 65 73 20 69 6e 20 74 68 65 20 46 52  ueries in the FR
16560 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75  OM clause */.  u
16570 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  32 nAlloc;      
16580 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
16590 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69  ries allocated i
165a0 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20  n a[] below */. 
165b0 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
165c0 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d  item {.    Schem
165d0 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20  a *pSchema;  /* 
165e0 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20  Schema to which 
165f0 74 68 69 73 20 69 74 65 6d 20 69 73 20 66 69 78  this item is fix
16600 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  ed */.    char *
16610 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e  zDatabase;  /* N
16620 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ame of database 
16630 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62  holding this tab
16640 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  le */.    char *
16650 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  zName;      /* N
16660 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
16670 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41   */.    char *zA
16680 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65  lias;     /* The
16690 20 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22   "B" part of a "
166a0 41 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20  A AS B" phrase. 
166b0 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41   zName is the "A
166c0 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a  " */.    Table *
166d0 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e  pTab;      /* An
166e0 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65   SQL table corre
166f0 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d  sponding to zNam
16700 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  e */.    Select 
16710 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20  *pSelect;  /* A 
16720 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
16730 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f   used in place o
16740 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a  f a table name *
16750 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46 69  /.    int addrFi
16760 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65  llSub;  /* Addre
16770 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65  ss of subroutine
16780 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73   to manifest a s
16790 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69  ubquery */.    i
167a0 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20  nt regReturn;   
167b0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
167c0 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72  ding return addr
167d0 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53  ess of addrFillS
167e0 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  ub */.    int re
167f0 67 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52  gResult;    /* R
16800 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67  egisters holding
16810 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f   results of a co
16820 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20  -routine */.    
16830 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20  u8 jointype;    
16840 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69    /* Type of joi
16850 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 61  n between this a
16860 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
16870 69 6f 75 73 20 2a 2f 0a 20 20 20 20 75 6e 73 69  ious */.    unsi
16880 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20  gned notIndexed 
16890 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  :1;    /* True i
168a0 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54  f there is a NOT
168b0 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20   INDEXED clause 
168c0 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
168d0 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b  isCorrelated :1;
168e0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62    /* True if sub
168f0 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c  -query is correl
16900 61 74 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69  ated */.    unsi
16910 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e  gned viaCoroutin
16920 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d  e :1;  /* Implem
16930 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f  ented as a co-ro
16940 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 75 6e 73  utine */.    uns
16950 69 67 6e 65 64 20 69 73 52 65 63 75 72 73 69 76  igned isRecursiv
16960 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  e :1;   /* True 
16970 66 6f 72 20 72 65 63 75 72 73 69 76 65 20 72 65  for recursive re
16980 66 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20  ference in WITH 
16990 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
169a0 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20  E_OMIT_EXPLAIN. 
169b0 20 20 20 75 38 20 69 53 65 6c 65 63 74 49 64 3b     u8 iSelectId;
169c0 20 20 20 20 20 2f 2a 20 49 66 20 70 53 65 6c 65       /* If pSele
169d0 63 74 21 3d 30 2c 20 74 68 65 20 69 64 20 6f 66  ct!=0, the id of
169e0 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74 20   the sub-select 
169f0 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66  in EQP */.#endif
16a00 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72  .    int iCursor
16a10 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44  ;      /* The VD
16a20 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  BE cursor number
16a30 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
16a40 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
16a50 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20    Expr *pOn;    
16a60 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c      /* The ON cl
16a70 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
16a80 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55  /.    IdList *pU
16a90 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55  sing;   /* The U
16aa0 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61  SING clause of a
16ab0 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74   join */.    Bit
16ac0 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f  mask colUsed;  /
16ad0 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73  * Bit N (1<<N) s
16ae0 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f  et if column N o
16af0 66 20 70 54 61 62 20 69 73 20 75 73 65 64 20 2a  f pTab is used *
16b00 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64  /.    char *zInd
16b10 65 78 3b 20 20 20 20 20 2f 2a 20 49 64 65 6e 74  ex;     /* Ident
16b20 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45  ifier from "INDE
16b30 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22  XED BY <zIndex>"
16b40 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 49   clause */.    I
16b50 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20  ndex *pIndex;   
16b60 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74   /* Index struct
16b70 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ure correspondin
16b80 67 20 74 6f 20 7a 49 6e 64 65 78 2c 20 69 66 20  g to zIndex, if 
16b90 61 6e 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b  any */.  } a[1];
16ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16bb0 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
16bc0 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e  ch identifier on
16bd0 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
16be0 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64  ./*.** Permitted
16bf0 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53   values of the S
16c00 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70  rcList.a.jointyp
16c10 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69  e field.*/.#defi
16c20 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20  ne JT_INNER     
16c30 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79  0x0001    /* Any
16c40 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f   kind of inner o
16c50 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a  r cross join */.
16c60 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53  #define JT_CROSS
16c70 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f       0x0002    /
16c80 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f  * Explicit use o
16c90 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77  f the CROSS keyw
16ca0 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  ord */.#define J
16cb0 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30  T_NATURAL   0x00
16cc0 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  04    /* True fo
16cd0 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f  r a "natural" jo
16ce0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
16cf0 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30  _LEFT      0x000
16d00 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74  8    /* Left out
16d10 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
16d20 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20  ne JT_RIGHT     
16d30 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67  0x0010    /* Rig
16d40 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ht outer join */
16d50 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45  .#define JT_OUTE
16d60 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20  R     0x0020    
16d70 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b  /* The "OUTER" k
16d80 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e  eyword is presen
16d90 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  t */.#define JT_
16da0 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30  ERROR     0x0040
16db0 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f      /* unknown o
16dc0 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f  r unsupported jo
16dd0 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a  in type */.../*.
16de0 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72  ** Flags appropr
16df0 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74  iate for the wct
16e00 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65  rlFlags paramete
16e10 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72  r of sqlite3Wher
16e20 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20  eBegin().** and 
16e30 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63  the WhereInfo.wc
16e40 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e  trlFlags member.
16e50 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52  .*/.#define WHER
16e60 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c  E_ORDERBY_NORMAL
16e70 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d     0x0000 /* No-
16e80 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  op */.#define WH
16e90 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20  ERE_ORDERBY_MIN 
16ea0 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f       0x0001 /* O
16eb0 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69  RDER BY processi
16ec0 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e  ng for min() fun
16ed0 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  c */.#define WHE
16ee0 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20  RE_ORDERBY_MAX  
16ef0 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52      0x0002 /* OR
16f00 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e  DER BY processin
16f10 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63  g for max() func
16f20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
16f30 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45  E_ONEPASS_DESIRE
16f40 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e  D  0x0004 /* Wan
16f50 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73  t to do one-pass
16f60 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a   UPDATE/DELETE *
16f70 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
16f80 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20  DUPLICATES_OK   
16f90 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20 74 6f   0x0008 /* Ok to
16fa0 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f   return a row mo
16fb0 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a  re than once */.
16fc0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d  #define WHERE_OM
16fd0 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20 20 30  IT_OPEN_CLOSE  0
16fe0 78 30 30 31 30 20 2f 2a 20 54 61 62 6c 65 20 63  x0010 /* Table c
16ff0 75 72 73 6f 72 73 20 61 72 65 20 61 6c 72 65 61  ursors are alrea
17000 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69  dy open */.#defi
17010 6e 65 20 57 48 45 52 45 5f 46 4f 52 43 45 5f 54  ne WHERE_FORCE_T
17020 41 42 4c 45 20 20 20 20 20 20 30 78 30 30 32 30  ABLE      0x0020
17030 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 61   /* Do not use a
17040 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73 65 61  n index-only sea
17050 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  rch */.#define W
17060 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e  HERE_ONETABLE_ON
17070 4c 59 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20  LY    0x0040 /* 
17080 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65 20 31 73  Only code the 1s
17090 74 20 74 61 62 6c 65 20 69 6e 20 70 54 61 62 4c  t table in pTabL
170a0 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ist */.#define W
170b0 48 45 52 45 5f 41 4e 44 5f 4f 4e 4c 59 20 20 20  HERE_AND_ONLY   
170c0 20 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20        0x0080 /* 
170d0 44 6f 6e 27 74 20 75 73 65 20 69 6e 64 69 63 65  Don't use indice
170e0 73 20 66 6f 72 20 4f 52 20 74 65 72 6d 73 20 2a  s for OR terms *
170f0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
17100 47 52 4f 55 50 42 59 20 20 20 20 20 20 20 20 20  GROUPBY         
17110 20 30 78 30 31 30 30 20 2f 2a 20 70 4f 72 64 65   0x0100 /* pOrde
17120 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rBy is really a 
17130 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66  GROUP BY */.#def
17140 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
17150 43 54 42 59 20 20 20 20 20 20 20 30 78 30 32 30  CTBY       0x020
17160 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73  0 /* pOrderby is
17170 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e   really a DISTIN
17180 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  CT clause */.#de
17190 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f  fine WHERE_WANT_
171a0 44 49 53 54 49 4e 43 54 20 20 20 20 30 78 30 34  DISTINCT    0x04
171b0 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74  00 /* All output
171c0 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69 73   needs to be dis
171d0 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65  tinct */.#define
171e0 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f   WHERE_SORTBYGRO
171f0 55 50 20 20 20 20 20 20 30 78 30 38 30 30 20 2f  UP      0x0800 /
17200 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65  * Support sqlite
17210 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 29  3WhereIsSorted()
17220 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
17230 45 5f 52 45 4f 50 45 4e 5f 49 44 58 20 20 20 20  E_REOPEN_IDX    
17240 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72 79     0x1000 /* Try
17250 20 74 6f 20 75 73 65 20 4f 50 5f 52 65 6f 70 65   to use OP_Reope
17260 6e 49 64 78 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f  nIdx */../* Allo
17270 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
17280 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 57 68  s from sqlite3Wh
17290 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 29 0a  ereIsDistinct().
172a0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
172b0 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20  _DISTINCT_NOOP  
172c0 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e      0  /* DISTIN
172d0 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75  CT keyword not u
172e0 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  sed */.#define W
172f0 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e  HERE_DISTINCT_UN
17300 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f  IQUE    1  /* No
17310 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23   duplicates */.#
17320 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
17330 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20  TINCT_ORDERED   
17340 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63  2  /* All duplic
17350 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e  ates are adjacen
17360 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
17370 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52  RE_DISTINCT_UNOR
17380 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c  DERED 3  /* Dupl
17390 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74 74  icates are scatt
173a0 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  ered */../*.** A
173b0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66   NameContext def
173c0 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69  ines a context i
173d0 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c  n which to resol
173e0 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c  ve table and col
173f0 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54  umn.** names.  T
17400 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69  he context consi
17410 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66  sts of a list of
17420 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53 72   tables (the pSr
17430 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64  cList) field and
17440 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61  .** a list of na
17450 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28  med expression (
17460 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61  pEList).  The na
17470 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  med expression l
17480 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55  ist may.** be NU
17490 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f  LL.  The pSrc co
174a0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
174b0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
174c0 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74  a SELECT or.** t
174d0 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  o the table bein
174e0 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79  g operated on by
174f0 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c   INSERT, UPDATE,
17500 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65   or DELETE.  The
17510 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65  .** pEList corre
17520 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65  sponds to the re
17530 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45  sult set of a SE
17540 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c  LECT and is NULL
17550 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74   for.** other st
17560 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
17570 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e  NameContexts can
17580 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65   be nested.  Whe
17590 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  n resolving name
175a0 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73  s, the inner-mos
175b0 74 20 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  t .** context is
175c0 20 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e   searched first.
175d0 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73    If no match is
175e0 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74   found, the next
175f0 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78   outer.** contex
17600 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49  t is checked.  I
17610 66 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c  f there is still
17620 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e   no match, the n
17630 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69  ext context.** i
17640 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73  s checked.  This
17650 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75   process continu
17660 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20  es until either 
17670 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
17680 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65  .** or all conte
17690 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20  xts are check.  
176a0 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20  When a match is 
176b0 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20  found, the nRef 
176c0 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65  member of.** the
176d0 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e   context contain
176e0 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73  ing the match is
176f0 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a   incremented. .*
17700 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65  *.** Each subque
17710 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61  ry gets a new Na
17720 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20  meContext.  The 
17730 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e  pNext field poin
17740 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d  ts to the.** Nam
17750 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20  eContext in the 
17760 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54  parent query.  T
17770 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73 20  hus the process 
17780 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a  of scanning the.
17790 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c  ** NameContext l
177a0 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ist corresponds 
177b0 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68 72  to searching thr
177c0 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65 6c  ough successivel
177d0 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75  y outer.** subqu
177e0 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f  eries looking fo
177f0 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74  r a match..*/.st
17800 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ruct NameContext
17810 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
17820 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  se;       /* The
17830 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63   parser */.  Src
17840 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20  List *pSrcList; 
17850 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65    /* One or more
17860 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20   tables used to 
17870 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f  resolve names */
17880 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c  .  ExprList *pEL
17890 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f  ist;    /* Optio
178a0 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65 73 75  nal list of resu
178b0 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a  lt-set columns *
178c0 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67  /.  AggInfo *pAg
178d0 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f  gInfo;   /* Info
178e0 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67  rmation about ag
178f0 67 72 65 67 61 74 65 73 20 61 74 20 74 68 69 73  gregates at this
17900 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65   level */.  Name
17910 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20  Context *pNext; 
17920 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e   /* Next outer n
17930 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55  ame context.  NU
17940 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74  LL for outermost
17950 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20   */.  int nRef; 
17960 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
17970 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65  mber of names re
17980 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20 63  solved by this c
17990 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20  ontext */.  int 
179a0 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  nErr;           
179b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
179c0 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  rors encountered
179d0 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67   while resolving
179e0 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 31 36 20   names */.  u16 
179f0 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  ncFlags;        
17a00 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65   /* Zero or more
17a10 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69   NC_* flags defi
17a20 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  ned below */.};.
17a30 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
17a40 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61  alues for the Na
17a50 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61  meContext, ncFla
17a60 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
17a70 4e 6f 74 65 3a 20 20 4e 43 5f 4d 69 6e 4d 61 78  Note:  NC_MinMax
17a80 41 67 67 20 6d 75 73 74 20 68 61 76 65 20 74 68  Agg must have th
17a90 65 20 73 61 6d 65 20 76 61 6c 75 65 20 61 73 20  e same value as 
17aa0 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 61 6e 64  SF_MinMaxAgg and
17ab0 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  .** SQLITE_FUNC_
17ac0 4d 49 4e 4d 41 58 2e 0a 2a 2a 20 0a 2a 2f 0a 23  MINMAX..** .*/.#
17ad0 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41  define NC_AllowA
17ae0 67 67 20 20 30 78 30 30 30 31 20 20 2f 2a 20 41  gg  0x0001  /* A
17af0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
17b00 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68  ns are allowed h
17b10 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ere */.#define N
17b20 43 5f 48 61 73 41 67 67 20 20 20 20 30 78 30 30  C_HasAgg    0x00
17b30 30 32 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f  02  /* One or mo
17b40 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
17b50 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23  ctions seen */.#
17b60 64 65 66 69 6e 65 20 4e 43 5f 49 73 43 68 65 63  define NC_IsChec
17b70 6b 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54  k   0x0004  /* T
17b80 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67  rue if resolving
17b90 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43   names in a CHEC
17ba0 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  K constraint */.
17bb0 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67  #define NC_InAgg
17bc0 46 75 6e 63 20 30 78 30 30 30 38 20 20 2f 2a 20  Func 0x0008  /* 
17bd0 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e  True if analyzin
17be0 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61  g arguments to a
17bf0 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64  n agg func */.#d
17c00 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64 78  efine NC_PartIdx
17c10 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 54 72     0x0010  /* Tr
17c20 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20  ue if resolving 
17c30 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20  a partial index 
17c40 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65  WHERE */.#define
17c50 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78   NC_MinMaxAgg 0x
17c60 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78  1000  /* min/max
17c70 20 61 67 67 72 65 67 61 74 65 73 20 73 65 65 6e   aggregates seen
17c80 2e 20 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 76  .  See note abov
17c90 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  e */../*.** An i
17ca0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
17cb0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
17cc0 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20  re contains all 
17cd0 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e  information.** n
17ce0 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
17cf0 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e  e code for a sin
17d00 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  gle SELECT state
17d10 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d  ment..**.** nLim
17d20 69 74 20 69 73 20 73 65 74 20 74 6f 20 2d 31 20  it is set to -1 
17d30 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c  if there is no L
17d40 49 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f  IMIT clause.  nO
17d50 66 66 73 65 74 20 69 73 20 73 65 74 20 74 6f 20  ffset is set to 
17d60 30 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69  0..** If there i
17d70 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  s a LIMIT clause
17d80 2c 20 74 68 65 20 70 61 72 73 65 72 20 73 65 74  , the parser set
17d90 73 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65 20  s nLimit to the 
17da0 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20  value of the.** 
17db0 6c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65  limit and nOffse
17dc0 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
17dd0 66 20 74 68 65 20 6f 66 66 73 65 74 20 28 6f 72  f the offset (or
17de0 20 30 20 69 66 20 74 68 65 72 65 20 69 73 20 6e   0 if there is n
17df0 6f 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20  ot.** offset).  
17e00 42 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c  But later on, nL
17e10 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74  imit and nOffset
17e20 20 62 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f   become the memo
17e30 72 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20  ry locations.** 
17e40 69 6e 20 74 68 65 20 56 44 42 45 20 74 68 61 74  in the VDBE that
17e50 20 72 65 63 6f 72 64 20 74 68 65 20 6c 69 6d 69   record the limi
17e60 74 20 61 6e 64 20 6f 66 66 73 65 74 20 63 6f 75  t and offset cou
17e70 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64  nters..**.** add
17e80 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72  rOpenEphm[] entr
17e90 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ies contain the 
17ea0 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70  address of OP_Op
17eb0 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f  enEphemeral opco
17ec0 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64  des..** These ad
17ed0 64 72 65 73 73 65 73 20 6d 75 73 74 20 62 65 20  dresses must be 
17ee0 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77  stored so that w
17ef0 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e  e can go back an
17f00 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65  d fill in.** the
17f10 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20   P4_KEYINFO and 
17f20 50 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61  P2 parameters la
17f30 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68  ter.  Neither th
17f40 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a  e KeyInfo nor.**
17f50 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
17f60 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e  olumns in P2 can
17f70 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20   be computed at 
17f80 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a  the same time.**
17f90 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45   as the OP_OpenE
17fa0 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  phm instruction 
17fb0 69 73 20 63 6f 64 65 64 20 62 65 63 61 75 73 65  is coded because
17fc0 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69   not.** enough i
17fd0 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
17fe0 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75   the compound qu
17ff0 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20  ery is known at 
18000 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54  that point..** T
18010 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61  he KeyInfo for a
18020 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61  ddrOpenTran[0] a
18030 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20  nd [1] contains 
18040 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
18050 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  ces.** for the r
18060 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20  esult set.  The 
18070 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72  KeyInfo for addr
18080 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74  OpenEphm[2] cont
18090 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a  ains collating.*
180a0 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20  * sequences for 
180b0 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
180c0 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  use..*/.struct S
180d0 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69  elect {.  ExprLi
180e0 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20  st *pEList;     
180f0 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f   /* The fields o
18100 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a  f the result */.
18110 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
18120 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
18130 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f  of: TK_UNION TK_
18140 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54  ALL TK_INTERSECT
18150 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20   TK_EXCEPT */.  
18160 75 31 36 20 73 65 6c 46 6c 61 67 73 3b 20 20 20  u16 selFlags;   
18170 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75         /* Variou
18180 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  s SF_* values */
18190 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69  .  int iLimit, i
181a0 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d  Offset;   /* Mem
181b0 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 68 6f  ory registers ho
181c0 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46  lding LIMIT & OF
181d0 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f  FSET counters */
181e0 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45  .#if SELECTTRACE
181f0 5f 45 4e 41 42 4c 45 44 0a 20 20 63 68 61 72 20  _ENABLED.  char 
18200 7a 53 65 6c 4c 61 62 65 6c 5b 31 32 5d 3b 20 20  zSelLabel[12];  
18210 20 20 2f 2a 20 54 65 78 74 20 69 6e 20 63 6f 6d    /* Text in com
18220 6d 65 6e 74 20 66 6f 6c 6c 6f 77 69 6e 67 20 53  ment following S
18230 45 4c 45 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f  ELECT keyword */
18240 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 61 64  .#endif.  int ad
18250 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20  drOpenEphm[2];  
18260 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   /* OP_OpenEphem
18270 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64   opcodes related
18280 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20   to this select 
18290 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65 63 74  */.  u64 nSelect
182a0 52 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a 20 45  Row;        /* E
182b0 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20  stimated number 
182c0 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a  of result rows *
182d0 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
182e0 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  c;         /* Th
182f0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
18300 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
18310 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
18320 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f   WHERE clause */
18330 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
18340 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  oupBy;    /* The
18350 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
18360 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76   */.  Expr *pHav
18370 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ing;         /* 
18380 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  The HAVING claus
18390 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
183a0 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a  *pOrderBy;    /*
183b0 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
183c0 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ause */.  Select
183d0 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20   *pPrior;       
183e0 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74   /* Prior select
183f0 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73   in a compound s
18400 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20  elect statement 
18410 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65  */.  Select *pNe
18420 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
18430 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68  ext select to th
18440 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70  e left in a comp
18450 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ound */.  Expr *
18460 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20  pLimit;         
18470 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73   /* LIMIT expres
18480 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73  sion. NULL means
18490 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20   not used. */.  
184a0 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20  Expr *pOffset;  
184b0 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54         /* OFFSET
184c0 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c   expression. NUL
184d0 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64  L means not used
184e0 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69  . */.  With *pWi
184f0 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  th;           /*
18500 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74 74   WITH clause att
18510 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73 65  ached to this se
18520 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a  lect. Or NULL. *
18530 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
18540 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53  wed values for S
18550 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20  elect.selFlags. 
18560 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78   The "SF" prefix
18570 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22   stands for.** "
18580 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f  Select Flag"..*/
18590 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74  .#define SF_Dist
185a0 69 6e 63 74 20 20 20 20 20 20 20 20 30 78 30 30  inct        0x00
185b0 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68  01  /* Output sh
185c0 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54  ould be DISTINCT
185d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52   */.#define SF_R
185e0 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20 30  esolved        0
185f0 78 30 30 30 32 20 20 2f 2a 20 49 64 65 6e 74 69  x0002  /* Identi
18600 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20  fiers have been 
18610 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66  resolved */.#def
18620 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65  ine SF_Aggregate
18630 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
18640 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  * Contains aggre
18650 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
18660 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65  /.#define SF_Use
18670 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78 30  sEphemeral   0x0
18680 30 30 38 20 20 2f 2a 20 55 73 65 73 20 74 68 65  008  /* Uses the
18690 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f   OpenEphemeral o
186a0 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65  pcode */.#define
186b0 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20   SF_Expanded    
186c0 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 73      0x0010  /* s
186d0 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61  qlite3SelectExpa
186e0 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74  nd() called on t
186f0 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  his */.#define S
18700 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20  F_HasTypeInfo   
18710 20 20 30 78 30 30 32 30 20 20 2f 2a 20 46 52 4f    0x0020  /* FRO
18720 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76  M subqueries hav
18730 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61  e Table metadata
18740 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43   */.#define SF_C
18750 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 20 30  ompound        0
18760 78 30 30 34 30 20 20 2f 2a 20 50 61 72 74 20 6f  x0040  /* Part o
18770 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  f a compound que
18780 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ry */.#define SF
18790 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20  _Values         
187a0 20 30 78 30 30 38 30 20 20 2f 2a 20 53 79 6e 74   0x0080  /* Synt
187b0 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c  hesized from VAL
187c0 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  UES clause */.  
187d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187e0 20 20 2f 2a 20 20 20 20 20 30 78 30 31 30 30 20    /*     0x0100 
187f0 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0a 23 64 65   NOT USED */.#de
18800 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72  fine SF_NestedFr
18810 6f 6d 20 20 20 20 20 20 30 78 30 32 30 30 20 20  om      0x0200  
18820 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61 72  /* Part of a par
18830 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20  enthesized FROM 
18840 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
18850 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72  e SF_MaybeConver
18860 74 20 20 20 20 30 78 30 34 30 30 20 20 2f 2a 20  t    0x0400  /* 
18870 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70  Need convertComp
18880 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
18890 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e  uery() */.#defin
188a0 65 20 53 46 5f 52 65 63 75 72 73 69 76 65 20 20  e SF_Recursive  
188b0 20 20 20 20 20 30 78 30 38 30 30 20 20 2f 2a 20       0x0800  /* 
188c0 54 68 65 20 72 65 63 75 72 73 69 76 65 20 70 61  The recursive pa
188d0 72 74 20 6f 66 20 61 20 72 65 63 75 72 73 69 76  rt of a recursiv
188e0 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  e CTE */.#define
188f0 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20   SF_MinMaxAgg   
18900 20 20 20 20 30 78 31 30 30 30 20 20 2f 2a 20 41      0x1000  /* A
18910 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e  ggregate contain
18920 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78  ing min() or max
18930 28 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68  () */.../*.** Th
18940 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53  e results of a S
18950 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69 73  ELECT can be dis
18960 74 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65  tributed in seve
18970 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66  ral ways, as def
18980 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f  ined.** by one o
18990 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
189a0 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52  macros.  The "SR
189b0 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20  T" prefix means 
189c0 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a  "SELECT Result.*
189d0 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20  * Type"..**.**  
189e0 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20     SRT_Union    
189f0 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
18a00 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74   as a key in a t
18a10 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 0a  emporary index .
18a20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18a30 20 20 20 20 20 20 20 69 64 65 6e 74 69 66 69 65         identifie
18a40 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50  d by pDest->iSDP
18a50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  arm..**.**     S
18a60 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 52  RT_Except      R
18a70 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72  emove results fr
18a80 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  om the temporary
18a90 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53   index pDest->iS
18aa0 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  DParm..**.**    
18ab0 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20   SRT_Exists     
18ac0 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65   Store a 1 in me
18ad0 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d  mory cell pDest-
18ae0 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68 65 20  >iSDParm if the 
18af0 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20  result.**       
18b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
18b10 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a  t is not empty..
18b20 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
18b30 73 63 61 72 64 20 20 20 20 20 54 68 72 6f 77 20  scard     Throw 
18b40 74 68 65 20 72 65 73 75 6c 74 73 20 61 77 61 79  the results away
18b50 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64 20  .  This is used 
18b60 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20  by SELECT.**    
18b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b80 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
18b90 69 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f 73  in triggers whos
18ba0 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69  e only purpose i
18bb0 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
18bc0 20 20 20 20 20 20 20 20 20 74 68 65 20 73 69 64           the sid
18bd0 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e  e-effects of fun
18be0 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c  ctions..**.** Al
18bf0 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61  l of the above a
18c00 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72  re free to ignor
18c10 65 20 74 68 65 69 72 20 4f 52 44 45 52 20 42 59  e their ORDER BY
18c20 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74   clause. Those t
18c30 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75  hat.** follow mu
18c40 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44  st honor the ORD
18c50 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a  ER BY clause..**
18c60 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70  .**     SRT_Outp
18c70 75 74 20 20 20 20 20 20 47 65 6e 65 72 61 74 65  ut      Generate
18c80 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74   a row of output
18c90 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52   (using the OP_R
18ca0 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20  esultRow.**     
18cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cc0 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68  opcode) for each
18cd0 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75   row in the resu
18ce0 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  lt set..**.**   
18cf0 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20    SRT_Mem       
18d00 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20    Only valid if 
18d10 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 20  the result is a 
18d20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a  single column..*
18d30 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
18d40 20 20 20 20 20 20 53 74 6f 72 65 20 74 68 65 20        Store the 
18d50 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20  first column of 
18d60 74 68 65 20 66 69 72 73 74 20 72 65 73 75 6c 74  the first result
18d70 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20   row.**         
18d80 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 20 72              in r
18d90 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69  egister pDest->i
18da0 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e  SDParm then aban
18db0 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20  don the rest.** 
18dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18dd0 20 20 20 20 6f 66 20 74 68 65 20 71 75 65 72 79      of the query
18de0 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e 61 74  .  This destinat
18df0 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d  ion implies "LIM
18e00 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  IT 1"..**.**    
18e10 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20   SRT_Set        
18e20 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74   The result must
18e30 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c   be a single col
18e40 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68  umn.  Store each
18e50 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18e60 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72          row of r
18e70 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79  esult as the key
18e80 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d   in table pDest-
18e90 3e 69 53 44 50 61 72 6d 2e 20 0a 2a 2a 20 20 20  >iSDParm. .**   
18ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18eb0 20 20 41 70 70 6c 79 20 74 68 65 20 61 66 66 69    Apply the affi
18ec0 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53  nity pDest->affS
18ed0 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69  dst before stori
18ee0 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ng.**           
18ef0 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
18f00 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c  s.  Used to impl
18f10 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43  ement "IN (SELEC
18f20 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20  T ...)"..**.**  
18f30 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20     SRT_EphemTab 
18f40 20 20 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d     Create an tem
18f50 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
18f60 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20  st->iSDParm and 
18f70 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20  store.**        
18f80 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
18f90 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54   result there. T
18fa0 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66  he cursor is lef
18fb0 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20  t open after.** 
18fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fd0 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20      returning.  
18fe0 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54  This is like SRT
18ff0 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20 74 68  _Table except th
19000 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  at.**           
19010 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 64            this d
19020 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20  estination uses 
19030 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
19040 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20   to create.**   
19050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19060 20 20 74 68 65 20 74 61 62 6c 65 20 66 69 72 73    the table firs
19070 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
19080 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e  _Coroutine   Gen
19090 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69  erate a co-routi
190a0 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  ne that returns 
190b0 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20  a new row of.** 
190c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190d0 20 20 20 20 72 65 73 75 6c 74 73 20 65 61 63 68      results each
190e0 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f   time it is invo
190f0 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20  ked.  The entry 
19100 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20  point.**        
19110 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20               of 
19120 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69  the co-routine i
19130 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
19140 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50  ster pDest->iSDP
19150 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  arm.**          
19160 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20 74             and t
19170 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73  he result row is
19180 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74   stored in pDest
19190 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65 72  ->nDest register
191a0 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
191b0 20 20 20 20 20 20 20 20 20 73 74 61 72 74 69 6e           startin
191c0 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53  g with pDest->iS
191d0 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  dst..**.**     S
191e0 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53  RT_Table       S
191f0 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
19200 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
19210 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
19220 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20  **     SRT_Fifo 
19230 20 20 20 20 20 20 20 54 68 69 73 20 69 73 20 6c         This is l
19240 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62  ike SRT_EphemTab
19250 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
19260 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20   table.**       
19270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73                is
19280 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65   assumed to alre
19290 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52  ady be open.  SR
192a0 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20  T_Fifo has.**   
192b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192c0 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c    the additional
192d0 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69   property of bei
192e0 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72  ng able to ignor
192f0 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
19300 20 20 20 20 20 20 20 20 20 74 68 65 20 4f 52 44           the ORD
19310 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a  ER BY clause..**
19320 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74  .**     SRT_Dist
19330 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65  Fifo    Store re
19340 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f  sults in a tempo
19350 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
19360 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
19370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19380 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74    But also use t
19390 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
193a0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20  Dest->iSDParm+1 
193b0 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  as.**           
193c0 20 20 20 20 20 20 20 20 20 20 61 20 72 65 63 6f            a reco
193d0 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20  rd of all prior 
193e0 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f  results and igno
193f0 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65  re any duplicate
19400 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19410 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e          rows.  N
19420 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73  ame means:  "Dis
19430 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a  tinct Fifo"..**.
19440 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75 65  **     SRT_Queue
19450 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
19460 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79  ults in priority
19470 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53   queue pDest->iS
19480 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a  DParm (really.**
19490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194a0 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20       an index). 
194b0 20 41 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e   Append a sequen
194c0 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61  ce number so tha
194d0 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a  t all entries.**
194e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194f0 20 20 20 20 20 61 72 65 20 64 69 73 74 69 6e 63       are distinc
19500 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
19510 5f 44 69 73 74 51 75 65 75 65 20 20 20 53 74 6f  _DistQueue   Sto
19520 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72  re results in pr
19530 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65  iority queue pDe
19540 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79  st->iSDParm only
19550 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   if.**          
19560 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
19570 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e  ame record has n
19580 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64  ever been stored
19590 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a   before.  The.**
195a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195b0 20 20 20 20 20 69 6e 64 65 78 20 61 74 20 70 44       index at pD
195c0 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68  est->iSDParm+1 h
195d0 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74  old all prior st
195e0 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ores..*/.#define
195f0 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
19600 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    1  /* Store re
19610 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20  sult as keys in 
19620 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
19630 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20  ine SRT_Except  
19640 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76       2  /* Remov
19650 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20  e result from a 
19660 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23  UNION index */.#
19670 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74  define SRT_Exist
19680 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74  s       3  /* St
19690 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73  ore 1 if the res
196a0 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  ult is not empty
196b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
196c0 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20  Discard      4  
196d0 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74  /* Do not save t
196e0 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68  he results anywh
196f0 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ere */.#define S
19700 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20  RT_Fifo         
19710 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  5  /* Store resu
19720 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20  lt as data with 
19730 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77  an automatic row
19740 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  id */.#define SR
19750 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20 36  T_DistFifo     6
19760 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69    /* Like SRT_Fi
19770 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72  fo, but unique r
19780 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23  esults only */.#
19790 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65  define SRT_Queue
197a0 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74          7  /* St
197b0 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  ore result in an
197c0 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e   queue */.#defin
197d0 65 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20  e SRT_DistQueue 
197e0 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52     8  /* Like SR
197f0 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69  T_Queue, but uni
19800 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79  que results only
19810 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45   */../* The ORDE
19820 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69  R BY clause is i
19830 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f  gnored for all o
19840 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23  f the above */.#
19850 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65  define Ignorable
19860 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e  Orderby(X) ((X->
19870 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74  eDest)<=SRT_Dist
19880 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20  Queue)..#define 
19890 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
198a0 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61   9  /* Output ea
198b0 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  ch row of result
198c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
198d0 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30 20 20  Mem         10  
198e0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
198f0 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  in a memory cell
19900 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
19910 53 65 74 20 20 20 20 20 20 20 20 20 31 31 20 20  Set         11  
19920 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73  /* Store results
19930 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
19940 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
19950 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20  SRT_EphemTab    
19960 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72  12  /* Create tr
19970 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20  ansient tab and 
19980 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54  store like SRT_T
19990 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
199a0 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20  SRT_Coroutine   
199b0 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20  13  /* Generate 
199c0 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  a single row of 
199d0 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  result */.#defin
199e0 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20  e SRT_Table     
199f0 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72    14  /* Store r
19a00 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69  esult as data wi
19a10 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20  th an automatic 
19a20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  rowid */../*.** 
19a30 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
19a40 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72  his object descr
19a50 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70 75  ibes where to pu
19a60 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  t of the results
19a70 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20   of.** a SELECT 
19a80 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74  statement..*/.st
19a90 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20  ruct SelectDest 
19aa0 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20 20  {.  u8 eDest;   
19ab0 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20           /* How 
19ac0 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68  to dispose of th
19ad0 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f  e results.  On o
19ae0 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a  f SRT_* above. *
19af0 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64 73 74  /.  char affSdst
19b00 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 66 66 69  ;        /* Affi
19b10 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20 65  nity used when e
19b20 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f  Dest==SRT_Set */
19b30 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20  .  int iSDParm; 
19b40 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72          /* A par
19b50 61 6d 65 74 65 72 20 75 73 65 64 20 62 79 20 74  ameter used by t
19b60 68 65 20 65 44 65 73 74 20 64 69 73 70 6f 73 61  he eDest disposa
19b70 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e  l method */.  in
19b80 74 20 69 53 64 73 74 3b 20 20 20 20 20 20 20 20  t iSdst;        
19b90 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73     /* Base regis
19ba0 74 65 72 20 77 68 65 72 65 20 72 65 73 75 6c 74  ter where result
19bb0 73 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f  s are written */
19bc0 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20  .  int nSdst;   
19bd0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
19be0 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61  r of registers a
19bf0 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 45 78  llocated */.  Ex
19c00 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79  prList *pOrderBy
19c10 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e  ;  /* Key column
19c20 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20  s for SRT_Queue 
19c30 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65 75  and SRT_DistQueu
19c40 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44  e */.};../*.** D
19c50 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72  uring code gener
19c60 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65  ation of stateme
19c70 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65  nts that do inse
19c80 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43  rts into AUTOINC
19c90 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c 65  REMENT .** table
19ca0 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  s, the following
19cb0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
19cc0 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
19cd0 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e  Table.u.autoInc.
19ce0 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20  p.** pointer of 
19cf0 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65  each autoincreme
19d00 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f  nt table to reco
19d10 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66  rd some side inf
19d20 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a  ormation that.**
19d30 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
19d40 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68  tor needs.  We h
19d50 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d  ave to keep per-
19d60 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d  table autoincrem
19d70 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ent.** informati
19d80 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72  on in case inser
19d90 74 73 20 61 72 65 20 64 6f 77 6e 20 77 69 74 68  ts are down with
19da0 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72  in triggers.  Tr
19db0 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a  iggers do not.**
19dc0 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69   normally coordi
19dd0 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76  nate their activ
19de0 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f  ities, but we do
19df0 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e   need to coordin
19e00 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69  ate the.** loadi
19e10 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66  ng and saving of
19e20 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69   autoincrement i
19e30 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
19e40 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
19e50 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  o {.  AutoincInf
19e60 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e  o *pNext;   /* N
19e70 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69  ext info block i
19e80 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d  n a list of them
19e90 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20   all */.  Table 
19ea0 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
19eb0 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e  /* Table this in
19ec0 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20  fo block refers 
19ed0 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  to */.  int iDb;
19ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
19ef0 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65   Index in sqlite
19f00 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62  3.aDb[] of datab
19f10 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62  ase holding pTab
19f20 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72   */.  int regCtr
19f30 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
19f40 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68  emory register h
19f50 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64  olding the rowid
19f60 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a   counter */.};..
19f70 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68  /*.** Size of th
19f80 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a  e column cache.*
19f90 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
19fa0 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65  _N_COLCACHE.# de
19fb0 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  fine SQLITE_N_CO
19fc0 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66  LCACHE 10.#endif
19fd0 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74  ../*.** At least
19fe0 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66   one instance of
19ff0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1a000 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61  tructure is crea
1a010 74 65 64 20 66 6f 72 20 65 61 63 68 20 0a 2a 2a  ted for each .**
1a020 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61   trigger that ma
1a030 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65  y be fired while
1a040 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45   parsing an INSE
1a050 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45  RT, UPDATE or DE
1a060 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  LETE.** statemen
1a070 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65  t. All such obje
1a080 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  cts are stored i
1a090 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  n the linked lis
1a0a0 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50  t headed at.** P
1a0b0 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1a0c0 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63   and deleted onc
1a0d0 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70  e statement comp
1a0e0 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e  ilation has been
1a0f0 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a  .** completed..*
1a100 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d  *.** A Vdbe sub-
1a110 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70  program that imp
1a120 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79  lements the body
1a130 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65   and WHEN clause
1a140 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54   of trigger.** T
1a150 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67  riggerPrg.pTrigg
1a160 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64  er, assuming a d
1a170 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1a180 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20  CT clause of.** 
1a190 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e  TriggerPrg.orcon
1a1a0 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  f, is stored in 
1a1b0 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70  the TriggerPrg.p
1a1c0 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65  Program variable
1a1d0 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70  ..** The Parse.p
1a1e0 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
1a1f0 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74  never contains t
1a200 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20  wo entries with 
1a210 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75  the same.** valu
1a220 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69  es for both pTri
1a230 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e  gger and orconf.
1a240 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67  .**.** The Trigg
1a250 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30  erPrg.aColmask[0
1a260 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
1a270 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f  t to a mask of o
1a280 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  ld.* columns.** 
1a290 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74  accessed (or set
1a2a0 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65   to 0 for trigge
1a2b0 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65  rs fired as a re
1a2c0 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 20 0a  sult of INSERT .
1a2d0 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20  ** statements). 
1a2e0 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54  Similarly, the T
1a2f0 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61  riggerPrg.aColma
1a300 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69  sk[1] variable i
1a310 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61  s set to.** a ma
1a320 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
1a330 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20  mns used by the 
1a340 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75  program..*/.stru
1a350 63 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a  ct TriggerPrg {.
1a360 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
1a370 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69  ger;      /* Tri
1a380 67 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61  gger this progra
1a390 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d  m was coded from
1a3a0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67   */.  TriggerPrg
1a3b0 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a   *pNext;      /*
1a3c0 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50   Next entry in P
1a3d0 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1a3e0 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72   list */.  SubPr
1a3f0 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b  ogram *pProgram;
1a400 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d     /* Program im
1a410 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67  plementing pTrig
1a420 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20  ger/orconf */.  
1a430 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20  int orconf;     
1a440 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1a450 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
1a460 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61  olicy */.  u32 a
1a470 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20  Colmask[2];     
1a480 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f     /* Masks of o
1a490 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75  ld.*, new.* colu
1a4a0 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a  mns accessed */.
1a4b0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44  };../*.** The yD
1a4c0 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66  bMask datatype f
1a4d0 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f  or the bitmask o
1a4e0 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  f all attached d
1a4f0 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66  atabases..*/.#if
1a500 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41   SQLITE_MAX_ATTA
1a510 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65  CHED>30.  typede
1a520 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  f unsigned char 
1a530 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f  yDbMask[(SQLITE_
1a540 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f  MAX_ATTACHED+9)/
1a550 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  8];.# define DbM
1a560 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20  askTest(M,I)    
1a570 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c  (((M)[(I)/8]&(1<
1a580 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23  <((I)&7)))!=0).#
1a590 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65   define DbMaskZe
1a5a0 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65  ro(M)      memse
1a5b0 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d  t((M),0,sizeof(M
1a5c0 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
1a5d0 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28  skSet(M,I)     (
1a5e0 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28  M)[(I)/8]|=(1<<(
1a5f0 28 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65  (I)&7)).# define
1a600 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d   DbMaskAllZero(M
1a610 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73  )   sqlite3DbMas
1a620 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65  kAllZero(M).# de
1a630 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65  fine DbMaskNonZe
1a640 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33  ro(M)   (sqlite3
1a650 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1a660 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70  ==0).#else.  typ
1a670 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e  edef unsigned in
1a680 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66  t yDbMask;.# def
1a690 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d  ine DbMaskTest(M
1a6a0 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28  ,I)    (((M)&(((
1a6b0 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29  yDbMask)1)<<(I))
1a6c0 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44  )!=0).# define D
1a6d0 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20  bMaskZero(M)    
1a6e0 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65    (M)=0.# define
1a6f0 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20   DbMaskSet(M,I) 
1a700 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d      (M)|=(((yDbM
1a710 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64  ask)1)<<(I)).# d
1a720 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a  efine DbMaskAllZ
1a730 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a  ero(M)   (M)==0.
1a740 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e  # define DbMaskN
1a750 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21  onZero(M)   (M)!
1a760 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  =0.#endif../*.**
1a770 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63   An SQL parser c
1a780 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20  ontext.  A copy 
1a790 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
1a7a0 65 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f  e is passed thro
1a7b0 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65  ugh.** the parse
1a7c0 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20  r and down into 
1a7d0 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61  all the parser a
1a7e0 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e  ction routine in
1a7f0 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72   order to.** car
1a800 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d  ry around inform
1a810 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c  ation that is gl
1a820 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69  obal to the enti
1a830 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20  re parse..**.** 
1a840 54 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73  The structure is
1a850 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77   divided into tw
1a860 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74  o parts.  When t
1a870 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f  he parser and co
1a880 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63  de.** generate c
1a890 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72  all themselves r
1a8a0 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20  ecursively, the 
1a8b0 66 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68  first part of th
1a8c0 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69  e structure.** i
1a8d0 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74  s constant but t
1a8e0 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69  he second part i
1a8f0 73 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62  s reset at the b
1a900 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64  eginning and end
1a910 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75   of.** each recu
1a920 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rsion..**.** The
1a930 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20   nTableLock and 
1a940 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61  aTableLock varia
1a950 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73  bles are only us
1a960 65 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64  ed if the shared
1a970 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65 61 74 75  -cache .** featu
1a980 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69  re is enabled (i
1a990 66 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e  f sqlite3Tsd()->
1a9a0 75 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73  useSharedData is
1a9b0 20 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65   true). They are
1a9c0 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72  .** used to stor
1a9d0 65 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62  e the set of tab
1a9e0 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65  le-locks require
1a9f0 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65  d by the stateme
1aa00 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70  nt being.** comp
1aa10 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73  iled. Function s
1aa20 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
1aa30 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64  ) is used to add
1aa40 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a   entries to the.
1aa50 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75  ** list..*/.stru
1aa60 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c  ct Parse {.  sql
1aa70 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
1aa80 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61    /* The main da
1aa90 74 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65  tabase structure
1aaa0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72   */.  char *zErr
1aab0 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e  Msg;       /* An
1aac0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a   error message *
1aad0 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b  /.  Vdbe *pVdbe;
1aae0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65           /* An e
1aaf0 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74  ngine for execut
1ab00 69 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74  ing database byt
1ab10 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72  ecode */.  int r
1ab20 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
1ab30 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  /* Return code f
1ab40 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f  rom execution */
1ab50 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65  .  u8 colNamesSe
1ab60 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20  t;      /* TRUE 
1ab70 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e  after OP_ColumnN
1ab80 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73  ame has been iss
1ab90 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a  ued to pVdbe */.
1aba0 20 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61    u8 checkSchema
1abb0 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73  ;      /* Causes
1abc0 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63   schema cookie c
1abd0 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72  heck after an er
1abe0 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74  ror */.  u8 nest
1abf0 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
1ac00 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
1ac10 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70  d calls to the p
1ac20 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72  arser/code gener
1ac30 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65  ator */.  u8 nTe
1ac40 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f  mpReg;         /
1ac50 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70  * Number of temp
1ac60 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
1ac70 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f  in aTempReg[] */
1ac80 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69  .  u8 isMultiWri
1ac90 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20  te;     /* True 
1aca0 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
1acb0 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d   modify/insert m
1acc0 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
1acd0 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20    u8 mayAbort;  
1ace0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1acf0 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
1ad00 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65  throw an ABORT e
1ad10 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  xception */.  u8
1ad20 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20   hasCompound;   
1ad30 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e     /* Need to in
1ad40 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70  voke convertComp
1ad50 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1ad60 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f  uery() */.  u8 o
1ad70 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20  kConstFactor;   
1ad80 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72   /* OK to factor
1ad90 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a   out constants *
1ada0 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67  /.  int aTempReg
1adb0 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64  [8];     /* Hold
1adc0 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d  ing area for tem
1add0 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73  porary registers
1ade0 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65   */.  int nRange
1adf0 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69  Reg;       /* Si
1ae00 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72  ze of the tempor
1ae10 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
1ae20 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e  ck */.  int iRan
1ae30 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  geReg;       /* 
1ae40 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69  First register i
1ae50 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  n temporary regi
1ae60 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
1ae70 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
1ae80 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1ae90 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f  f errors seen */
1aea0 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20  .  int nTab;    
1aeb0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1aec0 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20  r of previously 
1aed0 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63  allocated VDBE c
1aee0 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20  ursors */.  int 
1aef0 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  nMem;           
1af00 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65   /* Number of me
1af10 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20  mory cells used 
1af20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1af30 6e 53 65 74 3b 20 20 20 20 20 20 20 20 20 20 20  nSet;           
1af40 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65   /* Number of se
1af50 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ts used so far *
1af60 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20  /.  int nOnce;  
1af70 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1af80 65 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e  er of OP_Once in
1af90 73 74 72 75 63 74 69 6f 6e 73 20 73 6f 20 66 61  structions so fa
1afa0 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c  r */.  int nOpAl
1afb0 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  loc;        /* N
1afc0 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61  umber of slots a
1afd0 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62  llocated for Vdb
1afe0 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  e.aOp[] */.  int
1aff0 20 69 46 69 78 65 64 4f 70 3b 20 20 20 20 20 20   iFixedOp;      
1b000 20 20 2f 2a 20 4e 65 76 65 72 20 62 61 63 6b 20    /* Never back 
1b010 6f 75 74 20 6f 70 63 6f 64 65 73 20 69 46 69 78  out opcodes iFix
1b020 65 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c 69 65  edOp-1 or earlie
1b030 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73  r */.  int ckBas
1b040 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42  e;          /* B
1b050 61 73 65 20 72 65 67 69 73 74 65 72 20 6f 66 20  ase register of 
1b060 64 61 74 61 20 64 75 72 69 6e 67 20 63 68 65 63  data during chec
1b070 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  k constraints */
1b080 0a 20 20 69 6e 74 20 69 50 61 72 74 49 64 78 54  .  int iPartIdxT
1b090 61 62 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  ab;     /* Table
1b0a0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
1b0b0 6f 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65  o a partial inde
1b0c0 78 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  x */.  int iCach
1b0d0 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43  eLevel;     /* C
1b0e0 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68  olCache valid wh
1b0f0 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69  en aColCache[].i
1b100 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76  Level<=iCacheLev
1b110 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63  el */.  int iCac
1b120 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20  heCnt;       /* 
1b130 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20  Counter used to 
1b140 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63  generate aColCac
1b150 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20  he[].lru values 
1b160 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b  */.  int nLabel;
1b170 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1b180 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73  ber of labels us
1b190 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61  ed */.  int *aLa
1b1a0 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  bel;         /* 
1b1b0 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68  Space to hold th
1b1c0 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74  e labels */.  st
1b1d0 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b  ruct yColCache {
1b1e0 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
1b1f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61             /* Ta
1b200 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ble cursor numbe
1b210 72 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f  r */.    i16 iCo
1b220 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  lumn;          /
1b230 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e  * Table column n
1b240 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20  umber */.    u8 
1b250 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20  tempReg;        
1b260 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20     /* iReg is a 
1b270 74 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68  temp register th
1b280 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66  at needs to be f
1b290 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20  reed */.    int 
1b2a0 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20  iLevel;         
1b2b0 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76    /* Nesting lev
1b2c0 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52  el */.    int iR
1b2d0 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eg;             
1b2e0 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75  /* Reg with valu
1b2f0 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
1b300 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20  . 0 means none. 
1b310 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20  */.    int lru; 
1b320 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b330 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75  Least recently u
1b340 73 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68  sed entry has th
1b350 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65  e smallest value
1b360 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68   */.  } aColCach
1b370 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41  e[SQLITE_N_COLCA
1b380 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f  CHE];  /* One fo
1b390 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61  r each column ca
1b3a0 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45  che entry */.  E
1b3b0 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45  xprList *pConstE
1b3c0 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  xpr;/* Constant 
1b3d0 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
1b3e0 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e   Token constrain
1b3f0 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66  tName;/* Name of
1b400 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20   the constraint 
1b410 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
1b420 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d  parsed */.  yDbM
1b430 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20  ask writeMask;  
1b440 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74   /* Start a writ
1b450 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  e transaction on
1b460 20 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73   these databases
1b470 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f   */.  yDbMask co
1b480 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69  okieMask;  /* Bi
1b490 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20  tmask of schema 
1b4a0 76 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73  verified databas
1b4b0 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b  es */.  int cook
1b4c0 69 65 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d  ieValue[SQLITE_M
1b4d0 41 58 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20  AX_ATTACHED+2]; 
1b4e0 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f   /* Values of co
1b4f0 6f 6b 69 65 73 20 74 6f 20 76 65 72 69 66 79 20  okies to verify 
1b500 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69  */.  int regRowi
1b510 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67  d;        /* Reg
1b520 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f  ister holding ro
1b530 77 69 64 20 6f 66 20 43 52 45 41 54 45 20 54 41  wid of CREATE TA
1b540 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69  BLE entry */.  i
1b550 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20  nt regRoot;     
1b560 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
1b570 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67  holding root pag
1b580 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77  e number for new
1b590 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e   objects */.  in
1b5a0 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20  t nMaxArg;      
1b5b0 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70     /* Max args p
1b5c0 61 73 73 65 64 20 74 6f 20 75 73 65 72 20 66 75  assed to user fu
1b5d0 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72  nction by sub-pr
1b5e0 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c  ogram */.#if SEL
1b5f0 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
1b600 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20  .  int nSelect; 
1b610 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1b620 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74  r of SELECT stat
1b630 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 23  ements seen */.#
1b640 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
1b650 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
1b660 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61  _CACHE.  int nTa
1b670 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20  bleLock;        
1b680 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63  /* Number of loc
1b690 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b  ks in aTableLock
1b6a0 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20   */.  TableLock 
1b6b0 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20  *aTableLock; /* 
1b6c0 52 65 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c  Required table l
1b6d0 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d  ocks for shared-
1b6e0 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65  cache mode */.#e
1b6f0 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e  ndif.  AutoincIn
1b700 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49  fo *pAinc;  /* I
1b710 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
1b720 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63   AUTOINCREMENT c
1b730 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a  ounters */..  /*
1b740 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   Information use
1b750 64 20 77 68 69 6c 65 20 63 6f 64 69 6e 67 20 74  d while coding t
1b760 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e  rigger programs.
1b770 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f   */.  Parse *pTo
1b780 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61  plevel;    /* Pa
1b790 72 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  rse structure fo
1b7a0 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28  r main program (
1b7b0 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61  or NULL) */.  Ta
1b7c0 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62  ble *pTriggerTab
1b7d0 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67  ;  /* Table trig
1b7e0 67 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63  gers are being c
1b7f0 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e  oded for */.  in
1b800 74 20 61 64 64 72 43 72 54 61 62 3b 20 20 20 20  t addrCrTab;    
1b810 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66     /* Address of
1b820 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20   OP_CreateTable 
1b830 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45  opcode on CREATE
1b840 20 54 41 42 4c 45 20 2a 2f 0a 20 20 69 6e 74 20   TABLE */.  int 
1b850 61 64 64 72 53 6b 69 70 50 4b 3b 20 20 20 20 20  addrSkipPK;     
1b860 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 69   /* Address of i
1b870 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 73 6b  nstruction to sk
1b880 69 70 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69  ip PRIMARY KEY i
1b890 6e 64 65 78 20 2a 2f 0a 20 20 75 33 32 20 6e 51  ndex */.  u32 nQ
1b8a0 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f  ueryLoop;      /
1b8b0 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20  * Est number of 
1b8c0 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20  iterations of a 
1b8d0 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e  query (10*log2(N
1b8e0 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d  )) */.  u32 oldm
1b8f0 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
1b900 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  Mask of old.* co
1b910 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
1b920 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73   */.  u32 newmas
1b930 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  k;         /* Ma
1b940 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
1b950 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a  mns referenced *
1b960 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f  /.  u8 eTriggerO
1b970 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55  p;       /* TK_U
1b980 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
1b990 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f   or TK_DELETE */
1b9a0 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20  .  u8 eOrconf;  
1b9b0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1b9c0 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
1b9d0 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65  olicy for trigge
1b9e0 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20  r steps */.  u8 
1b9f0 64 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b  disableTriggers;
1ba00 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73    /* True to dis
1ba10 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
1ba20 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  /***********
1ba30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ba40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ba50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ba60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20  *************.  
1ba70 2a 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73  ** Above is cons
1ba80 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63  tant between rec
1ba90 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20  ursions.  Below 
1baa0 69 73 20 72 65 73 65 74 20 62 65 66 6f 72 65 20  is reset before 
1bab0 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65  and after.  ** e
1bac0 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20  ach recursion.  
1bad0 54 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74  The boundary bet
1bae0 77 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72  ween these two r
1baf0 65 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d  egions is determ
1bb00 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20  ined.  ** using 
1bb10 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 6e  offsetof(Parse,n
1bb20 56 61 72 29 20 73 6f 20 74 68 65 20 6e 56 61 72  Var) so the nVar
1bb30 20 66 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74   field must be t
1bb40 68 65 20 66 69 72 73 74 20 66 69 65 6c 64 0a 20  he first field. 
1bb50 20 2a 2a 20 69 6e 20 74 68 65 20 72 65 63 75 72   ** in the recur
1bb60 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a  sive region..  *
1bb70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bb80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bb90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bba0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bbb0 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e 74 20  *******/..  int 
1bbc0 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20  nVar;           
1bbd0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1bbe0 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73  of '?' variables
1bbf0 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c   seen in the SQL
1bc00 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1bc10 20 6e 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20   nzVar;         
1bc20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1bc30 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 6c   of available sl
1bc40 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a  ots in azVar[] *
1bc50 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72  /.  u8 iPkSortOr
1bc60 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  der;          /*
1bc70 20 41 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72   ASC or DESC for
1bc80 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
1bc90 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20 62 46 72   KEY */.  u8 bFr
1bca0 65 65 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  eeWith;         
1bcb0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70      /* True if p
1bcc0 57 69 74 68 20 73 68 6f 75 6c 64 20 62 65 20 66  With should be f
1bcd0 72 65 65 64 20 77 69 74 68 20 70 61 72 73 65 72  reed with parser
1bce0 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e   */.  u8 explain
1bcf0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1bd00 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 45  /* True if the E
1bd10 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66  XPLAIN flag is f
1bd20 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72  ound on the quer
1bd30 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  y */.#ifndef SQL
1bd40 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1bd50 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61  TABLE.  u8 decla
1bd60 72 65 56 74 61 62 3b 20 20 20 20 20 20 20 20 20  reVtab;         
1bd70 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73    /* True if ins
1bd80 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c  ide sqlite3_decl
1bd90 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20  are_vtab() */.  
1bda0 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20  int nVtabLock;  
1bdb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1bdc0 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74  ber of virtual t
1bdd0 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f  ables to lock */
1bde0 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 41  .#endif.  int nA
1bdf0 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20  lias;           
1be00 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1be10 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c 74 20   aliased result 
1be20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  set columns */. 
1be30 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20   int nHeight;   
1be40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
1be50 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65  pression tree he
1be60 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20  ight of current 
1be70 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69  sub-select */.#i
1be80 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1be90 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20  T_EXPLAIN.  int 
1bea0 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20  iSelectId;      
1beb0 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66 20 63        /* ID of c
1bec0 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20 66 6f  urrent select fo
1bed0 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
1bee0 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74 53   */.  int iNextS
1bef0 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20  electId;        
1bf00 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61 62 6c  /* Next availabl
1bf10 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f 72 20  e select ID for 
1bf20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a  EXPLAIN output *
1bf30 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68 61 72 20  /.#endif.  char 
1bf40 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20 20 20 20  **azVar;        
1bf50 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 73       /* Pointers
1bf60 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70 61 72   to names of par
1bf70 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56 64 62  ameters */.  Vdb
1bf80 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20  e *pReprepare;  
1bf90 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69         /* VM bei
1bfa0 6e 67 20 72 65 70 72 65 70 61 72 65 64 20 28 73  ng reprepared (s
1bfb0 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28  qlite3Reprepare(
1bfc0 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  )) */.  const ch
1bfd0 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20  ar *zTail;      
1bfe0 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78    /* All SQL tex
1bff0 74 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20  t past the last 
1c000 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64  semicolon parsed
1c010 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65   */.  Table *pNe
1c020 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  wTable;         
1c030 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67  /* A table being
1c040 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
1c050 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a  CREATE TABLE */.
1c060 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54    Trigger *pNewT
1c070 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54  rigger;     /* T
1c080 72 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e  rigger under con
1c090 73 74 72 75 63 74 20 62 79 20 61 20 43 52 45 41  struct by a CREA
1c0a0 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20  TE TRIGGER */.  
1c0b0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74  const char *zAut
1c0c0 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65  hContext; /* The
1c0d0 20 36 74 68 20 70 61 72 61 6d 65 74 65 72 20 74   6th parameter t
1c0e0 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c  o db->xAuth call
1c0f0 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e  backs */.  Token
1c100 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20   sNameToken;    
1c110 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69       /* Token wi
1c120 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73  th unqualified s
1c130 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d  chema object nam
1c140 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c 61  e */.  Token sLa
1c150 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20  stToken;        
1c160 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b   /* The last tok
1c170 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 23 69 66  en parsed */.#if
1c180 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1c190 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
1c1a0 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20  Token sArg;     
1c1b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d            /* Com
1c1c0 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61 20  plete text of a 
1c1d0 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20  module argument 
1c1e0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56  */.  Table **apV
1c1f0 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f  tabLock;       /
1c200 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72  * Pointer to vir
1c210 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64  tual tables need
1c220 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23  ing locking */.#
1c230 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70  endif.  Table *p
1c240 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20  ZombieTab;      
1c250 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62    /* List of Tab
1c260 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65  le objects to de
1c270 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64 65 20  lete after code 
1c280 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  gen */.  Trigger
1c290 50 72 67 20 2a 70 54 72 69 67 67 65 72 50 72 67  Prg *pTriggerPrg
1c2a0 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73  ;  /* Linked lis
1c2b0 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67  t of coded trigg
1c2c0 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ers */.  With *p
1c2d0 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  With;           
1c2e0 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 57 49     /* Current WI
1c2f0 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55  TH clause, or NU
1c300 4c 4c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  LL */.};../*.** 
1c310 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 63  Return true if c
1c320 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20  urrently inside 
1c330 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  an sqlite3_decla
1c340 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a  re_vtab() call..
1c350 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
1c360 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
1c370 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  LE.  #define IN_
1c380 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23  DECLARE_VTAB 0.#
1c390 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49  else.  #define I
1c3a0 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28  N_DECLARE_VTAB (
1c3b0 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72 65 56  pParse->declareV
1c3c0 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  tab).#endif../*.
1c3d0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
1c3e0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1c3f0 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 62 65  structure can be
1c400 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73   declared on a s
1c410 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a  tack and used.**
1c420 20 74 6f 20 73 61 76 65 20 74 68 65 20 50 61 72   to save the Par
1c430 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
1c440 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74  value so that it
1c450 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64   can be restored
1c460 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63   later..*/.struc
1c470 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a  t AuthContext {.
1c480 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
1c490 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a  uthContext;   /*
1c4a0 20 50 75 74 20 73 61 76 65 64 20 50 61 72 73 65   Put saved Parse
1c4b0 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65  .zAuthContext he
1c4c0 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  re */.  Parse *p
1c4d0 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20  Parse;          
1c4e0 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65      /* The Parse
1c4f0 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b   structure */.};
1c500 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64  ../*.** Bitfield
1c510 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61   flags for P5 va
1c520 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f  lue in various o
1c530 70 63 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  pcodes..*/.#defi
1c540 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  ne OPFLAG_NCHANG
1c550 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  E       0x01    
1c560 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65  /* Set to update
1c570 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a   db->nChange */.
1c580 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c  #define OPFLAG_L
1c590 41 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 30  ASTROWID     0x0
1c5a0 32 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75  2    /* Set to u
1c5b0 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f  pdate db->lastRo
1c5c0 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  wid */.#define O
1c5d0 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20  PFLAG_ISUPDATE  
1c5e0 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54      0x04    /* T
1c5f0 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73  his OP_Insert is
1c600 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a   an sql UPDATE *
1c610 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1c620 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30  _APPEND        0
1c630 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69  x08    /* This i
1c640 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61  s likely to be a
1c650 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66  n append */.#def
1c660 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  ine OPFLAG_USESE
1c670 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20  EKRESULT 0x10   
1c680 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64   /* Try to avoid
1c690 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65   a seek in Btree
1c6a0 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66  Insert() */.#def
1c6b0 69 6e 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52  ine OPFLAG_CLEAR
1c6c0 43 41 43 48 45 20 20 20 20 30 78 32 30 20 20 20  CACHE    0x20   
1c6d0 20 2f 2a 20 43 6c 65 61 72 20 70 73 65 75 64 6f   /* Clear pseudo
1c6e0 2d 74 61 62 6c 65 20 63 61 63 68 65 20 69 6e 20  -table cache in 
1c6f0 4f 50 5f 43 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65  OP_Column */.#de
1c700 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47  fine OPFLAG_LENG
1c710 54 48 41 52 47 20 20 20 20 20 30 78 34 30 20 20  THARG     0x40  
1c720 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f    /* OP_Column o
1c730 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e  nly used for len
1c740 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  gth() */.#define
1c750 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
1c760 47 20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a  G     0x80    /*
1c770 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20   OP_Column only 
1c780 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28  used for typeof(
1c790 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
1c7a0 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20  LAG_BULKCSR     
1c7b0 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
1c7c0 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f  Open** used to o
1c7d0 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20  pen bulk cursor 
1c7e0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1c7f0 47 5f 50 32 49 53 52 45 47 20 20 20 20 20 20 20  G_P2ISREG       
1c800 30 78 30 32 20 20 20 20 2f 2a 20 50 32 20 74 6f  0x02    /* P2 to
1c810 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20   OP_Open** is a 
1c820 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20  register number 
1c830 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1c840 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20 20  G_PERMUTE       
1c850 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x01    /* OP_Co
1c860 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65 20 70  mpare: use the p
1c870 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f  ermutation */../
1c880 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65  *. * Each trigge
1c890 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  r present in the
1c8a0 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
1c8b0 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e   is stored as an
1c8c0 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20   instance of. * 
1c8d0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20  struct Trigger. 
1c8e0 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20  . *. * Pointers 
1c8f0 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20  to instances of 
1c900 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61  struct Trigger a
1c910 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f  re stored in two
1c920 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20   ways.. * 1. In 
1c930 74 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68  the "trigHash" h
1c940 61 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20  ash table (part 
1c950 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20  of the sqlite3* 
1c960 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20  that represents 
1c970 74 68 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62  the . *    datab
1c980 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77  ase). This allow
1c990 73 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74  s Trigger struct
1c9a0 75 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69  ures to be retri
1c9b0 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a  eved by name.. *
1c9c0 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73   2. All triggers
1c9d0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
1c9e0 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
1c9f0 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69  form a linked li
1ca00 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a  st, using the. *
1ca10 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72      pNext member
1ca20 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
1ca30 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  er. A pointer to
1ca40 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
1ca50 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20  nt of the. *    
1ca60 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73  linked list is s
1ca70 74 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54  tored as the "pT
1ca80 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f  rigger" member o
1ca90 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  f the associated
1caa0 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61  . *    struct Ta
1cab0 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22  ble.. *. * The "
1cac0 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65  step_list" membe
1cad0 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  r points to the 
1cae0 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
1caf0 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20   a linked list. 
1cb00 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  * containing the
1cb10 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
1cb20 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65  specified as the
1cb30 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
1cb40 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  .. */.struct Tri
1cb50 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a  gger {.  char *z
1cb60 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
1cb70 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20   /* The name of 
1cb80 74 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20  the trigger     
1cb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cba0 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61     */.  char *ta
1cbb0 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
1cbc0 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20  /* The table or 
1cbd0 76 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68  view to which th
1cbe0 65 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65  e trigger applie
1cbf0 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20  s */.  u8 op;   
1cc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1cc10 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45  * One of TK_DELE
1cc20 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54  TE, TK_UPDATE, T
1cc30 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20  K_INSERT        
1cc40 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20   */.  u8 tr_tm; 
1cc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1cc60 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f   One of TRIGGER_
1cc70 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f  BEFORE, TRIGGER_
1cc80 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20  AFTER */.  Expr 
1cc90 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20  *pWhen;         
1cca0 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63     /* The WHEN c
1ccb0 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70  lause of the exp
1ccc0 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20  ression (may be 
1ccd0 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73  NULL) */.  IdLis
1cce0 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20  t *pColumns;    
1ccf0 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73     /* If this is
1cd00 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63   an UPDATE OF <c
1cd10 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67  olumn-list> trig
1cd20 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ger,.           
1cd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd40 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69    the <column-li
1cd50 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65  st> is stored he
1cd60 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
1cd70 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20  pSchema;        
1cd80 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
1cd90 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  ning the trigger
1cda0 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54   */.  Schema *pT
1cdb0 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  abSchema;     /*
1cdc0 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
1cdd0 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  ng the table */.
1cde0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
1cdf0 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e  tep_list; /* Lin
1ce00 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65  k list of trigge
1ce10 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20  r program steps 
1ce20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
1ce30 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b   Trigger *pNext;
1ce40 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
1ce50 20 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61   trigger associa
1ce60 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
1ce70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
1ce80 41 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74  A trigger is eit
1ce90 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20  her a BEFORE or 
1cea0 61 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72  an AFTER trigger
1ceb0 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
1cec0 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65   constants.** de
1ced0 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a  termine which. .
1cee0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61  **.** If there a
1cef0 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67  re multiple trig
1cf00 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20  gers, you might 
1cf10 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61  of some BEFORE a
1cf20 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a  nd some AFTER..*
1cf30 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c  * In that cases,
1cf40 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62   the constants b
1cf50 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64  elow can be ORed
1cf60 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64   together..*/.#d
1cf70 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45  efine TRIGGER_BE
1cf80 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20  FORE  1.#define 
1cf90 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20  TRIGGER_AFTER   
1cfa0 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74  2../*. * An inst
1cfb0 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54  ance of struct T
1cfc0 72 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73  riggerStep is us
1cfd0 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69  ed to store a si
1cfe0 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65  ngle SQL stateme
1cff0 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20  nt. * that is a 
1d000 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65  part of a trigge
1d010 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20  r-program. . *. 
1d020 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  * Instances of s
1d030 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
1d040 70 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  p are stored in 
1d050 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20  a singly linked 
1d060 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20  list (linked. * 
1d070 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74  using the "pNext
1d080 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65  " member) refere
1d090 6e 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65  nced by the "ste
1d0a0 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f  p_list" member o
1d0b0 66 20 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69  f the . * associ
1d0c0 61 74 65 64 20 73 74 72 75 63 74 20 54 72 69 67  ated struct Trig
1d0d0 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68  ger instance. Th
1d0e0 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
1d0f0 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69  of the linked li
1d100 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72  st is. * the fir
1d110 73 74 20 73 74 65 70 20 6f 66 20 74 68 65 20 74  st step of the t
1d120 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a  rigger-program..
1d130 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20   * . * The "op" 
1d140 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73  member indicates
1d150 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73   whether this is
1d160 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e   a "DELETE", "IN
1d170 53 45 52 54 22 2c 20 22 55 50 44 41 54 45 22 20  SERT", "UPDATE" 
1d180 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73  or. * "SELECT" s
1d190 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65  tatement. The me
1d1a0 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74  anings of the ot
1d1b0 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64  her members is d
1d1c0 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
1d1d0 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f   . * value of "o
1d1e0 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20  p" as follows:. 
1d1f0 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49  *. * (op == TK_I
1d200 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66  NSERT). * orconf
1d210 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68      -> stores th
1d220 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  e ON CONFLICT al
1d230 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65  gorithm. * pSele
1d240 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  ct   -> If this 
1d250 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
1d260 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e  O ... SELECT ...
1d270 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
1d280 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1d290 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20 70   this stores a p
1d2a0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45  ointer to the SE
1d2b0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
1d2c0 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
1d2d0 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20   * target    -> 
1d2e0 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20  A token holding 
1d2f0 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20  the quoted name 
1d300 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
1d310 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20  insert into.. * 
1d320 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20  pExprList -> If 
1d330 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
1d340 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45  T INTO ... VALUE
1d350 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c  S ... statement,
1d360 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20   then. *        
1d370 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65        this store
1d380 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69  s values to be i
1d390 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69  nserted. Otherwi
1d3a0 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c  se NULL.. * pIdL
1d3b0 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ist   -> If this
1d3c0 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
1d3d0 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d  TO ... (<column-
1d3e0 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e  names>) VALUES .
1d3f0 2e 2e 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20  .. . *          
1d400 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74      statement, t
1d410 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20  hen this stores 
1d420 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  the column-names
1d430 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20   to be. *       
1d440 20 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20         inserted 
1d450 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20  into.. *. * (op 
1d460 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a  == TK_DELETE). *
1d470 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20   target    -> A 
1d480 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68  token holding th
1d490 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  e quoted name of
1d4a0 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65   the table to de
1d4b0 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57  lete from.. * pW
1d4c0 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57  here    -> The W
1d4d0 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74  HERE clause of t
1d4e0 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  he DELETE statem
1d4f0 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70  ent if one is sp
1d500 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20  ecified.. *     
1d510 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69           Otherwi
1d520 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20  se NULL.. * . * 
1d530 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45  (op == TK_UPDATE
1d540 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d  ). * target    -
1d550 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e  > A token holdin
1d560 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d  g the quoted nam
1d570 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
1d580 6f 20 75 70 64 61 74 65 20 72 6f 77 73 20 6f 66  o update rows of
1d590 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
1d5a0 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
1d5b0 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  se of the UPDATE
1d5c0 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
1d5d0 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
1d5e0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1d5f0 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
1d600 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20   * pExprList -> 
1d610 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f  A list of the co
1d620 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20  lumns to update 
1d630 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73 69  and the expressi
1d640 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a  ons to update. *
1d650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1d660 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74  em to. See sqlit
1d670 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d  e3Update() docum
1d680 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68  entation of "pCh
1d690 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20  anges". *       
1d6a0 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e         argument.
1d6b0 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74 20  . * . */.struct 
1d6c0 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20  TriggerStep {.  
1d6d0 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
1d6e0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
1d6f0 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
1d700 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20  ATE, TK_INSERT, 
1d710 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75  TK_SELECT */.  u
1d720 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  8 orconf;       
1d730 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61      /* OE_Rollba
1d740 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69  ck etc. */.  Tri
1d750 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20  gger *pTrig;    
1d760 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72    /* The trigger
1d770 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20   that this step 
1d780 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a  is a part of */.
1d790 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
1d7a0 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54  t;     /* SELECT
1d7b0 20 73 74 61 74 6d 65 6e 74 20 6f 72 20 52 48 53   statment or RHS
1d7c0 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   of INSERT INTO 
1d7d0 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f  .. SELECT ... */
1d7e0 0a 20 20 54 6f 6b 65 6e 20 74 61 72 67 65 74 3b  .  Token target;
1d7f0 20 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65          /* Targe
1d800 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45  t table for DELE
1d810 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45  TE, UPDATE, INSE
1d820 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  RT */.  Expr *pW
1d830 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  here;        /* 
1d840 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
1d850 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55   for DELETE or U
1d860 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20  PDATE steps */. 
1d870 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72   ExprList *pExpr
1d880 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61  List; /* SET cla
1d890 75 73 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20  use for UPDATE. 
1d8a0 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64  */.  IdList *pId
1d8b0 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  List;     /* Col
1d8c0 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e  umn names for IN
1d8d0 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65  SERT */.  Trigge
1d8e0 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f  rStep *pNext;  /
1d8f0 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69  * Next in the li
1d900 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69  nk-list */.  Tri
1d910 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b  ggerStep *pLast;
1d920 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e    /* Last elemen
1d930 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20  t in link-list. 
1d940 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c  Valid for 1st el
1d950 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f  em only */.};../
1d960 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
1d970 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
1d980 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tains informatio
1d990 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71  n used by the sq
1d9a0 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f  liteFix....** ro
1d9b0 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20 77  utines as they w
1d9c0 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74 72  alk the parse tr
1d9d0 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62  ee to make datab
1d9e0 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a  ase references.*
1d9f0 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f  * explicit.  .*/
1da00 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
1da10 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b  DbFixer DbFixer;
1da20 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20  .struct DbFixer 
1da30 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
1da40 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  e;      /* The p
1da50 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20  arsing context. 
1da60 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   Error messages 
1da70 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a  written here */.
1da80 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
1da90 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65  a;    /* Fix ite
1daa0 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d  ms to this schem
1dab0 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f  a */.  int bVarO
1dac0 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68  nly;       /* Ch
1dad0 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65  eck for variable
1dae0 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79   references only
1daf0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1db00 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b   *zDb;    /* Mak
1db10 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63  e sure all objec
1db20 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  ts are contained
1db30 20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73   in this databas
1db40 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  e */.  const cha
1db50 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79  r *zType;  /* Ty
1db60 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  pe of the contai
1db70 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
1db80 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
1db90 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a  .  const Token *
1dba0 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f  pName; /* Name o
1dbb0 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  f the container 
1dbc0 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72  - used for error
1dbd0 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a   messages */.};.
1dbe0 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74  ./*.** An object
1dbf0 65 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d  ed used to accum
1dc00 75 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f  ulate the text o
1dc10 66 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65  f a string where
1dc20 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65   we.** do not ne
1dc30 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68  cessarily know h
1dc40 6f 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e  ow big the strin
1dc50 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65  g will be in the
1dc60 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   end..*/.struct 
1dc70 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c  StrAccum {.  sql
1dc80 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
1dc90 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61    /* Optional da
1dca0 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61  tabase for looka
1dcb0 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55  side.  Can be NU
1dcc0 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42  LL */.  char *zB
1dcd0 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ase;         /* 
1dce0 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f  A base allocatio
1dcf0 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c  n.  Not from mal
1dd00 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  loc. */.  char *
1dd10 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  zText;         /
1dd20 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c  * The string col
1dd30 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f  lected so far */
1dd40 0a 20 20 69 6e 74 20 20 6e 43 68 61 72 3b 20 20  .  int  nChar;  
1dd50 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74          /* Lengt
1dd60 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20  h of the string 
1dd70 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1dd80 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20   nAlloc;        
1dd90 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70   /* Amount of sp
1dda0 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ace allocated in
1ddb0 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20   zText */.  int 
1ddc0 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20   mxAlloc;       
1ddd0 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f   /* Maximum allo
1dde0 77 65 64 20 73 74 72 69 6e 67 20 6c 65 6e 67 74  wed string lengt
1ddf0 68 20 2a 2f 0a 20 20 75 38 20 20 20 75 73 65 4d  h */.  u8   useM
1de00 61 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 30  alloc;      /* 0
1de10 3a 20 6e 6f 6e 65 2c 20 20 31 3a 20 73 71 6c 69  : none,  1: sqli
1de20 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a  te3DbMalloc,  2:
1de30 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20   sqlite3_malloc 
1de40 2a 2f 0a 20 20 75 38 20 20 20 61 63 63 45 72 72  */.  u8   accErr
1de50 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 53 54 52  or;       /* STR
1de60 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53  ACCUM_NOMEM or S
1de70 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a  TRACCUM_TOOBIG *
1de80 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52  /.};.#define STR
1de90 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a  ACCUM_NOMEM   1.
1dea0 23 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d  #define STRACCUM
1deb0 5f 54 4f 4f 42 49 47 20 20 32 0a 0a 2f 2a 0a 2a  _TOOBIG  2../*.*
1dec0 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  * A pointer to t
1ded0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
1dee0 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69   used to communi
1def0 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  cate information
1df00 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  .** from sqlite3
1df10 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73  Init and OP_Pars
1df20 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65  eSchema into the
1df30 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
1df40 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  back..*/.typedef
1df50 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69   struct {.  sqli
1df60 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
1df70 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
1df80 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
1df90 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a  d */.  char **pz
1dfa0 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72  ErrMsg;    /* Er
1dfb0 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72  ror message stor
1dfc0 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74  ed here */.  int
1dfd0 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
1dfe0 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64   /* 0 for main d
1dff0 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20  atabase.  1 for 
1e000 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54  TEMP, 2.. for AT
1e010 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20  TACHed */.  int 
1e020 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
1e030 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73  /* Result code s
1e040 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20  tored here */.} 
1e050 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a  InitData;../*.**
1e060 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   Structure conta
1e070 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e  ining global con
1e080 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20  figuration data 
1e090 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c  for the SQLite l
1e0a0 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  ibrary..**.** Th
1e0b0 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73  is structure als
1e0c0 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20  o contains some 
1e0d0 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  state informatio
1e0e0 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c  n..*/.struct Sql
1e0f0 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69  ite3Config {.  i
1e100 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20  nt bMemstat;    
1e110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e120 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
1e130 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73  le memory status
1e140 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d   */.  int bCoreM
1e150 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
1e160 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1e170 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d  to enable core m
1e180 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
1e190 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20   bFullMutex;    
1e1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e1b0 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
1e1c0 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a   full mutexing *
1e1d0 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69  /.  int bOpenUri
1e1e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e1f0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1e200 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e   interpret filen
1e210 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a  ames as URIs */.
1e220 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20    int bUseCis;  
1e230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e240 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72      /* Use cover
1e250 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20  ing indices for 
1e260 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20  full-scans */.  
1e270 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20  int mxStrlen;   
1e280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e290 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72    /* Maximum str
1e2a0 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20  ing length */.  
1e2b0 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74  int neverCorrupt
1e2c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e2d0 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
1e2e0 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72   always well-for
1e2f0 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c  med */.  int szL
1e300 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
1e310 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
1e320 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20  fault lookaside 
1e330 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20  buffer size */. 
1e340 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b   int nLookaside;
1e350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e360 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
1e370 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 63  okaside buffer c
1e380 6f 75 6e 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65  ount */.  sqlite
1e390 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b  3_mem_methods m;
1e3a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
1e3b0 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20  ow-level memory 
1e3c0 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72  allocation inter
1e3d0 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  face */.  sqlite
1e3e0 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
1e3f0 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c  mutex;      /* L
1e400 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69  ow-level mutex i
1e410 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71  nterface */.  sq
1e420 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74  lite3_pcache_met
1e430 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20 20  hods2 pcache2;  
1e440 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67  /* Low-level pag
1e450 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61 63  e-cache interfac
1e460 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65  e */.  void *pHe
1e470 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
1e480 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70           /* Heap
1e490 20 73 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a   storage space *
1e4a0 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20  /.  int nHeap;  
1e4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4c0 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
1e4d0 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e   pHeap[] */.  in
1e4e0 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20  t mnReq, mxReq; 
1e4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e500 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68  /* Min and max h
1e510 65 61 70 20 72 65 71 75 65 73 74 73 20 73 69 7a  eap requests siz
1e520 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  es */.  sqlite3_
1e530 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20  int64 szMmap;   
1e540 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61            /* mma
1e550 70 28 29 20 73 70 61 63 65 20 70 65 72 20 6f 70  p() space per op
1e560 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c  en file */.  sql
1e570 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61  ite3_int64 mxMma
1e580 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  p;             /
1e590 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20  * Maximum value 
1e5a0 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20  for szMmap */.  
1e5b0 76 6f 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20  void *pScratch; 
1e5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5d0 20 20 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d    /* Scratch mem
1e5e0 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53  ory */.  int szS
1e5f0 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20  cratch;         
1e600 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
1e610 7a 65 20 6f 66 20 65 61 63 68 20 73 63 72 61 74  ze of each scrat
1e620 63 68 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69  ch buffer */.  i
1e630 6e 74 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20  nt nScratch;    
1e640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e650 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63   /* Number of sc
1e660 72 61 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f  ratch buffers */
1e670 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20  .  void *pPage; 
1e680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e690 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63       /* Page cac
1e6a0 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69  he memory */.  i
1e6b0 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20  nt szPage;      
1e6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6d0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68   /* Size of each
1e6e0 20 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d   page in pPage[]
1e6f0 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b   */.  int nPage;
1e700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e710 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1e720 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50  r of pages in pP
1e730 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d  age[] */.  int m
1e740 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20  xParserStack;   
1e750 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e760 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66  maximum depth of
1e770 20 74 68 65 20 70 61 72 73 65 72 20 73 74 61 63   the parser stac
1e780 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65  k */.  int share
1e790 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20  dCacheEnabled;  
1e7a0 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65           /* true
1e7b0 20 69 66 20 73 68 61 72 65 64 2d 63 61 63 68 65   if shared-cache
1e7c0 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f   mode enabled */
1e7d0 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20  .  /* The above 
1e7e0 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c  might be initial
1e7f0 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f  ized to non-zero
1e800 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
1e810 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a   need to always.
1e820 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62    ** initially b
1e830 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e  e zero, however.
1e840 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74   */.  int isInit
1e850 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e860 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1e870 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61  after initializa
1e880 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65  tion has finishe
1e890 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f  d */.  int inPro
1e8a0 67 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20  gress;          
1e8b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1e8c0 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a   while initializ
1e8d0 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
1e8e0 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74  s */.  int isMut
1e8f0 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  exInit;         
1e900 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1e910 20 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61   after mutexes a
1e920 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  re initialized *
1e930 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63  /.  int isMalloc
1e940 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
1e950 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
1e960 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
1e970 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
1e980 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b  nt isPCacheInit;
1e990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9a0 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
1e9b0 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c  alloc is initial
1e9c0 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ized */.  int nR
1e9d0 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  efInitMutex;    
1e9e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1e9f0 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f  umber of users o
1ea00 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a  f pInitMutex */.
1ea10 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
1ea20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  *pInitMutex;    
1ea30 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65      /* Mutex use
1ea40 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69  d by sqlite3_ini
1ea50 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76  tialize() */.  v
1ea60 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64  oid (*xLog)(void
1ea70 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
1ea80 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20  *); /* Function 
1ea90 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20  for logging */. 
1eaa0 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20   void *pLogArg; 
1eab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eac0 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
1ead0 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28  rgument to xLog(
1eae0 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ) */.#ifdef SQLI
1eaf0 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47  TE_ENABLE_SQLLOG
1eb00 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67  .  void(*xSqllog
1eb10 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
1eb20 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e  ,const char*, in
1eb30 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c  t);.  void *pSql
1eb40 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23  logArg;.#endif.#
1eb50 69 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42  ifdef SQLITE_VDB
1eb60 45 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20  E_COVERAGE.  /* 
1eb70 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  The following ca
1eb80 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e  llback (if not N
1eb90 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20  ULL) is invoked 
1eba0 6f 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72  on every VDBE br
1ebb0 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74  anch.  ** operat
1ebc0 69 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61  ion.  Set the ca
1ebd0 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c  llback using SQL
1ebe0 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42  ITE_TESTCTRL_VDB
1ebf0 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f  E_COVERAGE..  */
1ec00 0a 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42  .  void (*xVdbeB
1ec10 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74  ranch)(void*,int
1ec20 20 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68   iSrcLine,u8 eTh
1ec30 69 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20  is,u8 eMx);  /* 
1ec40 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  Callback */.  vo
1ec50 69 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41  id *pVdbeBranchA
1ec60 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
1ec70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec80 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61          /* 1st a
1ec90 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69  rgument */.#endi
1eca0 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
1ecb0 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
1ecc0 53 54 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74  ST.  int (*xTest
1ecd0 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20  Callback)(int); 
1ece0 20 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65         /* Invoke
1ecf0 64 20 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c  d by sqlite3Faul
1ed00 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66  tSim() */.#endif
1ed10 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d  .  int bLocaltim
1ed20 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20  eFault;         
1ed30 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1ed40 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29  fail localtime()
1ed50 20 63 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   calls */.};../*
1ed60 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69  .** This macro i
1ed70 73 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66  s used inside of
1ed80 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
1ed90 65 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65  ents to indicate
1eda0 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73   that.** the ass
1edb0 65 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ert is only vali
1edc0 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d  d on a well-form
1edd0 65 64 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e  ed database.  In
1ede0 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20  stead of:.**.** 
1edf0 20 20 20 20 61 73 73 65 72 74 28 20 58 20 29 3b      assert( X );
1ee00 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65  .**.** One write
1ee10 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  s:.**.**     ass
1ee20 65 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50  ert( X || CORRUP
1ee30 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f  T_DB );.**.** CO
1ee40 52 52 55 50 54 5f 44 42 20 69 73 20 74 72 75 65  RRUPT_DB is true
1ee50 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f   during normal o
1ee60 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55  peration.  CORRU
1ee70 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69  PT_DB does not i
1ee80 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20  ndicate.** that 
1ee90 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
1eea0 64 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75  definitely corru
1eeb0 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74  pt, only that it
1eec0 20 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75 70   might be corrup
1eed0 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74  t..** For most t
1eee0 65 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55  est cases, CORRU
1eef0 50 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20  PT_DB is set to 
1ef00 66 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70  false using a sp
1ef10 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33  ecial.** sqlite3
1ef20 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e  _test_control().
1ef30 20 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61    This enables a
1ef40 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
1ef50 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74  ts to prove.** t
1ef60 68 69 6e 67 73 20 74 68 61 74 20 61 72 65 20 61  hings that are a
1ef70 6c 77 61 79 73 20 74 72 75 65 20 66 6f 72 20 77  lways true for w
1ef80 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62  ell-formed datab
1ef90 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ases..*/.#define
1efa0 20 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71   CORRUPT_DB  (sq
1efb0 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65  lite3Config.neve
1efc0 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a  rCorrupt==0)../*
1efd0 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e  .** Context poin
1efe0 74 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20  ter passed down 
1eff0 74 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65  through the tree
1f000 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74  -walk..*/.struct
1f010 20 57 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20   Walker {.  int 
1f020 28 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29  (*xExprCallback)
1f030 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29  (Walker*, Expr*)
1f040 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63  ;     /* Callbac
1f050 6b 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e  k for expression
1f060 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65  s */.  int (*xSe
1f070 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61  lectCallback)(Wa
1f080 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20  lker*,Select*); 
1f090 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72   /* Callback for
1f0a0 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f   SELECTs */.  vo
1f0b0 69 64 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c  id (*xSelectCall
1f0c0 62 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53  back2)(Walker*,S
1f0d0 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e  elect*);/* Secon
1f0e0 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53  d callback for S
1f0f0 45 4c 45 43 54 73 20 2a 2f 0a 20 20 50 61 72 73  ELECTs */.  Pars
1f100 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
1f110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f120 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20        /* Parser 
1f130 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69  context.  */.  i
1f140 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20  nt walkerDepth; 
1f150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f160 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1f170 65 72 20 6f 66 20 73 75 62 71 75 65 72 69 65 73  er of subqueries
1f180 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20   */.  union {   
1f190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1b0 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f  /* Extra data fo
1f1c0 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  r callback */.  
1f1d0 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
1f1e0 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  NC;             
1f1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f200 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a  Naming context *
1f210 2f 0a 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20  /.    int i;    
1f220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f240 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
1f250 65 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74  e */.    SrcList
1f260 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20   *pSrcList;     
1f270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f280 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75      /* FROM clau
1f290 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  se */.    struct
1f2a0 20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43   SrcCount *pSrcC
1f2b0 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  ount;           
1f2c0 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67       /* Counting
1f2d0 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63   column referenc
1f2e0 65 73 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a  es */.  } u;.};.
1f2f0 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c  ./* Forward decl
1f300 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20  arations */.int 
1f310 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28  sqlite3WalkExpr(
1f320 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
1f330 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
1f340 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a  ExprList(Walker*
1f350 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
1f360 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
1f370 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  ect(Walker*, Sel
1f380 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
1f390 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72  e3WalkSelectExpr
1f3a0 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
1f3b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1f3c0 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61  alkSelectFrom(Wa
1f3d0 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
1f3e0 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63  ../*.** Return c
1f3f0 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72  ode from the par
1f400 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20  se-tree walking 
1f410 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74  primitives and t
1f420 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  heir.** callback
1f430 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  s..*/.#define WR
1f440 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20  C_Continue    0 
1f450 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f    /* Continue do
1f460 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e  wn into children
1f470 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f   */.#define WRC_
1f480 50 72 75 6e 65 20 20 20 20 20 20 20 31 20 20 20  Prune       1   
1f490 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e  /* Omit children
1f4a0 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61   but continue wa
1f4b0 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a  lking siblings *
1f4c0 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62  /.#define WRC_Ab
1f4d0 6f 72 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a  ort       2   /*
1f4e0 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65   Abandon the tre
1f4f0 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  e walk */../*.**
1f500 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1f510 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 72  this structure r
1f520 65 70 72 65 73 65 6e 74 73 20 61 20 73 65 74 20  epresents a set 
1f530 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43  of one or more C
1f540 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74  TEs.** (common t
1f550 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
1f560 29 20 63 72 65 61 74 65 64 20 62 79 20 61 20 73  ) created by a s
1f570 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73  ingle WITH claus
1f580 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 74  e..*/.struct Wit
1f590 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20  h {.  int nCte; 
1f5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5b0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1f5c0 6f 66 20 43 54 45 73 20 69 6e 20 74 68 65 20 57  of CTEs in the W
1f5d0 49 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ITH clause */.  
1f5e0 57 69 74 68 20 2a 70 4f 75 74 65 72 3b 20 20 20  With *pOuter;   
1f5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f600 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49  /* Containing WI
1f610 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55  TH clause, or NU
1f620 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43  LL */.  struct C
1f630 74 65 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  te {            
1f640 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 65          /* For e
1f650 61 63 68 20 43 54 45 20 69 6e 20 74 68 65 20 57  ach CTE in the W
1f660 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a  ITH clause.... *
1f670 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
1f680 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1f690 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
1f6a0 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20   this CTE */.   
1f6b0 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73   ExprList *pCols
1f6c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f6d0 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78 70 6c   /* List of expl
1f6e0 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  icit column name
1f6f0 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  s, or NULL */.  
1f700 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
1f710 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1f720 20 20 2f 2a 20 54 68 65 20 64 65 66 69 6e 69 74    /* The definit
1f730 69 6f 6e 20 6f 66 20 74 68 69 73 20 43 54 45 20  ion of this CTE 
1f740 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  */.    const cha
1f750 72 20 2a 7a 45 72 72 3b 20 20 20 20 20 20 20 20  r *zErr;        
1f760 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20         /* Error 
1f770 6d 65 73 73 61 67 65 20 66 6f 72 20 63 69 72 63  message for circ
1f780 75 6c 61 72 20 72 65 66 65 72 65 6e 63 65 73 20  ular references 
1f790 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a  */.  } a[1];.};.
1f7a0 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20  ./*.** Assuming 
1f7b0 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  zIn points to th
1f7c0 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
1f7d0 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  a UTF-8 characte
1f7e0 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49  r,.** advance zI
1f7f0 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  n to point to th
1f800 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
1f810 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63  the next UTF-8 c
1f820 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65  haracter..*/.#de
1f830 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50  fine SQLITE_SKIP
1f840 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20  _UTF8(zIn) {    
1f850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f860 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a      \.  if( (*(z
1f870 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20  In++))>=0xc0 ){ 
1f880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f890 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
1f8a0 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20     while( (*zIn 
1f8b0 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b  & 0xc0)==0x80 ){
1f8c0 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20   zIn++; }       
1f8d0 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20        \.  }     
1f8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
1f910 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  .}../*.** The SQ
1f920 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72  LITE_*_BKPT macr
1f930 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74  os are substitut
1f940 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72  es for the error
1f950 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74   codes with.** t
1f960 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74  he same name but
1f970 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b   without the _BK
1f980 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73  PT suffix.  Thes
1f990 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a  e macros invoke.
1f9a0 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74  ** routines that
1f9b0 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65   report the line
1f9c0 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68  -number on which
1f9d0 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69   the error origi
1f9e0 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73  nated.** using s
1f9f0 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54  qlite3_log().  T
1fa00 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f  he routines also
1fa10 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65   provide a conve
1fa20 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74  nient place.** t
1fa30 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72  o set a debugger
1fa40 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a   breakpoint..*/.
1fa50 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75  int sqlite3Corru
1fa60 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e  ptError(int);.in
1fa70 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45  t sqlite3MisuseE
1fa80 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
1fa90 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
1faa0 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e  ror(int);.#defin
1fab0 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
1fac0 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72  _BKPT sqlite3Cor
1fad0 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  ruptError(__LINE
1fae0 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
1faf0 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73  TE_MISUSE_BKPT s
1fb00 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
1fb10 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
1fb20 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f  ine SQLITE_CANTO
1fb30 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  PEN_BKPT sqlite3
1fb40 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f  CantopenError(__
1fb50 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20  LINE__).../*.** 
1fb60 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61  FTS4 is really a
1fb70 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20  n extension for 
1fb80 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61  FTS3.  It is ena
1fb90 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a  bled using the.*
1fba0 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
1fbb0 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74  FTS3 macro.  But
1fbc0 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73   to avoid confus
1fbd0 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c  ion we also call
1fbe0 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45  .** the SQLITE_E
1fbf0 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f  NABLE_FTS4 macro
1fc00 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20   to serve as an 
1fc10 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45  alias for SQLITE
1fc20 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f  _ENABLE_FTS3..*/
1fc30 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
1fc40 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29  ITE_ENABLE_FTS4)
1fc50 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
1fc60 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
1fc70 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1fc80 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23 65 6e  _ENABLE_FTS3.#en
1fc90 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63  dif../*.** The c
1fca0 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73  type.h header is
1fcb0 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d   needed for non-
1fcc0 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20  ASCII systems.  
1fcd0 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65  It is also.** ne
1fce0 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65  eded by FTS3 whe
1fcf0 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64  n FTS3 is includ
1fd00 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61  ed in the amalga
1fd10 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21  mation..*/.#if !
1fd20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
1fd30 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28  SCII) || \.    (
1fd40 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
1fd50 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64  NABLE_FTS3) && d
1fd60 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d  efined(SQLITE_AM
1fd70 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69  ALGAMATION)).# i
1fd80 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e  nclude <ctype.h>
1fd90 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
1fda0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
1fdb0 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74  ros mimic the st
1fdc0 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66  andard library f
1fdd0 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72  unctions toupper
1fde0 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29  (),.** isspace()
1fdf0 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64  , isalnum(), isd
1fe00 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69  igit() and isxdi
1fe10 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76  git(), respectiv
1fe20 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69  ely. The.** sqli
1fe30 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79  te versions only
1fe40 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20   work for ASCII 
1fe50 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61  characters, rega
1fe60 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65  rdless of locale
1fe70 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
1fe80 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e  TE_ASCII.# defin
1fe90 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72  e sqlite3Toupper
1fea0 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69  (x)  ((x)&~(sqli
1feb0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
1fec0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
1fed0 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20  0x20)).# define 
1fee0 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78  sqlite3Isspace(x
1fef0 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
1ff00 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1ff10 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23  har)(x)]&0x01).#
1ff20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1ff30 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c  salnum(x)   (sql
1ff40 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1ff50 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1ff60 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20  &0x06).# define 
1ff70 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
1ff80 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
1ff90 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1ffa0 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23  har)(x)]&0x02).#
1ffb0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1ffc0 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c  sdigit(x)   (sql
1ffd0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1ffe0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1fff0 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20  &0x04).# define 
20000 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
20010 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  x)  (sqlite3Ctyp
20020 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
20030 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23  har)(x)]&0x08).#
20040 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
20050 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c  olower(x)   (sql
20060 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72  ite3UpperToLower
20070 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
20080 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64 65  (x)]).#else.# de
20090 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
200a0 70 65 72 28 78 29 20 20 20 74 6f 75 70 70 65 72  per(x)   toupper
200b0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
200c0 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
200d0 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20  lite3Isspace(x) 
200e0 20 20 69 73 73 70 61 63 65 28 28 75 6e 73 69 67    isspace((unsig
200f0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
20100 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
20110 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e  alnum(x)   isaln
20120 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  um((unsigned cha
20130 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
20140 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
20150 29 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73  )   isalpha((uns
20160 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
20170 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20180 49 73 64 69 67 69 74 28 78 29 20 20 20 69 73 64  Isdigit(x)   isd
20190 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
201a0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
201b0 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
201c0 74 28 78 29 20 20 69 73 78 64 69 67 69 74 28 28  t(x)  isxdigit((
201d0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
201e0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
201f0 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
20200 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65  tolower((unsigne
20210 64 20 63 68 61 72 29 28 78 29 29 0a 23 65 6e 64  d char)(x)).#end
20220 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e  if../*.** Intern
20230 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74  al function prot
20240 6f 74 79 70 65 73 0a 2a 2f 0a 23 64 65 66 69 6e  otypes.*/.#defin
20250 65 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  e sqlite3StrICmp
20260 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70   sqlite3_stricmp
20270 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c  .int sqlite3Strl
20280 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a  en30(const char*
20290 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  );.#define sqlit
202a0 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74  e3StrNICmp sqlit
202b0 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74  e3_strnicmp..int
202c0 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e   sqlite3MallocIn
202d0 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  it(void);.void s
202e0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28  qlite3MallocEnd(
202f0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  void);.void *sql
20300 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b  ite3Malloc(u64);
20310 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
20320 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76  llocZero(u64);.v
20330 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
20340 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33  llocZero(sqlite3
20350 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
20360 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
20370 77 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  w(sqlite3*, u64)
20380 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
20390 62 53 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a  bStrDup(sqlite3*
203a0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63  ,const char*);.c
203b0 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74  har *sqlite3DbSt
203c0 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63  rNDup(sqlite3*,c
203d0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34 29  onst char*, u64)
203e0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52  ;.void *sqlite3R
203f0 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36  ealloc(void*, u6
20400 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
20410 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65  3DbReallocOrFree
20420 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64  (sqlite3 *, void
20430 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a   *, u64);.void *
20440 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63  sqlite3DbRealloc
20450 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64  (sqlite3 *, void
20460 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 73   *, u64);.void s
20470 71 6c 69 74 65 33 44 62 46 72 65 65 28 73 71 6c  qlite3DbFree(sql
20480 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69  ite3*, void*);.i
20490 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  nt sqlite3Malloc
204a0 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74  Size(void*);.int
204b0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
204c0 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76  Size(sqlite3*, v
204d0 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  oid*);.void *sql
204e0 69 74 65 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f  ite3ScratchMallo
204f0 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  c(int);.void sql
20500 69 74 65 33 53 63 72 61 74 63 68 46 72 65 65 28  ite3ScratchFree(
20510 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71  void*);.void *sq
20520 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28  lite3PageMalloc(
20530 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
20540 65 33 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a  e3PageFree(void*
20550 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
20560 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69  emSetDefault(voi
20570 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
20580 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b  BenignMallocHook
20590 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29  s(void (*)(void)
205a0 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29  , void (*)(void)
205b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65  );.int sqlite3He
205c0 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69  apNearlyFull(voi
205d0 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79  d);../*.** On sy
205e0 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65  stems with ample
205f0 20 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64   stack space and
20600 20 74 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c   that support al
20610 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20  loca(), make.** 
20620 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20  use of alloca() 
20630 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20  to obtain space 
20640 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61  for large automa
20650 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79  tic objects.  By
20660 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74   default,.** obt
20670 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d  ain space from m
20680 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54  alloc()..**.** T
20690 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74  he alloca() rout
206a0 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e  ine never return
206b0 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69  s NULL.  This wi
206c0 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70 61  ll cause code pa
206d0 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c  ths.** that deal
206e0 20 77 69 74 68 20 73 71 6c 69 74 65 33 53 74 61   with sqlite3Sta
206f0 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72  ckAlloc() failur
20700 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68  es to be unreach
20710 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  able..*/.#ifdef 
20720 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43  SQLITE_USE_ALLOC
20730 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  A.# define sqlit
20740 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28  e3StackAllocRaw(
20750 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29  D,N)   alloca(N)
20760 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20770 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28  3StackAllocZero(
20780 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c  D,N)  memset(all
20790 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20  oca(N), 0, N).# 
207a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
207b0 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20  ackFree(D,P)    
207c0 20 20 20 0a 23 65 6c 73 65 0a 23 20 64 65 66 69     .#else.# defi
207d0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
207e0 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73  llocRaw(D,N)   s
207f0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
20800 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  w(D,N).# define 
20810 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
20820 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69  cZero(D,N)  sqli
20830 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
20840 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  D,N).# define sq
20850 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44  lite3StackFree(D
20860 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69 74 65  ,P)       sqlite
20870 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e  3DbFree(D,P).#en
20880 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
20890 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
208a0 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f  3.const sqlite3_
208b0 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c  mem_methods *sql
208c0 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73  ite3MemGetMemsys
208d0 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  3(void);.#endif.
208e0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
208f0 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e  ABLE_MEMSYS5.con
20900 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  st sqlite3_mem_m
20910 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d  ethods *sqlite3M
20920 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69  emGetMemsys5(voi
20930 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66  d);.#endif...#if
20940 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45  ndef SQLITE_MUTE
20950 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33  X_OMIT.  sqlite3
20960 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
20970 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66  onst *sqlite3Def
20980 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b  aultMutex(void);
20990 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
209a0 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a  _methods const *
209b0 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78  sqlite3NoopMutex
209c0 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65  (void);.  sqlite
209d0 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33  3_mutex *sqlite3
209e0 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b  MutexAlloc(int);
209f0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  .  int sqlite3Mu
20a00 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20  texInit(void);. 
20a10 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65   int sqlite3Mute
20a20 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64  xEnd(void);.#end
20a30 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  if..int sqlite3S
20a40 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b  tatusValue(int);
20a50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
20a60 74 75 73 41 64 64 28 69 6e 74 2c 20 69 6e 74 29  tusAdd(int, int)
20a70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
20a80 61 74 75 73 53 65 74 28 69 6e 74 2c 20 69 6e 74  atusSet(int, int
20a90 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
20aa0 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
20ab0 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c  _POINT.  int sql
20ac0 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65  ite3IsNaN(double
20ad0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
20ae0 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58  e sqlite3IsNaN(X
20af0 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  )  0.#endif../*.
20b00 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
20b10 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
20b20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
20b30 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
20b40 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f  t SQL.** functio
20b50 6e 73 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61  ns arguments tha
20b60 74 20 61 72 65 20 74 68 65 20 70 61 72 61 6d 65  t are the parame
20b70 74 65 72 73 20 74 6f 20 74 68 65 20 70 72 69 6e  ters to the prin
20b80 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  tf() function..*
20b90 2f 0a 73 74 72 75 63 74 20 50 72 69 6e 74 66 41  /.struct PrintfA
20ba0 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74  rguments {.  int
20bb0 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20   nArg;          
20bc0 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e        /* Total n
20bd0 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
20be0 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65  ts */.  int nUse
20bf0 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
20c00 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
20c10 67 75 6d 65 6e 74 73 20 75 73 65 64 20 73 6f 20  guments used so 
20c20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  far */.  sqlite3
20c30 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20  _value **apArg; 
20c40 20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e    /* The argumen
20c50 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a  t values */.};..
20c60 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
20c70 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30  RINTF_INTERNAL 0
20c80 78 30 31 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  x01.#define SQLI
20c90 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e  TE_PRINTF_SQLFUN
20ca0 43 20 20 30 78 30 32 0a 76 6f 69 64 20 73 71 6c  C  0x02.void sql
20cb0 69 74 65 33 56 58 50 72 69 6e 74 66 28 53 74 72  ite3VXPrintf(Str
20cc0 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e  Accum*, u32, con
20cd0 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73  st char*, va_lis
20ce0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
20cf0 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d  XPrintf(StrAccum
20d00 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68  *, u32, const ch
20d10 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20  ar*, ...);.char 
20d20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28  *sqlite3MPrintf(
20d30 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
20d40 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72  har*, ...);.char
20d50 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74   *sqlite3VMPrint
20d60 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
20d70 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29   char*, va_list)
20d80 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d  ;.char *sqlite3M
20d90 41 70 70 65 6e 64 66 28 73 71 6c 69 74 65 33 2a  Appendf(sqlite3*
20da0 2c 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61  ,char*,const cha
20db0 72 2a 2c 2e 2e 2e 29 3b 0a 23 69 66 20 64 65 66  r*,...);.#if def
20dc0 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
20dd0 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
20de0 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69  ITE_DEBUG).  voi
20df0 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72  d sqlite3DebugPr
20e00 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a  intf(const char*
20e10 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23  , ...);.#endif.#
20e20 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
20e30 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a  E_TEST).  void *
20e40 73 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54  sqlite3TestTextT
20e50 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a  oPtr(const char*
20e60 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 75  );.#endif../* Ou
20e70 74 70 75 74 20 66 6f 72 6d 61 74 74 69 6e 67 20  tput formatting 
20e80 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 53 54 43  for SQLITE_TESTC
20e90 54 52 4c 5f 45 58 50 4c 41 49 4e 20 2a 2f 0a 23  TRL_EXPLAIN */.#
20ea0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
20eb0 45 5f 45 4e 41 42 4c 45 5f 54 52 45 45 5f 45 58  E_ENABLE_TREE_EX
20ec0 50 4c 41 49 4e 29 0a 20 20 76 6f 69 64 20 73 71  PLAIN).  void sq
20ed0 6c 69 74 65 33 45 78 70 6c 61 69 6e 42 65 67 69  lite3ExplainBegi
20ee0 6e 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64  n(Vdbe*);.  void
20ef0 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50   sqlite3ExplainP
20f00 72 69 6e 74 66 28 56 64 62 65 2a 2c 20 63 6f 6e  rintf(Vdbe*, con
20f10 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
20f20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
20f30 70 6c 61 69 6e 4e 4c 28 56 64 62 65 2a 29 3b 0a  plainNL(Vdbe*);.
20f40 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
20f50 70 6c 61 69 6e 50 75 73 68 28 56 64 62 65 2a 29  plainPush(Vdbe*)
20f60 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
20f70 45 78 70 6c 61 69 6e 50 6f 70 28 56 64 62 65 2a  ExplainPop(Vdbe*
20f80 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
20f90 33 45 78 70 6c 61 69 6e 46 69 6e 69 73 68 28 56  3ExplainFinish(V
20fa0 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  dbe*);.  void sq
20fb0 6c 69 74 65 33 45 78 70 6c 61 69 6e 53 65 6c 65  lite3ExplainSele
20fc0 63 74 28 56 64 62 65 2a 2c 20 53 65 6c 65 63 74  ct(Vdbe*, Select
20fd0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
20fe0 65 33 45 78 70 6c 61 69 6e 45 78 70 72 28 56 64  e3ExplainExpr(Vd
20ff0 62 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76  be*, Expr*);.  v
21000 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
21010 69 6e 45 78 70 72 4c 69 73 74 28 56 64 62 65 2a  inExprList(Vdbe*
21020 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20  , ExprList*);.  
21030 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
21040 74 65 33 56 64 62 65 45 78 70 6c 61 6e 61 74 69  te3VdbeExplanati
21050 6f 6e 28 56 64 62 65 2a 29 3b 0a 23 65 6c 73 65  on(Vdbe*);.#else
21060 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
21070 33 45 78 70 6c 61 69 6e 42 65 67 69 6e 28 58 29  3ExplainBegin(X)
21080 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
21090 33 45 78 70 6c 61 69 6e 53 65 6c 65 63 74 28 41  3ExplainSelect(A
210a0 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
210b0 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72 28  ite3ExplainExpr(
210c0 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
210d0 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72  lite3ExplainExpr
210e0 4c 69 73 74 28 41 2c 42 29 0a 23 20 64 65 66 69  List(A,B).# defi
210f0 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  ne sqlite3Explai
21100 6e 46 69 6e 69 73 68 28 58 29 0a 23 20 64 65 66  nFinish(X).# def
21110 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 45  ine sqlite3VdbeE
21120 78 70 6c 61 6e 61 74 69 6f 6e 28 58 29 20 30 0a  xplanation(X) 0.
21130 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71  #endif...void sq
21140 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 63  lite3SetString(c
21150 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a  har **, sqlite3*
21160 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
21170 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
21180 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a  3ErrorMsg(Parse*
21190 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
211a0 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..);.int sqlite3
211b0 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a  Dequote(char*);.
211c0 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f  int sqlite3Keywo
211d0 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73  rdCode(const uns
211e0 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74  igned char*, int
211f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75  );.int sqlite3Ru
21200 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20  nParser(Parse*, 
21210 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61  const char*, cha
21220 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  r **);.void sqli
21230 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28  te3FinishCoding(
21240 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
21250 69 74 65 33 47 65 74 54 65 6d 70 52 65 67 28 50  ite3GetTempReg(P
21260 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
21270 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52  ite3ReleaseTempR
21280 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  eg(Parse*,int);.
21290 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65  int sqlite3GetTe
212a0 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
212b0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
212c0 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67  3ReleaseTempRang
212d0 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74  e(Parse*,int,int
212e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
212f0 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63 68 65  learTempRegCache
21300 28 50 61 72 73 65 2a 29 3b 0a 45 78 70 72 20 2a  (Parse*);.Expr *
21310 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63  sqlite3ExprAlloc
21320 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
21330 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  nst Token*,int);
21340 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
21350 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  pr(sqlite3*,int,
21360 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
21370 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 74  id sqlite3ExprAt
21380 74 61 63 68 53 75 62 74 72 65 65 73 28 73 71 6c  tachSubtrees(sql
21390 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72  ite3*,Expr*,Expr
213a0 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  *,Expr*);.Expr *
213b0 73 71 6c 69 74 65 33 50 45 78 70 72 28 50 61 72  sqlite3PExpr(Par
213c0 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c  se*, int, Expr*,
213d0 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   Expr*, const To
213e0 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ken*);.Expr *sql
213f0 69 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69  ite3ExprAnd(sqli
21400 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72  te3*,Expr*, Expr
21410 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
21420 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61  3ExprFunction(Pa
21430 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  rse*,ExprList*, 
21440 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
21450 6c 69 74 65 33 45 78 70 72 41 73 73 69 67 6e 56  lite3ExprAssignV
21460 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c  arNumber(Parse*,
21470 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
21480 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28  lite3ExprDelete(
21490 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29  sqlite3*, Expr*)
214a0 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
214b0 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e  te3ExprListAppen
214c0 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  d(Parse*,ExprLis
214d0 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  t*,Expr*);.void 
214e0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
214f0 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78  etName(Parse*,Ex
21500 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69  prList*,Token*,i
21510 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21520 33 45 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e  3ExprListSetSpan
21530 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
21540 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f  *,ExprSpan*);.vo
21550 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
21560 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
21570 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  *, ExprList*);.i
21580 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73  nt sqlite3Init(s
21590 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29  qlite3*, char**)
215a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69  ;.int sqlite3Ini
215b0 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c  tCallback(void*,
215c0 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68   int, char**, ch
215d0 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar**);.void sqli
215e0 74 65 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a  te3Pragma(Parse*
215f0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54  ,Token*,Token*,T
21600 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
21610 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
21620 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
21630 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ion(sqlite3*);.v
21640 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74  oid sqlite3Reset
21650 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65  OneSchema(sqlite
21660 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
21670 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74  lite3CollapseDat
21680 61 62 61 73 65 41 72 72 61 79 28 73 71 6c 69 74  abaseArray(sqlit
21690 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
216a0 65 33 42 65 67 69 6e 50 61 72 73 65 28 50 61 72  e3BeginParse(Par
216b0 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  se*,int);.void s
216c0 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65  qlite3CommitInte
216d0 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69  rnalChanges(sqli
216e0 74 65 33 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  te3*);.Table *sq
216f0 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66  lite3ResultSetOf
21700 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65  Select(Parse*,Se
21710 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  lect*);.void sql
21720 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61  ite3OpenMasterTa
21730 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74  ble(Parse *, int
21740 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
21750 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78  3PrimaryKeyIndex
21760 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71  (Table*);.i16 sq
21770 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64  lite3ColumnOfInd
21780 65 78 28 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b  ex(Index*, i16);
21790 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
217a0 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  rtTable(Parse*,T
217b0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
217c0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76  ,int,int,int);.v
217d0 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
217e0 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65  lumn(Parse*,Toke
217f0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
21800 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73  3AddNotNull(Pars
21810 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
21820 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72 79  qlite3AddPrimary
21830 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Key(Parse*, Expr
21840 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  List*, int, int,
21850 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
21860 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74  te3AddCheckConst
21870 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78  raint(Parse*, Ex
21880 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
21890 65 33 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 28  e3AddColumnType(
218a0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a  Parse*,Token*);.
218b0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 44  void sqlite3AddD
218c0 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73  efaultValue(Pars
218d0 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76  e*,ExprSpan*);.v
218e0 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
218f0 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73 65 2a  llateType(Parse*
21900 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
21910 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28  sqlite3EndTable(
21920 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
21930 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29  ken*,u8,Select*)
21940 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72  ;.int sqlite3Par
21950 73 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72  seUri(const char
21960 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e  *,const char*,un
21970 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20  signed int*,.   
21980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21990 20 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63   sqlite3_vfs**,c
219a0 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a  har**,char **);.
219b0 42 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62  Btree *sqlite3Db
219c0 4e 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69  NameToBtree(sqli
219d0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
219e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  );.int sqlite3Co
219f0 64 65 4f 6e 63 65 28 50 61 72 73 65 20 2a 29 3b  deOnce(Parse *);
21a00 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
21a10 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
21a20 54 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  T.# define sqlit
21a30 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51  e3FaultSim(X) SQ
21a40 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20  LITE_OK.#else.  
21a50 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74  int sqlite3Fault
21a60 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66  Sim(int);.#endif
21a70 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65  ..Bitvec *sqlite
21a80 33 42 69 74 76 65 63 43 72 65 61 74 65 28 75 33  3BitvecCreate(u3
21a90 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
21aa0 69 74 76 65 63 54 65 73 74 28 42 69 74 76 65 63  itvecTest(Bitvec
21ab0 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  *, u32);.int sql
21ac0 69 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69  ite3BitvecSet(Bi
21ad0 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69  tvec*, u32);.voi
21ae0 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43  d sqlite3BitvecC
21af0 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33  lear(Bitvec*, u3
21b00 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  2, void*);.void 
21b10 73 71 6c 69 74 65 33 42 69 74 76 65 63 44 65 73  sqlite3BitvecDes
21b20 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75  troy(Bitvec*);.u
21b30 33 32 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  32 sqlite3Bitvec
21b40 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 69  Size(Bitvec*);.i
21b50 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
21b60 42 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c  BuiltinTest(int,
21b70 69 6e 74 2a 29 3b 0a 0a 52 6f 77 53 65 74 20 2a  int*);..RowSet *
21b80 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69  sqlite3RowSetIni
21b90 74 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  t(sqlite3*, void
21ba0 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29  *, unsigned int)
21bb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
21bc0 77 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74  wSetClear(RowSet
21bd0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21be0 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77  RowSetInsert(Row
21bf0 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20  Set*, i64);.int 
21c00 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73  sqlite3RowSetTes
21c10 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69  t(RowSet*, int i
21c20 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74  Batch, i64);.int
21c30 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65   sqlite3RowSetNe
21c40 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a  xt(RowSet*, i64*
21c50 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
21c60 43 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65  CreateView(Parse
21c70 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
21c80 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69  Token*,Select*,i
21c90 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64  nt,int);..#if !d
21ca0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
21cb0 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66  IT_VIEW) || !def
21cc0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
21cd0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20  _VIRTUALTABLE). 
21ce0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77   int sqlite3View
21cf0 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50  GetColumnNames(P
21d00 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23  arse*,Table*);.#
21d10 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
21d20 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
21d30 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23  mnNames(A,B) 0.#
21d40 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54  endif..#if SQLIT
21d50 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33  E_MAX_ATTACHED>3
21d60 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44  0.  int sqlite3D
21d70 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62  bMaskAllZero(yDb
21d80 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  Mask);.#endif.vo
21d90 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61  id sqlite3DropTa
21da0 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
21db0 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
21dc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
21dd0 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  eDropTable(Parse
21de0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
21df0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21e00 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  e3DeleteTable(sq
21e10 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b  lite3*, Table*);
21e20 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
21e30 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
21e40 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  NT.  void sqlite
21e50 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
21e60 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  gin(Parse *pPars
21e70 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  e);.  void sqlit
21e80 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45  e3AutoincrementE
21e90 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  nd(Parse *pParse
21ea0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
21eb0 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  e sqlite3Autoinc
21ec0 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23  rementBegin(X).#
21ed0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
21ee0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
21ef0 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  X).#endif.void s
21f00 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61 72  qlite3Insert(Par
21f10 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53  se*, SrcList*, S
21f20 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c  elect*, IdList*,
21f30 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   int);.void *sql
21f40 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74  ite3ArrayAllocat
21f50 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a  e(sqlite3*,void*
21f60 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b  ,int,int*,int*);
21f70 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  .IdList *sqlite3
21f80 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c  IdListAppend(sql
21f90 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  ite3*, IdList*, 
21fa0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
21fb0 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28  ite3IdListIndex(
21fc0 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  IdList*,const ch
21fd0 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  ar*);.SrcList *s
21fe0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c  qlite3SrcListEnl
21ff0 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  arge(sqlite3*, S
22000 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  rcList*, int, in
22010 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  t);.SrcList *sql
22020 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
22030 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  d(sqlite3*, SrcL
22040 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
22050 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ken*);.SrcList *
22060 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70  sqlite3SrcListAp
22070 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72  pendFromTerm(Par
22080 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
22090 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20  oken*, Token*,. 
220a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220c0 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c       Token*, Sel
220d0 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c  ect*, Expr*, IdL
220e0 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
220f0 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65  te3SrcListIndexe
22100 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63  dBy(Parse *, Src
22110 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29  List *, Token *)
22120 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
22130 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72  exedByLookup(Par
22140 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63  se *, struct Src
22150 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f  List_item *);.vo
22160 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
22170 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53  tShiftJoinType(S
22180 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
22190 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73 73  qlite3SrcListAss
221a0 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65  ignCursors(Parse
221b0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  *, SrcList*);.vo
221c0 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74  id sqlite3IdList
221d0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
221e0 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
221f0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65  sqlite3SrcListDe
22200 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  lete(sqlite3*, S
22210 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20  rcList*);.Index 
22220 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65  *sqlite3Allocate
22230 49 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69  IndexObject(sqli
22240 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61  te3*,i16,int,cha
22250 72 2a 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  r**);.Index *sql
22260 69 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28  ite3CreateIndex(
22270 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
22280 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  ken*,SrcList*,Ex
22290 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65  prList*,int,Toke
222a0 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n*,.            
222b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
222c0 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
222d0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
222e0 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72  Index(Parse*, Sr
222f0 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  cList*, int);.in
22300 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28  t sqlite3Select(
22310 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
22320 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53   SelectDest*);.S
22330 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65  elect *sqlite3Se
22340 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45  lectNew(Parse*,E
22350 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74  xprList*,SrcList
22360 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
22370 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
22380 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
22390 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c  *,ExprList*,u16,
223a0 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f  Expr*,Expr*);.vo
223b0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
223c0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
223d0 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65   Select*);.Table
223e0 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
223f0 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53  Lookup(Parse*, S
22400 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
22410 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28  lite3IsReadOnly(
22420 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
22430 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22440 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73  e3OpenTable(Pars
22450 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e  e*, int iCur, in
22460 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69  t iDb, Table*, i
22470 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  nt);.#if defined
22480 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55  (SQLITE_ENABLE_U
22490 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d  PDATE_DELETE_LIM
224a0 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  IT) && !defined(
224b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51  SQLITE_OMIT_SUBQ
224c0 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69  UERY).Expr *sqli
224d0 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61  te3LimitWhere(Pa
224e0 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  rse*,SrcList*,Ex
224f0 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  pr*,ExprList*,Ex
22500 70 72 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29  pr*,Expr*,char*)
22510 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
22520 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28  lite3DeleteFrom(
22530 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
22540 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
22550 71 6c 69 74 65 33 55 70 64 61 74 65 28 50 61 72  qlite3Update(Par
22560 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
22570 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c  xprList*, Expr*,
22580 20 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f   int);.WhereInfo
22590 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42 65   *sqlite3WhereBe
225a0 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69  gin(Parse*,SrcLi
225b0 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
225c0 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31  st*,ExprList*,u1
225d0 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  6,int);.void sql
225e0 69 74 65 33 57 68 65 72 65 45 6e 64 28 57 68 65  ite3WhereEnd(Whe
225f0 72 65 49 6e 66 6f 2a 29 3b 0a 75 36 34 20 73 71  reInfo*);.u64 sq
22600 6c 69 74 65 33 57 68 65 72 65 4f 75 74 70 75 74  lite3WhereOutput
22610 52 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e  RowCount(WhereIn
22620 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
22630 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74  3WhereIsDistinct
22640 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
22650 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
22660 4f 72 64 65 72 65 64 28 57 68 65 72 65 49 6e 66  Ordered(WhereInf
22670 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
22680 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 57 68  WhereIsSorted(Wh
22690 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
226a0 71 6c 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69  qlite3WhereConti
226b0 6e 75 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e  nueLabel(WhereIn
226c0 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
226d0 33 57 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c  3WhereBreakLabel
226e0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
226f0 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b  t sqlite3WhereOk
22700 4f 6e 65 50 61 73 73 28 57 68 65 72 65 49 6e 66  OnePass(WhereInf
22710 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  o*, int*);.int s
22720 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
22730 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20  tColumn(Parse*, 
22740 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
22750 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64  , int, u8);.void
22760 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
22770 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65  GetColumnOfTable
22780 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  (Vdbe*, Table*, 
22790 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
227a0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
227b0 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c  CodeMove(Parse*,
227c0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
227d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
227e0 72 43 61 63 68 65 53 74 6f 72 65 28 50 61 72 73  rCacheStore(Pars
227f0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
22800 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22810 45 78 70 72 43 61 63 68 65 50 75 73 68 28 50 61  ExprCachePush(Pa
22820 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
22830 74 65 33 45 78 70 72 43 61 63 68 65 50 6f 70 28  te3ExprCachePop(
22840 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
22850 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 52 65  lite3ExprCacheRe
22860 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  move(Parse*, int
22870 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
22880 69 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65  ite3ExprCacheCle
22890 61 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  ar(Parse*);.void
228a0 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
228b0 65 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28  eAffinityChange(
228c0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
228d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
228e0 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20  xprCode(Parse*, 
228f0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
22900 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
22910 65 46 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73  eFactorable(Pars
22920 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
22930 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
22940 72 43 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73  rCodeAtInit(Pars
22950 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
22960 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
22970 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72  ExprCodeTemp(Par
22980 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a  se*, Expr*, int*
22990 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
229a0 70 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72  prCodeTarget(Par
229b0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
229c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
229d0 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50  prCodeAndCache(P
229e0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
229f0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
22a00 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28  xprCodeExprList(
22a10 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
22a20 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65  *, int, u8);.#de
22a30 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
22a40 5f 44 55 50 20 20 20 20 20 20 30 78 30 31 20 20  _DUP      0x01  
22a50 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61  /* Deep, not sha
22a60 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23  llow copies */.#
22a70 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
22a80 45 4c 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32  EL_FACTOR   0x02
22a90 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20    /* Factor out 
22aa0 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a  constant terms *
22ab0 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  /.void sqlite3Ex
22ac0 70 72 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c  prIfTrue(Parse*,
22ad0 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
22ae0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
22af0 78 70 72 49 66 46 61 6c 73 65 28 50 61 72 73 65  xprIfFalse(Parse
22b00 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69  *, Expr*, int, i
22b10 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  nt);.Table *sqli
22b20 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c  te3FindTable(sql
22b30 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
22b40 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
22b50 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c  .Table *sqlite3L
22b60 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72 73 65  ocateTable(Parse
22b70 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e  *,int isView,con
22b80 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
22b90 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  char*);.Table *s
22ba0 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
22bb0 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 69 6e 74  eItem(Parse*,int
22bc0 20 69 73 56 69 65 77 2c 73 74 72 75 63 74 20 53   isView,struct S
22bd0 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a  rcList_item *);.
22be0 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69  Index *sqlite3Fi
22bf0 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a  ndIndex(sqlite3*
22c00 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
22c10 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
22c20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
22c30 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c  dDeleteTable(sql
22c40 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
22c50 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
22c60 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
22c70 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33  eteIndex(sqlite3
22c80 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
22c90 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22ca0 56 61 63 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a  Vacuum(Parse*);.
22cb0 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61  int sqlite3RunVa
22cc0 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c  cuum(char**, sql
22cd0 69 74 65 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71  ite3*);.char *sq
22ce0 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b  lite3NameFromTok
22cf0 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b  en(sqlite3*, Tok
22d00 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
22d10 33 45 78 70 72 43 6f 6d 70 61 72 65 28 45 78 70  3ExprCompare(Exp
22d20 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  r*, Expr*, int);
22d30 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
22d40 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72  ListCompare(Expr
22d50 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
22d60 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
22d70 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78  te3ExprImpliesEx
22d80 70 72 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  pr(Expr*, Expr*,
22d90 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
22da0 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67  te3ExprAnalyzeAg
22db0 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e  gregates(NameCon
22dc0 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  text*, Expr*);.v
22dd0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
22de0 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61  nalyzeAggList(Na
22df0 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c  meContext*,ExprL
22e00 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
22e10 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68  e3FunctionUsesTh
22e20 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63  isSrc(Expr*, Src
22e30 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71  List*);.Vdbe *sq
22e40 6c 69 74 65 33 47 65 74 56 64 62 65 28 50 61 72  lite3GetVdbe(Par
22e50 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
22e60 65 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28  e3PrngSaveState(
22e70 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
22e80 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74  te3PrngRestoreSt
22e90 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ate(void);.void 
22ea0 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
22eb0 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ll(sqlite3*,int)
22ec0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
22ed0 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50  deVerifySchema(P
22ee0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
22ef0 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
22f00 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50  ifyNamedSchema(P
22f10 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
22f20 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71  r *zDb);.void sq
22f30 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61  lite3BeginTransa
22f40 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ction(Parse*, in
22f50 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22f60 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f  CommitTransactio
22f70 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  n(Parse*);.void 
22f80 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54  sqlite3RollbackT
22f90 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
22fa0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22fb0 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a  Savepoint(Parse*
22fc0 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  , int, Token*);.
22fd0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
22fe0 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69  eSavepoints(sqli
22ff0 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  te3 *);.void sql
23000 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e  ite3LeaveMutexAn
23010 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c  dCloseZombie(sql
23020 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
23030 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
23040 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t(Expr*);.int sq
23050 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
23060 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a  antNotJoin(Expr*
23070 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
23080 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75  prIsConstantOrFu
23090 6e 63 74 69 6f 6e 28 45 78 70 72 2a 29 3b 0a 69  nction(Expr*);.i
230a0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
230b0 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69  Integer(Expr*, i
230c0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
230d0 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63  3ExprCanBeNull(c
230e0 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74  onst Expr*);.int
230f0 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64   sqlite3ExprNeed
23100 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67  sNoAffinityChang
23110 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63  e(const Expr*, c
23120 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  har);.int sqlite
23130 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63  3IsRowid(const c
23140 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
23150 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65  te3GenerateRowDe
23160 6c 65 74 65 28 50 61 72 73 65 2a 2c 54 61 62 6c  lete(Parse*,Tabl
23170 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c  e*,Trigger*,int,
23180 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75  int,int,i16,u8,u
23190 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  8,u8);.void sqli
231a0 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e  te3GenerateRowIn
231b0 64 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a  dexDelete(Parse*
231c0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
231d0 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  nt, int*);.int s
231e0 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e  qlite3GenerateIn
231f0 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49  dexKey(Parse*, I
23200 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ndex*, int, int,
23210 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78   int, int*,Index
23220 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
23230 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49  ite3ResolvePartI
23240 64 78 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69  dxLabel(Parse*,i
23250 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
23260 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61  3GenerateConstra
23270 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a  intChecks(Parse*
23280 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74  ,Table*,int*,int
23290 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20  ,int,int,int,.  
232a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232c0 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74     u8,u8,int,int
232d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
232e0 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74 69 6f  CompleteInsertio
232f0 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  n(Parse*,Table*,
23300 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a  int,int,int,int*
23310 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69  ,int,int,int);.i
23320 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61  nt sqlite3OpenTa
23330 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50 61  bleAndIndices(Pa
23340 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
23350 74 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74  t, int, u8*, int
23360 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73  *, int*);.void s
23370 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65  qlite3BeginWrite
23380 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a  Operation(Parse*
23390 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
233a0 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72  d sqlite3MultiWr
233b0 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ite(Parse*);.voi
233c0 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72  d sqlite3MayAbor
233d0 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  t(Parse*);.void 
233e0 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74  sqlite3HaltConst
233f0 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
23400 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69  t, int, char*, i
23410 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  8, u8);.void sql
23420 69 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72  ite3UniqueConstr
23430 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
23440 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  , Index*);.void 
23450 73 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73  sqlite3RowidCons
23460 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  traint(Parse*, i
23470 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70  nt, Table*);.Exp
23480 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75  r *sqlite3ExprDu
23490 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  p(sqlite3*,Expr*
234a0 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20  ,int);.ExprList 
234b0 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
234c0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  Dup(sqlite3*,Exp
234d0 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63  rList*,int);.Src
234e0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
234f0 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
23500 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  ,SrcList*,int);.
23510 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49  IdList *sqlite3I
23520 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  dListDup(sqlite3
23530 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65  *,IdList*);.Sele
23540 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63  ct *sqlite3Selec
23550 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65  tDup(sqlite3*,Se
23560 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  lect*,int);.void
23570 20 73 71 6c 69 74 65 33 46 75 6e 63 44 65 66 49   sqlite3FuncDefI
23580 6e 73 65 72 74 28 46 75 6e 63 44 65 66 48 61 73  nsert(FuncDefHas
23590 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46  h*, FuncDef*);.F
235a0 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46  uncDef *sqlite3F
235b0 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  indFunction(sqli
235c0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
235d0 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38 29 3b  ,int,int,u8,u8);
235e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
235f0 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63  isterBuiltinFunc
23600 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  tions(sqlite3*);
23610 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
23620 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e  isterDateTimeFun
23630 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
23640 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
23650 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e  erGlobalFunction
23660 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  s(void);.int sql
23670 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f  ite3SafetyCheckO
23680 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  k(sqlite3*);.int
23690 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
236a0 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69  eckSickOrOk(sqli
236b0 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
236c0 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28  te3ChangeCookie(
236d0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23  Parse*, int);..#
236e0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
236f0 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26  TE_OMIT_VIEW) &&
23700 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
23710 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76  _OMIT_TRIGGER).v
23720 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72  oid sqlite3Mater
23730 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65  ializeView(Parse
23740 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a  *, Table*, Expr*
23750 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  , int);.#endif..
23760 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
23770 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f  MIT_TRIGGER.  vo
23780 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54  id sqlite3BeginT
23790 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
237a0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
237b0 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63  ,int,IdList*,Src
237c0 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
237d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237e0 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74    Expr*,int, int
237f0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
23800 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28 50  3FinishTrigger(P
23810 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74  arse*, TriggerSt
23820 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20  ep*, Token*);.  
23830 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
23840 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
23850 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  SrcList*, int);.
23860 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
23870 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61 72  opTriggerPtr(Par
23880 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a  se*, Trigger*);.
23890 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
238a0 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28  e3TriggersExist(
238b0 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c  Parse *, Table*,
238c0 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
238d0 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20   int *pMask);.  
238e0 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33  Trigger *sqlite3
238f0 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72 73  TriggerList(Pars
23900 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20  e *, Table *);. 
23910 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
23920 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72 73  eRowTrigger(Pars
23930 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69  e*, Trigger *, i
23940 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  nt, ExprList*, i
23950 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20  nt, Table *,.   
23960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23970 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e           int, in
23980 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
23990 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
239a0 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72 73  iggerDirect(Pars
239b0 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  e *, Trigger *, 
239c0 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Table *, int, in
239d0 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
239e0 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67 65  sqliteViewTrigge
239f0 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  rs(Parse*, Table
23a00 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45  *, Expr*, int, E
23a10 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69  xprList*);.  voi
23a20 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
23a30 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69 74  riggerStep(sqlit
23a40 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  e3*, TriggerStep
23a50 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
23a60 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
23a70 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69  rSelectStep(sqli
23a80 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  te3*,Select*);. 
23a90 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
23aa0 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73 65  lite3TriggerInse
23ab0 72 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  rtStep(sqlite3*,
23ac0 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c  Token*, IdList*,
23ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23af0 20 20 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a           Select*
23b00 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ,u8);.  TriggerS
23b10 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
23b20 67 65 72 55 70 64 61 74 65 53 74 65 70 28 73 71  gerUpdateStep(sq
23b30 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  lite3*,Token*,Ex
23b40 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  prList*, Expr*, 
23b50 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  u8);.  TriggerSt
23b60 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
23b70 65 72 44 65 6c 65 74 65 53 74 65 70 28 73 71 6c  erDeleteStep(sql
23b80 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78  ite3*,Token*, Ex
23b90 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  pr*);.  void sql
23ba0 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
23bb0 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  r(sqlite3*, Trig
23bc0 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ger*);.  void sq
23bd0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
23be0 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
23bf0 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
23c00 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c  har*);.  u32 sql
23c10 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61  ite3TriggerColma
23c20 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65  sk(Parse*,Trigge
23c30 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  r*,ExprList*,int
23c40 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29  ,int,Table*,int)
23c50 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ;.# define sqlit
23c60 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28  e3ParseToplevel(
23c70 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76  p) ((p)->pToplev
23c80 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65  el ? (p)->pTople
23c90 76 65 6c 20 3a 20 28 70 29 29 0a 23 65 6c 73 65  vel : (p)).#else
23ca0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23cb0 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28 42  3TriggersExist(B
23cc0 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65  ,C,D,E,F) 0.# de
23cd0 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65  fine sqlite3Dele
23ce0 74 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23  teTrigger(A,B).#
23cf0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44   define sqlite3D
23d00 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 41 2c  ropTriggerPtr(A,
23d10 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
23d20 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
23d30 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29  teTrigger(A,B,C)
23d40 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23d50 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28  3CodeRowTrigger(
23d60 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c  A,B,C,D,E,F,G,H,
23d70 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  I).# define sqli
23d80 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
23d90 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c  rDirect(A,B,C,D,
23da0 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71  E,F).# define sq
23db0 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74  lite3TriggerList
23dc0 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e  (X, Y) 0.# defin
23dd0 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
23de0 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65  plevel(p) p.# de
23df0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
23e00 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43  gerColmask(A,B,C
23e10 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64  ,D,E,F,G) 0.#end
23e20 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  if..int sqlite3J
23e30 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20  oinType(Parse*, 
23e40 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
23e50 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
23e60 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72 65 69  lite3CreateForei
23e70 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78  gnKey(Parse*, Ex
23e80 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  prList*, Token*,
23e90 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
23ea0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
23eb0 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61  ferForeignKey(Pa
23ec0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e  rse*, int);.#ifn
23ed0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
23ee0 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20  AUTHORIZATION.  
23ef0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
23f00 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72  Read(Parse*,Expr
23f10 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73  *,Schema*,SrcLis
23f20 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
23f30 65 33 41 75 74 68 43 68 65 63 6b 28 50 61 72 73  e3AuthCheck(Pars
23f40 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  e*,int, const ch
23f50 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
23f60 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
23f70 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
23f80 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61  thContextPush(Pa
23f90 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78  rse*, AuthContex
23fa0 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
23fb0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
23fc0 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41  AuthContextPop(A
23fd0 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20  uthContext*);.  
23fe0 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 52  int sqlite3AuthR
23ff0 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63  eadCol(Parse*, c
24000 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e  onst char *, con
24010 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b  st char *, int);
24020 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
24030 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
24040 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e  a,b,c,d).# defin
24050 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  e sqlite3AuthChe
24060 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20  ck(a,b,c,d,e)   
24070 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66   SQLITE_OK.# def
24080 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
24090 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63  ontextPush(a,b,c
240a0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
240b0 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70  e3AuthContextPop
240c0 28 61 29 20 20 28 28 76 6f 69 64 29 28 61 29 29  (a)  ((void)(a))
240d0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
240e0 69 74 65 33 41 74 74 61 63 68 28 50 61 72 73 65  ite3Attach(Parse
240f0 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  *, Expr*, Expr*,
24100 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
24110 6c 69 74 65 33 44 65 74 61 63 68 28 50 61 72 73  lite3Detach(Pars
24120 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
24130 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28   sqlite3FixInit(
24140 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a  DbFixer*, Parse*
24150 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
24160 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
24170 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
24180 78 53 72 63 4c 69 73 74 28 44 62 46 69 78 65 72  xSrcList(DbFixer
24190 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
241a0 74 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65  t sqlite3FixSele
241b0 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c  ct(DbFixer*, Sel
241c0 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
241d0 65 33 46 69 78 45 78 70 72 28 44 62 46 69 78 65  e3FixExpr(DbFixe
241e0 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
241f0 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69  sqlite3FixExprLi
24200 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  st(DbFixer*, Exp
24210 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
24220 69 74 65 33 46 69 78 54 72 69 67 67 65 72 53 74  ite3FixTriggerSt
24230 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69  ep(DbFixer*, Tri
24240 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20  ggerStep*);.int 
24250 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73  sqlite3AtoF(cons
24260 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c  t char *z, doubl
24270 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e  e*, int, u8);.in
24280 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33  t sqlite3GetInt3
24290 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  2(const char *, 
242a0 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
242b0 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61  e3Atoi(const cha
242c0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
242d0 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e  Utf16ByteLen(con
242e0 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20  st void *pData, 
242f0 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20  int nChar);.int 
24300 73 71 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c  sqlite3Utf8CharL
24310 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70  en(const char *p
24320 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29  Data, int nByte)
24330 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74 66  ;.u32 sqlite3Utf
24340 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a  8Read(const u8**
24350 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
24360 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f  3LogEst(u64);.Lo
24370 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
24380 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67  stAdd(LogEst,Log
24390 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  Est);.#ifndef SQ
243a0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
243b0 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71  LTABLE.LogEst sq
243c0 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44  lite3LogEstFromD
243d0 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23  ouble(double);.#
243e0 65 6e 64 69 66 0a 75 36 34 20 73 71 6c 69 74 65  endif.u64 sqlite
243f0 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67  3LogEstToInt(Log
24400 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75  Est);../*.** Rou
24410 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e  tines to read an
24420 64 20 77 72 69 74 65 20 76 61 72 69 61 62 6c 65  d write variable
24430 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73  -length integers
24440 2e 20 20 54 68 65 73 65 20 75 73 65 64 20 74 6f  .  These used to
24450 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c  .** be defined l
24460 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20  ocally, but now 
24470 77 65 20 75 73 65 20 74 68 65 20 76 61 72 69 6e  we use the varin
24480 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68  t routines in th
24490 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65  e util.c.** file
244a0 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
244b0 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e  PutVarint(unsign
244c0 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a  ed char*, u64);.
244d0 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
244e0 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  int(const unsign
244f0 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a  ed char *, u64 *
24500 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  );.u8 sqlite3Get
24510 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75  Varint32(const u
24520 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
24530 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  u32 *);.int sqli
24540 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34  te3VarintLen(u64
24550 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   v);../*.** The 
24560 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20 66  common case is f
24570 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f 20 62  or a varint to b
24580 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e  e a single byte.
24590 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67    They following
245a0 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c  .** macros handl
245b0 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  e the common cas
245c0 65 20 77 69 74 68 6f 75 74 20 61 20 70 72 6f 63  e without a proc
245d0 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75 74 20  edure call, but 
245e0 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65  then call.** the
245f0 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20 6c   procedure for l
24600 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a  arger varints..*
24610 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  /.#define getVar
24620 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20  int32(A,B)  \.  
24630 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30  (u8)((*(A)<(u8)0
24640 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a  x80)?((B)=(u32)*
24650 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65  (A)),1:sqlite3Ge
24660 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75  tVarint32((A),(u
24670 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66  32 *)&(B))).#def
24680 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32 28  ine putVarint32(
24690 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
246a0 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30 78  (u32)(B)<(u32)0x
246b0 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67  80)?(*(A)=(unsig
246c0 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a  ned char)(B)),1:
246d0 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56 61  \.  sqlite3PutVa
246e0 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29 0a 23  rint((A),(B))).#
246f0 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
24700 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 56 61      sqlite3GetVa
24710 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74  rint.#define put
24720 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65  Varint    sqlite
24730 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e  3PutVarint...con
24740 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
24750 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72  IndexAffinityStr
24760 28 56 64 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a  (Vdbe *, Index *
24770 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54  );.void sqlite3T
24780 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62  ableAffinity(Vdb
24790 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  e*, Table*, int)
247a0 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f  ;.char sqlite3Co
247b0 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28 45 78  mpareAffinity(Ex
247c0 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
247d0 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  aff2);.int sqlit
247e0 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f  e3IndexAffinityO
247f0 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63  k(Expr *pExpr, c
24800 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79  har idx_affinity
24810 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45  );.char sqlite3E
24820 78 70 72 41 66 66 69 6e 69 74 79 28 45 78 70 72  xprAffinity(Expr
24830 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71   *pExpr);.int sq
24840 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73  lite3Atoi64(cons
24850 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69  t char*, i64*, i
24860 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
24870 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36  ite3DecOrHexToI6
24880 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  4(const char*, i
24890 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  64*);.void sqlit
248a0 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67 28 73  e3ErrorWithMsg(s
248b0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
248c0 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a  nst char*,...);.
248d0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
248e0 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  r(sqlite3*,int);
248f0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65  .void *sqlite3He
24900 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a  xToBlob(sqlite3*
24910 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  , const char *z,
24920 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69   int n);.u8 sqli
24930 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20  te3HexToInt(int 
24940 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  h);.int sqlite3T
24950 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65  woPartName(Parse
24960 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b   *, Token *, Tok
24970 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b  en *, Token **);
24980 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
24990 4c 49 54 45 5f 54 45 53 54 29 20 0a 63 6f 6e 73  LITE_TEST) .cons
249a0 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45  t char *sqlite3E
249b0 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e  rrName(int);.#en
249c0 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20  dif..const char 
249d0 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69  *sqlite3ErrStr(i
249e0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
249f0 52 65 61 64 53 63 68 65 6d 61 28 50 61 72 73 65  ReadSchema(Parse
24a00 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53   *pParse);.CollS
24a10 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43  eq *sqlite3FindC
24a20 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c  ollSeq(sqlite3*,
24a30 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68  u8 enc, const ch
24a40 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65  ar*,int);.CollSe
24a50 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  q *sqlite3Locate
24a60 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
24a70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61  Parse, const cha
24a80 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65  r*zName);.CollSe
24a90 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f  q *sqlite3ExprCo
24aa0 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
24ab0 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72  rse, Expr *pExpr
24ac0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
24ad0 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f  ExprAddCollateTo
24ae0 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  ken(Parse *pPars
24af0 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20  e, Expr*, const 
24b00 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73  Token*);.Expr *s
24b10 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c  qlite3ExprAddCol
24b20 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65  lateString(Parse
24b30 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68  *,Expr*,const ch
24b40 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  ar*);.Expr *sqli
24b50 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61  te3ExprSkipColla
24b60 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  te(Expr*);.int s
24b70 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53  qlite3CheckCollS
24b80 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c  eq(Parse *, Coll
24b90 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Seq *);.int sqli
24ba0 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61  te3CheckObjectNa
24bb0 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73  me(Parse *, cons
24bc0 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20  t char *);.void 
24bd0 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
24be0 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c  anges(sqlite3 *,
24bf0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
24c00 65 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c  e3AddInt64(i64*,
24c10 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
24c20 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69  3SubInt64(i64*,i
24c30 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
24c40 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  MulInt64(i64*,i6
24c50 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  4);.int sqlite3A
24c60 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69  bsInt32(int);.#i
24c70 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
24c80 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69  LE_8_3_NAMES.voi
24c90 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66  d sqlite3FileSuf
24ca0 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a  fix3(const char*
24cb0 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  , char*);.#else.
24cc0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24cd0 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29  FileSuffix3(X,Y)
24ce0 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74  .#endif.u8 sqlit
24cf0 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e  e3GetBoolean(con
24d00 73 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a  st char *z,u8);.
24d10 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
24d20 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71  ite3ValueText(sq
24d30 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38  lite3_value*, u8
24d40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
24d50 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33  lueBytes(sqlite3
24d60 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f  _value*, u8);.vo
24d70 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  id sqlite3ValueS
24d80 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61  etStr(sqlite3_va
24d90 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  lue*, int, const
24da0 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20   void *,u8, .   
24db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24dc0 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69       void(*)(voi
24dd0 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  d*));.void sqlit
24de0 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73  e3ValueSetNull(s
24df0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a  qlite3_value*);.
24e00 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
24e10 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61  eFree(sqlite3_va
24e20 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76  lue*);.sqlite3_v
24e30 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c  alue *sqlite3Val
24e40 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29  ueNew(sqlite3 *)
24e50 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55  ;.char *sqlite3U
24e60 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20  tf16to8(sqlite3 
24e70 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  *, const void*, 
24e80 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
24e90 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78  lite3ValueFromEx
24ea0 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78  pr(sqlite3 *, Ex
24eb0 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71  pr *, u8, u8, sq
24ec0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b  lite3_value **);
24ed0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
24ee0 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28  ueApplyAffinity(
24ef0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c  sqlite3_value *,
24f00 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65   u8, u8);.#ifnde
24f10 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
24f20 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e  ATION.extern con
24f30 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
24f40 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72   sqlite3OpcodePr
24f50 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e  operty[];.extern
24f60 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
24f70 63 68 61 72 20 73 71 6c 69 74 65 33 55 70 70 65  char sqlite3Uppe
24f80 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65  rToLower[];.exte
24f90 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
24fa0 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 43 74  d char sqlite3Ct
24fb0 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e  ypeMap[];.extern
24fc0 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c   const Token sql
24fd0 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b  ite3IntTokens[];
24fe0 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57  .extern SQLITE_W
24ff0 53 44 20 73 74 72 75 63 74 20 53 71 6c 69 74 65  SD struct Sqlite
25000 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43  3Config sqlite3C
25010 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 53 51  onfig;.extern SQ
25020 4c 49 54 45 5f 57 53 44 20 46 75 6e 63 44 65 66  LITE_WSD FuncDef
25030 48 61 73 68 20 73 71 6c 69 74 65 33 47 6c 6f 62  Hash sqlite3Glob
25040 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66  alFunctions;.#if
25050 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
25060 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20  _WSD.extern int 
25070 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79  sqlite3PendingBy
25080 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69  te;.#endif.#endi
25090 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  f.void sqlite3Ro
250a0 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69  otPageMoved(sqli
250b0 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  te3*, int, int, 
250c0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
250d0 65 33 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a  e3Reindex(Parse*
250e0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
250f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
25100 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f  lterFunctions(vo
25110 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
25120 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c  3AlterRenameTabl
25130 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
25140 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  t*, Token*);.int
25150 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e   sqlite3GetToken
25160 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
25170 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a  char *, int *);.
25180 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74  void sqlite3Nest
25190 65 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  edParse(Parse*, 
251a0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
251b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
251c0 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
251d0 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a  tements(sqlite3*
251e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  );.int sqlite3Co
251f0 64 65 53 75 62 73 65 6c 65 63 74 28 50 61 72 73  deSubselect(Pars
25200 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74  e *, Expr *, int
25210 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
25220 69 74 65 33 53 65 6c 65 63 74 50 72 65 70 28 50  ite3SelectPrep(P
25230 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
25240 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 69  NameContext*);.i
25250 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53  nt sqlite3MatchS
25260 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68  panName(const ch
25270 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
25280 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
25290 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
252a0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45   sqlite3ResolveE
252b0 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e  xprNames(NameCon
252c0 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  text*, Expr*);.v
252d0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
252e0 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61  veSelectNames(Pa
252f0 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
25300 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f  ameContext*);.vo
25310 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
25320 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50  eSelfReference(P
25330 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
25340 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
25350 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
25360 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42  solveOrderGroupB
25370 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  y(Parse*, Select
25380 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  *, ExprList*, co
25390 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
253a0 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65   sqlite3ColumnDe
253b0 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61  fault(Vdbe *, Ta
253c0 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ble *, int, int)
253d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
253e0 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75  terFinishAddColu
253f0 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65  mn(Parse *, Toke
25400 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n *);.void sqlit
25410 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43  e3AlterBeginAddC
25420 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53  olumn(Parse *, S
25430 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53  rcList *);.CollS
25440 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f  eq *sqlite3GetCo
25450 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38  llSeq(Parse*, u8
25460 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e  , CollSeq *, con
25470 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20  st char*);.char 
25480 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54  sqlite3AffinityT
25490 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ype(const char*,
254a0 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u8*);.void sqli
254b0 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65  te3Analyze(Parse
254c0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
254d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
254e0 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72  nvokeBusyHandler
254f0 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a  (BusyHandler*);.
25500 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44  int sqlite3FindD
25510 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65  b(sqlite3*, Toke
25520 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
25530 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74  FindDbName(sqlit
25540 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
25550 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
25560 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c  AnalysisLoad(sql
25570 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a  ite3*,int iDB);.
25580 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
25590 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73  teIndexSamples(s
255a0 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b  qlite3*,Index*);
255b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66  .void sqlite3Def
255c0 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78  aultRowEst(Index
255d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
255e0 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63  RegisterLikeFunc
255f0 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20  tions(sqlite3*, 
25600 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
25610 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28  3IsLikeFunction(
25620 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69  sqlite3*,Expr*,i
25630 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nt*,char*);.void
25640 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46   sqlite3MinimumF
25650 69 6c 65 46 6f 72 6d 61 74 28 50 61 72 73 65 2a  ileFormat(Parse*
25660 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
25670 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43  d sqlite3SchemaC
25680 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63  lear(void *);.Sc
25690 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68  hema *sqlite3Sch
256a0 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a  emaGet(sqlite3 *
256b0 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20  , Btree *);.int 
256c0 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49  sqlite3SchemaToI
256d0 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62  ndex(sqlite3 *db
256e0 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79  , Schema *);.Key
256f0 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
25700 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65  InfoAlloc(sqlite
25710 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69  3*,int,int);.voi
25720 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f  d sqlite3KeyInfo
25730 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b  Unref(KeyInfo*);
25740 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
25750 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49  3KeyInfoRef(KeyI
25760 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a  nfo*);.KeyInfo *
25770 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66  sqlite3KeyInfoOf
25780 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e  Index(Parse*, In
25790 64 65 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  dex*);.#ifdef SQ
257a0 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73  LITE_DEBUG.int s
257b0 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57  qlite3KeyInfoIsW
257c0 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f  riteable(KeyInfo
257d0 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  *);.#endif.int s
257e0 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63  qlite3CreateFunc
257f0 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
25800 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69  t char *, int, i
25810 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76  nt, void *, .  v
25820 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
25830 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
25840 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a  ite3_value **),.
25850 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
25860 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
25870 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
25880 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  ), void (*)(sqli
25890 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20  te3_context*),. 
258a0 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
258b0 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a  *pDestructor.);.
258c0 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45 78  int sqlite3ApiEx
258d0 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  it(sqlite3 *db, 
258e0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
258f0 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73  3OpenTempDatabas
25900 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69  e(Parse *);..voi
25910 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
25920 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c  mInit(StrAccum*,
25930 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   char*, int, int
25940 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
25950 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74  trAccumAppend(St
25960 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68  rAccum*,const ch
25970 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ar*,int);.void s
25980 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
25990 70 65 6e 64 41 6c 6c 28 53 74 72 41 63 63 75 6d  pendAll(StrAccum
259a0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
259b0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 70 70 65  void sqlite3Appe
259c0 6e 64 53 70 61 63 65 28 53 74 72 41 63 63 75 6d  ndSpace(StrAccum
259d0 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71  *,int);.char *sq
259e0 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e  lite3StrAccumFin
259f0 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a  ish(StrAccum*);.
25a00 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
25a10 63 63 75 6d 52 65 73 65 74 28 53 74 72 41 63 63  ccumReset(StrAcc
25a20 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  um*);.void sqlit
25a30 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74  e3SelectDestInit
25a40 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74  (SelectDest*,int
25a50 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
25a60 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e  ite3CreateColumn
25a70 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20  Expr(sqlite3 *, 
25a80 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20  SrcList *, int, 
25a90 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  int);..void sqli
25aa0 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72 74  te3BackupRestart
25ab0 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20  (sqlite3_backup 
25ac0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25ad0 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c  BackupUpdate(sql
25ae0 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50  ite3_backup *, P
25af0 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29  gno, const u8 *)
25b00 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
25b10 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
25b20 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71 6c 69  _STAT4.void sqli
25b30 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69  te3AnalyzeFuncti
25b40 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73  ons(void);.int s
25b50 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65  qlite3Stat4Probe
25b60 53 65 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c  SetValue(Parse*,
25b70 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52  Index*,UnpackedR
25b80 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 75 38  ecord**,Expr*,u8
25b90 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20  ,int,int*);.int 
25ba0 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75  sqlite3Stat4Valu
25bb0 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65 2a  eFromExpr(Parse*
25bc0 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c  , Expr*, u8, sql
25bd0 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76  ite3_value**);.v
25be0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 34  oid sqlite3Stat4
25bf0 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b  ProbeFree(Unpack
25c00 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20  edRecord*);.int 
25c10 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75  sqlite3Stat4Colu
25c20 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  mn(sqlite3*, con
25c30 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69  st void*, int, i
25c40 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  nt, sqlite3_valu
25c50 65 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  e**);.#endif../*
25c60 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
25c70 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67  e to the LEMON-g
25c80 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a  enerated parser.
25c90 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  */.void *sqlite3
25ca0 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64  ParserAlloc(void
25cb0 2a 28 2a 29 28 75 36 34 29 29 3b 0a 76 6f 69 64  *(*)(u64));.void
25cc0 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 72   sqlite3ParserFr
25cd0 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a  ee(void*, void(*
25ce0 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20  )(void*));.void 
25cf0 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f  sqlite3Parser(vo
25d00 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c  id*, int, Token,
25d10 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66   Parse*);.#ifdef
25d20 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b   YYTRACKMAXSTACK
25d30 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69  DEPTH.  int sqli
25d40 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65  te3ParserStackPe
25d50 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69  ak(void*);.#endi
25d60 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  f..void sqlite3A
25d70 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  utoLoadExtension
25d80 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66  s(sqlite3*);.#if
25d90 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
25da0 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
25db0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c    void sqlite3Cl
25dc0 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oseExtensions(sq
25dd0 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23  lite3*);.#else.#
25de0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
25df0 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58  loseExtensions(X
25e00 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ).#endif..#ifnde
25e10 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
25e20 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69  ARED_CACHE.  voi
25e30 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  d sqlite3TableLo
25e40 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c  ck(Parse *, int,
25e50 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20   int, u8, const 
25e60 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  char *);.#else. 
25e70 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
25e80 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c  TableLock(v,w,x,
25e90 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  y,z).#endif..#if
25ea0 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
25eb0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66    int sqlite3Utf
25ec0 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68  8To8(unsigned ch
25ed0 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
25ee0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
25ef0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
25f00 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
25f10 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64  tabClear(Y).#  d
25f20 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
25f30 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54  bSync(X,Y) SQLIT
25f40 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
25f50 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
25f60 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
25f70 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
25f80 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
25f90 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
25fa0 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65  (db) 0.#  define
25fb0 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
25fc0 28 58 29 20 0a 23 20 20 64 65 66 69 6e 65 20 73  (X) .#  define s
25fd0 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
25fe0 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
25ff0 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
26000 69 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ist(X).#  define
26010 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
26020 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53  point(X, Y, Z) S
26030 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69  QLITE_OK.#  defi
26040 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56 54 61  ne sqlite3GetVTa
26050 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61 62  ble(X,Y)  ((VTab
26060 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20  le*)0).#else.   
26070 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
26080 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64  Clear(sqlite3 *d
26090 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76  b, Table*);.   v
260a0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 44  oid sqlite3VtabD
260b0 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65  isconnect(sqlite
260c0 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29  3 *db, Table *p)
260d0 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
260e0 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33  VtabSync(sqlite3
260f0 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20   *db, Vdbe*);.  
26100 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
26110 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33  Rollback(sqlite3
26120 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71   *db);.   int sq
26130 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28  lite3VtabCommit(
26140 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
26150 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
26160 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b  bLock(VTable *);
26170 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
26180 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c  VtabUnlock(VTabl
26190 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  e *);.   void sq
261a0 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
261b0 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20  ist(sqlite3*);. 
261c0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
261d0 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74  bSavepoint(sqlit
261e0 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  e3 *, int, int);
261f0 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
26200 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
26210 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f  (Vdbe*, sqlite3_
26220 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c  vtab*);.   VTabl
26230 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61  e *sqlite3GetVTa
26240 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61  ble(sqlite3*, Ta
26250 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65  ble*);.#  define
26260 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
26270 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56  nc(db) ((db)->nV
26280 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d  Trans>0 && (db)-
26290 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e  >aVTrans==0).#en
262a0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
262b0 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65  VtabMakeWritable
262c0 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b  (Parse*,Table*);
262d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
262e0 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73  bBeginParse(Pars
262f0 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
26300 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29  n*, Token*, int)
26310 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
26320 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50 61  abFinishParse(Pa
26330 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  rse*, Token*);.v
26340 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41  oid sqlite3VtabA
26350 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a  rgInit(Parse*);.
26360 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
26370 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a  ArgExtend(Parse*
26380 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
26390 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72  qlite3VtabCallCr
263a0 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69  eate(sqlite3*, i
263b0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
263c0 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20  , char **);.int 
263d0 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
263e0 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54  onnect(Parse*, T
263f0 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  able*);.int sqli
26400 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72  te3VtabCallDestr
26410 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  oy(sqlite3*, int
26420 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
26430 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
26440 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c  Begin(sqlite3 *,
26450 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63   VTable *);.Func
26460 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62  Def *sqlite3Vtab
26470 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e  OverloadFunction
26480 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44  (sqlite3 *,FuncD
26490 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45  ef*, int nArg, E
264a0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
264b0 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69  te3InvalidFuncti
264c0 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  on(sqlite3_conte
264d0 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
264e0 76 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65  value**);.sqlite
264f0 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53  3_int64 sqlite3S
26500 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73  tmtCurrentTime(s
26510 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
26520 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  ;.int sqlite3Vdb
26530 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28  eParameterIndex(
26540 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Vdbe*, const cha
26550 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
26560 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e  lite3TransferBin
26570 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74  dings(sqlite3_st
26580 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74  mt *, sqlite3_st
26590 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  mt *);.void sqli
265a0 74 65 33 50 61 72 73 65 72 52 65 73 65 74 28 50  te3ParserReset(P
265b0 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
265c0 74 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62  te3Reprepare(Vdb
265d0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
265e0 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65  3ExprListCheckLe
265f0 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70  ngth(Parse*, Exp
26600 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
26610 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ar*);.CollSeq *s
26620 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70  qlite3BinaryComp
26630 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  areCollSeq(Parse
26640 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72   *, Expr *, Expr
26650 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
26660 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e  TempInMemory(con
26670 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f  st sqlite3*);.co
26680 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
26690 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
266a0 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  (int);.#ifndef S
266b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
266c0 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63   int sqlite3Chec
266d0 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c  kpoint(sqlite3*,
266e0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
266f0 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71   int*);.  int sq
26700 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48  lite3WalDefaultH
26710 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  ook(void*,sqlite
26720 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  3*,const char*,i
26730 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e  nt);.#endif.#ifn
26740 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
26750 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69  CTE.  With *sqli
26760 74 65 33 57 69 74 68 41 64 64 28 50 61 72 73 65  te3WithAdd(Parse
26770 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45  *,With*,Token*,E
26780 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a  xprList*,Select*
26790 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
267a0 33 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69  3WithDelete(sqli
267b0 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76  te3*,With*);.  v
267c0 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 50  oid sqlite3WithP
267d0 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68  ush(Parse*, With
267e0 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64  *, u8);.#else.#d
267f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74  efine sqlite3Wit
26800 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65  hPush(x,y,z).#de
26810 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68  fine sqlite3With
26820 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64  Delete(x,y).#end
26830 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69  if../* Declarati
26840 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ons for function
26850 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c  s in fkey.c. All
26860 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72 65   of these are re
26870 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d  placed by.** no-
26880 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49  op macros if OMI
26890 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
268a0 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69   defined. In thi
268b0 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67  s case no foreig
268c0 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f  n.** key functio
268d0 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61  nality is availa
268e0 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49  ble. If OMIT_TRI
268f0 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64 20  GGER is defined 
26900 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45  but.** OMIT_FORE
26910 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20  IGN_KEY is not, 
26920 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65  only some of the
26930 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e   functions are n
26940 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68  o-oped. In.** th
26950 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20  is case foreign 
26960 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64 2c  keys are parsed,
26970 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75   but no other fu
26980 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 0a  nctionality is .
26990 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66  ** provided (enf
269a0 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63  orcement of FK c
269b0 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75 69  onstraints requi
269c0 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72 73  res the triggers
269d0 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f   sub-system)..*/
269e0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
269f0 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
26a00 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e  N_KEY) && !defin
26a10 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ed(SQLITE_OMIT_T
26a20 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73  RIGGER).  void s
26a30 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61  qlite3FkCheck(Pa
26a40 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
26a50 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
26a60 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
26a70 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61  e3FkDropTable(Pa
26a80 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  rse*, SrcList *,
26a90 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64   Table*);.  void
26aa0 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
26ab0 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
26ac0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
26ad0 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
26ae0 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71  int sqlite3FkReq
26af0 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61  uired(Parse*, Ta
26b00 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29  ble*, int*, int)
26b10 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 46  ;.  u32 sqlite3F
26b20 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c  kOldmask(Parse*,
26b30 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79   Table*);.  FKey
26b40 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72   *sqlite3FkRefer
26b50 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a  ences(Table *);.
26b60 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
26b70 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73  sqlite3FkActions
26b80 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20  (a,b,c,d,e,f).  
26b90 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
26ba0 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65  kCheck(a,b,c,d,e
26bb0 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,f).  #define sq
26bc0 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65  lite3FkDropTable
26bd0 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e  (a,b,c).  #defin
26be0 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61  e sqlite3FkOldma
26bf0 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20 20  sk(a,b)         
26c00 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
26c10 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c  te3FkRequired(a,
26c20 62 2c 63 2c 64 29 20 20 20 20 30 0a 23 65 6e 64  b,c,d)    0.#end
26c30 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
26c40 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
26c50 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  EY.  void sqlite
26c60 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65  3FkDelete(sqlite
26c70 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  3 *, Table*);.  
26c80 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  int sqlite3FkLoc
26c90 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
26ca0 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64  Table*,FKey*,Ind
26cb0 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c  ex**,int**);.#el
26cc0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
26cd0 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62  ite3FkDelete(a,b
26ce0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
26cf0 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
26d00 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64  (a,b,c,d,e).#end
26d10 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c  if.../*.** Avail
26d20 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63  able fault injec
26d30 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65  tors.  Should be
26d40 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e   numbered beginn
26d50 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23  ing with 0..*/.#
26d60 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41  define SQLITE_FA
26d70 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c  ULTINJECTOR_MALL
26d80 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65  OC     0.#define
26d90 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a   SQLITE_FAULTINJ
26da0 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20  ECTOR_COUNT     
26db0 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e   1../*.** The in
26dc0 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 63  terface to the c
26dd0 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75  ode in fault.c u
26de0 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79  sed for identify
26df0 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20  ing "benign".** 
26e00 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e  malloc failures.
26e10 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72   This is only pr
26e20 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f  esent if SQLITE_
26e30 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
26e40 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69  T.** is not defi
26e50 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ned..*/.#ifndef 
26e60 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
26e70 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64 20  TIN_TEST.  void 
26e80 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
26e90 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
26ea0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e    void sqlite3En
26eb0 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f  dBenignMalloc(vo
26ec0 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  id);.#else.  #de
26ed0 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69  fine sqlite3Begi
26ee0 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a  nBenignMalloc().
26ef0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
26f00 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
26f10 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ().#endif../*.**
26f20 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20   Allowed return 
26f30 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69  values from sqli
26f40 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29  te3FindInIndex()
26f50 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49  .*/.#define IN_I
26f60 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20  NDEX_ROWID      
26f70 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63 68 20    1   /* Search 
26f80 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
26f90 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
26fa0 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20  e IN_INDEX_EPH  
26fb0 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 53          2   /* S
26fc0 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d 65 72  earch an ephemer
26fd0 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65  al b-tree */.#de
26fe0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e  fine IN_INDEX_IN
26ff0 44 45 58 5f 41 53 43 20 20 20 20 33 20 20 20 2f  DEX_ASC    3   /
27000 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78  * Existing index
27010 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64   ASCENDING */.#d
27020 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49  efine IN_INDEX_I
27030 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20 20 20  NDEX_DESC   4   
27040 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65  /* Existing inde
27050 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a  x DESCENDING */.
27060 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
27070 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20 35 20  _NOOP         5 
27080 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76    /* No table av
27090 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d  ailable. Use com
270a0 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a  parisons */./*.*
270b0 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20  * Allowed flags 
270c0 66 6f 72 20 74 68 65 20 33 72 64 20 70 61 72 61  for the 3rd para
270d0 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  meter to sqlite3
270e0 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a  FindInIndex()..*
270f0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
27100 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30  EX_NOOP_OK     0
27110 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20  x0001  /* OK to 
27120 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f  return IN_INDEX_
27130 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NOOP */.#define 
27140 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53  IN_INDEX_MEMBERS
27150 48 49 50 20 20 30 78 30 30 30 32 20 20 2f 2a 20  HIP  0x0002  /* 
27160 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64  IN operator used
27170 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69 70 20   for membership 
27180 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  test */.#define 
27190 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20  IN_INDEX_LOOP   
271a0 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
271b0 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64  IN operator used
271c0 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e   as a loop */.in
271d0 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  t sqlite3FindInI
271e0 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78  ndex(Parse *, Ex
271f0 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 29  pr *, u32, int*)
27200 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
27210 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57  _ENABLE_ATOMIC_W
27220 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69 74  RITE.  int sqlit
27230 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71  e3JournalOpen(sq
27240 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e  lite3_vfs *, con
27250 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74  st char *, sqlit
27260 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20  e3_file *, int, 
27270 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
27280 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73  te3JournalSize(s
27290 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 20  qlite3_vfs *);. 
272a0 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
272b0 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65  nalCreate(sqlite
272c0 33 5f 66 69 6c 65 20 2a 29 3b 0a 20 20 69 6e 74  3_file *);.  int
272d0 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45   sqlite3JournalE
272e0 78 69 73 74 73 28 73 71 6c 69 74 65 33 5f 66 69  xists(sqlite3_fi
272f0 6c 65 20 2a 70 29 3b 0a 23 65 6c 73 65 0a 20 20  le *p);.#else.  
27300 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a  #define sqlite3J
27310 6f 75 72 6e 61 6c 53 69 7a 65 28 70 56 66 73 29  ournalSize(pVfs)
27320 20 28 28 70 56 66 73 29 2d 3e 73 7a 4f 73 46 69   ((pVfs)->szOsFi
27330 6c 65 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  le).  #define sq
27340 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73  lite3JournalExis
27350 74 73 28 70 29 20 31 0a 23 65 6e 64 69 66 0a 0a  ts(p) 1.#endif..
27360 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a  void sqlite3MemJ
27370 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
27380 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74 20  e3_file *);.int 
27390 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61  sqlite3MemJourna
273a0 6c 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e 74  lSize(void);.int
273b0 20 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f 75   sqlite3IsMemJou
273c0 72 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66 69 6c  rnal(sqlite3_fil
273d0 65 20 2a 29 3b 0a 0a 23 69 66 20 53 51 4c 49 54  e *);..#if SQLIT
273e0 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48  E_MAX_EXPR_DEPTH
273f0 3e 30 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  >0.  void sqlite
27400 33 45 78 70 72 53 65 74 48 65 69 67 68 74 28 50  3ExprSetHeight(P
27410 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
27420 70 72 20 2a 70 29 3b 0a 20 20 69 6e 74 20 73 71  pr *p);.  int sq
27430 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48  lite3SelectExprH
27440 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b  eight(Select *);
27450 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78  .  int sqlite3Ex
27460 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 50 61  prCheckHeight(Pa
27470 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73  rse*, int);.#els
27480 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
27490 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74  te3ExprSetHeight
274a0 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20  (x,y).  #define 
274b0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
274c0 72 48 65 69 67 68 74 28 78 29 20 30 0a 20 20 23  rHeight(x) 0.  #
274d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
274e0 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c  prCheckHeight(x,
274f0 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73  y).#endif..u32 s
27500 71 6c 69 74 65 33 47 65 74 34 62 79 74 65 28 63  qlite3Get4byte(c
27510 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20  onst u8*);.void 
27520 73 71 6c 69 74 65 33 50 75 74 34 62 79 74 65 28  sqlite3Put4byte(
27530 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64  u8*, u32);..#ifd
27540 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
27550 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20  _UNLOCK_NOTIFY. 
27560 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
27570 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73  nectionBlocked(s
27580 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65  qlite3 *, sqlite
27590 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  3 *);.  void sql
275a0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e  ite3ConnectionUn
275b0 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a  locked(sqlite3 *
275c0 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  db);.  void sqli
275d0 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f  te3ConnectionClo
275e0 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29  sed(sqlite3 *db)
275f0 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
27600 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
27610 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a  ionBlocked(x,y).
27620 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
27630 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63  3ConnectionUnloc
27640 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65  ked(x).  #define
27650 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
27660 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64  onClosed(x).#end
27670 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
27680 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73  E_DEBUG.  void s
27690 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63  qlite3ParserTrac
276a0 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29  e(FILE*, char *)
276b0 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
276c0 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  If the SQLITE_EN
276d0 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69  ABLE IOTRACE exi
276e0 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f  sts then the glo
276f0 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  bal variable.** 
27700 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69  sqlite3IoTrace i
27710 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
27720 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75   printf-like rou
27730 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  tine used to.** 
27740 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e  print I/O tracin
27750 67 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a  g messages. .*/.
27760 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
27770 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64  ABLE_IOTRACE.# d
27780 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29  efine IOTRACE(A)
27790 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54    if( sqlite3IoT
277a0 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49  race ){ sqlite3I
277b0 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f  oTrace A; }.  vo
277c0 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f  id sqlite3VdbeIO
277d0 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b  TraceSql(Vdbe*);
277e0 0a 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76  .SQLITE_EXTERN v
277f0 6f 69 64 20 28 2a 73 71 6c 69 74 65 33 49 6f 54  oid (*sqlite3IoT
27800 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72  race)(const char
27810 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20  *,...);.#else.# 
27820 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41  define IOTRACE(A
27830 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27840 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
27850 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
27860 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73  * These routines
27870 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66   are available f
27880 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65  or the mem2.c de
27890 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61  bugging memory a
278a0 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79  llocator.** only
278b0 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65 64  .  They are used
278c0 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
278d0 64 69 66 66 65 72 65 6e 74 20 22 74 79 70 65 73  different "types
278e0 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61  " of memory.** a
278f0 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70  llocations are p
27900 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20  roperly tracked 
27910 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a  by the system..*
27920 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
27930 65 62 75 67 53 65 74 54 79 70 65 28 29 20 73 65  ebugSetType() se
27940 74 73 20 74 68 65 20 22 74 79 70 65 22 20 6f 66  ts the "type" of
27950 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74   an allocation t
27960 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20  o one of.** the 
27970 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73  MEMTYPE_* macros
27980 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20   defined below. 
27990 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20 62   The type must b
279a0 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68  e a bitmask with
279b0 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74  .** a single bit
279c0 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69   set..**.** sqli
279d0 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
279e0 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75  pe() returns tru
279f0 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20  e if any of the 
27a00 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f  bits in its seco
27a10 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d  nd.** argument m
27a20 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65  atch the type se
27a30 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75  t by the previou
27a40 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  s sqlite3Memdebu
27a50 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73  gSetType()..** s
27a60 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
27a70 73 54 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e  sType() is inten
27a80 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69  ded for use insi
27a90 64 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74  de assert() stat
27aa0 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71  ements..**.** sq
27ab0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
27ac0 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72  ype() returns tr
27ad0 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68  ue if none of th
27ae0 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65  e bits in its se
27af0 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  cond.** argument
27b00 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20   match the type 
27b10 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69  set by the previ
27b20 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ous sqlite3Memde
27b30 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a  bugSetType()..**
27b40 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65 20  .** Perhaps the 
27b50 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70  most important p
27b60 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69 66 66  oint is the diff
27b70 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d  erence between M
27b80 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61  EMTYPE_HEAP.** a
27b90 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  nd MEMTYPE_LOOKA
27ba0 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c  SIDE.  If an all
27bb0 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59  ocation is MEMTY
27bc0 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68  PE_LOOKASIDE, th
27bd0 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d  at means.** it m
27be0 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 61  ight have been a
27bf0 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b  llocated by look
27c00 61 73 69 64 65 2c 20 65 78 63 65 70 74 20 74 68  aside, except th
27c10 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73  e allocation was
27c20 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72  .** too large or
27c30 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61   lookaside was a
27c40 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74  lready full.  It
27c50 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
27c60 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20   verify.** that 
27c70 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74  allocations that
27c80 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
27c90 20 73 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f   satisfied by lo
27ca0 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a  okaside are not.
27cb0 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20 74  ** passed back t
27cc0 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  o non-lookaside 
27cd0 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e  free() routines.
27ce0 20 20 41 73 73 65 72 74 73 20 73 75 63 68 20 61    Asserts such a
27cf0 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65  s the.** example
27d00 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65   above are place
27d10 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f  d on the non-loo
27d20 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
27d30 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79  utines to verify
27d40 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61  .** this constra
27d50 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  int. .**.** All 
27d60 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70  of this is no-op
27d70 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f   for a productio
27d80 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c  n build.  It onl
27d90 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20  y comes into.** 
27da0 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53 51  play when the SQ
27db0 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f  LITE_MEMDEBUG co
27dc0 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
27dd0 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69  n is used..*/.#i
27de0 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44  fdef SQLITE_MEMD
27df0 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69  EBUG.  void sqli
27e00 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
27e10 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20  pe(void*,u8);.  
27e20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  int sqlite3Memde
27e30 62 75 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a  bugHasType(void*
27e40 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  ,u8);.  int sqli
27e50 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
27e60 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c  e(void*,u8);.#el
27e70 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
27e80 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
27e90 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f  pe(X,Y)  /* no-o
27ea0 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71  p */.# define sq
27eb0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
27ec0 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64  Type(X,Y)  1.# d
27ed0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
27ee0 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29  debugNoType(X,Y)
27ef0 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66     1.#endif.#def
27f00 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50  ine MEMTYPE_HEAP
27f10 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20         0x01  /* 
27f20 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c  General heap all
27f30 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  ocations */.#def
27f40 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b  ine MEMTYPE_LOOK
27f50 41 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20  ASIDE  0x02  /* 
27f60 4d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  Might have been 
27f70 6c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f 72 79  lookaside memory
27f80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
27f90 59 50 45 5f 53 43 52 41 54 43 48 20 20 20 20 30  YPE_SCRATCH    0
27fa0 78 30 34 20 20 2f 2a 20 53 63 72 61 74 63 68 20  x04  /* Scratch 
27fb0 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23  allocations */.#
27fc0 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50  define MEMTYPE_P
27fd0 43 41 43 48 45 20 20 20 20 20 30 78 30 38 20 20  CACHE     0x08  
27fe0 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 61 6c  /* Page cache al
27ff0 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
28000 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 44 42 20  fine MEMTYPE_DB 
28010 20 20 20 20 20 20 20 20 30 78 31 30 20 20 2f 2a          0x10  /*
28020 20 55 73 65 73 20 73 71 6c 69 74 65 33 44 62 4d   Uses sqlite3DbM
28030 61 6c 6c 6f 63 2c 20 6e 6f 74 20 73 71 6c 69 74  alloc, not sqlit
28040 65 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 0a 2f 2a 0a  e_malloc */../*.
28050 2a 2a 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74  ** Threading int
28060 65 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51  erface.*/.#if SQ
28070 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
28080 54 48 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71  THREADS>0.int sq
28090 6c 69 74 65 33 54 68 72 65 61 64 43 72 65 61 74  lite3ThreadCreat
280a0 65 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a  e(SQLiteThread**
280b0 2c 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29  ,void*(*)(void*)
280c0 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c  ,void*);.int sql
280d0 69 74 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53  ite3ThreadJoin(S
280e0 51 4c 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f  QLiteThread*, vo
280f0 69 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  id**);.#endif..#
28100 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49 54 45  endif /* _SQLITE
28110 49 4e 54 5f 48 5f 20 2a 2f 0a                    INT_H_ */.