/ Hex Artifact Content
Login

Artifact 3e0079855cb7b3c85dffac5bcbb1cd712ac62e65:


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 20 26 26 20 5f 4d 53  _MSC_VER) && _MS
1780: 43 5f 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64  C_VER>=1310.#  d
1790: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49  efine SQLITE_NOI
17a0: 4e 4c 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65  NLINE  __declspe
17b0: 63 28 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73  c(noinline).#els
17c0: 65 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  e.#  define SQLI
17d0: 54 45 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64  TE_NOINLINE.#end
17e0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  if../*.** The SQ
17f0: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
1800: 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65  macro must be de
1810: 66 69 6e 65 64 20 61 73 20 30 2c 20 31 2c 20 6f  fined as 0, 1, o
1820: 72 20 32 2e 0a 2a 2a 20 30 20 6d 65 61 6e 73 20  r 2..** 0 means 
1830: 6d 75 74 65 78 65 73 20 61 72 65 20 70 65 72 6d  mutexes are perm
1840: 61 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c 65 20  anently disable 
1850: 61 6e 64 20 74 68 65 20 6c 69 62 72 61 72 79 20  and the library 
1860: 69 73 20 6e 65 76 65 72 0a 2a 2a 20 74 68 72 65  is never.** thre
1870: 61 64 73 61 66 65 2e 20 20 31 20 6d 65 61 6e 73  adsafe.  1 means
1880: 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20   the library is 
1890: 73 65 72 69 61 6c 69 7a 65 64 20 77 68 69 63 68  serialized which
18a0: 20 69 73 20 74 68 65 20 68 69 67 68 65 73 74 0a   is the highest.
18b0: 2a 2a 20 6c 65 76 65 6c 20 6f 66 20 74 68 72 65  ** level of thre
18c0: 61 64 73 61 66 65 74 79 2e 20 20 32 20 6d 65 61  adsafety.  2 mea
18d0: 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79 20 69  ns the library i
18e0: 73 20 6d 75 6c 74 69 74 68 72 65 61 64 65 64 20  s multithreaded 
18f0: 2d 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 74 68  - multiple.** th
1900: 72 65 61 64 73 20 63 61 6e 20 75 73 65 20 53 51  reads can use SQ
1910: 4c 69 74 65 20 61 73 20 6c 6f 6e 67 20 61 73 20  Lite as long as 
1920: 6e 6f 20 74 77 6f 20 74 68 72 65 61 64 73 20 74  no two threads t
1930: 72 79 20 74 6f 20 75 73 65 20 74 68 65 20 73 61  ry to use the sa
1940: 6d 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  me.** database c
1950: 6f 6e 6e 65 63 74 69 6f 6e 20 61 74 20 74 68 65  onnection at the
1960: 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a   same time..**.*
1970: 2a 20 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73  * Older versions
1980: 20 6f 66 20 53 51 4c 69 74 65 20 75 73 65 64 20   of SQLite used 
1990: 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 54 48 52 45  an optional THRE
19a0: 41 44 53 41 46 45 20 6d 61 63 72 6f 2e 0a 2a 2a  ADSAFE macro..**
19b0: 20 57 65 20 73 75 70 70 6f 72 74 20 74 68 61 74   We support that
19c0: 20 66 6f 72 20 6c 65 67 61 63 79 2e 0a 2a 2f 0a   for legacy..*/.
19d0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
19e0: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a  ITE_THREADSAFE).
19f0: 23 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52  # if defined(THR
1a00: 45 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66  EADSAFE).#   def
1a10: 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41  ine SQLITE_THREA
1a20: 44 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45  DSAFE THREADSAFE
1a30: 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69  .# else.#   defi
1a40: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
1a50: 53 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52  SAFE 1 /* IMP: R
1a60: 2d 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a  -07272-22309 */.
1a70: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a  # endif.#endif..
1a80: 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20  /*.** Powersafe 
1a90: 6f 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20  overwrite is on 
1aa0: 62 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74  by default.  But
1ab0: 20 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f   can be turned o
1ac0: 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20  ff using.** the 
1ad0: 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  -DSQLITE_POWERSA
1ae0: 46 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63  FE_OVERWRITE=0 c
1af0: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69  ommand-line opti
1b00: 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  on..*/.#ifndef S
1b10: 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f  QLITE_POWERSAFE_
1b20: 4f 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69  OVERWRITE.# defi
1b30: 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53  ne SQLITE_POWERS
1b40: 41 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a  AFE_OVERWRITE 1.
1b50: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56  #endif../*.** EV
1b60: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37  IDENCE-OF: R-257
1b70: 31 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20  15-37072 Memory 
1b80: 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69  allocation stati
1b90: 73 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65  stics are enable
1ba0: 64 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20  d by.** default 
1bb0: 75 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73  unless SQLite is
1bc0: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53   compiled with S
1bd0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45  QLITE_DEFAULT_ME
1be0: 4d 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20  MSTATUS=0 in.** 
1bf0: 77 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72  which case memor
1c00: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61  y allocation sta
1c10: 74 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61  tistics are disa
1c20: 62 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e  bled by default.
1c30: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
1c40: 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  (SQLITE_DEFAULT_
1c50: 4d 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66  MEMSTATUS).# def
1c60: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
1c70: 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23  LT_MEMSTATUS 1.#
1c80: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61  endif../*.** Exa
1c90: 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  ctly one of the 
1ca0: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
1cb0: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
1cc0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
1cd0: 73 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65  specify which me
1ce0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1cf0: 73 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65  subsystem to use
1d00: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49  ..**.**     SQLI
1d10: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
1d20: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65            // Use
1d30: 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d   normal system m
1d40: 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53  alloc().**     S
1d50: 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c  QLITE_WIN32_MALL
1d60: 4f 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  OC           // 
1d70: 55 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65  Use Win32 native
1d80: 20 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20   heap API.**    
1d90: 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c   SQLITE_ZERO_MAL
1da0: 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f  LOC            /
1db0: 2f 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c  / Use a stub all
1dc0: 6f 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61  ocator that alwa
1dd0: 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20  ys fails.**     
1de0: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20  SQLITE_MEMDEBUG 
1df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1e00: 20 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69   Debugging versi
1e10: 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c  on of system mal
1e20: 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57  loc().**.** On W
1e30: 69 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53  indows, if the S
1e40: 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c  QLITE_WIN32_MALL
1e50: 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72  OC_VALIDATE macr
1e60: 6f 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64  o is defined and
1e70: 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29   the.** assert()
1e80: 20 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65   macro is enable
1e90: 64 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74  d, each call int
1ea0: 6f 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69  o the Win32 nati
1eb0: 76 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65  ve heap subsyste
1ec0: 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20  m.** will cause 
1ed0: 48 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20  HeapValidate to 
1ee0: 62 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68  be called.  If h
1ef0: 65 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73  eap validation s
1f00: 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a  hould fail, an.*
1f10: 2a 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c  * assertion will
1f20: 20 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a   be triggered..*
1f30: 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20  *.** If none of 
1f40: 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65  the above are de
1f50: 66 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20  fined, then set 
1f60: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
1f70: 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64  LLOC as.** the d
1f80: 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64  efault..*/.#if d
1f90: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59  efined(SQLITE_SY
1fa0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  STEM_MALLOC) \. 
1fb0: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
1fc0: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20  E_WIN32_MALLOC) 
1fd0: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
1fe0: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
1ff0: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2000: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29  SQLITE_MEMDEBUG)
2010: 3e 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20  >1.# error "Two 
2020: 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66  or more of the f
2030: 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65  ollowing compile
2040: 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74  -time configurat
2050: 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72  ion options\. ar
2060: 65 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74  e defined but at
2070: 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c   most one is all
2080: 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53  owed:\. SQLITE_S
2090: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51  YSTEM_MALLOC, SQ
20a0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
20b0: 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  C, SQLITE_MEMDEB
20c0: 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52  UG,\. SQLITE_ZER
20d0: 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66  O_MALLOC".#endif
20e0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
20f0: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
2100: 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64  C) \.  + defined
2110: 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41  (SQLITE_WIN32_MA
2120: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
2130: 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f  ned(SQLITE_ZERO_
2140: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2150: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d  fined(SQLITE_MEM
2160: 44 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69  DEBUG)==0.# defi
2170: 6e 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d  ne SQLITE_SYSTEM
2180: 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66  _MALLOC 1.#endif
2190: 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54  ../*.** If SQLIT
21a0: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
21b0: 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c  MIT is not zero,
21c0: 20 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65   then try to kee
21d0: 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f  p the.** sizes o
21e0: 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  f memory allocat
21f0: 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20  ions below this 
2200: 76 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73  value where poss
2210: 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ible..*/.#if !de
2220: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c  fined(SQLITE_MAL
2230: 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a  LOC_SOFT_LIMIT).
2240: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
2250: 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49  MALLOC_SOFT_LIMI
2260: 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f  T 1024.#endif../
2270: 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20  *.** We need to 
2280: 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f  define _XOPEN_SO
2290: 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20  URCE as follows 
22a0: 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62  in order to enab
22b0: 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20  le.** recursive 
22c0: 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20  mutexes on most 
22d0: 55 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64  Unix systems and
22e0: 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65   fchmod() on Ope
22f0: 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f  nBSD..** But _XO
2300: 50 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e  PEN_SOURCE defin
2310: 65 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d  e causes problem
2320: 73 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20  s for Mac OS X, 
2330: 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a  so omit.** it..*
2340: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  /.#if !defined(_
2350: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26  XOPEN_SOURCE) &&
2360: 20 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57   !defined(__DARW
2370: 49 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65  IN__) && !define
2380: 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20  d(__APPLE__).#  
2390: 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f  define _XOPEN_SO
23a0: 55 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a  URCE 600.#endif.
23b0: 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e  ./*.** NDEBUG an
23c0: 64 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61  d SQLITE_DEBUG a
23d0: 72 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49  re opposites.  I
23e0: 74 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20  t should always 
23f0: 62 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20  be true that.** 
2400: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d  defined(NDEBUG)=
2410: 3d 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  =!defined(SQLITE
2420: 5f 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69  _DEBUG).  If thi
2430: 73 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74  s is not current
2440: 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65  ly true,.** make
2450: 20 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69   it true by defi
2460: 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69  ning or undefini
2470: 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a  ng NDEBUG..**.**
2480: 20 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20   Setting NDEBUG 
2490: 6d 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73  makes the code s
24a0: 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65  maller and faste
24b0: 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74  r by disabling t
24c0: 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73  he.** assert() s
24d0: 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65  tatements in the
24e0: 20 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61   code.  So we wa
24f0: 6e 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61  nt the default a
2500: 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66  ction.** to be f
2510: 6f 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20  or NDEBUG to be 
2520: 73 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74  set and NDEBUG t
2530: 6f 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f  o be undefined o
2540: 6e 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45  nly if SQLITE_DE
2550: 42 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20  BUG.** is set.  
2560: 54 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f  Thus NDEBUG beco
2570: 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61  mes an opt-in ra
2580: 74 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74  ther than an opt
2590: 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e  -out.** feature.
25a0: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
25b0: 28 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66  (NDEBUG) && !def
25c0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
25d0: 47 29 20 0a 23 20 64 65 66 69 6e 65 20 4e 44 45  G) .# define NDE
25e0: 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66  BUG 1.#endif.#if
25f0: 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29   defined(NDEBUG)
2600: 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
2610: 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65  TE_DEBUG).# unde
2620: 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a  f NDEBUG.#endif.
2630: 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51  ./*.** Enable SQ
2640: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
2650: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20  AIN_COMMENTS if 
2660: 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20  SQLITE_DEBUG is 
2670: 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69  turned on..*/.#i
2680: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2690: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
26a0: 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65  _COMMENTS) && de
26b0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
26c0: 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  UG).# define SQL
26d0: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
26e0: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65  IN_COMMENTS 1.#e
26f0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
2700: 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f  testcase() macro
2710: 20 69 73 20 75 73 65 64 20 74 6f 20 61 69 64 20   is used to aid 
2720: 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65 73 74  in coverage test
2730: 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a 2a 20 64  ing.  When .** d
2740: 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65  oing coverage te
2750: 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69  sting, the condi
2760: 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65 20  tion inside the 
2770: 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74  argument to.** t
2780: 65 73 74 63 61 73 65 28 29 20 6d 75 73 74 20 62  estcase() must b
2790: 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74 68  e evaluated both
27a0: 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20   true and false 
27b0: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67  in order to.** g
27c0: 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20 63  et full branch c
27d0: 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20 74 65  overage.  The te
27e0: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
27f0: 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f  s inserted.** to
2800: 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64 65   help ensure ade
2810: 71 75 61 74 65 20 74 65 73 74 20 63 6f 76 65 72  quate test cover
2820: 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77 68  age in places wh
2830: 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f  ere simple.** co
2840: 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e  ndition/decision
2850: 20 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e 61   coverage is ina
2860: 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65 78  dequate.  For ex
2870: 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65 28  ample, testcase(
2880: 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  ).** can be used
2890: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62 6f   to make sure bo
28a0: 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61 72  undary values ar
28b0: 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a  e tested.  For.*
28c0: 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73 2c  * bitmask tests,
28d0: 20 74 65 73 74 63 61 73 65 28 29 20 63 61 6e 20   testcase() can 
28e0: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
28f0: 73 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a 2a  sure each bit.**
2900: 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74 20   is significant 
2910: 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61 73  and used at leas
2920: 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74  t once.  On swit
2930: 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  ch statements.**
2940: 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65 20   where multiple 
2950: 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65 20  cases go to the 
2960: 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f  same block of co
2970: 64 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  de, testcase().*
2980: 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68 61  * can insure tha
2990: 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65 20  t all cases are 
29a0: 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f  evaluated..**.*/
29b0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43  .#ifdef SQLITE_C
29c0: 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20 76  OVERAGE_TEST.  v
29d0: 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65 72  oid sqlite3Cover
29e0: 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66 69  age(int);.# defi
29f0: 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 20 20  ne testcase(X)  
2a00: 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65 33  if( X ){ sqlite3
2a10: 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f  Coverage(__LINE_
2a20: 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65  _); }.#else.# de
2a30: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
2a40: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2a50: 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72  he TESTONLY macr
2a60: 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e 63  o is used to enc
2a70: 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64 65  lose variable de
2a80: 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a  clarations or.**
2a90: 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20 63   other bits of c
2aa0: 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e 65 65  ode that are nee
2ab0: 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 74  ded to support t
2ac0: 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20  he arguments.** 
2ad0: 77 69 74 68 69 6e 20 74 65 73 74 63 61 73 65 28  within testcase(
2ae0: 29 20 61 6e 64 20 61 73 73 65 72 74 28 29 20 6d  ) and assert() m
2af0: 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64  acros..*/.#if !d
2b00: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 7c  efined(NDEBUG) |
2b10: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
2b20: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a  _COVERAGE_TEST).
2b30: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
2b40: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
2b50: 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28  define TESTONLY(
2b60: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2b70: 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e 65   Sometimes we ne
2b80: 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e  ed a small amoun
2b90: 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20 61  t of code such a
2ba0: 73 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e 69  s a variable ini
2bb0: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74  tialization.** t
2bc0: 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c 61  o setup for a la
2bd0: 74 65 72 20 61 73 73 65 72 74 28 29 20 73 74 61  ter assert() sta
2be0: 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e  tement.  We do n
2bf0: 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f 64  ot want this cod
2c00: 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77  e to.** appear w
2c10: 68 65 6e 20 61 73 73 65 72 74 28 29 20 69 73 20  hen assert() is 
2c20: 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20 66  disabled.  The f
2c30: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69  ollowing macro i
2c40: 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75  s therefore.** u
2c50: 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  sed to contain t
2c60: 68 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e 20  hat setup code. 
2c70: 20 54 68 65 20 22 56 56 41 22 20 61 63 72 6f 6e   The "VVA" acron
2c80: 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ym stands for.**
2c90: 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20   "Verification, 
2ca0: 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20  Validation, and 
2cb0: 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e 20  Accreditation". 
2cc0: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2cd0: 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74   the.** code wit
2ce0: 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77  hin VVA_ONLY() w
2cf0: 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72  ill only run dur
2d00: 69 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f 6e  ing verification
2d10: 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23   processes..*/.#
2d20: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 20  ifndef NDEBUG.# 
2d30: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
2d40: 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65  X)  X.#else.# de
2d50: 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29  fine VVA_ONLY(X)
2d60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2d70: 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  he ALWAYS and NE
2d80: 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72 6f  VER macros surro
2d90: 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72  und boolean expr
2da0: 65 73 73 69 6f 6e 73 20 77 68 69 63 68 20 0a 2a  essions which .*
2db0: 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74  * are intended t
2dc0: 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65  o always be true
2dd0: 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65   or false, respe
2de0: 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a  ctively.  Such.*
2df0: 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f  * expressions co
2e00: 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66  uld be omitted f
2e10: 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d  rom the code com
2e20: 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68  pletely.  But th
2e30: 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64  ey.** are includ
2e40: 65 64 20 69 6e 20 61 20 66 65 77 20 63 61 73 65  ed in a few case
2e50: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
2e60: 68 61 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69  hance the resili
2e70: 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74  ence.** of SQLit
2e80: 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20  e to unexpected 
2e90: 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61  behavior - to ma
2ea0: 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c  ke the code "sel
2eb0: 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72  f-healing".** or
2ec0: 20 22 64 75 63 74 69 6c 65 22 20 72 61 74 68 65   "ductile" rathe
2ed0: 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72  r than being "br
2ee0: 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68  ittle" and crash
2ef0: 69 6e 67 20 61 74 20 74 68 65 20 66 69 72 73 74  ing at the first
2f00: 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c  .** hint of unpl
2f10: 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a  anned behavior..
2f20: 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  **.** In other w
2f30: 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64  ords, ALWAYS and
2f40: 20 4e 45 56 45 52 20 61 72 65 20 61 64 64 65 64   NEVER are added
2f50: 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63   for defensive c
2f60: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ode..**.** When 
2f70: 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74  doing coverage t
2f80: 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e  esting ALWAYS an
2f90: 64 20 4e 45 56 45 52 20 61 72 65 20 68 61 72 64  d NEVER are hard
2fa0: 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20  -coded to.** be 
2fb0: 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73  true and false s
2fc0: 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72 65 61  o that the unrea
2fd0: 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68 65 79  chable code they
2fe0: 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a   specify will.**
2ff0: 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20   not be counted 
3000: 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65  as untested code
3010: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
3020: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
3030: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
3040: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
3050: 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  1).# define NEVE
3060: 52 28 58 29 20 20 20 20 20 20 20 28 30 29 0a 23  R(X)       (0).#
3070: 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  elif !defined(ND
3080: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 41  EBUG).# define A
3090: 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28 28  LWAYS(X)      ((
30a0: 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29 2c  X)?1:(assert(0),
30b0: 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  0)).# define NEV
30c0: 45 52 28 58 29 20 20 20 20 20 20 20 28 28 58 29  ER(X)       ((X)
30d0: 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30  ?(assert(0),1):0
30e0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
30f0: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
3100: 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  (X).# define NEV
3110: 45 52 28 58 29 20 20 20 20 20 20 20 28 58 29 0a  ER(X)       (X).
3120: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
3130: 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a  turn true (non-z
3140: 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e 70 75  ero) if the inpu
3150: 74 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  t is an integer 
3160: 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67  that is too larg
3170: 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20 33  e.** to fit in 3
3180: 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20 6d 61  2-bits.  This ma
3190: 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69  cro is used insi
31a0: 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20 74 65  de of various te
31b0: 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72  stcase().** macr
31c0: 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  os to verify tha
31d0: 74 20 77 65 20 68 61 76 65 20 74 65 73 74 65 64  t we have tested
31e0: 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61 72 67   SQLite for larg
31f0: 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a  e-file support..
3200: 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f 42 49  */.#define IS_BI
3210: 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58 29 26  G_INT(X)  (((X)&
3220: 7e 28 69 36 34 29 30 78 66 66 66 66 66 66 66 66  ~(i64)0xffffffff
3230: 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )!=0)../*.** The
3240: 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28   macro unlikely(
3250: 29 20 69 73 20 61 20 68 69 6e 74 20 74 68 61 74  ) is a hint that
3260: 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f   surrounds a boo
3270: 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69  lean.** expressi
3280: 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  on that is usual
3290: 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f  ly false.  Macro
32a0: 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72 6f 75   likely() surrou
32b0: 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e  nds.** a boolean
32c0: 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
32d0: 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65   is usually true
32e0: 2e 20 20 54 68 65 73 65 20 68 69 6e 74 73 20 63  .  These hints c
32f0: 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f  ould,.** in theo
3300: 72 79 2c 20 62 65 20 75 73 65 64 20 62 79 20 74  ry, be used by t
3310: 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67  he compiler to g
3320: 65 6e 65 72 61 74 65 20 62 65 74 74 65 72 20 63  enerate better c
3330: 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72  ode, but.** curr
3340: 65 6e 74 6c 79 20 74 68 65 79 20 61 72 65 20 6a  ently they are j
3350: 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72  ust comments for
3360: 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a   human readers..
3370: 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c  */.#define likel
3380: 79 28 58 29 20 20 20 20 28 58 29 0a 23 64 65 66  y(X)    (X).#def
3390: 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20  ine unlikely(X) 
33a0: 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22   (X)..#include "
33b0: 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65  hash.h".#include
33c0: 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c   "parse.h".#incl
33d0: 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69  ude <stdio.h>.#i
33e0: 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68  nclude <stdlib.h
33f0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69  >.#include <stri
3400: 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ng.h>.#include <
3410: 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75  assert.h>.#inclu
3420: 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f  de <stddef.h>../
3430: 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c 69 6e  *.** If compilin
3440: 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73 73 6f  g for a processo
3450: 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66 6c 6f  r that lacks flo
3460: 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75 70 70  ating point supp
3470: 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69 74 75  ort,.** substitu
3480: 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72 20 66  te integer for f
3490: 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f  loating-point.*/
34a0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
34b0: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
34c0: 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f 75 62  NT.# define doub
34d0: 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a  le sqlite_int64.
34e0: 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74 20 73  # define float s
34f0: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65  qlite_int64.# de
3500: 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f  fine LONGDOUBLE_
3510: 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e 74 36  TYPE sqlite_int6
3520: 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c 49 54  4.# ifndef SQLIT
3530: 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20 64 65  E_BIG_DBL.#   de
3540: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f  fine SQLITE_BIG_
3550: 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33 5f 69  DBL (((sqlite3_i
3560: 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23 20 65  nt64)1)<<50).# e
3570: 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51  ndif.# define SQ
3580: 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49  LITE_OMIT_DATETI
3590: 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64 65 66  ME_FUNCS 1.# def
35a0: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ine SQLITE_OMIT_
35b0: 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65 66 20  TRACE 1.# undef 
35c0: 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45 4e 44  SQLITE_MIXED_END
35d0: 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41 54 0a  IAN_64BIT_FLOAT.
35e0: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 48  # undef SQLITE_H
35f0: 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64 69 66  AVE_ISNAN.#endif
3600: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
3610: 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69 6e 65  BIG_DBL.# define
3620: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20   SQLITE_BIG_DBL 
3630: 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a 0a 2f  (1e99).#endif../
3640: 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50 44 42  *.** OMIT_TEMPDB
3650: 20 69 73 20 73 65 74 20 74 6f 20 31 20 69 66 20   is set to 1 if 
3660: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50  SQLITE_OMIT_TEMP
3670: 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c 20 6f  DB is defined, o
3680: 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61 72 64  r 0.** afterward
3690: 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20 6d 61  . Having this ma
36a0: 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f  cro allows us to
36b0: 20 63 61 75 73 65 20 74 68 65 20 43 20 63 6f 6d   cause the C com
36c0: 70 69 6c 65 72 20 0a 2a 2a 20 74 6f 20 6f 6d 69  piler .** to omi
36d0: 74 20 63 6f 64 65 20 75 73 65 64 20 62 79 20 54  t code used by T
36e0: 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74 68 6f  EMP tables witho
36f0: 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64 65 66  ut messy #ifndef
3700: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a   statements..*/.
3710: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
3720: 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66 69 6e  IT_TEMPDB.#defin
3730: 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 31 0a  e OMIT_TEMPDB 1.
3740: 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 4d  #else.#define OM
3750: 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65 6e 64  IT_TEMPDB 0.#end
3760: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22 66  if../*.** The "f
3770: 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75 6d 62  ile format" numb
3780: 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  er is an integer
3790: 20 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d 65   that is increme
37a0: 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a 2a 2a  nted whenever.**
37b0: 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65 6c 20   the VDBE-level 
37c0: 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68 61 6e  file format chan
37d0: 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ges.  The follow
37e0: 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66 69 6e  ing macros defin
37f0: 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64 65 66  e the.** the def
3800: 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d 61 74  ault file format
3810: 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62 61 73   for new databas
3820: 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78 69 6d  es and the maxim
3830: 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 2a  um file format.*
3840: 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62 72 61  * that the libra
3850: 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a  ry can read..*/.
3860: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
3870: 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34  AX_FILE_FORMAT 4
3880: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
3890: 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52  DEFAULT_FILE_FOR
38a0: 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  MAT.# define SQL
38b0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45  ITE_DEFAULT_FILE
38c0: 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64 69 66  _FORMAT 4.#endif
38d0: 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e  ../*.** Determin
38e0: 65 20 77 68 65 74 68 65 72 20 74 72 69 67 67 65  e whether trigge
38f0: 72 73 20 61 72 65 20 72 65 63 75 72 73 69 76 65  rs are recursive
3900: 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54 68   by default.  Th
3910: 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63 68 61  is can be.** cha
3920: 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65  nged at run-time
3930: 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d 61 2e   using a pragma.
3940: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
3950: 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52  TE_DEFAULT_RECUR
3960: 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a 23 20  SIVE_TRIGGERS.# 
3970: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
3980: 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f  FAULT_RECURSIVE_
3990: 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e 64 69  TRIGGERS 0.#endi
39a0: 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64 65  f../*.** Provide
39b0: 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65   a default value
39c0: 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 4d 50   for SQLITE_TEMP
39d0: 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65 20 69  _STORE in case i
39e0: 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69  t is not specifi
39f0: 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d  ed.** on the com
3a00: 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66  mand-line.*/.#if
3a10: 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45 4d 50  ndef SQLITE_TEMP
3a20: 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e 65 20  _STORE.# define 
3a30: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
3a40: 45 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  E 1.# define SQL
3a50: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 78  ITE_TEMP_STORE_x
3a60: 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20  c 1  /* Exclude 
3a70: 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a  from ctime.c */.
3a80: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
3a90: 20 6e 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65   no value has be
3aa0: 65 6e 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20  en provided for 
3ab0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
3ac0: 52 5f 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66  R_THREADS, or if
3ad0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  .** SQLITE_TEMP_
3ae0: 53 54 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20  STORE is set to 
3af0: 33 20 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d  3 (never use tem
3b00: 70 6f 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73  porary files), s
3b10: 65 74 20 69 74 20 0a 2a 2a 20 74 6f 20 7a 65 72  et it .** to zer
3b20: 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  o..*/.#if SQLITE
3b30: 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c  _TEMP_STORE==3 |
3b40: 7c 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  | SQLITE_THREADS
3b50: 41 46 45 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53  AFE==0.# undef S
3b60: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
3b70: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
3b80: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  e SQLITE_MAX_WOR
3b90: 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65  KER_THREADS 0.#e
3ba0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
3bb0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
3bc0: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
3bd0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
3be0: 52 5f 54 48 52 45 41 44 53 20 38 0a 23 65 6e 64  R_THREADS 8.#end
3bf0: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
3c00: 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52  E_DEFAULT_WORKER
3c10: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
3c20: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
3c30: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20  _WORKER_THREADS 
3c40: 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  0.#endif.#if SQL
3c50: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
3c60: 45 52 5f 54 48 52 45 41 44 53 3e 53 51 4c 49 54  ER_THREADS>SQLIT
3c70: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
3c80: 45 41 44 53 0a 23 20 75 6e 64 65 66 20 53 51 4c  EADS.# undef SQL
3c90: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
3ca0: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
3cb0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
3cc0: 52 5f 54 48 52 45 41 44 53 20 53 51 4c 49 54 45  R_THREADS SQLITE
3cd0: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
3ce0: 54 48 52 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a  THREADS.#endif..
3cf0: 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20  ./*.** GCC does 
3d00: 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20 6f  not define the o
3d10: 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f 20  ffsetof() macro 
3d20: 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74 6f  so we'll have to
3d30: 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c   do it.** oursel
3d40: 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ves..*/.#ifndef 
3d50: 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e 65  offsetof.#define
3d60: 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43 54   offsetof(STRUCT
3d70: 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e 74  URE,FIELD) ((int
3d80: 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52 55  )((char*)&((STRU
3d90: 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44  CTURE*)0)->FIELD
3da0: 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
3db0: 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70 75   Macros to compu
3dc0: 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20 6d  te minimum and m
3dd0: 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e 75  aximum of two nu
3de0: 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  mbers..*/.#defin
3df0: 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c  e MIN(A,B) ((A)<
3e00: 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 64 65  (B)?(A):(B)).#de
3e10: 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20 28 28  fine MAX(A,B) ((
3e20: 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29 29 0a  A)>(B)?(A):(B)).
3e30: 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20 74 77 6f 20  ./*.** Swap two 
3e40: 6f 62 6a 65 63 74 73 20 6f 66 20 74 79 70 65 20  objects of type 
3e50: 54 59 50 45 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  TYPE..*/.#define
3e60: 20 53 57 41 50 28 54 59 50 45 2c 41 2c 42 29 20   SWAP(TYPE,A,B) 
3e70: 7b 54 59 50 45 20 74 3d 41 3b 20 41 3d 42 3b 20  {TYPE t=A; A=B; 
3e80: 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65  B=t;}../*.** Che
3e90: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68 69  ck to see if thi
3ea0: 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73 20 45  s machine uses E
3eb0: 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20 62 65  BCDIC.  (Yes, be
3ec0: 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20 6e  lieve it or.** n
3ed0: 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20 73 74  ot, there are st
3ee0: 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75 74  ill machines out
3ef0: 20 74 68 65 72 65 20 74 68 61 74 20 75 73 65 20   there that use 
3f00: 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66 20  EBCDIC.).*/.#if 
3f10: 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23 20  'A' == '\301'.# 
3f20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 42  define SQLITE_EB
3f30: 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23 20 64  CDIC 1.#else.# d
3f40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 53 43  efine SQLITE_ASC
3f50: 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  II 1.#endif../*.
3f60: 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66 20 6b  ** Integers of k
3f70: 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54 68 65  nown sizes.  The
3f80: 73 65 20 74 79 70 65 64 65 66 73 20 6d 69 67 68  se typedefs migh
3f90: 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61 72 63  t change for arc
3fa0: 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20 77 68  hitectures.** wh
3fb0: 65 72 65 20 74 68 65 20 73 69 7a 65 73 20 76 65  ere the sizes ve
3fc0: 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73 73 6f  ry.  Preprocesso
3fd0: 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61 76 61  r macros are ava
3fe0: 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74 20 74  ilable so that t
3ff0: 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e 20  he.** types can 
4000: 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79 20  be conveniently 
4010: 72 65 64 65 66 69 6e 65 64 20 61 74 20 63 6f 6d  redefined at com
4020: 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b 65  pile-type.  Like
4030: 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20   this:.**.**    
4040: 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e 54 50       cc '-DUINTP
4050: 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e  TR_TYPE=long lon
4060: 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69  g int' ....*/.#i
4070: 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50  fndef UINT32_TYP
4080: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55  E.# ifdef HAVE_U
4090: 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66 69 6e  INT32_T.#  defin
40a0: 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 69  e UINT32_TYPE ui
40b0: 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23 20  nt32_t.# else.# 
40c0: 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54   define UINT32_T
40d0: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  YPE unsigned int
40e0: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
40f0: 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36 5f 54  #ifndef UINT16_T
4100: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
4110: 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66  _UINT16_T.#  def
4120: 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20  ine UINT16_TYPE 
4130: 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a  uint16_t.# else.
4140: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36  #  define UINT16
4150: 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 73  _TYPE unsigned s
4160: 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66  hort int.# endif
4170: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
4180: 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64  INT16_TYPE.# ifd
4190: 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f 54 0a  ef HAVE_INT16_T.
41a0: 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f  #  define INT16_
41b0: 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23 20 65  TYPE int16_t.# e
41c0: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e  lse.#  define IN
41d0: 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74 20 69  T16_TYPE short i
41e0: 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  nt.# endif.#endi
41f0: 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 38 5f  f.#ifndef UINT8_
4200: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
4210: 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64 65 66  E_UINT8_T.#  def
4220: 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75  ine UINT8_TYPE u
4230: 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20  int8_t.# else.# 
4240: 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59   define UINT8_TY
4250: 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  PE unsigned char
4260: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
4270: 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54 59 50  #ifndef INT8_TYP
4280: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49  E.# ifdef HAVE_I
4290: 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  NT8_T.#  define 
42a0: 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38 5f 74  INT8_TYPE int8_t
42b0: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
42c0: 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69 67 6e  e INT8_TYPE sign
42d0: 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a  ed char.# endif.
42e0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4c  #endif.#ifndef L
42f0: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a 23  ONGDOUBLE_TYPE.#
4300: 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42   define LONGDOUB
4310: 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f 75  LE_TYPE long dou
4320: 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70 65 64  ble.#endif.typed
4330: 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  ef sqlite_int64 
4340: 69 36 34 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  i64;          /*
4350: 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69   8-byte signed i
4360: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
4370: 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34 20  f sqlite_uint64 
4380: 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  u64;         /* 
4390: 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20  8-byte unsigned 
43a0: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
43b0: 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ef UINT32_TYPE u
43c0: 33 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  32;           /*
43d0: 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   4-byte unsigned
43e0: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
43f0: 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 20  def UINT16_TYPE 
4400: 75 31 36 3b 20 20 20 20 20 20 20 20 20 20 20 2f  u16;           /
4410: 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 2-byte unsigne
4420: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
4430: 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20  edef INT16_TYPE 
4440: 69 31 36 3b 20 20 20 20 20 20 20 20 20 20 20 20  i16;            
4450: 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e 65 64  /* 2-byte signed
4460: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
4470: 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 20 75  def UINT8_TYPE u
4480: 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  8;             /
4490: 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 1-byte unsigne
44a0: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
44b0: 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45 20 69  edef INT8_TYPE i
44c0: 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  8;              
44d0: 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e 65 64  /* 1-byte signed
44e0: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a   integer */../*.
44f0: 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33  ** SQLITE_MAX_U3
4500: 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e 73 74  2 is a u64 const
4510: 61 6e 74 20 74 68 61 74 20 69 73 20 74 68 65 20  ant that is the 
4520: 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61 6c 75  maximum u64 valu
4530: 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20 62 65  e.** that can be
4540: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75 33 32   stored in a u32
4550: 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66   without loss of
4560: 20 64 61 74 61 2e 20 20 54 68 65 20 76 61 6c 75   data.  The valu
4570: 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30 30 30  e.** is 0x000000
4580: 30 30 66 66 66 66 66 66 66 66 2e 20 20 42 75 74  00ffffffff.  But
4590: 20 62 65 63 61 75 73 65 20 6f 66 20 71 75 69 72   because of quir
45a0: 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70 69  ks of some compi
45b0: 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76 65  lers, we.** have
45c0: 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65 20   to specify the 
45d0: 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c 65 73  value in the les
45e0: 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61 6e 6e  s intuitive mann
45f0: 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65  er shown:.*/.#de
4600: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
4610: 55 33 32 20 20 28 28 28 28 75 36 34 29 31 29 3c  U32  ((((u64)1)<
4620: 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54  <32)-1)../*.** T
4630: 68 65 20 64 61 74 61 74 79 70 65 20 75 73 65 64  he datatype used
4640: 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69 6d 61   to store estima
4650: 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d 62 65  tes of the numbe
4660: 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a 2a  r of rows in a.*
4670: 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
4680: 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 75 6e  .  This is an un
4690: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 74  signed integer t
46a0: 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39 25 20  ype.  For 99.9% 
46b0: 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64 2c  of.** the world,
46c0: 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65   a 32-bit intege
46d0: 72 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 2e  r is sufficient.
46e0: 20 20 42 75 74 20 61 20 36 34 2d 62 69 74 20 69    But a 64-bit i
46f0: 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62 65  nteger.** can be
4700: 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69 6c 65   used at compile
4710: 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72 65 64  -time if desired
4720: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
4730: 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53 0a 20  TE_64BIT_STATS. 
4740: 74 79 70 65 64 65 66 20 75 36 34 20 74 52 6f 77  typedef u64 tRow
4750: 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62 69  cnt;    /* 64-bi
4760: 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75 65 73  t only if reques
4770: 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ted at compile-t
4780: 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74 79  ime */.#else. ty
4790: 70 65 64 65 66 20 75 33 32 20 74 52 6f 77 63 6e  pedef u32 tRowcn
47a0: 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69 74 20  t;    /* 32-bit 
47b0: 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a  is the default *
47c0: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
47d0: 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e 74 69  Estimated quanti
47e0: 74 69 65 73 20 75 73 65 64 20 66 6f 72 20 71 75  ties used for qu
47f0: 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72 65  ery planning are
4800: 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d 62 69   stored as 16-bi
4810: 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73 2e  t.** logarithms.
4820: 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79 20 58    For quantity X
4830: 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  , the value stor
4840: 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28 58 29  ed is 10*log2(X)
4850: 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76 65 73  .  This.** gives
4860: 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61 6e 67   a possible rang
4870: 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66 20 61  e of values of a
4880: 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e 30  pproximately 1.0
4890: 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36 2e 0a  e986 to 1e-986..
48a0: 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c 6f 77  ** But the allow
48b0: 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 22 67  ed values are "g
48c0: 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76 65  rainy".  Not eve
48d0: 72 79 20 76 61 6c 75 65 20 69 73 20 72 65 70 72  ry value is repr
48e0: 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f  esentable..** Fo
48f0: 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e 74  r example, quant
4900: 69 74 69 65 73 20 31 36 20 61 6e 64 20 31 37 20  ities 16 and 17 
4910: 61 72 65 20 62 6f 74 68 20 72 65 70 72 65 73 65  are both represe
4920: 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45 73 74  nted by a LogEst
4930: 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77 65  .** of 40.  Howe
4940: 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45 73  ver, since LogEs
4950: 74 20 71 75 61 6e 74 69 74 69 65 73 20 61 72 65  t quantities are
4960: 20 73 75 70 70 6f 73 65 20 74 6f 20 62 65 20 65   suppose to be e
4970: 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f 74  stimates,.** not
4980: 20 65 78 61 63 74 20 76 61 6c 75 65 73 2c 20 74   exact values, t
4990: 68 69 73 20 69 6d 70 72 65 63 69 73 69 6f 6e 20  his imprecision 
49a0: 69 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65 6d  is not a problem
49b0: 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74 22  ..**.** "LogEst"
49c0: 20 69 73 20 73 68 6f 72 74 20 66 6f 72 20 22 4c   is short for "L
49d0: 6f 67 61 72 69 74 68 6d 69 63 20 45 73 74 69 6d  ogarithmic Estim
49e0: 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d  ate"..**.** Exam
49f0: 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31 20  ples:.**      1 
4a00: 2d 3e 20 30 20 20 20 20 20 20 20 20 20 20 20 20  -> 0            
4a10: 20 20 32 30 20 2d 3e 20 34 33 20 20 20 20 20 20    20 -> 43      
4a20: 20 20 20 20 31 30 30 30 30 20 2d 3e 20 31 33 32      10000 -> 132
4a30: 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20 31 30  .**      2 -> 10
4a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 32 35 20               25 
4a50: 2d 3e 20 34 36 20 20 20 20 20 20 20 20 20 20 32  -> 46          2
4a60: 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20 20  5000 -> 146.**  
4a70: 20 20 20 20 33 20 2d 3e 20 31 36 20 20 20 20 20      3 -> 16     
4a80: 20 20 20 20 20 20 20 31 30 30 20 2d 3e 20 36 36         100 -> 66
4a90: 20 20 20 20 20 20 20 20 31 30 30 30 30 30 30 20          1000000 
4aa0: 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20 20 34  -> 199.**      4
4ab0: 20 2d 3e 20 32 30 20 20 20 20 20 20 20 20 20 20   -> 20          
4ac0: 20 31 30 30 30 20 2d 3e 20 39 39 20 20 20 20 20   1000 -> 99     
4ad0: 20 20 20 31 30 34 38 35 37 36 20 2d 3e 20 32 30     1048576 -> 20
4ae0: 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20 33  0.**     10 -> 3
4af0: 33 20 20 20 20 20 20 20 20 20 20 20 31 30 32 34  3           1024
4b00: 20 2d 3e 20 31 30 30 20 20 20 20 34 32 39 34 39   -> 100    42949
4b10: 36 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a 0a  67296 -> 320.**.
4b20: 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74 20 63 61  ** The LogEst ca
4b30: 6e 20 62 65 20 6e 65 67 61 74 69 76 65 20 74 6f  n be negative to
4b40: 20 69 6e 64 69 63 61 74 65 20 66 72 61 63 74 69   indicate fracti
4b50: 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 20 0a 2a 2a  onal values. .**
4b60: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a   Examples:.**.**
4b70: 20 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20      0.5 -> -10  
4b80: 20 20 20 20 20 20 20 20 20 30 2e 31 20 2d 3e 20           0.1 -> 
4b90: 2d 33 33 20 20 20 20 20 20 20 20 30 2e 30 36 32  -33        0.062
4ba0: 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65  5 -> -40.*/.type
4bb0: 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 4c  def INT16_TYPE L
4bc0: 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 4d 61  ogEst;../*.** Ma
4bd0: 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
4be0: 65 20 77 68 65 74 68 65 72 20 74 68 65 20 6d 61  e whether the ma
4bf0: 63 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20  chine is big or 
4c00: 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a  little endian,.*
4c10: 2a 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72  * and whether or
4c20: 20 6e 6f 74 20 74 68 61 74 20 64 65 74 65 72 6d   not that determ
4c30: 69 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d 74  ination is run-t
4c40: 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d 74  ime or compile-t
4c50: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62  ime..**.** For b
4c60: 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c  est performance,
4c70: 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   an attempt is m
4c80: 61 64 65 20 74 6f 20 67 75 65 73 73 20 61 74 20  ade to guess at 
4c90: 74 68 65 20 62 79 74 65 2d 6f 72 64 65 72 0a 2a  the byte-order.*
4ca0: 2a 20 75 73 69 6e 67 20 43 2d 70 72 65 70 72 6f  * using C-prepro
4cb0: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20 20  cessor macros.  
4cc0: 49 66 20 74 68 61 74 20 69 73 20 75 6e 73 75 63  If that is unsuc
4cd0: 63 65 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a 2a  cessful, or if.*
4ce0: 2a 20 2d 44 53 51 4c 49 54 45 5f 52 55 4e 54 49  * -DSQLITE_RUNTI
4cf0: 4d 45 5f 42 59 54 45 4f 52 44 45 52 3d 31 20 69  ME_BYTEORDER=1 i
4d00: 73 20 73 65 74 2c 20 74 68 65 6e 20 62 79 74 65  s set, then byte
4d10: 2d 6f 72 64 65 72 20 69 73 20 64 65 74 65 72 6d  -order is determ
4d20: 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75 6e 2d 74  ined.** at run-t
4d30: 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ime..*/.#ifdef S
4d40: 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
4d50: 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  ON.const int sql
4d60: 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 65 6c  ite3one = 1;.#el
4d70: 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  se.extern const 
4d80: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a  int sqlite3one;.
4d90: 23 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69  #endif.#if (defi
4da0: 6e 65 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c  ned(i386)     ||
4db0: 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f   defined(__i386_
4dc0: 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  _)   || defined(
4dd0: 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c  _M_IX86) ||    \
4de0: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f  .     defined(__
4df0: 78 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e  x86_64) || defin
4e00: 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c  ed(__x86_64__) |
4e10: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34  | defined(_M_X64
4e20: 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  )  ||    \.     
4e30: 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34  defined(_M_AMD64
4e40: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f  ) || defined(_M_
4e50: 41 52 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69  ARM)     || defi
4e60: 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20  ned(__x86)   || 
4e70: 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65     \.     define
4e80: 64 28 5f 5f 61 72 6d 5f 5f 29 29 20 26 26 20 21  d(__arm__)) && !
4e90: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 52  defined(SQLITE_R
4ea0: 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52  UNTIME_BYTEORDER
4eb0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
4ec0: 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 31  E_BYTEORDER    1
4ed0: 32 33 34 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  234.# define SQL
4ee0: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20  ITE_BIGENDIAN   
4ef0: 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   0.# define SQLI
4f00: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
4f10: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
4f20: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53  E_UTF16NATIVE  S
4f30: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65  QLITE_UTF16LE.#e
4f40: 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69 6e 65  ndif.#if (define
4f50: 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64  d(sparc)    || d
4f60: 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 29  efined(__ppc__))
4f70: 20 20 5c 0a 20 20 20 20 26 26 20 21 64 65 66 69    \.    && !defi
4f80: 6e 65 64 28 53 51 4c 49 54 45 5f 52 55 4e 54 49  ned(SQLITE_RUNTI
4f90: 4d 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20  ME_BYTEORDER).# 
4fa0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
4fb0: 54 45 4f 52 44 45 52 20 20 20 20 34 33 32 31 0a  TEORDER    4321.
4fc0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4fd0: 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31 0a 23  BIGENDIAN    1.#
4fe0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c   define SQLITE_L
4ff0: 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23 20  ITTLEENDIAN 0.# 
5000: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54  define SQLITE_UT
5010: 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54  F16NATIVE  SQLIT
5020: 45 5f 55 54 46 31 36 42 45 0a 23 65 6e 64 69 66  E_UTF16BE.#endif
5030: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
5040: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 29 0a  LITE_BYTEORDER).
5050: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5060: 42 59 54 45 4f 52 44 45 52 20 20 20 20 30 20 20  BYTEORDER    0  
5070: 20 20 20 2f 2a 20 30 20 6d 65 61 6e 73 20 22 75     /* 0 means "u
5080: 6e 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d 70 69 6c  nknown at compil
5090: 65 2d 74 69 6d 65 22 20 2a 2f 0a 23 20 64 65 66  e-time" */.# def
50a0: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
50b0: 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72 20  DIAN    (*(char 
50c0: 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d  *)(&sqlite3one)=
50d0: 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  =0).# define SQL
50e0: 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e  ITE_LITTLEENDIAN
50f0: 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c   (*(char *)(&sql
5100: 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64  ite3one)==1).# d
5110: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46  efine SQLITE_UTF
5120: 31 36 4e 41 54 49 56 45 20 20 28 53 51 4c 49 54  16NATIVE  (SQLIT
5130: 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49  E_BIGENDIAN?SQLI
5140: 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49 54  TE_UTF16BE:SQLIT
5150: 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64 69  E_UTF16LE).#endi
5160: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e  f../*.** Constan
5170: 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67 65  ts for the large
5180: 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20  st and smallest 
5190: 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74 20  possible 64-bit 
51a0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 2e  signed integers.
51b0: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
51c0: 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f   are designed to
51d0: 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20   work correctly 
51e0: 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61  on both 32-bit a
51f0: 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d  nd 64-bit.** com
5200: 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  pilers..*/.#defi
5210: 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34  ne LARGEST_INT64
5220: 20 20 28 30 78 66 66 66 66 66 66 66 66 7c 28 28    (0xffffffff|((
5230: 28 69 36 34 29 30 78 37 66 66 66 66 66 66 66 29  (i64)0x7fffffff)
5240: 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20 53  <<32)).#define S
5250: 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28 28  MALLEST_INT64 ((
5260: 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47 45  (i64)-1) - LARGE
5270: 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20 0a 2a  ST_INT64)../* .*
5280: 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d  * Round up a num
5290: 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ber to the next 
52a0: 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20  larger multiple 
52b0: 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73 20 75  of 8.  This is u
52c0: 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20  sed.** to force 
52d0: 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  8-byte alignment
52e0: 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69   on 64-bit archi
52f0: 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65  tectures..*/.#de
5300: 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20  fine ROUND8(x)  
5310: 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a     (((x)+7)&~7).
5320: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77  ./*.** Round dow
5330: 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74  n to the nearest
5340: 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a   multiple of 8.*
5350: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44  /.#define ROUNDD
5360: 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29  OWN8(x) ((x)&~7)
5370: 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74  ../*.** Assert t
5380: 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20  hat the pointer 
5390: 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20  X is aligned to 
53a0: 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61  an 8-byte bounda
53b0: 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63  ry.  This.** mac
53c0: 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  ro is used only 
53d0: 77 69 74 68 69 6e 20 61 73 73 65 72 74 28 29 20  within assert() 
53e0: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
53f0: 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20  he code gets.** 
5400: 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65  all alignment re
5410: 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65  strictions corre
5420: 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74  ct..**.** Except
5430: 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  , if SQLITE_4_BY
5440: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
5450: 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68  C is defined, th
5460: 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c  en the.** underl
5470: 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d  ying malloc() im
5480: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67  plementation mig
5490: 68 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62  ht return us 4-b
54a0: 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70  yte aligned.** p
54b0: 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61  ointers.  In tha
54c0: 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72  t case, only ver
54d0: 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e  ify 4-byte align
54e0: 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ment..*/.#ifdef 
54f0: 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c  SQLITE_4_BYTE_AL
5500: 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64  IGNED_MALLOC.# d
5510: 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45  efine EIGHT_BYTE
5520: 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20  _ALIGNMENT(X)   
5530: 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20  ((((char*)(X) - 
5540: 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29  (char*)0)&3)==0)
5550: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
5560: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
5570: 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68  MENT(X)   ((((ch
5580: 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a  ar*)(X) - (char*
5590: 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69  )0)&7)==0).#endi
55a0: 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65  f../*.** Disable
55b0: 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72   MMAP on platfor
55c0: 6d 73 20 77 68 65 72 65 20 69 74 20 69 73 20 6b  ms where it is k
55d0: 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b  nown to not work
55e0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
55f0: 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20  __OpenBSD__) || 
5600: 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f  defined(__QNXNTO
5610: 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  __).# undef SQLI
5620: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
5630: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5640: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
5650: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
5660: 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73  efault maximum s
5670: 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73  ize of memory us
5680: 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70  ed by memory-map
5690: 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56  ped I/O in the V
56a0: 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41  FS.*/.#ifdef __A
56b0: 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65  PPLE__.# include
56c0: 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f   <TargetConditio
56d0: 6e 61 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41 52  nals.h>.# if TAR
56e0: 47 45 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23 20  GET_OS_IPHONE.# 
56f0: 20 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d    undef SQLITE_M
5700: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 20  AX_MMAP_SIZE.#  
5710: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
5720: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
5730: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
5740: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  fndef SQLITE_MAX
5750: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20  _MMAP_SIZE.# if 
5760: 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f  defined(__linux_
5770: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
5780: 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c  d(_WIN32) \.  ||
5790: 20 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c   (defined(__APPL
57a0: 45 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28  E__) && defined(
57b0: 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c  __MACH__)) \.  |
57c0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29  | defined(__sun)
57d0: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
57e0: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
57f0: 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20   0x7fff0000  /* 
5800: 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20  2147418112 */.# 
5810: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
5820: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
5830: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
5840: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
5850: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20  AX_MMAP_SIZE_xc 
5860: 31 20 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f  1 /* exclude fro
5870: 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e  m ctime.c */.#en
5880: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  dif../*.** The d
5890: 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45  efault MMAP_SIZE
58a0: 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20   is zero on all 
58b0: 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20  platforms.  Or, 
58c0: 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72  even if a larger
58d0: 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  .** default MMAP
58e0: 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66 69  _SIZE is specifi
58f0: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
5900: 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68  me, make sure th
5910: 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f  at it does.** no
5920: 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61 78  t exceed the max
5930: 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a  imum mmap size..
5940: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5950: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
5960: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
5970: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
5980: 5f 53 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65  _SIZE 0.# define
5990: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
59a0: 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20  MMAP_SIZE_xc 1  
59b0: 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* Exclude from 
59c0: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
59d0: 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46  f.#if SQLITE_DEF
59e0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53  AULT_MMAP_SIZE>S
59f0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
5a00: 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  IZE.# undef SQLI
5a10: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
5a20: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
5a30: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
5a40: 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41  P_SIZE SQLITE_MA
5a50: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64  X_MMAP_SIZE.#end
5a60: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f  if../*.** Only o
5a70: 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41  ne of SQLITE_ENA
5a80: 42 4c 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c  BLE_STAT3 or SQL
5a90: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
5aa0: 20 63 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e   can be defined.
5ab0: 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20  .** Priority is 
5ac0: 67 69 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f  given to SQLITE_
5ad0: 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49  ENABLE_STAT4.  I
5ae0: 66 20 65 69 74 68 65 72 20 61 72 65 20 64 65 66  f either are def
5af0: 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65  ined, also.** de
5b00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
5b10: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
5b20: 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  4.*/.#ifdef SQLI
5b30: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a  TE_ENABLE_STAT4.
5b40: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
5b50: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
5b60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
5b70: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
5b80: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
5b90: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20  _ENABLE_STAT3.# 
5ba0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
5bb0: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
5bc0: 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49  AT4 1.#elif SQLI
5bd0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
5be0: 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66  OR_STAT4.# undef
5bf0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
5c00: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65  TAT3_OR_STAT4.#e
5c10: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45  ndif../*.** SELE
5c20: 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20  CTTRACE_ENABLED 
5c30: 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31  will be either 1
5c40: 20 6f 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20   or 0 depending 
5c50: 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  on whether or no
5c60: 74 0a 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20  t.** the Select 
5c70: 71 75 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20  query generator 
5c80: 74 72 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73  tracing logic is
5c90: 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23   turned on..*/.#
5ca0: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
5cb0: 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
5cc0: 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
5cd0: 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a 23  E_SELECTTRACE).#
5ce0: 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52   define SELECTTR
5cf0: 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65  ACE_ENABLED 1.#e
5d00: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 45 4c  lse.# define SEL
5d10: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
5d20: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
5d30: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
5d40: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
5d50: 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
5d60: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75 73  to store the bus
5d70: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
5d80: 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65  lback for a give
5d90: 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e  n sqlite handle.
5da0: 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69   .**.** The sqli
5db0: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
5dc0: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
5dd0: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
5de0: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
5df0: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
5e00: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
5e10: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
5e20: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
5e30: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
5e40: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
5e50: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
5e60: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
5e70: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
5e80: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
5e90: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
5ea0: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
5eb0: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
5ec0: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
5ed0: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
5ee0: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
5ef0: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e  r {.  int (*xFun
5f00: 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20  c)(void *,int); 
5f10: 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c   /* The busy cal
5f20: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
5f30: 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  *pArg;          
5f40: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
5f50: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
5f60: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
5f70: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
5f80: 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74      /* Increment
5f90: 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75 73  ed with each bus
5fa0: 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  y call */.};../*
5fb0: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
5fc0: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
5fd0: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
5fe0: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
5ff0: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
6000: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
6010: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
6020: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
6030: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
6040: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
6050: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
6060: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
6070: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
6080: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
6090: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
60a0: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
60b0: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
60c0: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
60d0: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
60e0: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
60f0: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
6100: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
6110: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
6120: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
6130: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
6140: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
6150: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
6160: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
6170: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
6180: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
6190: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
61a0: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
61b0: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
61c0: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
61d0: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
61e0: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
61f0: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
6200: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
6210: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
6220: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
6230: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
6240: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
6250: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
6260: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
6270: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
6280: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
6290: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
62a0: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
62b0: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
62c0: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
62d0: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
62e0: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a 2a  nstead of the .*
62f0: 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20  * one parameter 
6300: 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73  that destructors
6310: 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20   normally want. 
6320: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69   So we have to i
6330: 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68 69  ntroduce .** thi
6340: 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68  s magic value th
6350: 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77  at the code know
6360: 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66  s to handle diff
6370: 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a 2a  erently.  Any .*
6380: 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77  * pointer will w
6390: 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67  ork here as long
63a0: 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69 6e   as it is distin
63b0: 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53  ct from SQLITE_S
63c0: 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c  TATIC.** and SQL
63d0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a  ITE_TRANSIENT..*
63e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
63f0: 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c  _DYNAMIC   ((sql
6400: 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f  ite3_destructor_
6410: 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c  type)sqlite3Mall
6420: 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57  ocSize)../*.** W
6430: 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  hen SQLITE_OMIT_
6440: 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20  WSD is defined, 
6450: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
6460: 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72  e target platfor
6470: 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75  m does.** not su
6480: 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53  pport Writable S
6490: 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44 29  tatic Data (WSD)
64a0: 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20   such as global 
64b0: 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69 61  and static varia
64c0: 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72  bles..** All var
64d0: 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68  iables must eith
64e0: 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61  er be on the sta
64f0: 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c  ck or dynamicall
6500: 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d  y allocated from
6510: 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57  .** the heap.  W
6520: 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70  hen WSD is unsup
6530: 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72 69  ported, the vari
6540: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
6550: 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74  s scattered.** t
6560: 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51  hroughout the SQ
6570: 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62  Lite code must b
6580: 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20  ecome constants 
6590: 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53 51  instead.  The SQ
65a0: 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72  LITE_WSD.** macr
65b0: 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68  o is used for th
65c0: 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64  is purpose.  And
65d0: 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65   instead of refe
65e0: 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69  rencing the vari
65f0: 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79  able.** directly
6600: 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e  , we use its con
6610: 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74  stant as a key t
6620: 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e  o lookup the run
6630: 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a  -time allocated.
6640: 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20 68  ** buffer that h
6650: 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61 62  olds real variab
6660: 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e  le.  The constan
6670: 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e  t is also the in
6680: 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72  itializer.** for
6690: 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c   the run-time al
66a0: 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a  located buffer..
66b0: 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75  **.** In the usu
66c0: 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57 53  al case where WS
66d0: 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20  D is supported, 
66e0: 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61  the SQLITE_WSD a
66f0: 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63  nd GLOBAL.** mac
6700: 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70  ros become no-op
6710: 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20  s and have zero 
6720: 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61  performance impa
6730: 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ct..*/.#ifdef SQ
6740: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
6750: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
6760: 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69  SD const.  #defi
6770: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28  ne GLOBAL(t,v) (
6780: 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64  *(t*)sqlite3_wsd
6790: 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76  _find((void*)&(v
67a0: 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20  ), sizeof(v))). 
67b0: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
67c0: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f  GlobalConfig GLO
67d0: 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74  BAL(struct Sqlit
67e0: 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65  e3Config, sqlite
67f0: 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73  3Config).  int s
6800: 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28  qlite3_wsd_init(
6810: 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20  int N, int J);. 
6820: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77   void *sqlite3_w
6830: 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c  sd_find(void *K,
6840: 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20   int L);.#else. 
6850: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
6860: 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20 47  WSD .  #define G
6870: 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23  LOBAL(t,v) v.  #
6880: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
6890: 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74  obalConfig sqlit
68a0: 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a  e3Config.#endif.
68b0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
68c0: 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20  wing macros are 
68d0: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
68e0: 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
68f0: 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b  gs and to.** mak
6900: 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75  e it clear to hu
6910: 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e  man readers when
6920: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
6930: 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72  meter is deliber
6940: 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20 75  ately .** left u
6950: 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65  nused within the
6960: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
6970: 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c  ion. This usuall
6980: 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a  y happens when.*
6990: 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  * a function is 
69a0: 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e  called via a fun
69b0: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46  ction pointer. F
69c0: 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20 0a  or example the .
69d0: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
69e0: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72  n of an SQL aggr
69f0: 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62  egate step callb
6a00: 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20  ack may not use 
6a10: 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  the.** parameter
6a20: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
6a30: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
6a40: 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  nts passed to th
6a50: 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20  e aggregate,.** 
6a60: 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74  if it knows that
6a70: 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65   this is enforce
6a80: 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a  d elsewhere..**.
6a90: 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69  ** When a functi
6aa0: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
6ab0: 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20  not used at all 
6ac0: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
6ad0: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a  of a function,.*
6ae0: 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c  * it is generall
6af0: 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64  y named "NotUsed
6b00: 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20  " or "NotUsed2" 
6b10: 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65  to make things e
6b20: 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20  ven clearer..** 
6b30: 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d  However, these m
6b40: 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62  acros may also b
6b50: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
6b60: 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61  ss warnings rela
6b70: 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65  ted to.** parame
6b80: 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72  ters that may or
6b90: 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64   may not be used
6ba0: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f   depending on co
6bb0: 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
6bc0: 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c  s..** For exampl
6bd0: 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65  e those paramete
6be0: 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20  rs only used in 
6bf0: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
6c00: 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a  nts. In these.**
6c10: 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61 6d   cases the param
6c20: 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20  eters are named 
6c30: 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61 6c  as per the usual
6c40: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f   conventions..*/
6c50: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
6c60: 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f  PARAMETER(x) (vo
6c70: 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55  id)(x).#define U
6c80: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32  NUSED_PARAMETER2
6c90: 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52  (x,y) UNUSED_PAR
6ca0: 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44  AMETER(x),UNUSED
6cb0: 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f  _PARAMETER(y)../
6cc0: 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66  *.** Forward ref
6cd0: 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63  erences to struc
6ce0: 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66  tures.*/.typedef
6cf0: 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20   struct AggInfo 
6d00: 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  AggInfo;.typedef
6d10: 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74   struct AuthCont
6d20: 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b  ext AuthContext;
6d30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6d40: 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f  AutoincInfo Auto
6d50: 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  incInfo;.typedef
6d60: 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20 42   struct Bitvec B
6d70: 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73  itvec;.typedef s
6d80: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f  truct CollSeq Co
6d90: 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73  llSeq;.typedef s
6da0: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c  truct Column Col
6db0: 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  umn;.typedef str
6dc0: 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64  uct Db Db;.typed
6dd0: 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61  ef struct Schema
6de0: 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66   Schema;.typedef
6df0: 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78 70   struct Expr Exp
6e00: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
6e10: 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c  t ExprList ExprL
6e20: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
6e30: 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78 70  uct ExprSpan Exp
6e40: 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20 73  rSpan;.typedef s
6e50: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
6e60: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6e70: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
6e80: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
6e90: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
6ea0: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
6eb0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
6ec0: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
6ed0: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
6ee0: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
6ef0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
6f00: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
6f10: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6f20: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
6f30: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
6f40: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
6f50: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
6f60: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
6f70: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
6f80: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
6f90: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
6fa0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
6fb0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
6fc0: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
6fd0: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
6fe0: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
6ff0: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
7000: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
7010: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7020: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
7030: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 69 6e  edef struct Prin
7040: 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e  tfArguments Prin
7050: 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70  tfArguments;.typ
7060: 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77 53  edef struct RowS
7070: 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64  et RowSet;.typed
7080: 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70 6f  ef struct Savepo
7090: 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74  int Savepoint;.t
70a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
70b0: 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70  lect Select;.typ
70c0: 65 64 65 66 20 73 74 72 75 63 74 20 53 51 4c 69  edef struct SQLi
70d0: 74 65 54 68 72 65 61 64 20 53 51 4c 69 74 65 54  teThread SQLiteT
70e0: 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66 20 73  hread;.typedef s
70f0: 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
7100: 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79 70   SelectDest;.typ
7110: 65 64 65 66 20 73 74 72 75 63 74 20 53 72 63 4c  edef struct SrcL
7120: 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70  ist SrcList;.typ
7130: 65 64 65 66 20 73 74 72 75 63 74 20 53 74 72 41  edef struct StrA
7140: 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74  ccum StrAccum;.t
7150: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61  ypedef struct Ta
7160: 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65 64  ble Table;.typed
7170: 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 4c  ef struct TableL
7180: 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74  ock TableLock;.t
7190: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 6f  ypedef struct To
71a0: 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64  ken Token;.typed
71b0: 65 66 20 73 74 72 75 63 74 20 54 72 65 65 56 69  ef struct TreeVi
71c0: 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74 79 70  ew TreeView;.typ
71d0: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
71e0: 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79 70  ger Trigger;.typ
71f0: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
7200: 67 65 72 50 72 67 20 54 72 69 67 67 65 72 50 72  gerPrg TriggerPr
7210: 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  g;.typedef struc
7220: 74 20 54 72 69 67 67 65 72 53 74 65 70 20 54 72  t TriggerStep Tr
7230: 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65 64  iggerStep;.typed
7240: 65 66 20 73 74 72 75 63 74 20 55 6e 70 61 63 6b  ef struct Unpack
7250: 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63 6b 65  edRecord Unpacke
7260: 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64 65 66  dRecord;.typedef
7270: 20 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 56   struct VTable V
7280: 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  Table;.typedef s
7290: 74 72 75 63 74 20 56 74 61 62 43 74 78 20 56 74  truct VtabCtx Vt
72a0: 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20 73  abCtx;.typedef s
72b0: 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61 6c  truct Walker Wal
72c0: 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ker;.typedef str
72d0: 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68  uct WhereInfo Wh
72e0: 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  ereInfo;.typedef
72f0: 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74   struct With Wit
7300: 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20  h;../*.** Defer 
7310: 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68 20  sourcing vdbe.h 
7320: 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74 69  and btree.h unti
7330: 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38 22  l after the "u8"
7340: 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73 79 48 61   and .** "BusyHa
7350: 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e  ndler" typedefs.
7360: 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71   vdbe.h also req
7370: 75 69 72 65 73 20 61 20 66 65 77 20 6f 66 20 74  uires a few of t
7380: 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69  he opaque.** poi
7390: 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e  nter types (i.e.
73a0: 20 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65   FuncDef) define
73b0: 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63  d above..*/.#inc
73c0: 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23  lude "btree.h".#
73d0: 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22  include "vdbe.h"
73e0: 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72  .#include "pager
73f0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63  .h".#include "pc
7400: 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63 6c 75 64  ache.h"..#includ
7410: 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64  e "os.h".#includ
7420: 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 0a 2f 2a  e "mutex.h".../*
7430: 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73  .** Each databas
7440: 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63 63  e file to be acc
7450: 65 73 73 65 64 20 62 79 20 74 68 65 20 73 79 73  essed by the sys
7460: 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  tem is an instan
7470: 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f 6c  ce.** of the fol
7480: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
7490: 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f 72  .  There are nor
74a0: 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68 65  mally two of the
74b0: 73 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2a  se structures.**
74c0: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61   in the sqlite.a
74d0: 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44 62  Db[] array.  aDb
74e0: 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e 20  [0] is the main 
74f0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
7500: 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20 74  d.** aDb[1] is t
7510: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
7520: 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 65   used to hold te
7530: 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20  mporary tables. 
7540: 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64   Additional.** d
7550: 61 74 61 62 61 73 65 73 20 6d 61 79 20 62 65 20  atabases may be 
7560: 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74 72  attached..*/.str
7570: 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72 20  uct Db {.  char 
7580: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
7590: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
75a0: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 42 74  database */.  Bt
75b0: 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20  ree *pBt;       
75c0: 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65     /* The B*Tree
75d0: 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 74   structure for t
75e0: 68 69 73 20 64 61 74 61 62 61 73 65 20 66 69 6c  his database fil
75f0: 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79  e */.  u8 safety
7600: 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48  _level;     /* H
7610: 6f 77 20 61 67 67 72 65 73 73 69 76 65 20 61 74  ow aggressive at
7620: 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f   syncing data to
7630: 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63 68 65 6d   disk */.  Schem
7640: 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
7650: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64 61  /* Pointer to da
7660: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28 70  tabase schema (p
7670: 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64 29 20  ossibly shared) 
7680: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
7690: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
76a0: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
76b0: 75 72 65 20 73 74 6f 72 65 73 20 61 20 64 61 74  ure stores a dat
76c0: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a  abase schema..**
76d0: 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61 20  .** Most Schema 
76e0: 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73 73 6f  objects are asso
76f0: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 42 74  ciated with a Bt
7700: 72 65 65 2e 20 20 54 68 65 20 65 78 63 65 70 74  ree.  The except
7710: 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53 63  ion is.** the Sc
7720: 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45 4d  hema for the TEM
7730: 50 20 64 61 74 61 62 61 65 73 20 28 73 71 6c 69  P databaes (sqli
7740: 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69 63  te3.aDb[1]) whic
7750: 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64 69  h is free-standi
7760: 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65 64  ng..** In shared
7770: 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20 73   cache mode, a s
7780: 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62 6a  ingle Schema obj
7790: 65 63 74 20 63 61 6e 20 62 65 20 73 68 61 72 65  ect can be share
77a0: 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a  d by multiple.**
77b0: 20 42 74 72 65 65 73 20 74 68 61 74 20 72 65 66   Btrees that ref
77c0: 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20 75  er to the same u
77d0: 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61 72  nderlying BtShar
77e0: 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 0a 2a  ed object..** .*
77f0: 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  * Schema objects
7800: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
7810: 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 77  ly deallocated w
7820: 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74 72  hen the last Btr
7830: 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65 72  ee that.** refer
7840: 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64 65  ences them is de
7850: 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20 54  stroyed.   The T
7860: 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d 61  EMP Schema is ma
7870: 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79 0a  nually freed by.
7880: 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  ** sqlite3_close
7890: 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61  ()..*.** A threa
78a0: 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69 6e  d must be holdin
78b0: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
78c0: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 42   corresponding B
78d0: 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a  tree in order.**
78e0: 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65 6d   to access Schem
78f0: 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73  a content.  This
7900: 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68   implies that th
7910: 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61 6c  e thread must al
7920: 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67  so be.** holding
7930: 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20   a mutex on the 
7940: 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74 69  sqlite3 connecti
7950: 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20  on pointer that 
7960: 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e 0a  owns the Btree..
7970: 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53 63  ** For a TEMP Sc
7980: 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63  hema, only the c
7990: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20  onnection mutex 
79a0: 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a  is required..*/.
79b0: 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b 0a  struct Schema {.
79c0: 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f    int schema_coo
79d0: 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62 61  kie;   /* Databa
79e0: 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  se schema versio
79f0: 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69  n number for thi
7a00: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  s file */.  int 
7a10: 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20  iGeneration;    
7a20: 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20 63   /* Generation c
7a30: 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d 65  ounter.  Increme
7a40: 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20 63  nted with each c
7a50: 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68 20  hange */.  Hash 
7a60: 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20 20  tblHash;        
7a70: 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e  /* All tables in
7a80: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
7a90: 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68 3b  .  Hash idxHash;
7aa0: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28          /* All (
7ab0: 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20 69  named) indices i
7ac0: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
7ad0: 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61 73  /.  Hash trigHas
7ae0: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
7af0: 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65 64  triggers indexed
7b00: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
7b10: 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20 20  sh fkeyHash;    
7b20: 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67     /* All foreig
7b30: 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72 65  n keys by refere
7b40: 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 20  nced table name 
7b50: 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65 71  */.  Table *pSeq
7b60: 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  Tab;      /* The
7b70: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
7b80: 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 41   table used by A
7b90: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
7ba0: 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74    u8 file_format
7bb0: 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  ;      /* Schema
7bc0: 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20   format version 
7bd0: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
7be0: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
7bf0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
7c00: 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79  encoding used by
7c10: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
7c20: 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46 6c  /.  u16 schemaFl
7c30: 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67  ags;     /* Flag
7c40: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
7c50: 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  h this schema */
7c60: 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69 7a  .  int cache_siz
7c70: 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  e;      /* Numbe
7c80: 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75 73  r of pages to us
7c90: 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20 2a  e in the cache *
7ca0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  /.};../*.** Thes
7cb0: 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
7cc0: 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
7cd0: 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
7ce0: 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44 62 2e 70   in the .** Db.p
7cf0: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
7d00: 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
7d10: 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c  DbHasProperty(D,
7d20: 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e  I,P)     (((D)->
7d30: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
7d40: 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29  schemaFlags&(P))
7d50: 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44  ==(P)).#define D
7d60: 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28  bHasAnyProperty(
7d70: 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61  D,I,P)  (((D)->a
7d80: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
7d90: 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21  chemaFlags&(P))!
7da0: 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65  =0).#define DbSe
7db0: 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  tProperty(D,I,P)
7dc0: 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d       (D)->aDb[I]
7dd0: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
7de0: 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  Flags|=(P).#defi
7df0: 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72  ne DbClearProper
7e00: 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d  ty(D,I,P)   (D)-
7e10: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
7e20: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28  >schemaFlags&=~(
7e30: 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  P)../*.** Allowe
7e40: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
7e50: 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   DB.pSchema->fla
7e60: 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
7e70: 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  The DB_SchemaLoa
7e80: 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ded flag is set 
7e90: 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61  after the databa
7ea0: 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  se schema has be
7eb0: 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20  en.** read into 
7ec0: 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61  internal hash ta
7ed0: 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55  bles..**.** DB_U
7ee0: 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e  nresetViews mean
7ef0: 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f  s that one or mo
7f00: 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f  re views have co
7f10: 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a  lumn names that.
7f20: 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c  ** have been fil
7f30: 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65  led out.  If the
7f40: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c   schema changes,
7f50: 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61   these column na
7f60: 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61  mes might.** cha
7f70: 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20  nges and so the 
7f80: 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74  view will need t
7f90: 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23  o be reset..*/.#
7fa0: 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61  define DB_Schema
7fb0: 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31  Loaded    0x0001
7fc0: 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20    /* The schema 
7fd0: 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20  has been loaded 
7fe0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e  */.#define DB_Un
7ff0: 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78  resetViews    0x
8000: 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69  0002  /* Some vi
8010: 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64  ews have defined
8020: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f   column names */
8030: 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74  .#define DB_Empt
8040: 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30  y           0x00
8050: 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20  04  /* The file 
8060: 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68  is empty (length
8070: 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a   0 bytes) */../*
8080: 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  .** The number o
8090: 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64  f different kind
80a0: 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74  s of things that
80b0: 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a   can be limited.
80c0: 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c  ** using the sql
80d0: 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74  ite3_limit() int
80e0: 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69  erface..*/.#defi
80f0: 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49  ne SQLITE_N_LIMI
8100: 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  T (SQLITE_LIMIT_
8110: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2b 31  WORKER_THREADS+1
8120: 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69  )../*.** Lookasi
8130: 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73  de malloc is a s
8140: 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65  et of fixed-size
8150: 20 62 75 66 66 65 72 73 20 74 68 61 74 20 63 61   buffers that ca
8160: 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20  n be used.** to 
8170: 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72  satisfy small tr
8180: 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61  ansient memory a
8190: 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73  llocation reques
81a0: 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a  ts for objects.*
81b0: 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  * associated wit
81c0: 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64  h a particular d
81d0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
81e0: 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a  on.  The use of.
81f0: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** lookaside mal
8200: 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20 73  loc provides a s
8210: 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f  ignificant perfo
8220: 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65  rmance enhanceme
8230: 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30  nt.** (approx 10
8240: 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e  %) by avoiding n
8250: 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66  umerous malloc/f
8260: 72 65 65 20 72 65 71 75 65 73 74 73 20 77 68 69  ree requests whi
8270: 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51  le parsing.** SQ
8280: 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  L statements..**
8290: 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64  .** The Lookasid
82a0: 65 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  e structure hold
82b0: 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  s configuration 
82c0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
82d0: 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69  t the.** lookasi
82e0: 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73  de malloc subsys
82f0: 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c  tem.  Each avail
8300: 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  able memory allo
8310: 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65  cation in.** the
8320: 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79   lookaside subsy
8330: 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f  stem is stored o
8340: 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
8350: 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  of LookasideSlot
8360: 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a  .** objects..**.
8370: 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ** Lookaside all
8380: 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c  ocations are onl
8390: 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62  y allowed for ob
83a0: 6a 65 63 74 73 20 74 68 61 74 20 61 72 65 20 61  jects that are a
83b0: 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74  ssociated.** wit
83c0: 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64  h a particular d
83d0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
83e0: 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65  on.  Hence, sche
83f0: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63  ma information c
8400: 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72  annot.** be stor
8410: 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20  ed in lookaside 
8420: 62 65 63 61 75 73 65 20 69 6e 20 73 68 61 72 65  because in share
8430: 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65  d cache mode the
8440: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
8450: 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64  ion.** is shared
8460: 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74   by multiple dat
8470: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
8480: 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77  s.  Therefore, w
8490: 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20  hile parsing.** 
84a0: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
84b0: 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64  on, the Lookasid
84c0: 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20  e.bEnabled flag 
84d0: 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68  is cleared so th
84e0: 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  at.** lookaside 
84f0: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
8500: 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73  not used to cons
8510: 74 72 75 63 74 20 74 68 65 20 73 63 68 65 6d 61  truct the schema
8520: 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72   objects..*/.str
8530: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a  uct Lookaside {.
8540: 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20    u16 sz;       
8550: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
8560: 65 20 6f 66 20 65 61 63 68 20 62 75 66 66 65 72  e of each buffer
8570: 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75   in bytes */.  u
8580: 38 20 62 45 6e 61 62 6c 65 64 3b 20 20 20 20 20  8 bEnabled;     
8590: 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 73 65 20         /* False 
85a0: 74 6f 20 64 69 73 61 62 6c 65 20 6e 65 77 20 6c  to disable new l
85b0: 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74  ookaside allocat
85c0: 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61  ions */.  u8 bMa
85d0: 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20  lloced;         
85e0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74    /* True if pSt
85f0: 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  art obtained fro
8600: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
8610: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74  () */.  int nOut
8620: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8630: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75 66  /* Number of buf
8640: 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20 63  fers currently c
8650: 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20  hecked out */.  
8660: 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20 20  int mxOut;      
8670: 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68 77          /* Highw
8680: 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f  ater mark for nO
8690: 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74  ut */.  int anSt
86a0: 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  at[3];          
86b0: 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20  /* 0: hits.  1: 
86c0: 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a  size misses.  2:
86d0: 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a   full misses */.
86e0: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
86f0: 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73  *pFree;   /* Lis
8700: 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62  t of available b
8710: 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
8720: 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
8730: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
8740: 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d  e of available m
8750: 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20  emory space */. 
8760: 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20   void *pEnd;    
8770: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
8780: 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20  t byte past end 
8790: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61  of available spa
87a0: 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20  ce */.};.struct 
87b0: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a  LookasideSlot {.
87c0: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
87d0: 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65  *pNext;    /* Ne
87e0: 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65  xt buffer in the
87f0: 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75   list of free bu
8800: 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ffers */.};../*.
8810: 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20  ** A hash table 
8820: 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  for function def
8830: 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  initions..**.** 
8840: 48 61 73 68 20 65 61 63 68 20 46 75 6e 63 44 65  Hash each FuncDe
8850: 66 20 73 74 72 75 63 74 75 72 65 20 69 6e 74 6f  f structure into
8860: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
8870: 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74  DefHash.a[] slot
8880: 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73  s..** Collisions
8890: 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e 63   are on the Func
88a0: 44 65 66 2e 70 48 61 73 68 20 63 68 61 69 6e 2e  Def.pHash chain.
88b0: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
88c0: 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63 44  efHash {.  FuncD
88d0: 65 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20 20 20  ef *a[23];      
88e0: 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66   /* Hash table f
88f0: 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  or functions */.
8900: 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  };..#ifdef SQLIT
8910: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
8920: 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f  ATION./*.** Info
8930: 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e 20  rmation held in 
8940: 74 68 65 20 22 73 71 6c 69 74 65 33 22 20 64 61  the "sqlite3" da
8950: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
8960: 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73 65  n object and use
8970: 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20 75  d.** to manage u
8980: 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69  ser authenticati
8990: 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  on..*/.typedef s
89a0: 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73  truct sqlite3_us
89b0: 65 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f 75  erauth sqlite3_u
89c0: 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74 20  serauth;.struct 
89d0: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
89e0: 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76 65   {.  u8 authLeve
89f0: 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
8a00: 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 75     /* Current au
8a10: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65 76  thentication lev
8a20: 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75 74  el */.  int nAut
8a30: 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20  hPW;            
8a40: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
8a50: 20 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e 20   the zAuthPW in 
8a60: 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72 20  bytes */.  char 
8a70: 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20 20  *zAuthPW;       
8a80: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73 73           /* Pass
8a90: 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75 74  word used to aut
8aa0: 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20 63  henticate */.  c
8ab0: 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b 20  har *zAuthUser; 
8ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8ad0: 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20 74  User name used t
8ae0: 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a  o authenticate *
8af0: 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  /.};../* Allowed
8b00: 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69   values for sqli
8b10: 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75 74  te3_userauth.aut
8b20: 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69 6e  hLevel */.#defin
8b30: 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20  e UAUTH_Unknown 
8b40: 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75 74      0     /* Aut
8b50: 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74 20  hentication not 
8b60: 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a 23  yet checked */.#
8b70: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61 69  define UAUTH_Fai
8b80: 6c 20 20 20 20 20 20 20 20 31 20 20 20 20 20 2f  l        1     /
8b90: 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63  * User authentic
8ba0: 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f 0a  ation failed */.
8bb0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 73  #define UAUTH_Us
8bc0: 65 72 20 20 20 20 20 20 20 20 32 20 20 20 20 20  er        2     
8bd0: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64  /* Authenticated
8be0: 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73 65   as a normal use
8bf0: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  r */.#define UAU
8c00: 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20 33  TH_Admin       3
8c10: 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69       /* Authenti
8c20: 63 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d 69  cated as an admi
8c30: 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a  nistrator */../*
8c40: 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64 20   Functions used 
8c50: 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75 74  only by user aut
8c60: 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69 63  horization logic
8c70: 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 55   */.int sqlite3U
8c80: 73 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f 6e  serAuthTable(con
8c90: 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
8ca0: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 43 68  qlite3UserAuthCh
8cb0: 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65 33  eckLogin(sqlite3
8cc0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 38  *,const char*,u8
8cd0: 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
8ce0: 55 73 65 72 41 75 74 68 49 6e 69 74 28 73 71 6c  UserAuthInit(sql
8cf0: 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
8d00: 69 74 65 33 43 72 79 70 74 46 75 6e 63 28 73 71  ite3CryptFunc(sq
8d10: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
8d20: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
8d30: 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  **);..#endif /* 
8d40: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
8d50: 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f  ENTICATION */../
8d60: 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f 72  *.** typedef for
8d70: 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69   the authorizati
8d80: 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63  on callback func
8d90: 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  tion..*/.#ifdef 
8da0: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
8db0: 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79 70  ENTICATION.  typ
8dc0: 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74  edef int (*sqlit
8dd0: 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c  e3_xauth)(void*,
8de0: 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  int,const char*,
8df0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
8e00: 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20  t char*,.       
8e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e20: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
8e30: 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
8e40: 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  );.#else.  typed
8e50: 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33  ef int (*sqlite3
8e60: 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e  _xauth)(void*,in
8e70: 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  t,const char*,co
8e80: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
8e90: 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20  char*,.         
8ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8eb0: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
8ec0: 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  *);.#endif.../*.
8ed0: 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65  ** Each database
8ee0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61   connection is a
8ef0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
8f00: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
8f10: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
8f20: 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c   sqlite3 {.  sql
8f30: 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20  ite3_vfs *pVfs; 
8f40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53             /* OS
8f50: 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   Interface */.  
8f60: 73 74 72 75 63 74 20 56 64 62 65 20 2a 70 56 64  struct Vdbe *pVd
8f70: 62 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  be;           /*
8f80: 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20   List of active 
8f90: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73  virtual machines
8fa0: 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70   */.  CollSeq *p
8fb0: 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20  DfltColl;       
8fc0: 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75      /* The defau
8fd0: 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  lt collating seq
8fe0: 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a  uence (BINARY) *
8ff0: 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
9000: 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20  x *mutex;       
9010: 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20    /* Connection 
9020: 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61  mutex */.  Db *a
9030: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
9040: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20           /* All 
9050: 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e  backends */.  in
9060: 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20  t nDb;          
9070: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
9080: 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64  umber of backend
9090: 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75  s currently in u
90a0: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67  se */.  int flag
90b0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
90c0: 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c 6c        /* Miscell
90d0: 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53 65  aneous flags. Se
90e0: 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34  e below */.  i64
90f0: 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20   lastRowid;     
9100: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f             /* RO
9110: 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65  WID of most rece
9120: 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20 61  nt insert (see a
9130: 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73  bove) */.  i64 s
9140: 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  zMmap;          
9150: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
9160: 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65  ult mmap_size se
9170: 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69 67  tting */.  unsig
9180: 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67  ned int openFlag
9190: 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67  s;       /* Flag
91a0: 73 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69  s passed to sqli
91b0: 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20  te3_vfs.xOpen() 
91c0: 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65  */.  int errCode
91d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
91e0: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
91f0: 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51  t error code (SQ
9200: 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74  LITE_*) */.  int
9210: 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20   errMask;       
9220: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20             /* & 
9230: 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74  result codes wit
9240: 68 20 74 68 69 73 20 62 65 66 6f 72 65 20 72 65  h this before re
9250: 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75 31 36  turning */.  u16
9260: 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20   dbOptFlags;    
9270: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c             /* Fl
9280: 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69  ags to enable/di
9290: 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69  sable optimizati
92a0: 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ons */.  u8 enc;
92b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92c0: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
92d0: 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20  ncoding */.  u8 
92e0: 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20  autoCommit;     
92f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
9300: 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c  e auto-commit fl
9310: 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70  ag. */.  u8 temp
9320: 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20  _store;         
9330: 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c         /* 1: fil
9340: 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64  e 2: memory 0: d
9350: 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d  efault */.  u8 m
9360: 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20  allocFailed;    
9370: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
9380: 65 20 69 66 20 77 65 20 68 61 76 65 20 73 65 65  e if we have see
9390: 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  n a malloc failu
93a0: 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c  re */.  u8 dfltL
93b0: 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ockMode;        
93c0: 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
93d0: 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f   locking-mode fo
93e0: 72 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a  r attached dbs *
93f0: 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20  /.  signed char 
9400: 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20  nextAutovac;    
9410: 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74    /* Autovac set
9420: 74 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55  ting after VACUU
9430: 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38  M if >=0 */.  u8
9440: 20 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20   suppressErr;   
9450: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
9460: 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f  o not issue erro
9470: 72 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72  r messages if tr
9480: 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f  ue */.  u8 vtabO
9490: 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20  nConflict;      
94a0: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
94b0: 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f  o return for s3_
94c0: 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74  vtab_on_conflict
94d0: 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61  () */.  u8 isTra
94e0: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
94f0: 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  t;    /* True if
9500: 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73   the outermost s
9510: 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53  avepoint is a TS
9520: 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61   */.  int nextPa
9530: 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20  gesize;         
9540: 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20      /* Pagesize 
9550: 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20  after VACUUM if 
9560: 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69  >0 */.  u32 magi
9570: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
9580: 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e        /* Magic n
9590: 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74  umber for detect
95a0: 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20   library misuse 
95b0: 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65  */.  int nChange
95c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
95d0: 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75     /* Value retu
95e0: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
95f0: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
9600: 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b  nt nTotalChange;
9610: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9620: 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  Value returned b
9630: 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f  y sqlite3_total_
9640: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
9650: 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  nt aLimit[SQLITE
9660: 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20  _N_LIMIT];   /* 
9670: 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20  Limits */.  int 
9680: 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20  nMaxSorterMmap; 
9690: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
96a0: 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67  imum size of reg
96b0: 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73  ions mapped by s
96c0: 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63  orter */.  struc
96d0: 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66  t sqlite3InitInf
96e0: 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  o {      /* Info
96f0: 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72  rmation used dur
9700: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
9710: 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65  on */.    int ne
9720: 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20  wTnum;          
9730: 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67        /* Rootpag
9740: 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67  e of table being
9750: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
9760: 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20      u8 iDb;     
9770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9780: 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65  /* Which db file
9790: 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61   is being initia
97a0: 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20  lized */.    u8 
97b0: 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  busy;           
97c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45           /* TRUE
97d0: 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
97e0: 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20  itializing */.  
97f0: 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67    u8 orphanTrigg
9800: 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  er;           /*
9810: 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   Last statement 
9820: 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50  is orphaned TEMP
9830: 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20   trigger */.  } 
9840: 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62  init;.  int nVdb
9850: 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20  eActive;        
9860: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
9870: 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74  of VDBEs current
9880: 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20  ly running */.  
9890: 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20  int nVdbeRead;  
98a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
98b0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
98c0: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
98d0: 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20  d or write */.  
98e0: 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20  int nVdbeWrite; 
98f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9900: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
9910: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
9920: 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20  d and write */. 
9930: 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20   int nVdbeExec; 
9940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9950: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
9960: 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65  ed calls to Vdbe
9970: 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Exec() */.  int 
9980: 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  nExtension;     
9990: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
99a0: 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78  ber of loaded ex
99b0: 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f  tensions */.  vo
99c0: 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b  id **aExtension;
99d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
99e0: 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c  rray of shared l
99f0: 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a  ibrary handles *
9a00: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63  /.  void (*xTrac
9a10: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
9a20: 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a  har*);        /*
9a30: 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   Trace function 
9a40: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63  */.  void *pTrac
9a50: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
9a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9a70: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
9a80: 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  e trace function
9a90: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72   */.  void (*xPr
9aa0: 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  ofile)(void*,con
9ab0: 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20  st char*,u64);  
9ac0: 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e  /* Profiling fun
9ad0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
9ae0: 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20  *pProfileArg;   
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b00: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
9b10: 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63   to profile func
9b20: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
9b30: 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20  pCommitArg;     
9b40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
9b50: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d  rgument to xComm
9b60: 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  itCallback() */ 
9b70: 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d    .  int (*xComm
9b80: 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  itCallback)(void
9b90: 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65  *);    /* Invoke
9ba0: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
9bb0: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52  t. */.  void *pR
9bc0: 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20  ollbackArg;     
9bd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
9be0: 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61  ument to xRollba
9bf0: 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  ckCallback() */ 
9c00: 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c    .  void (*xRol
9c10: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76  lbackCallback)(v
9c20: 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65  oid*); /* Invoke
9c30: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
9c40: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  t. */.  void *pU
9c50: 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64  pdateArg;.  void
9c60: 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61   (*xUpdateCallba
9c70: 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  ck)(void*,int, c
9c80: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
9c90: 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e   char*,sqlite_in
9ca0: 74 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  t64);.#ifndef SQ
9cb0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
9cc0: 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61  int (*xWalCallba
9cd0: 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69  ck)(void *, sqli
9ce0: 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
9cf0: 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  r *, int);.  voi
9d00: 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64  d *pWalArg;.#end
9d10: 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  if.  void(*xColl
9d20: 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71  Needed)(void*,sq
9d30: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
9d40: 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  Rep,const char*)
9d50: 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  ;.  void(*xCollN
9d60: 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73  eeded16)(void*,s
9d70: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
9d80: 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  tRep,const void*
9d90: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c  );.  void *pColl
9da0: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c  NeededArg;.  sql
9db0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72  ite3_value *pErr
9dc0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f  ;          /* Mo
9dd0: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
9de0: 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69  message */.  uni
9df0: 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c  on {.    volatil
9e00: 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70  e int isInterrup
9e10: 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20  ted; /* True if 
9e20: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
9e30: 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  t has been calle
9e40: 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20  d */.    double 
9e50: 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20  notUsed1;       
9e60: 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a       /* Spacer *
9e70: 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b  /.  } u1;.  Look
9e80: 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b  aside lookaside;
9e90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
9ea0: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f  kaside malloc co
9eb0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23  nfiguration */.#
9ec0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
9ed0: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
9ee0: 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68  .  sqlite3_xauth
9ef0: 20 78 41 75 74 68 3b 20 20 20 20 20 20 20 20 20   xAuth;         
9f00: 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f   /* Access autho
9f10: 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f  rization functio
9f20: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  n */.  void *pAu
9f30: 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  thArg;          
9f40: 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75       /* 1st argu
9f50: 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65  ment to the acce
9f60: 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e  ss auth function
9f70: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
9f80: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
9f90: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
9fa0: 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65  .  int (*xProgre
9fb0: 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  ss)(void *);    
9fc0: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73   /* The progress
9fd0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   callback */.  v
9fe0: 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72  oid *pProgressAr
9ff0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
a000: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
a010: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
a020: 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  k */.  unsigned 
a030: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20  nProgressOps;   
a040: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
a050: 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72  f opcodes for pr
a060: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
a070: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
a080: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
a090: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
a0a0: 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20   nVTrans;       
a0b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
a0c0: 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20  located size of 
a0d0: 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73  aVTrans */.  Has
a0e0: 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20  h aModule;      
a0f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f             /* po
a100: 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74  pulated by sqlit
a110: 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
a120: 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20  () */.  VtabCtx 
a130: 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20  *pVtabCtx;      
a140: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74        /* Context
a150: 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62   for active vtab
a160: 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20   connect/create 
a170: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56  */.  VTable **aV
a180: 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
a190: 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61     /* Virtual ta
a1a0: 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74  bles with open t
a1b0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  ransactions */. 
a1c0: 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e   VTable *pDiscon
a1d0: 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63  nect;    /* Disc
a1e0: 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20  onnect these in 
a1f0: 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65  next sqlite3_pre
a200: 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66  pare() */.#endif
a210: 0a 20 20 46 75 6e 63 44 65 66 48 61 73 68 20 61  .  FuncDefHash a
a220: 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
a230: 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f   /* Hash table o
a240: 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e  f connection fun
a250: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68  ctions */.  Hash
a260: 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20   aCollSeq;      
a270: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
a280: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
a290: 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61  nces */.  BusyHa
a2a0: 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65  ndler busyHandle
a2b0: 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20  r;      /* Busy 
a2c0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62  callback */.  Db
a2d0: 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20   aDbStatic[2];  
a2e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
a2f0: 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20  tatic space for 
a300: 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61  the 2 default ba
a310: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65  ckends */.  Save
a320: 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
a330: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  t;        /* Lis
a340: 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65  t of active save
a350: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
a360: 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20  busyTimeout;    
a370: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73            /* Bus
a380: 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75  y handler timeou
a390: 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20  t, in msec */.  
a3a0: 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20  int nSavepoint; 
a3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a3c0: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74   Number of non-t
a3d0: 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
a3e0: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  oints */.  int n
a3f0: 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20  Statement;      
a400: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
a410: 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61  er of nested sta
a420: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
a430: 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ons  */.  i64 nD
a440: 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20  eferredCons;    
a450: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
a460: 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
a470: 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63  nts this transac
a480: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e  tion. */.  i64 n
a490: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
a4a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
a4b0: 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61  deferred immedia
a4c0: 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  te constraints *
a4d0: 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73  /.  int *pnBytes
a4e0: 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20  Freed;          
a4f0: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c    /* If not NULL
a500: 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73  , increment this
a510: 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a   in DbFree() */.
a520: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
a530: 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
a540: 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  FY.  /* The foll
a550: 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20  owing variables 
a560: 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65  are all protecte
a570: 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f  d by the STATIC_
a580: 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74  MASTER .  ** mut
a590: 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74  ex, not by sqlit
a5a0: 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61  e3.mutex. They a
a5b0: 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20  re used by code 
a5c0: 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20  in notify.c. .  
a5d0: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
a5e0: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
a5f0: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
a600: 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e  that X is waitin
a610: 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20  g for Y to.  ** 
a620: 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69  unlock so that i
a630: 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20  t can proceed.. 
a640: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
a650: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
a660: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
a670: 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e  ns that somethin
a680: 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20  g that X tried. 
a690: 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20   ** tried to do 
a6a0: 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20  recently failed 
a6b0: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c  with an SQLITE_L
a6c0: 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20  OCKED error due 
a6d0: 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65  to locks.  ** he
a6e0: 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20  ld by Y..  */.  
a6f0: 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69  sqlite3 *pBlocki
a700: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a  ngConnection; /*
a710: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74   Connection that
a720: 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c   caused SQLITE_L
a730: 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74  OCKED */.  sqlit
a740: 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65  e3 *pUnlockConne
a750: 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  ction;          
a760: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
a770: 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f  o watch for unlo
a780: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  ck */.  void *pU
a790: 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20  nlockArg;       
a7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a7b0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e   Argument to xUn
a7c0: 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20  lockNotify */.  
a7d0: 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f  void (*xUnlockNo
a7e0: 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69  tify)(void **, i
a7f0: 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20  nt);  /* Unlock 
a800: 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20  notify callback 
a810: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e  */.  sqlite3 *pN
a820: 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20  extBlocked;     
a830: 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
a840: 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65  st of all blocke
a850: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f  d connections */
a860: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
a870: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
a880: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69  NTICATION.  sqli
a890: 74 65 33 5f 75 73 65 72 61 75 74 68 20 61 75 74  te3_userauth aut
a8a0: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65  h;        /* Use
a8b0: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
a8c0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
a8d0: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
a8e0: 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63   A macro to disc
a8f0: 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e  over the encodin
a900: 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e  g of a database.
a910: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45  .*/.#define SCHE
a920: 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29  MA_ENC(db) ((db)
a930: 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61  ->aDb[0].pSchema
a940: 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45  ->enc).#define E
a950: 4e 43 28 64 62 29 20 20 20 20 20 20 20 20 28 28  NC(db)        ((
a960: 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a  db)->enc)../*.**
a970: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
a980: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33   for the sqlite3
a990: 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69  .flags..*/.#defi
a9a0: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72  ne SQLITE_VdbeTr
a9b0: 61 63 65 20 20 20 20 20 20 30 78 30 30 30 30 30  ace      0x00000
a9c0: 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  001  /* True to 
a9d0: 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75  trace VDBE execu
a9e0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
a9f0: 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
aa00: 6e 67 65 73 20 20 30 78 30 30 30 30 30 30 30 32  nges  0x00000002
aa10: 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64    /* Uncommitted
aa20: 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e   Hash table chan
aa30: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
aa40: 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20  QLITE_FullFSync 
aa50: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 34 20       0x00000004 
aa60: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
aa70: 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e  nc on the backen
aa80: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
aa90: 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
aaa0: 63 20 20 30 78 30 30 30 30 30 30 30 38 20 20 2f  c  0x00000008  /
aab0: 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63  * Use full fsync
aac0: 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20   for checkpoint 
aad0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
aae0: 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20  E_CacheSpill    
aaf0: 20 30 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20   0x00000010  /* 
ab00: 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67 65  OK to spill page
ab10: 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  r cache */.#defi
ab20: 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f  ne SQLITE_FullCo
ab30: 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30 30  lNames   0x00000
ab40: 30 32 30 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c  020  /* Show ful
ab50: 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f  l column names o
ab60: 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66  n SELECT */.#def
ab70: 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74  ine SQLITE_Short
ab80: 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30  ColNames  0x0000
ab90: 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68  0040  /* Show sh
aba0: 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65  ort columns name
abb0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
abc0: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20  ITE_CountRows   
abd0: 20 20 20 30 78 30 30 30 30 30 30 38 30 20 20 2f     0x00000080  /
abe0: 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61  * Count rows cha
abf0: 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20  nged by INSERT, 
ac00: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
ac10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ac30: 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44    DELETE, or UPD
ac40: 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a  ATE and return *
ac50: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
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 2f 2a 20 20              /*  
ac80: 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67   the count using
ac90: 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a   a callback. */.
aca0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
acb0: 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78  ullCallback   0x
acc0: 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76  00000100  /* Inv
acd0: 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  oke the callback
ace0: 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a   once if the */.
acf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72            /*   r
ad20: 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70  esult set is emp
ad30: 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ty */.#define SQ
ad40: 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20  LITE_SqlTrace   
ad50: 20 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20      0x00000200  
ad60: 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20 53  /* Debug print S
ad70: 51 4c 20 61 73 20 69 74 20 65 78 65 63 75 74 65  QL as it execute
ad80: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
ad90: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20  ITE_VdbeListing 
ada0: 20 20 20 30 78 30 30 30 30 30 34 30 30 20 20 2f     0x00000400  /
adb0: 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73  * Debug listings
adc0: 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d   of VDBE program
add0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
ade0: 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20  ITE_WriteSchema 
adf0: 20 20 20 30 78 30 30 30 30 30 38 30 30 20 20 2f     0x00000800  /
ae00: 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53  * OK to update S
ae10: 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a  QLITE_MASTER */.
ae20: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
ae30: 64 62 65 41 64 64 6f 70 54 72 61 63 65 20 30 78  dbeAddopTrace 0x
ae40: 30 30 30 30 31 30 30 30 20 20 2f 2a 20 54 72 61  00001000  /* Tra
ae50: 63 65 20 73 71 6c 69 74 65 33 56 64 62 65 41 64  ce sqlite3VdbeAd
ae60: 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23  dOp() calls */.#
ae70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67  define SQLITE_Ig
ae80: 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78 30  noreChecks   0x0
ae90: 30 30 30 32 30 30 30 20 20 2f 2a 20 44 6f 20 6e  0002000  /* Do n
aea0: 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b  ot enforce check
aeb0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
aec0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
aed0: 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20 30  eadUncommitted 0
aee0: 78 30 30 30 34 30 30 30 20 20 2f 2a 20 46 6f 72  x0004000  /* For
aef0: 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
af00: 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  de */.#define SQ
af10: 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46  LITE_LegacyFileF
af20: 6d 74 20 20 30 78 30 30 30 30 38 30 30 30 20 20  mt  0x00008000  
af30: 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64 61  /* Create new da
af40: 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61  tabases in forma
af50: 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  t 1 */.#define S
af60: 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f  QLITE_RecoveryMo
af70: 64 65 20 20 20 30 78 30 30 30 31 30 30 30 30 20  de   0x00010000 
af80: 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d   /* Ignore schem
af90: 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66  a errors */.#def
afa0: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72  ine SQLITE_Rever
afb0: 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 32  seOrder   0x0002
afc0: 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65  0000  /* Reverse
afd0: 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43   unordered SELEC
afe0: 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  Ts */.#define SQ
aff0: 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73  LITE_RecTriggers
b000: 20 20 20 20 30 78 30 30 30 34 30 30 30 30 20 20      0x00040000  
b010: 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73  /* Enable recurs
b020: 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ive triggers */.
b030: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
b040: 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78  oreignKeys    0x
b050: 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e 66  00080000  /* Enf
b060: 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  orce foreign key
b070: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f   constraints  */
b080: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b090: 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30  AutoIndex      0
b0a0: 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20 45 6e  x00100000  /* En
b0b0: 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69  able automatic i
b0c0: 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
b0d0: 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42  e SQLITE_PreferB
b0e0: 75 69 6c 74 69 6e 20 20 30 78 30 30 32 30 30 30  uiltin  0x002000
b0f0: 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63  00  /* Preferenc
b100: 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75  e to built-in fu
b110: 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ncs */.#define S
b120: 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73  QLITE_LoadExtens
b130: 69 6f 6e 20 20 30 78 30 30 34 30 30 30 30 30 20  ion  0x00400000 
b140: 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f   /* Enable load_
b150: 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65  extension */.#de
b160: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62  fine SQLITE_Enab
b170: 6c 65 54 72 69 67 67 65 72 20 20 30 78 30 30 38  leTrigger  0x008
b180: 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74  00000  /* True t
b190: 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72  o enable trigger
b1a0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b1b0: 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20  ITE_DeferFKs    
b1c0: 20 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f     0x01000000  /
b1d0: 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63  * Defer all FK c
b1e0: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
b1f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65  efine SQLITE_Que
b200: 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 32  ryOnly      0x02
b210: 30 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62  000000  /* Disab
b220: 6c 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e  le database chan
b230: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
b240: 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20 20  QLITE_VdbeEQP   
b250: 20 20 20 20 20 30 78 30 34 30 30 30 30 30 30 20       0x04000000 
b260: 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49   /* Debug EXPLAI
b270: 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a  N QUERY PLAN */.
b280: 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20  ../*.** Bits of 
b290: 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70  the sqlite3.dbOp
b2a0: 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61  tFlags field tha
b2b0: 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  t are used by th
b2c0: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73  e.** sqlite3_tes
b2d0: 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45  t_control(SQLITE
b2e0: 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49  _TESTCTRL_OPTIMI
b2f0: 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74  ZATIONS,...) int
b300: 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c  erface to.** sel
b310: 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65  ectively disable
b320: 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a   various optimiz
b330: 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ations..*/.#defi
b340: 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46  ne SQLITE_QueryF
b350: 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31 20  lattener 0x0001 
b360: 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74    /* Query flatt
b370: 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65  ening */.#define
b380: 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61   SQLITE_ColumnCa
b390: 63 68 65 20 20 20 20 30 78 30 30 30 32 20 20 20  che    0x0002   
b3a0: 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20  /* Column cache 
b3b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b3c0: 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20  E_GroupByOrder  
b3d0: 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f   0x0004   /* GRO
b3e0: 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52  UPBY cover of OR
b3f0: 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65  DERBY */.#define
b400: 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75   SQLITE_FactorOu
b410: 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20  tConst 0x0008   
b420: 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74  /* Constant fact
b430: 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20  oring */./*     
b440: 20 20 20 20 20 20 20 20 20 20 20 6e 6f 74 20 75             not u
b450: 73 65 64 20 20 20 20 30 78 30 30 31 30 20 20 20  sed    0x0010   
b460: 2f 2f 20 57 61 73 3a 20 53 51 4c 49 54 45 5f 49  // Was: SQLITE_I
b470: 64 78 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23  dxRealAsInt */.#
b480: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69  define SQLITE_Di
b490: 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30  stinctOpt    0x0
b4a0: 30 32 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43  020   /* DISTINC
b4b0: 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20  T using indexes 
b4c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b4d0: 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20  E_CoverIdxScan  
b4e0: 20 30 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76   0x0040   /* Cov
b4f0: 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e  ering index scan
b500: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b510: 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f  ITE_OrderByIdxJo
b520: 69 6e 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f  in 0x0080   /* O
b530: 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73  RDER BY of joins
b540: 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64   via index */.#d
b550: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62  efine SQLITE_Sub
b560: 71 43 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31  qCoroutine  0x01
b570: 30 30 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65  00   /* Evaluate
b580: 20 73 75 62 71 75 65 72 69 65 73 20 61 73 20 63   subqueries as c
b590: 6f 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65  oroutines */.#de
b5a0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e  fine SQLITE_Tran
b5b0: 73 69 74 69 76 65 20 20 20 20 20 30 78 30 32 30  sitive     0x020
b5c0: 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76  0   /* Transitiv
b5d0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
b5e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b5f0: 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30  OmitNoopJoin   0
b600: 78 30 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20  x0400   /* Omit 
b610: 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e  unused tables in
b620: 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e   joins */.#defin
b630: 65 20 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20  e SQLITE_Stat34 
b640: 20 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20          0x0800  
b650: 20 2f 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72   /* Use STAT3 or
b660: 20 53 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 23   STAT4 data */.#
b670: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c  define SQLITE_Al
b680: 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78 66  lOpts        0xf
b690: 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74  fff   /* All opt
b6a0: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f  imizations */../
b6b0: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20  *.** Macros for 
b6c0: 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72 20  testing whether 
b6d0: 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74  or not optimizat
b6e0: 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64  ions are enabled
b6f0: 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f   or disabled..*/
b700: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
b710: 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
b720: 54 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  T.#define Optimi
b730: 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64  zationDisabled(d
b740: 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29  b, mask)  (((db)
b750: 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61  ->dbOptFlags&(ma
b760: 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  sk))!=0).#define
b770: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61   OptimizationEna
b780: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
b790: 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c   (((db)->dbOptFl
b7a0: 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a  ags&(mask))==0).
b7b0: 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 70  #else.#define Op
b7c0: 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c  timizationDisabl
b7d0: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 30 0a  ed(db, mask)  0.
b7e0: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
b7f0: 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20  tionEnabled(db, 
b800: 6d 61 73 6b 29 20 20 20 31 0a 23 65 6e 64 69 66  mask)   1.#endif
b810: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
b820: 72 75 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20  rue if it OK to 
b830: 66 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20  factor constant 
b840: 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f  expressions into
b850: 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74   the initializat
b860: 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65  ion.** code. The
b870: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50   argument is a P
b880: 61 72 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20  arse object for 
b890: 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
b8a0: 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  or..*/.#define C
b8b0: 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20  onstFactorOk(P) 
b8c0: 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63  ((P)->okConstFac
b8d0: 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73  tor)../*.** Poss
b8e0: 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20  ible values for 
b8f0: 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63  the sqlite.magic
b900: 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e   field..** The n
b910: 75 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61 69  umbers are obtai
b920: 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e  ned at random an
b930: 64 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61  d have no specia
b940: 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72  l meaning, other
b950: 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64  .** than being d
b960: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65  istinct from one
b970: 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65   another..*/.#de
b980: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
b990: 43 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32  C_OPEN     0xa02
b9a0: 39 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61  9a697  /* Databa
b9b0: 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64  se is open */.#d
b9c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
b9d0: 49 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66  IC_CLOSED   0x9f
b9e0: 33 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62  3c2d33  /* Datab
b9f0: 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f  ase is closed */
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 53 49 43 4b 20 20 20 20 20 30  MAGIC_SICK     0
ba20: 78 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72  x4b771290  /* Er
ba30: 72 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67  ror and awaiting
ba40: 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e   close */.#defin
ba50: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42  e SQLITE_MAGIC_B
ba60: 55 53 59 20 20 20 20 20 30 78 66 30 33 62 37 39  USY     0xf03b79
ba70: 30 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  06  /* Database 
ba80: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
ba90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
baa0: 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20  TE_MAGIC_ERROR  
bab0: 20 20 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a    0xb5357930  /*
bac0: 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53   An SQLITE_MISUS
bad0: 45 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64  E error occurred
bae0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
baf0: 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20  TE_MAGIC_ZOMBIE 
bb00: 20 20 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a    0x64cffc7f  /*
bb10: 20 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74   Close with last
bb20: 20 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65   statement close
bb30: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   */../*.** Each 
bb40: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  SQL function is 
bb50: 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e  defined by an in
bb60: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
bb70: 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63  llowing.** struc
bb80: 74 75 72 65 2e 20 20 41 20 70 6f 69 6e 74 65 72  ture.  A pointer
bb90: 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
bba0: 72 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  re is stored in 
bbb0: 74 68 65 20 73 71 6c 69 74 65 2e 61 46 75 6e 63  the sqlite.aFunc
bbc0: 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 20  .** hash table. 
bbd0: 20 57 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66   When multiple f
bbe0: 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 74 68  unctions have th
bbf0: 65 20 73 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65  e same name, the
bc00: 20 68 61 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70   hash table.** p
bc10: 6f 69 6e 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65  oints to a linke
bc20: 64 20 6c 69 73 74 20 6f 66 20 74 68 65 73 65 20  d list of these 
bc30: 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73  structures..*/.s
bc40: 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a  truct FuncDef {.
bc50: 20 20 69 31 36 20 6e 41 72 67 3b 20 20 20 20 20    i16 nArg;     
bc60: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
bc70: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   of arguments.  
bc80: 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74  -1 means unlimit
bc90: 65 64 20 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63  ed */.  u16 func
bca0: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20  Flags;       /* 
bcb0: 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  Some combination
bcc0: 20 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f   of SQLITE_FUNC_
bcd0: 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73  * */.  void *pUs
bce0: 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55  erData;     /* U
bcf0: 73 65 72 20 64 61 74 61 20 70 61 72 61 6d 65 74  ser data paramet
bd00: 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20  er */.  FuncDef 
bd10: 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20  *pNext;      /* 
bd20: 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69  Next function wi
bd30: 74 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a  th same name */.
bd40: 20 20 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28    void (*xFunc)(
bd50: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
bd60: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
bd70: 75 65 2a 2a 29 3b 20 2f 2a 20 52 65 67 75 6c 61  ue**); /* Regula
bd80: 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  r function */.  
bd90: 76 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73 71  void (*xStep)(sq
bda0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
bdb0: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
bdc0: 2a 2a 29 3b 20 2f 2a 20 41 67 67 72 65 67 61 74  **); /* Aggregat
bdd0: 65 20 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64  e step */.  void
bde0: 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71   (*xFinalize)(sq
bdf0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b  lite3_context*);
be00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be10: 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 69 6e  /* Aggregate fin
be20: 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72  alizer */.  char
be30: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
be40: 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20   /* SQL name of 
be50: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f  the function. */
be60: 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73  .  FuncDef *pHas
be70: 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  h;      /* Next 
be80: 77 69 74 68 20 61 20 64 69 66 66 65 72 65 6e 74  with a different
be90: 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73 61   name but the sa
bea0: 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 46 75 6e  me hash */.  Fun
beb0: 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65  cDestructor *pDe
bec0: 73 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52  structor;   /* R
bed0: 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64  eference counted
bee0: 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63   destructor func
bef0: 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  tion */.};../*.*
bf00: 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
bf10: 20 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20   encapsulates a 
bf20: 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65  user-function de
bf30: 73 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63  structor callbac
bf40: 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  k (as.** configu
bf50: 72 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65  red using create
bf60: 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20  _function_v2()) 
bf70: 61 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20  and a reference 
bf80: 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a  counter. When.**
bf90: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
bfa0: 5f 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20  _v2() is called 
bfb0: 74 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63  to create a func
bfc0: 74 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74  tion with a dest
bfd0: 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e  ructor,.** a sin
bfe0: 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68  gle object of th
bff0: 69 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63  is type is alloc
c000: 61 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75  ated. FuncDestru
c010: 63 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74  ctor.nRef is set
c020: 20 74 6f 20 0a 2a 2a 20 74 68 65 20 6e 75 6d 62   to .** the numb
c030: 65 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62  er of FuncDef ob
c040: 6a 65 63 74 73 20 63 72 65 61 74 65 64 20 28 65  jects created (e
c050: 69 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65  ither 1 or 3, de
c060: 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
c070: 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65  er.** or not the
c080: 20 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64   specified encod
c090: 69 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e  ing is SQLITE_AN
c0a0: 59 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e  Y). The FuncDef.
c0b0: 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d  pDestructor.** m
c0c0: 65 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66  ember of each of
c0d0: 20 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66   the new FuncDef
c0e0: 20 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74 20   objects is set 
c0f0: 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20  to point to the 
c100: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e  allocated.** Fun
c110: 63 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a  cDestructor..**.
c120: 2a 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20 77  ** Thereafter, w
c130: 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46  hen one of the F
c140: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69  uncDef objects i
c150: 73 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72  s deleted, the r
c160: 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e  eference.** coun
c170: 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74  t on this object
c180: 20 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e   is decremented.
c190: 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73   When it reaches
c1a0: 20 30 2c 20 74 68 65 20 64 65 73 74 72 75 63 74   0, the destruct
c1b0: 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64  or.** is invoked
c1c0: 20 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73   and the FuncDes
c1d0: 74 72 75 63 74 6f 72 20 73 74 72 75 63 74 75 72  tructor structur
c1e0: 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75  e freed..*/.stru
c1f0: 63 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ct FuncDestructo
c200: 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a  r {.  int nRef;.
c210: 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f    void (*xDestro
c220: 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f  y)(void *);.  vo
c230: 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d  id *pUserData;.}
c240: 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  ;../*.** Possibl
c250: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e  e values for Fun
c260: 63 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74  cDef.flags.  Not
c270: 65 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47  e that the _LENG
c280: 54 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a  TH and _TYPEOF.*
c290: 2a 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f  * values must co
c2a0: 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c  rrespond to OPFL
c2b0: 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64  AG_LENGTHARG and
c2c0: 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
c2d0: 47 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65  G.  There.** are
c2e0: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
c2f0: 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65  ents in the code
c300: 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e   to verify this.
c310: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
c320: 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20  TE_FUNC_ENCMASK 
c330: 20 30 78 30 30 33 20 2f 2a 20 53 51 4c 49 54 45   0x003 /* SQLITE
c340: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54  _UTF8, SQLITE_UT
c350: 46 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45  F16BE or UTF16LE
c360: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c370: 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20  TE_FUNC_LIKE    
c380: 20 30 78 30 30 34 20 2f 2a 20 43 61 6e 64 69 64   0x004 /* Candid
c390: 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45  ate for the LIKE
c3a0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f   optimization */
c3b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c3c0: 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78  FUNC_CASE     0x
c3d0: 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73  008 /* Case-sens
c3e0: 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20  itive LIKE-type 
c3f0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
c400: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
c410: 45 50 48 45 4d 20 20 20 20 30 78 30 31 30 20 2f  EPHEM    0x010 /
c420: 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65  * Ephemeral.  De
c430: 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20 2a  lete with VDBE *
c440: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c450: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30  _FUNC_NEEDCOLL 0
c460: 78 30 32 30 20 2f 2a 20 73 71 6c 69 74 65 33 47  x020 /* sqlite3G
c470: 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20  etFuncCollSeq() 
c480: 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64 20  might be called 
c490: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c4a0: 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20  E_FUNC_LENGTH   
c4b0: 30 78 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69  0x040 /* Built-i
c4c0: 6e 20 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74  n length() funct
c4d0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
c4e0: 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f  QLITE_FUNC_TYPEO
c4f0: 46 20 20 20 30 78 30 38 30 20 2f 2a 20 42 75 69  F   0x080 /* Bui
c500: 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66  lt-in typeof() f
c510: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
c520: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
c530: 4f 55 4e 54 20 20 20 20 30 78 31 30 30 20 2f 2a  OUNT    0x100 /*
c540: 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28   Built-in count(
c550: 2a 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a  *) aggregate */.
c560: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
c570: 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 32  UNC_COALESCE 0x2
c580: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63  00 /* Built-in c
c590: 6f 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e  oalesce() or ifn
c5a0: 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ull() */.#define
c5b0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c   SQLITE_FUNC_UNL
c5c0: 49 4b 45 4c 59 20 30 78 34 30 30 20 2f 2a 20 42  IKELY 0x400 /* B
c5d0: 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79  uilt-in unlikely
c5e0: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
c5f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
c600: 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 38 30  NC_CONSTANT 0x80
c610: 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e  0 /* Constant in
c620: 70 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73  puts give a cons
c630: 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23  tant output */.#
c640: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
c650: 4e 43 5f 4d 49 4e 4d 41 58 20 20 30 78 31 30 30  NC_MINMAX  0x100
c660: 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69  0 /* True for mi
c670: 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67  n() and max() ag
c680: 67 72 65 67 61 74 65 73 20 2a 2f 0a 0a 2f 2a 0a  gregates */../*.
c690: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
c6a0: 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46   three macros, F
c6b0: 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46  UNCTION(), LIKEF
c6c0: 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45 47  UNC() and AGGREG
c6d0: 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65  ATE() are.** use
c6e0: 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20  d to create the 
c6f0: 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72  initializers for
c700: 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 72   the FuncDef str
c710: 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20  uctures..**.**  
c720: 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c   FUNCTION(zName,
c730: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
c740: 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
c750: 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
c760: 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e   scalar function
c770: 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61   definition of a
c780: 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20   function zName 
c790: 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e  .**     implemen
c7a0: 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f  ted by C functio
c7b0: 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63  n xFunc that acc
c7c0: 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65  epts nArg argume
c7d0: 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  nts. The.**     
c7e0: 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20  value passed as 
c7f0: 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  iArg is cast to 
c800: 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61  a (void*) and ma
c810: 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20  de available.** 
c820: 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d      as the user-
c830: 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73  data (sqlite3_us
c840: 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74  er_data()) for t
c850: 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20  he function. If 
c860: 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74  .**     argument
c870: 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68   bNC is true, th
c880: 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  en the SQLITE_FU
c890: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67  NC_NEEDCOLL flag
c8a0: 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20   is set..**.**  
c8b0: 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   VFUNCTION(zName
c8c0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
c8d0: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
c8e0: 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65   Like FUNCTION e
c8f0: 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74  xcept it omits t
c900: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  he SQLITE_FUNC_C
c910: 4f 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a  ONSTANT flag..**
c920: 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28  .**   AGGREGATE(
c930: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
c940: 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78  g, bNC, xStep, x
c950: 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73  Final).**     Us
c960: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20  ed to create an 
c970: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
c980: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d  on definition im
c990: 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20  plemented by.** 
c9a0: 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69      the C functi
c9b0: 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46  ons xStep and xF
c9c0: 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20  inal. The first 
c9d0: 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a  four parameters.
c9e0: 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72  **     are inter
c9f0: 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61  preted in the sa
ca00: 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69  me way as the fi
ca10: 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73  rst 4 parameters
ca20: 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54   to.**     FUNCT
ca30: 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c  ION()..**.**   L
ca40: 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
ca50: 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73  Arg, pArg, flags
ca60: 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
ca70: 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72   create a scalar
ca80: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
ca90: 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69  tion of a functi
caa0: 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20  on zName .**    
cab0: 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41   that accepts nA
cac0: 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64  rg arguments and
cad0: 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20   is implemented 
cae0: 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a  by a call to C .
caf0: 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20  **     function 
cb00: 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65  likeFunc. Argume
cb10: 6e 74 20 70 41 72 67 20 69 73 20 63 61 73 74 20  nt pArg is cast 
cb20: 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e  to a (void *) an
cb30: 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76  d made.**     av
cb40: 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66  ailable as the f
cb50: 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74  unction user-dat
cb60: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
cb70: 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20  data()). The.** 
cb80: 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67      FuncDef.flag
cb90: 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  s variable is se
cba0: 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70  t to the value p
cbb0: 61 73 73 65 64 20 61 73 20 74 68 65 20 66 6c 61  assed as the fla
cbc0: 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65  gs.**     parame
cbd0: 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ter..*/.#define 
cbe0: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
cbf0: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
cc00: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
cc10: 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  g, SQLITE_FUNC_C
cc20: 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55  ONSTANT|SQLITE_U
cc30: 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
cc40: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
cc50: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
cc60: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
cc70: 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a   xFunc, 0, 0, #z
cc80: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
cc90: 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e  ine VFUNCTION(zN
cca0: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
ccb0: 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
ccc0: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
ccd0: 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
cce0: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
ccf0: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
cd00: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
cd10: 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a   xFunc, 0, 0, #z
cd20: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
cd30: 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e  ine FUNCTION2(zN
cd40: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
cd50: 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74   bNC, xFunc, ext
cd60: 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  raFlags) \.  {nA
cd70: 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  rg,SQLITE_FUNC_C
cd80: 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55  ONSTANT|SQLITE_U
cd90: 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
cda0: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65  FUNC_NEEDCOLL)|e
cdb0: 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53  xtraFlags,\.   S
cdc0: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
cdd0: 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63  (iArg), 0, xFunc
cde0: 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
cdf0: 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 53 54  0, 0}.#define ST
ce00: 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  R_FUNCTION(zName
ce10: 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e  , nArg, pArg, bN
ce20: 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
ce30: 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
ce40: 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
ce50: 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
ce60: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
ce70: 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20  , \.   pArg, 0, 
ce80: 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e  xFunc, 0, 0, #zN
ce90: 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69  ame, 0, 0}.#defi
cea0: 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d  ne LIKEFUNC(zNam
ceb0: 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c  e, nArg, arg, fl
cec0: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
ced0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
cee0: 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
cef0: 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f  |flags, \.   (vo
cf00: 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b  id *)arg, 0, lik
cf10: 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e  eFunc, 0, 0, #zN
cf20: 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69  ame, 0, 0}.#defi
cf30: 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61  ne AGGREGATE(zNa
cf40: 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e  me, nArg, arg, n
cf50: 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
cf60: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
cf70: 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c  ITE_UTF8|(nc*SQL
cf80: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
cf90: 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
cfa0: 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c  INT_TO_PTR(arg),
cfb0: 20 30 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69   0, 0, xStep,xFi
cfc0: 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a  nal,#zName,0,0}.
cfd0: 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54  #define AGGREGAT
cfe0: 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  E2(zName, nArg, 
cff0: 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20  arg, nc, xStep, 
d000: 78 46 69 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61  xFinal, extraFla
d010: 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  gs) \.  {nArg, S
d020: 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53  QLITE_UTF8|(nc*S
d030: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
d040: 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c  OLL)|extraFlags,
d050: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
d060: 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c  _TO_PTR(arg), 0,
d070: 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c   0, xStep,xFinal
d080: 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a  ,#zName,0,0}../*
d090: 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20  .** All current 
d0a0: 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73  savepoints are s
d0b0: 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65  tored in a linke
d0c0: 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20  d list starting 
d0d0: 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53  at.** sqlite3.pS
d0e0: 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69  avepoint. The fi
d0f0: 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74  rst element in t
d100: 68 65 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d  he list is the m
d110: 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20  ost recently.** 
d120: 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74  opened savepoint
d130: 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65  . Savepoints are
d140: 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69   added to the li
d150: 73 74 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a  st by the vdbe.*
d160: 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69  * OP_Savepoint i
d170: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  nstruction..*/.s
d180: 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20  truct Savepoint 
d190: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
d1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1b0: 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70          /* Savep
d1c0: 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74  oint name (nul-t
d1d0: 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20  erminated) */.  
d1e0: 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e  i64 nDeferredCon
d1f0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
d200: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
d210: 20 64 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f   deferred fk vio
d220: 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34  lations */.  i64
d230: 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e   nDeferredImmCon
d240: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
d250: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
d260: 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a  ferred imm fk. *
d270: 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  /.  Savepoint *p
d280: 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
d290: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e          /* Paren
d2a0: 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20  t savepoint (if 
d2b0: 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  any) */.};../*.*
d2c0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
d2d0: 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20  are used as the 
d2e0: 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72  second parameter
d2f0: 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70   to sqlite3Savep
d300: 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61  oint(),.** and a
d310: 73 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e  s the P1 argumen
d320: 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65  t to the OP_Save
d330: 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  point instructio
d340: 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41  n..*/.#define SA
d350: 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20  VEPOINT_BEGIN   
d360: 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56     0.#define SAV
d370: 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20  EPOINT_RELEASE  
d380: 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45    1.#define SAVE
d390: 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20  POINT_ROLLBACK  
d3a0: 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   2.../*.** Each 
d3b0: 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76  SQLite module (v
d3c0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66  irtual table def
d3d0: 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69  inition) is defi
d3e0: 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73  ned by an.** ins
d3f0: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
d400: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
d410: 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  , stored in the 
d420: 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a  sqlite3.aModule.
d430: 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a  ** hash table..*
d440: 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20  /.struct Module 
d450: 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  {.  const sqlite
d460: 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
d470: 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c  e;       /* Call
d480: 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f  back pointers */
d490: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
d4a0: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
d4b0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
d4c0: 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65  passed to create
d4d0: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76  _module() */.  v
d4e0: 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20  oid *pAux;      
d4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d500: 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73      /* pAux pass
d510: 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64  ed to create_mod
d520: 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ule() */.  void 
d530: 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64  (*xDestroy)(void
d540: 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20   *);            
d550: 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75  /* Module destru
d560: 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ctor function */
d570: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72  .};../*.** infor
d580: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
d590: 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53  h column of an S
d5a0: 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64  QL table is held
d5b0: 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   in an instance.
d5c0: 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
d5d0: 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
d5e0: 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20  Column {.  char 
d5f0: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e  *zName;     /* N
d600: 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  ame of this colu
d610: 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44  mn */.  Expr *pD
d620: 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61  flt;     /* Defa
d630: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69  ult value of thi
d640: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68  s column */.  ch
d650: 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20 20 2f  ar *zDflt;     /
d660: 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20  * Original text 
d670: 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  of the default v
d680: 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  alue */.  char *
d690: 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a 20 44 61  zType;     /* Da
d6a0: 74 61 20 74 79 70 65 20 66 6f 72 20 74 68 69 73  ta type for this
d6b0: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61   column */.  cha
d6c0: 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a  r *zColl;     /*
d6d0: 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
d6e0: 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75  nce.  If NULL, u
d6f0: 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a  se the default *
d700: 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20  /.  u8 notNull; 
d710: 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63       /* An OE_ c
d720: 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67  ode for handling
d730: 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73   a NOT NULL cons
d740: 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72  traint */.  char
d750: 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20   affinity;   /* 
d760: 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  One of the SQLIT
d770: 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73  E_AFF_... values
d780: 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b 20   */.  u8 szEst; 
d790: 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
d7a0: 74 65 64 20 73 69 7a 65 20 6f 66 20 74 68 69 73  ted size of this
d7b0: 20 63 6f 6c 75 6d 6e 2e 20 20 49 4e 54 3d 3d 31   column.  INT==1
d7c0: 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67   */.  u8 colFlag
d7d0: 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61  s;     /* Boolea
d7e0: 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53  n properties.  S
d7f0: 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69  ee COLFLAG_ defi
d800: 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  nes below */.};.
d810: 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
d820: 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f  es for Column.co
d830: 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69  lFlags:.*/.#defi
d840: 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b  ne COLFLAG_PRIMK
d850: 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a  EY  0x0001    /*
d860: 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20   Column is part 
d870: 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  of the primary k
d880: 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  ey */.#define CO
d890: 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30  LFLAG_HIDDEN   0
d8a0: 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69  x0002    /* A hi
d8b0: 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  dden column in a
d8c0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
d8d0: 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c  /../*.** A "Coll
d8e0: 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20  ating Sequence" 
d8f0: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
d900: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
d910: 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74   following.** st
d920: 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74  ructure. Concept
d930: 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69  ually, a collati
d940: 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73  ng sequence cons
d950: 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61  ists of a name a
d960: 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73  nd.** a comparis
d970: 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20  on routine that 
d980: 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65  defines the orde
d990: 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e  r of that sequen
d9a0: 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c  ce..**.** If Col
d9b0: 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c  lSeq.xCmp is NUL
d9c0: 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  L, it means that
d9d0: 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e   the.** collatin
d9e0: 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e  g sequence is un
d9f0: 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65  defined.  Indice
da00: 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e  s built on an un
da10: 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61  defined.** colla
da20: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61  ting sequence ma
da30: 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72  y not be read or
da40: 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72   written..*/.str
da50: 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20  uct CollSeq {.  
da60: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
da70: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
da80: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73   the collating s
da90: 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65  equence, UTF-8 e
daa0: 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65  ncoded */.  u8 e
dab0: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
dac0: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
dad0: 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43  ng handled by xC
dae0: 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mp() */.  void *
daf0: 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20  pUser;          
db00: 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
db10: 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20  t to xCmp() */. 
db20: 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69   int (*xCmp)(voi
db30: 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  d*,int, const vo
db40: 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  id*, int, const 
db50: 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28  void*);.  void (
db60: 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20  *xDel)(void*);  
db70: 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f  /* Destructor fo
db80: 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  r pUser */.};../
db90: 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65  *.** A sort orde
dba0: 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  r can be either 
dbb0: 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a  ASC or DESC..*/.
dbc0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
dbd0: 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20 2f  O_ASC       0  /
dbe0: 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64  * Sort in ascend
dbf0: 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65  ing order */.#de
dc00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44  fine SQLITE_SO_D
dc10: 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53  ESC      1  /* S
dc20: 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ort in ascending
dc30: 20 6f 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   order */../*.**
dc40: 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   Column affinity
dc50: 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68   types..**.** Th
dc60: 65 73 65 20 75 73 65 64 20 74 6f 20 68 61 76 65  ese used to have
dc70: 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c   mnemonic name l
dc80: 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49  ike 'i' for SQLI
dc90: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61  TE_AFF_INTEGER a
dca0: 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51  nd.** 't' for SQ
dcb0: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20  LITE_AFF_TEXT.  
dcc0: 42 75 74 20 77 65 20 63 61 6e 20 73 61 76 65 20  But we can save 
dcd0: 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61  a little space a
dce0: 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68  nd improve.** th
dcf0: 65 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65  e speed a little
dd00: 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68   by numbering th
dd10: 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75  e values consecu
dd20: 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20  tively.  .**.** 
dd30: 42 75 74 20 72 61 74 68 65 72 20 74 68 61 6e 20  But rather than 
dd40: 73 74 61 72 74 20 77 69 74 68 20 30 20 6f 72 20  start with 0 or 
dd50: 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74 68  1, we begin with
dd60: 20 27 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c   'A'.  That way,
dd70: 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c  .** when multipl
dd80: 65 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73  e affinity types
dd90: 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65   are concatenate
dda0: 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20  d into a string 
ddb0: 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74  and.** used as t
ddc0: 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74  he P4 operand, t
ddd0: 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65  hey will be more
dde0: 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a   readable..**.**
ddf0: 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20   Note also that 
de00: 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
de10: 73 20 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f  s are grouped to
de20: 67 65 74 68 65 72 20 73 6f 20 74 68 61 74 20 74  gether so that t
de30: 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20  esting.** for a 
de40: 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69 73 20  numeric type is 
de50: 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69  a single compari
de60: 73 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20 4e 4f  son.  And the NO
de70: 4e 45 20 74 79 70 65 20 69 73 20 66 69 72 73 74  NE type is first
de80: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
de90: 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 20 20 20  ITE_AFF_NONE    
dea0: 20 27 41 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'A'.#define SQL
deb0: 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20  ITE_AFF_TEXT    
dec0: 20 27 42 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'B'.#define SQL
ded0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
dee0: 20 27 43 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'C'.#define SQL
def0: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
df00: 20 27 44 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'D'.#define SQL
df10: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20  ITE_AFF_REAL    
df20: 20 27 45 27 0a 0a 23 64 65 66 69 6e 65 20 73 71   'E'..#define sq
df30: 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66  lite3IsNumericAf
df40: 66 69 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e  finity(X)  ((X)>
df50: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45  =SQLITE_AFF_NUME
df60: 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  RIC)../*.** The 
df70: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
df80: 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66  values masks off
df90: 20 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74   the significant
dfa0: 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61   bits of an.** a
dfb0: 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a  ffinity value. .
dfc0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
dfd0: 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30  E_AFF_MASK     0
dfe0: 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74  x47../*.** Addit
dff0: 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73  ional bit values
e000: 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65   that can be ORe
e010: 64 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69  d with an affini
e020: 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68  ty without.** ch
e030: 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e  anging the affin
e040: 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53  ity..**.** The S
e050: 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c  QLITE_NOTNULL fl
e060: 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74  ag is a combinat
e070: 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e  ion of NULLEQ an
e080: 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a  d JUMPIFNULL..**
e090: 20 49 74 20 63 61 75 73 65 73 20 61 6e 20 61 73   It causes an as
e0a0: 73 65 72 74 28 29 20 74 6f 20 66 69 72 65 20 69  sert() to fire i
e0b0: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
e0c0: 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e   to a comparison
e0d0: 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20  .** operator is 
e0e0: 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64  NULL.  It is add
e0f0: 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f  ed to certain co
e100: 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f  mparison operato
e110: 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74  rs to.** prove t
e120: 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73  hat the operands
e130: 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20   are always NOT 
e140: 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  NULL..*/.#define
e150: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
e160: 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75  LL   0x10  /* ju
e170: 6d 70 73 20 69 66 20 65 69 74 68 65 72 20 6f 70  mps if either op
e180: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f  erand is NULL */
e190: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e1a0: 53 54 4f 52 45 50 32 20 20 20 20 20 20 30 78 32  STOREP2      0x2
e1b0: 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  0  /* Store resu
e1c0: 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61  lt in reg[P2] ra
e1d0: 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a  ther than jump *
e1e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e1f0: 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78  _NULLEQ       0x
e200: 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c  80  /* NULL=NULL
e210: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e220: 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20  TE_NOTNULL      
e230: 30 78 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20  0x90  /* Assert 
e240: 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72  that operands ar
e250: 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a  e never NULL */.
e260: 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74  ./*.** An object
e270: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
e280: 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63   created for eac
e290: 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  h virtual table 
e2a0: 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68  present in.** th
e2b0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
e2c0: 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  a. .**.** If the
e2d0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
e2e0: 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e   is shared, then
e2f0: 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e   there is one in
e300: 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a  stance of this.*
e310: 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  * structure for 
e320: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
e330: 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65  nnection (sqlite
e340: 33 2a 29 20 74 68 61 74 20 75 73 65 73 20 74 68  3*) that uses th
e350: 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65  e shared.** sche
e360: 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65 63 61  ma. This is beca
e370: 75 73 65 20 65 61 63 68 20 64 61 74 61 62 61 73  use each databas
e380: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71  e connection req
e390: 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e  uires its own un
e3a0: 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  ique.** instance
e3b0: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   of the sqlite3_
e3c0: 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65  vtab* handle use
e3d0: 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  d to access the 
e3e0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a  virtual table .*
e3f0: 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  * implementation
e400: 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  . sqlite3_vtab* 
e410: 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20  handles can not 
e420: 62 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65  be shared betwee
e430: 6e 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  n .** database c
e440: 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e  onnections, even
e450: 20 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f   when the rest o
e460: 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  f the in-memory 
e470: 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68  database .** sch
e480: 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61  ema is shared, a
e490: 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  s the implementa
e4a0: 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65  tion often store
e4b0: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  s the database.*
e4c0: 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  * connection han
e4d0: 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74  dle passed to it
e4e0: 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63   via the xConnec
e4f0: 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29  t() or xCreate()
e500: 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e   method.** durin
e510: 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
e520: 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69   internally. Thi
e530: 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  s database conne
e540: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79  ction handle may
e550: 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64  .** then be used
e560: 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20   by the virtual 
e570: 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  table implementa
e580: 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72  tion to access r
e590: 65 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77  eal tables .** w
e5a0: 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61  ithin the databa
e5b0: 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79  se. So that they
e5c0: 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20   appear as part 
e5d0: 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a  of the callers .
e5e0: 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ** transaction, 
e5f0: 74 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e  these accesses n
e600: 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76  eed to be made v
e610: 69 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  ia the same data
e620: 62 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74  base .** connect
e630: 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64  ion as that used
e640: 20 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20   to execute SQL 
e650: 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68  operations on th
e660: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
e670: 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c  .**.** All VTabl
e680: 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63  e objects that c
e690: 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73  orrespond to a s
e6a0: 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61  ingle table in a
e6b0: 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62   shared.** datab
e6c0: 61 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69  ase schema are i
e6d0: 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20  nitially stored 
e6e0: 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74  in a linked-list
e6f0: 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a   pointed to by.*
e700: 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61  * the Table.pVTa
e710: 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61  ble member varia
e720: 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65  ble of the corre
e730: 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f  sponding Table o
e740: 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61  bject..** When a
e750: 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  n sqlite3_prepar
e760: 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  e() operation is
e770: 20 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63   required to acc
e780: 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a  ess the virtual.
e790: 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61  ** table, it sea
e7a0: 72 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66  rches the list f
e7b0: 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68  or the VTable th
e7c0: 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  at corresponds t
e7d0: 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73  o the.** databas
e7e0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69  e connection doi
e7f0: 6e 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67  ng the preparing
e800: 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68   so as to use th
e810: 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c  e correct.** sql
e820: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
e830: 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65  e in the compile
e840: 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57  d query..**.** W
e850: 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79  hen an in-memory
e860: 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73   Table object is
e870: 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78   deleted (for ex
e880: 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a  ample when the.*
e890: 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e  * schema is bein
e8a0: 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73  g reloaded for s
e8b0: 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65  ome reason), the
e8c0: 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20   VTable objects 
e8d0: 61 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65  are not .** dele
e8e0: 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69  ted and the sqli
e8f0: 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
e900: 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f  s are not xDisco
e910: 6e 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d  nnect()ed .** im
e920: 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65  mediately. Inste
e930: 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76  ad, they are mov
e940: 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c  ed from the Tabl
e950: 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74  e.pVTable list t
e960: 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e  o.** another lin
e970: 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
e980: 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70  by the sqlite3.p
e990: 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65  Disconnect membe
e9a0: 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72  r of the.** corr
e9b0: 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
e9c0: 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65  3 structure. The
e9d0: 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74  y are then delet
e9e0: 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64  ed/xDisconnected
e9f0: 20 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61   .** next time a
ea00: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72   statement is pr
ea10: 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69  epared using sai
ea20: 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73  d sqlite3*. This
ea30: 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61   is done.** to a
ea40: 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73  void deadlock is
ea50: 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d  sues involving m
ea60: 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e  ultiple sqlite3.
ea70: 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a  mutex mutexes..*
ea80: 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65  * Refer to comme
ea90: 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69  nts above functi
eaa0: 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  on sqlite3VtabUn
eab0: 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61  lockList() for a
eac0: 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e  n.** explanation
ead0: 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73   as to why it is
eae0: 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20   safe to add an 
eaf0: 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69  entry to an sqli
eb00: 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a  te3.pDisconnect.
eb10: 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20  ** list without 
eb20: 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72  holding the corr
eb30: 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
eb40: 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a  3.mutex mutex..*
eb50: 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20  *.** The memory 
eb60: 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74  for objects of t
eb70: 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61  his type is alwa
eb80: 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20  ys allocated by 
eb90: 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  .** sqlite3DbMal
eba0: 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65  loc(), using the
ebb0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
ebc0: 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61  le stored in VTa
ebd0: 62 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68  ble.db as .** th
ebe0: 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
ebf0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62  ..*/.struct VTab
ec00: 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  le {.  sqlite3 *
ec10: 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  db;             
ec20: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e   /* Database con
ec30: 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74  nection associat
ec40: 65 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62  ed with this tab
ec50: 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a  le */.  Module *
ec60: 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20  pMod;           
ec70: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
ec80: 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  module implement
ec90: 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  ation */.  sqlit
eca0: 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20  e3_vtab *pVtab; 
ecb0: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
ecc0: 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65  to vtab instance
ecd0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20   */.  int nRef; 
ece0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecf0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69  /* Number of poi
ed00: 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74  nters to this st
ed10: 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20  ructure */.  u8 
ed20: 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20  bConstraint;    
ed30: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
ed40: 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72  f constraints ar
ed50: 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20  e supported */. 
ed60: 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b   int iSavepoint;
ed70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
ed80: 70 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50  pth of the SAVEP
ed90: 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20  OINT stack */.  
eda0: 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20  VTable *pNext;  
edb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78            /* Nex
edc0: 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74  t in linked list
edd0: 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
ede0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  };../*.** Each S
edf0: 51 4c 20 74 61 62 6c 65 20 69 73 20 72 65 70 72  QL table is repr
ee00: 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
ee10: 79 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  y by an instance
ee20: 20 6f 66 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f   of the.** follo
ee30: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
ee40: 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d  **.** Table.zNam
ee50: 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  e is the name of
ee60: 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68 65   the table.  The
ee70: 20 63 61 73 65 20 6f 66 20 74 68 65 20 6f 72 69   case of the ori
ee80: 67 69 6e 61 6c 0a 2a 2a 20 43 52 45 41 54 45 20  ginal.** CREATE 
ee90: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20  TABLE statement 
eea0: 69 73 20 73 74 6f 72 65 64 2c 20 62 75 74 20 63  is stored, but c
eeb0: 61 73 65 20 69 73 20 6e 6f 74 20 73 69 67 6e 69  ase is not signi
eec0: 66 69 63 61 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f  ficant for.** co
eed0: 6d 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  mparisons..**.**
eee0: 20 54 61 62 6c 65 2e 6e 43 6f 6c 20 69 73 20 74   Table.nCol is t
eef0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
ef00: 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62  umns in this tab
ef10: 6c 65 2e 20 20 54 61 62 6c 65 2e 61 43 6f 6c 20  le.  Table.aCol 
ef20: 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  is a.** pointer 
ef30: 74 6f 20 61 6e 20 61 72 72 61 79 20 6f 66 20 43  to an array of C
ef40: 6f 6c 75 6d 6e 20 73 74 72 75 63 74 75 72 65 73  olumn structures
ef50: 2c 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20 63  , one for each c
ef60: 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  olumn..**.** If 
ef70: 74 68 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e  the table has an
ef80: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
ef90: 20 4b 45 59 2c 20 74 68 65 6e 20 54 61 62 6c 65   KEY, then Table
efa0: 2e 69 50 4b 65 79 20 69 73 20 74 68 65 20 69 6e  .iPKey is the in
efb0: 64 65 78 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  dex of.** the co
efc0: 6c 75 6d 6e 20 74 68 61 74 20 69 73 20 74 68 61  lumn that is tha
efd0: 74 20 6b 65 79 2e 20 20 20 4f 74 68 65 72 77 69  t key.   Otherwi
efe0: 73 65 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69  se Table.iPKey i
eff0: 73 20 6e 65 67 61 74 69 76 65 2e 20 20 4e 6f 74  s negative.  Not
f000: 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61  e.** that the da
f010: 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 50 52  tatype of the PR
f020: 49 4d 41 52 59 20 4b 45 59 20 6d 75 73 74 20 62  IMARY KEY must b
f030: 65 20 49 4e 54 45 47 45 52 20 66 6f 72 20 74 68  e INTEGER for th
f040: 69 73 20 66 69 65 6c 64 20 74 6f 0a 2a 2a 20 62  is field to.** b
f050: 65 20 73 65 74 2e 20 20 41 6e 20 49 4e 54 45 47  e set.  An INTEG
f060: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69  ER PRIMARY KEY i
f070: 73 20 75 73 65 64 20 61 73 20 74 68 65 20 72 6f  s used as the ro
f080: 77 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77  wid for each row
f090: 20 6f 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65   of.** the table
f0a0: 2e 20 20 49 66 20 61 20 74 61 62 6c 65 20 68 61  .  If a table ha
f0b0: 73 20 6e 6f 20 49 4e 54 45 47 45 52 20 50 52 49  s no INTEGER PRI
f0c0: 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 61  MARY KEY, then a
f0d0: 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a   random rowid.**
f0e0: 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 66 6f   is generated fo
f0f0: 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68  r each row of th
f100: 65 20 74 61 62 6c 65 2e 20 20 54 46 5f 48 61 73  e table.  TF_Has
f110: 50 72 69 6d 61 72 79 4b 65 79 20 69 73 20 73 65  PrimaryKey is se
f120: 74 20 69 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c  t if.** the tabl
f130: 65 20 68 61 73 20 61 6e 79 20 50 52 49 4d 41 52  e has any PRIMAR
f140: 59 20 4b 45 59 2c 20 49 4e 54 45 47 45 52 20 6f  Y KEY, INTEGER o
f150: 72 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2a 0a  r otherwise..**.
f160: 2a 2a 20 54 61 62 6c 65 2e 74 6e 75 6d 20 69 73  ** Table.tnum is
f170: 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   the page number
f180: 20 66 6f 72 20 74 68 65 20 72 6f 6f 74 20 42 54   for the root BT
f190: 72 65 65 20 70 61 67 65 20 6f 66 20 74 68 65 20  ree page of the 
f1a0: 74 61 62 6c 65 20 69 6e 20 74 68 65 0a 2a 2a 20  table in the.** 
f1b0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20  database file.  
f1c0: 49 66 20 54 61 62 6c 65 2e 69 44 62 20 69 73 20  If Table.iDb is 
f1d0: 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
f1e0: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
f1f0: 62 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73 71  backend.** in sq
f200: 6c 69 74 65 2e 61 44 62 5b 5d 2e 20 20 30 20 69  lite.aDb[].  0 i
f210: 73 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64  s for the main d
f220: 61 74 61 62 61 73 65 20 61 6e 64 20 31 20 69 73  atabase and 1 is
f230: 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20 74 68   for the file th
f240: 61 74 0a 2a 2a 20 68 6f 6c 64 73 20 74 65 6d 70  at.** holds temp
f250: 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64  orary tables and
f260: 20 69 6e 64 69 63 65 73 2e 20 20 49 66 20 54 46   indices.  If TF
f270: 5f 45 70 68 65 6d 65 72 61 6c 20 69 73 20 73 65  _Ephemeral is se
f280: 74 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 74 61  t.** then the ta
f290: 62 6c 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ble is stored in
f2a0: 20 61 20 66 69 6c 65 20 74 68 61 74 20 69 73 20   a file that is 
f2b0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
f2c0: 6c 65 74 65 64 0a 2a 2a 20 77 68 65 6e 20 74 68  leted.** when th
f2d0: 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 74 6f  e VDBE cursor to
f2e0: 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 63 6c   the table is cl
f2f0: 6f 73 65 64 2e 20 20 49 6e 20 74 68 69 73 20 63  osed.  In this c
f300: 61 73 65 20 54 61 62 6c 65 2e 74 6e 75 6d 20 0a  ase Table.tnum .
f310: 2a 2a 20 72 65 66 65 72 73 20 56 44 42 45 20 63  ** refers VDBE c
f320: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 74 68 61  ursor number tha
f330: 74 20 68 6f 6c 64 73 20 74 68 65 20 74 61 62 6c  t holds the tabl
f340: 65 20 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f 20 74  e open, not to t
f350: 68 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20  he root.** page 
f360: 6e 75 6d 62 65 72 2e 20 20 54 72 61 6e 73 69 65  number.  Transie
f370: 6e 74 20 74 61 62 6c 65 73 20 61 72 65 20 75 73  nt tables are us
f380: 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 72  ed to hold the r
f390: 65 73 75 6c 74 73 20 6f 66 20 61 0a 2a 2a 20 73  esults of a.** s
f3a0: 75 62 2d 71 75 65 72 79 20 74 68 61 74 20 61 70  ub-query that ap
f3b0: 70 65 61 72 73 20 69 6e 73 74 65 61 64 20 6f 66  pears instead of
f3c0: 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20 6e 61   a real table na
f3d0: 6d 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  me in the FROM c
f3e0: 6c 61 75 73 65 20 0a 2a 2a 20 6f 66 20 61 20 53  lause .** of a S
f3f0: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
f400: 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65  .*/.struct Table
f410: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
f420: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ;         /* Nam
f430: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f  e of the table o
f440: 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75  r view */.  Colu
f450: 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20  mn *aCol;       
f460: 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
f470: 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
f480: 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49  n */.  Index *pI
f490: 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c  ndex;       /* L
f4a0: 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78  ist of SQL index
f4b0: 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65  es on this table
f4c0: 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  . */.  Select *p
f4d0: 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e  Select;     /* N
f4e0: 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20  ULL for tables. 
f4f0: 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e   Points to defin
f500: 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e  ition if a view.
f510: 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65   */.  FKey *pFKe
f520: 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  y;         /* Li
f530: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c  nked list of all
f540: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e   foreign keys in
f550: 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
f560: 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
f570: 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
f580: 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
f590: 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
f5a0: 6c 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  lumn */.#ifndef 
f5b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43  SQLITE_OMIT_CHEC
f5c0: 4b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43  K.  ExprList *pC
f5d0: 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20  heck;    /* All 
f5e0: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
f5f0: 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4c 6f  s */.#endif.  Lo
f600: 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b  gEst nRowLogEst;
f610: 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
f620: 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20  rows in table - 
f630: 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74  from sqlite_stat
f640: 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  1 table */.  int
f650: 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20   tnum;          
f660: 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20    /* Root BTree 
f670: 6e 6f 64 65 20 66 6f 72 20 74 68 69 73 20 74 61  node for this ta
f680: 62 6c 65 20 28 73 65 65 20 6e 6f 74 65 20 61 62  ble (see note ab
f690: 6f 76 65 29 20 2a 2f 0a 20 20 69 31 36 20 69 50  ove) */.  i16 iP
f6a0: 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Key;           /
f6b0: 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76  * If not negativ
f6c0: 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65  e, use aCol[iPKe
f6d0: 79 5d 20 61 73 20 74 68 65 20 70 72 69 6d 61 72  y] as the primar
f6e0: 79 20 6b 65 79 20 2a 2f 0a 20 20 69 31 36 20 6e  y key */.  i16 n
f6f0: 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
f700: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
f710: 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62  umns in this tab
f720: 6c 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66  le */.  u16 nRef
f730: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
f740: 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
f750: 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65  rs to this Table
f760: 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54   */.  LogEst szT
f770: 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73  abRow;     /* Es
f780: 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20  timated size of 
f790: 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20 69  each table row i
f7a0: 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66 64 65  n bytes */.#ifde
f7b0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
f7c0: 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73  COSTMULT.  LogEs
f7d0: 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20  t costMult;     
f7e0: 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69  /* Cost multipli
f7f0: 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74 68 69  er for using thi
f800: 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69  s table */.#endi
f810: 66 0a 20 20 75 38 20 74 61 62 46 6c 61 67 73 3b  f.  u8 tabFlags;
f820: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
f830: 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20   of TF_* values 
f840: 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b  */.  u8 keyConf;
f850: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61            /* Wha
f860: 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20  t to do in case 
f870: 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f  of uniqueness co
f880: 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20  nflict on iPKey 
f890: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
f8a0: 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
f8b0: 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66  E.  int addColOf
f8c0: 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73  fset;    /* Offs
f8d0: 65 74 20 69 6e 20 43 52 45 41 54 45 20 54 41 42  et in CREATE TAB
f8e0: 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61  LE stmt to add a
f8f0: 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23   new column */.#
f900: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
f910: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
f920: 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f  LTABLE.  int nMo
f930: 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a  duleArg;      /*
f940: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
f950: 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75  ents to the modu
f960: 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  le */.  char **a
f970: 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20  zModuleArg;  /* 
f980: 54 65 78 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75  Text of all modu
f990: 6c 65 20 61 72 67 73 2e 20 5b 30 5d 20 69 73 20  le args. [0] is 
f9a0: 6d 6f 64 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20  module name */. 
f9b0: 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65   VTable *pVTable
f9c0: 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  ;     /* List of
f9d0: 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e   VTable objects.
f9e0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69   */.#endif.  Tri
f9f0: 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
fa00: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69    /* List of tri
fa10: 67 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20  ggers stored in 
fa20: 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68  pSchema */.  Sch
fa30: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
fa40: 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74    /* Schema that
fa50: 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74   contains this t
fa60: 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20  able */.  Table 
fa70: 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f  *pNextZombie;  /
fa80: 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61  * Next on the Pa
fa90: 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c  rse.pZombieTab l
faa0: 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
fab0: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
fac0: 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61  for Table.tabFla
fad0: 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  gs..*/.#define T
fae0: 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20  F_Readonly      
faf0: 20 20 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61    0x01    /* Rea
fb00: 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61  d-only system ta
fb10: 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
fb20: 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20  F_Ephemeral     
fb30: 20 20 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20    0x02    /* An 
fb40: 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  ephemeral table 
fb50: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61  */.#define TF_Ha
fb60: 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78  sPrimaryKey   0x
fb70: 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68  04    /* Table h
fb80: 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79  as a primary key
fb90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41   */.#define TF_A
fba0: 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30  utoincrement   0
fbb0: 78 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65  x08    /* Intege
fbc0: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73  r primary key is
fbd0: 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a   autoincrement *
fbe0: 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72  /.#define TF_Vir
fbf0: 74 75 61 6c 20 20 20 20 20 20 20 20 20 30 78 31  tual         0x1
fc00: 30 20 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72  0    /* Is a vir
fc10: 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  tual table */.#d
fc20: 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74  efine TF_Without
fc30: 52 6f 77 69 64 20 20 20 20 30 78 32 30 20 20 20  Rowid    0x20   
fc40: 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 20 75 73 65   /* No rowid use
fc50: 64 2e 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69  d. PRIMARY KEY i
fc60: 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 0a 0a 2f  s the key */.../
fc70: 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65  *.** Test to see
fc80: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
fc90: 61 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72  a table is a vir
fca0: 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69  tual table.  Thi
fcb0: 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20  s is.** done as 
fcc0: 61 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20  a macro so that 
fcd0: 69 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d  it will be optim
fce0: 69 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69  ized out when vi
fcf0: 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73  rtual.** table s
fd00: 75 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65  upport is omitte
fd10: 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64  d from the build
fd20: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
fd30: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
fd40: 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20  TABLE.#  define 
fd50: 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
fd60: 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67    (((X)->tabFlag
fd70: 73 20 26 20 54 46 5f 56 69 72 74 75 61 6c 29 21  s & TF_Virtual)!
fd80: 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73  =0).#  define Is
fd90: 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
fda0: 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
fdb0: 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
fdc0: 29 21 3d 30 29 0a 23 65 6c 73 65 0a 23 20 20 64  )!=0).#else.#  d
fdd0: 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28  efine IsVirtual(
fde0: 58 29 20 20 20 20 20 20 30 0a 23 20 20 64 65 66  X)      0.#  def
fdf0: 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  ine IsHiddenColu
fe00: 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a  mn(X) 0.#endif..
fe10: 2f 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62 6c  /* Does the tabl
fe20: 65 20 68 61 76 65 20 61 20 72 6f 77 69 64 20 2a  e have a rowid *
fe30: 2f 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f 77  /.#define HasRow
fe40: 69 64 28 58 29 20 20 20 20 20 28 28 28 58 29 2d  id(X)     (((X)-
fe50: 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 57  >tabFlags & TF_W
fe60: 69 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29  ithoutRowid)==0)
fe70: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72  ../*.** Each for
fe80: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
fe90: 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  int is an instan
fea0: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
feb0: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
fec0: 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b  *.** A foreign k
fed0: 65 79 20 69 73 20 61 73 73 6f 63 69 61 74 65 64  ey is associated
fee0: 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73   with two tables
fef0: 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61  .  The "from" ta
ff00: 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61  ble is.** the ta
ff10: 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
ff20: 73 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  s the REFERENCES
ff30: 20 63 6c 61 75 73 65 20 74 68 61 74 20 63 72 65   clause that cre
ff40: 61 74 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e  ates the foreign
ff50: 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74  .** key.  The "t
ff60: 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68 65 20  o" table is the 
ff70: 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61  table that is na
ff80: 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46 45 52  med in the REFER
ff90: 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a  ENCES clause..**
ffa0: 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65   Consider this e
ffb0: 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20  xample:.**.**   
ffc0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65    CREATE TABLE e
ffd0: 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49  x1(.**       a I
ffe0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
fff0: 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49  EY,.**       b I
10000 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e  NTEGER CONSTRAIN
10010 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53  T fk1 REFERENCES
10020 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29   ex2(x).**     )
10030 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65  ;.**.** For fore
10040 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74  ign key "fk1", t
10050 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73  he from-table is
10060 20 22 65 78 31 22 20 61 6e 64 20 74 68 65 20 74   "ex1" and the t
10070 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32 22  o-table is "ex2"
10080 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74 20  ..** Equivalent 
10090 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  names:.**.**    
100a0 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63   from-table == c
100b0 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20  hild-table.**   
100c0 20 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20      to-table == 
100d0 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a  parent-table.**.
100e0 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e 43  ** Each REFERENC
100f0 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61  ES clause genera
10100 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20  tes an instance 
10110 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
10120 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68   structure.** wh
10130 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64 20  ich is attached 
10140 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  to the from-tabl
10150 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65  e.  The to-table
10160 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20   need not exist 
10170 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d  when.** the from
10180 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65  -table is create
10190 64 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e 63  d.  The existenc
101a0 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c  e of the to-tabl
101b0 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64  e is not checked
101c0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74  ..**.** The list
101d0 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74 73 20   of all parents 
101e0 66 6f 72 20 63 68 69 6c 64 20 54 61 62 6c 65 20  for child Table 
101f0 58 20 69 73 20 68 65 6c 64 20 61 74 20 58 2e 70  X is held at X.p
10200 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69  FKey..**.** A li
10210 73 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72  st of all childr
10220 65 6e 20 66 6f 72 20 61 20 74 61 62 6c 65 20 6e  en for a table n
10230 61 6d 65 64 20 5a 20 28 77 68 69 63 68 20 6d 69  amed Z (which mi
10240 67 68 74 20 6e 6f 74 20 65 76 65 6e 20 65 78 69  ght not even exi
10250 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69  st).** is held i
10260 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79 48 61 73  n Schema.fkeyHas
10270 68 20 77 69 74 68 20 61 20 68 61 73 68 20 6b 65  h with a hash ke
10280 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63  y of Z..*/.struc
10290 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65  t FKey {.  Table
102a0 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20   *pFrom;     /* 
102b0 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67  Table containing
102c0 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
102d0 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69  clause (aka: Chi
102e0 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  ld) */.  FKey *p
102f0 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65  NextFrom;  /* Ne
10300 78 74 20 46 4b 65 79 20 77 69 74 68 20 74 68 65  xt FKey with the
10310 20 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20   same in pFrom. 
10320 4e 65 78 74 20 70 61 72 65 6e 74 20 6f 66 20 70  Next parent of p
10330 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a  From */.  char *
10340 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  zTo;        /* N
10350 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61  ame of table tha
10360 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73  t the key points
10370 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74   to (aka: Parent
10380 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65  ) */.  FKey *pNe
10390 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74  xtTo;    /* Next
103a0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a   with the same z
103b0 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64 20 6f  To. Next child o
103c0 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79  f zTo. */.  FKey
103d0 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a   *pPrevTo;    /*
103e0 20 50 72 65 76 69 6f 75 73 20 77 69 74 68 20 74   Previous with t
103f0 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20  he same zTo */. 
10400 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20   int nCol;      
10410 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
10420 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
10430 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20  key */.  /* EV: 
10440 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f  R-30323-21917 */
10450 0a 20 20 75 38 20 69 73 44 65 66 65 72 72 65 64  .  u8 isDeferred
10460 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20  ;       /* True 
10470 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68  if constraint ch
10480 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72  ecking is deferr
10490 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a  ed till COMMIT *
104a0 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32  /.  u8 aAction[2
104b0 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20  ];        /* ON 
104c0 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50  DELETE and ON UP
104d0 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65  DATE actions, re
104e0 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20  spectively */.  
104f0 54 72 69 67 67 65 72 20 2a 61 70 54 72 69 67 67  Trigger *apTrigg
10500 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72  er[2];/* Trigger
10510 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20  s for aAction[] 
10520 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  actions */.  str
10530 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20  uct sColMap {   
10540 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66     /* Mapping of
10550 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f   columns in pFro
10560 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  m to columns in 
10570 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  zTo */.    int i
10580 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 20 20  From;           
10590 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c   /* Index of col
105a0 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a  umn in pFrom */.
105b0 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20      char *zCol; 
105c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
105d0 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a  e of column in z
105e0 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73 65  To.  If NULL use
105f0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a   PRIMARY KEY */.
10600 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20    } aCol[1];    
10610 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65          /* One e
10620 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66  ntry for each of
10630 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f   nCol columns */
10640 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74  .};../*.** SQLit
10650 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20  e supports many 
10660 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
10670 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73  o resolve a cons
10680 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e  traint.** error.
10690 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65    ROLLBACK proce
106a0 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74  ssing means that
106b0 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
106c0 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65  olation.** cause
106d0 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  s the operation 
106e0 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66 61  in process to fa
106f0 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63  il and for the c
10700 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
10710 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c  on.** to be roll
10720 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54 20  ed back.  ABORT 
10730 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
10740 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
10750 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69  n process.** fai
10760 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f 72  ls and any prior
10770 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74 68   changes from th
10780 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e  at one operation
10790 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74 2c   are backed out,
107a0 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61 6e  .** but the tran
107b0 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72  saction is not r
107c0 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41 49  olled back.  FAI
107d0 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  L processing mea
107e0 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f  ns that.** the o
107f0 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67  peration in prog
10800 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20 72  ress stops and r
10810 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20  eturns an error 
10820 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f 72  code.  But prior
10830 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65 20  .** changes due 
10840 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72  to the same oper
10850 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61  ation are not ba
10860 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20  cked out and no 
10870 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75  rollback.** occu
10880 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e  rs.  IGNORE mean
10890 73 20 74 68 61 74 20 74 68 65 20 70 61 72 74 69  s that the parti
108a0 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20 63  cular row that c
108b0 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74 72  aused the constr
108c0 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73  aint.** error is
108d0 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72   not inserted or
108e0 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63 65   updated.  Proce
108f0 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20  ssing continues 
10900 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20  and no error.** 
10910 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52 45  is returned.  RE
10920 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61 74  PLACE means that
10930 20 70 72 65 65 78 69 73 74 69 6e 67 20 64 61 74   preexisting dat
10940 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74 20  abase rows that 
10950 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51  caused.** a UNIQ
10960 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  UE constraint vi
10970 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f  olation are remo
10980 76 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20  ved so that the 
10990 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a  new insert or.**
109a0 20 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f 63   update can proc
109b0 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67  eed.  Processing
109c0 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e   continues and n
109d0 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72  o error is repor
109e0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52  ted..**.** RESTR
109f0 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e  ICT, SETNULL, an
10a00 64 20 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e  d CASCADE action
10a10 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20  s apply only to 
10a20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a  foreign keys..**
10a30 20 52 45 53 54 52 49 43 54 20 69 73 20 74 68 65   RESTRICT is the
10a40 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20 66   same as ABORT f
10a50 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f 72  or IMMEDIATE for
10a60 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74 68  eign keys and th
10a70 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c  e.** same as ROL
10a80 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52 52  LBACK for DEFERR
10a90 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c  ED keys.  SETNUL
10aa0 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  L means that the
10ab0 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20   foreign.** key 
10ac0 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20  is set to NULL. 
10ad0 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20 74   CASCADE means t
10ae0 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72 20  hat a DELETE or 
10af0 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a  UPDATE of the.**
10b00 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c   referenced tabl
10b10 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67 61  e row is propaga
10b20 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f 77  ted into the row
10b30 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 0a   that holds the.
10b40 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a  ** foreign key..
10b50 2a 2a 20 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ** .** The follo
10b60 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61  wing symbolic va
10b70 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 74 6f  lues are used to
10b80 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 74 79   record which ty
10b90 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20  pe.** of action 
10ba0 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66  to take..*/.#def
10bb0 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20  ine OE_None     
10bc0 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20  0   /* There is 
10bd0 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f  no constraint to
10be0 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e   check */.#defin
10bf0 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20  e OE_Rollback 1 
10c00 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70    /* Fail the op
10c10 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c  eration and roll
10c20 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63  back the transac
10c30 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
10c40 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20  OE_Abort    2   
10c50 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e  /* Back out chan
10c60 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f  ges but do no ro
10c70 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69  llback transacti
10c80 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  on */.#define OE
10c90 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a  _Fail     3   /*
10ca0 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74   Stop the operat
10cb0 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c  ion but leave al
10cc0 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20  l prior changes 
10cd0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67  */.#define OE_Ig
10ce0 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67  nore   4   /* Ig
10cf0 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20  nore the error. 
10d00 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e  Do not do the IN
10d10 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a  SERT or UPDATE *
10d20 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70  /.#define OE_Rep
10d30 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c  lace  5   /* Del
10d40 65 74 65 20 65 78 69 73 74 69 6e 67 20 72 65 63  ete existing rec
10d50 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53  ord, then do INS
10d60 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f  ERT or UPDATE */
10d70 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 73  ..#define OE_Res
10d80 74 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f  trict 6   /* OE_
10d90 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44 49  Abort for IMMEDI
10da0 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b  ATE, OE_Rollback
10db0 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a 2f   for DEFERRED */
10dc0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e  .#define OE_SetN
10dd0 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74 20  ull  7   /* Set 
10de0 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  the foreign key 
10df0 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f  value to NULL */
10e00 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 44  .#define OE_SetD
10e10 66 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74 20  flt  8   /* Set 
10e20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  the foreign key 
10e30 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65 66  value to its def
10e40 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ault */.#define 
10e50 4f 45 5f 43 61 73 63 61 64 65 20 20 39 20 20 20  OE_Cascade  9   
10e60 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20 63  /* Cascade the c
10e70 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69  hanges */..#defi
10e80 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 31  ne OE_Default  1
10e90 30 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65  0  /* Do whateve
10ea0 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  r the default ac
10eb0 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a  tion is */.../*.
10ec0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
10ed0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
10ee0 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73  structure is pas
10ef0 73 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74  sed as the first
10f00 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  .** argument to 
10f10 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f  sqlite3VdbeKeyCo
10f20 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75 73 65  mpare and is use
10f30 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65  d to control the
10f40 20 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20   .** comparison 
10f50 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78  of the two index
10f60 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74   keys..**.** Not
10f70 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65  e that aSortOrde
10f80 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20  r[] and aColl[] 
10f90 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c  have nField+1 sl
10fa0 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61  ots.  There.** a
10fb0 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20  re nField slots 
10fc0 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  for the columns 
10fd0 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e  of an index then
10fe0 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a   one extra slot.
10ff0 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  ** for the rowid
11000 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a   at the end..*/.
11010 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b  struct KeyInfo {
11020 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20  .  u32 nRef;    
11030 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
11040 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20 74   of references t
11050 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f  o this KeyInfo o
11060 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e  bject */.  u8 en
11070 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
11080 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
11090 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  - one of the SQL
110a0 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20  ITE_UTF* values 
110b0 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
110c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
110d0 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e  er of key column
110e0 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a  s in the index *
110f0 2f 0a 20 20 75 31 36 20 6e 58 46 69 65 6c 64 3b  /.  u16 nXField;
11100 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
11110 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 62 65 79  r of columns bey
11120 6f 6e 64 20 74 68 65 20 6b 65 79 20 63 6f 6c 75  ond the key colu
11130 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  mns */.  sqlite3
11140 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
11150 54 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  The database con
11160 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  nection */.  u8 
11170 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  *aSortOrder;    
11180 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66   /* Sort order f
11190 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20  or each column. 
111a0 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43  */.  CollSeq *aC
111b0 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c  oll[1];  /* Coll
111c0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66  ating sequence f
111d0 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20  or each term of 
111e0 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f  the key */.};../
111f0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
11200 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
11210 67 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  g structure hold
11220 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  s information ab
11230 6f 75 74 20 61 0a 2a 2a 20 73 69 6e 67 6c 65 20  out a.** single 
11240 69 6e 64 65 78 20 72 65 63 6f 72 64 20 74 68 61  index record tha
11250 74 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65  t has already be
11260 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e  en parsed out in
11270 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a  to individual.**
11280 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41   values..**.** A
11290 20 72 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62   record is an ob
112a0 6a 65 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69  ject that contai
112b0 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66  ns one or more f
112c0 69 65 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a  ields of data..*
112d0 2a 20 52 65 63 6f 72 64 73 20 61 72 65 20 75 73  * Records are us
112e0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
112f0 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62  content of a tab
11300 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74  le row and to st
11310 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f  ore.** the key o
11320 66 20 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62  f an index.  A b
11330 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20  lob encoding of 
11340 61 20 72 65 63 6f 72 64 20 69 73 20 63 72 65 61  a record is crea
11350 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50  ted by.** the OP
11360 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f  _MakeRecord opco
11370 64 65 20 6f 66 20 74 68 65 20 56 44 42 45 20 61  de of the VDBE a
11380 6e 64 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c  nd is disassembl
11390 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f  ed by the.** OP_
113a0 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a  Column opcode..*
113b0 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
113c0 75 72 65 20 68 6f 6c 64 73 20 61 20 72 65 63 6f  ure holds a reco
113d0 72 64 20 74 68 61 74 20 68 61 73 20 61 6c 72 65  rd that has alre
113e0 61 64 79 20 62 65 65 6e 20 64 69 73 61 73 73 65  ady been disasse
113f0 6d 62 6c 65 64 0a 2a 2a 20 69 6e 74 6f 20 69 74  mbled.** into it
11400 73 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 66 69  s constituent fi
11410 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  elds..**.** The 
11420 72 31 20 61 6e 64 20 72 32 20 6d 65 6d 62 65 72  r1 and r2 member
11430 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f   variables are o
11440 6e 6c 79 20 75 73 65 64 20 62 79 20 74 68 65 20  nly used by the 
11450 6f 70 74 69 6d 69 7a 65 64 20 63 6f 6d 70 61 72  optimized compar
11460 69 73 6f 6e 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  ison.** function
11470 73 20 76 64 62 65 52 65 63 6f 72 64 43 6f 6d 70  s vdbeRecordComp
11480 61 72 65 49 6e 74 28 29 20 61 6e 64 20 76 64 62  areInt() and vdb
11490 65 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 53 74  eRecordCompareSt
114a0 72 69 6e 67 28 29 2e 0a 2a 2f 0a 73 74 72 75 63  ring()..*/.struc
114b0 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
114c0 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b   {.  KeyInfo *pK
114d0 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c  eyInfo;  /* Coll
114e0 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f  ation and sort-o
114f0 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  rder information
11500 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64   */.  u16 nField
11510 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
11520 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
11530 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69  n apMem[] */.  i
11540 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20  8 default_rc;   
11550 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e     /* Comparison
11560 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20   result if keys 
11570 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75  are equal */.  u
11580 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20  8 errCode;      
11590 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65     /* Error dete
115a0 63 74 65 64 20 62 79 20 78 52 65 63 6f 72 64 43  cted by xRecordC
115b0 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54 20  ompare (CORRUPT 
115c0 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 4d  or NOMEM) */.  M
115d0 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20  em *aMem;       
115e0 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a     /* Values */.
115f0 20 20 69 6e 74 20 72 31 3b 20 20 20 20 20 20 20    int r1;       
11600 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
11610 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73  o return if (lhs
11620 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20 69 6e 74   > rhs) */.  int
11630 20 72 32 3b 20 20 20 20 20 20 20 20 20 20 20 20   r2;            
11640 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
11650 75 72 6e 20 69 66 20 28 72 68 73 20 3c 20 6c 68  urn if (rhs < lh
11660 73 29 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a  s) */.};.../*.**
11670 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20   Each SQL index 
11680 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
11690 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a  n memory by an.*
116a0 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
116b0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
116c0 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  cture..**.** The
116d0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
116e0 74 61 62 6c 65 20 74 68 61 74 20 61 72 65 20 74  table that are t
116f0 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61 72 65  o be indexed are
11700 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79   described.** by
11710 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20   the aiColumn[] 
11720 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74  field of this st
11730 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78  ructure.  For ex
11740 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a  ample, suppose.*
11750 2a 20 77 65 20 68 61 76 65 20 74 68 65 20 66 6f  * we have the fo
11760 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e  llowing table an
11770 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20  d index:.**.**  
11780 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
11790 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69  Ex1(c1 int, c2 i
117a0 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a  nt, c3 text);.**
117b0 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
117c0 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c  X Ex2 ON Ex1(c3,
117d0 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  c1);.**.** In th
117e0 65 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72  e Table structur
117f0 65 20 64 65 73 63 72 69 62 69 6e 67 20 45 78 31  e describing Ex1
11800 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73  , nCol==3 becaus
11810 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74  e there are.** t
11820 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  hree columns in 
11830 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74  the table.  In t
11840 68 65 20 49 6e 64 65 78 20 73 74 72 75 63 74 75  he Index structu
11850 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a  re describing.**
11860 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32   Ex2, nColumn==2
11870 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20   since 2 of the 
11880 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31  3 columns of Ex1
11890 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a   are indexed..**
118a0 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69   The value of ai
118b0 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d  Column is {2, 0}
118c0 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d  .  aiColumn[0]==
118d0 32 20 62 65 63 61 75 73 65 20 74 68 65 20 0a 2a  2 because the .*
118e0 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74  * first column t
118f0 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 33  o be indexed (c3
11900 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  ) has an index o
11910 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b  f 2 in Ex1.aCol[
11920 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64  ]..** The second
11930 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e   column to be in
11940 64 65 78 65 64 20 28 63 31 29 20 68 61 73 20 61  dexed (c1) has a
11950 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a  n index of 0 in.
11960 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68  ** Ex1.aCol[], h
11970 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d  ence Ex2.aiColum
11980 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54  n[1]==0..**.** T
11990 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  he Index.onError
119a0 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65   field determine
119b0 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  s whether or not
119c0 20 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c   the indexed col
119d0 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20  umns.** must be 
119e0 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74 20  unique and what 
119f0 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61 72  to do if they ar
11a00 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64  e not.  When Ind
11a10 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f  ex.onError=OE_No
11a20 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20  ne,.** it means 
11a30 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e  this is not a un
11a40 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68  ique index.  Oth
11a50 65 72 77 69 73 65 20 69 74 20 69 73 20 61 20 75  erwise it is a u
11a60 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61  nique index.** a
11a70 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  nd the value of 
11a80 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e  Index.onError in
11a90 64 69 63 61 74 65 20 74 68 65 20 77 68 69 63 68  dicate the which
11aa0 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
11ab0 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74  tion .** algorit
11ac0 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65  hm to employ whe
11ad0 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74  never an attempt
11ae0 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65   is made to inse
11af0 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a  rt a non-unique.
11b00 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73  ** element..*/.s
11b10 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20  truct Index {.  
11b20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
11b30 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
11b40 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a   of this index *
11b50 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d  /.  i16 *aiColum
11b60 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
11b70 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72  Which columns ar
11b80 65 20 75 73 65 64 20 62 79 20 74 68 69 73 20 69  e used by this i
11b90 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20 30 20  ndex.  1st is 0 
11ba0 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69 52  */.  LogEst *aiR
11bb0 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a  owLogEst;     /*
11bc0 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45   From ANALYZE: E
11bd0 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65  st. rows selecte
11be0 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e  d by each column
11bf0 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
11c00 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ble;           /
11c10 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20  * The SQL table 
11c20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f  being indexed */
11c30 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66  .  char *zColAff
11c40 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53  ;           /* S
11c50 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74  tring defining t
11c60 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65  he affinity of e
11c70 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
11c80 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20  Index *pNext;   
11c90 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
11ca0 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63  next index assoc
11cb0 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73  iated with the s
11cc0 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53  ame table */.  S
11cd0 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
11ce0 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d          /* Schem
11cf0 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69  a containing thi
11d00 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20  s index */.  u8 
11d10 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  *aSortOrder;    
11d20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63        /* for eac
11d30 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d  h column: True==
11d40 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43  DESC, False==ASC
11d50 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43   */.  char **azC
11d60 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  oll;           /
11d70 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61  * Array of colla
11d80 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61  tion sequence na
11d90 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f  mes for index */
11da0 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74 49 64  .  Expr *pPartId
11db0 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a 20 57  xWhere;     /* W
11dc0 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20  HERE clause for 
11dd0 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65 73 20  partial indices 
11de0 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20  */.  int tnum;  
11df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11e00 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e   DB Page contain
11e10 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73  ing root of this
11e20 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45   index */.  LogE
11e30 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20  st szIdxRow;    
11e40 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
11e50 64 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69  d average row si
11e60 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  ze in bytes */. 
11e70 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20   u16 nKeyCol;   
11e80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
11e90 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66  ber of columns f
11ea0 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a  orming the key *
11eb0 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b  /.  u16 nColumn;
11ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11ed0 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
11ee0 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
11ef0 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e  index */.  u8 on
11f00 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20  Error;          
11f10 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c      /* OE_Abort,
11f20 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52   OE_Ignore, OE_R
11f30 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f  eplace, or OE_No
11f40 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ne */.  unsigned
11f50 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20   idxType:2;     
11f60 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32   /* 1==UNIQUE, 2
11f70 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30  ==PRIMARY KEY, 0
11f80 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a  ==CREATE INDEX *
11f90 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e  /.  unsigned bUn
11fa0 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20  ordered:1;   /* 
11fb0 55 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 66  Use this index f
11fc0 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72  or == or IN quer
11fd0 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e  ies only */.  un
11fe0 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75  signed uniqNotNu
11ff0 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69  ll:1;  /* True i
12000 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54  f UNIQUE and NOT
12010 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f   NULL for all co
12020 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67  lumns */.  unsig
12030 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b  ned isResized:1;
12040 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72      /* True if r
12050 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74  esizeIndexObject
12060 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  () has been call
12070 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ed */.  unsigned
12080 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20   isCovering:1;  
12090 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73   /* True if this
120a0 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69   is a covering i
120b0 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ndex */.  unsign
120c0 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b  ed noSkipScan:1;
120d0 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79     /* Do not try
120e0 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61   to use skip-sca
120f0 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 23 69 66  n if true */.#if
12100 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
12110 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
12120 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20  .  int nSample; 
12130 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
12140 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74  umber of element
12150 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a  s in aSample[] *
12160 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43  /.  int nSampleC
12170 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ol;          /* 
12180 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61 6d  Size of IndexSam
12190 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73  ple.anEq[] and s
121a0 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  o on */.  tRowcn
121b0 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20 20  t *aAvgEq;      
121c0 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e 45     /* Average nE
121d0 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65 79  q values for key
121e0 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65  s not in aSample
121f0 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c   */.  IndexSampl
12200 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f  e *aSample;    /
12210 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65  * Samples of the
12220 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a   left-most key *
12230 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52  /.  tRowcnt *aiR
12240 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20  owEst;       /* 
12250 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20  Non-logarithmic 
12260 73 74 61 74 31 20 64 61 74 61 20 66 6f 72 20 74  stat1 data for t
12270 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74  his index */.  t
12280 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b  Rowcnt nRowEst0;
12290 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c          /* Non-l
122a0 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d 62 65  ogarithmic numbe
122b0 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
122c0 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66   index */.#endif
122d0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
122e0 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49 6e  ed values for In
122f0 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23  dex.idxType.*/.#
12300 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
12310 58 54 59 50 45 5f 41 50 50 44 45 46 20 20 20 20  XTYPE_APPDEF    
12320 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65 64    0   /* Created
12330 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 49 4e   using CREATE IN
12340 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  DEX */.#define S
12350 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55 4e  QLITE_IDXTYPE_UN
12360 49 51 55 45 20 20 20 20 20 20 31 20 20 20 2f 2a  IQUE      1   /*
12370 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e   Implements a UN
12380 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
12390 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
123a0 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52  E_IDXTYPE_PRIMAR
123b0 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73 20  YKEY  2   /* Is 
123c0 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
123d0 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  for the table */
123e0 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65  ../* Return true
123f0 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61   if index X is a
12400 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64   PRIMARY KEY ind
12410 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73  ex */.#define Is
12420 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28  PrimaryKeyIndex(
12430 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54 79 70  X)  ((X)->idxTyp
12440 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54 59 50  e==SQLITE_IDXTYP
12450 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f  E_PRIMARYKEY)../
12460 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
12470 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 55 4e   index X is a UN
12480 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64  IQUE index */.#d
12490 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65 49 6e  efine IsUniqueIn
124a0 64 65 78 28 58 29 20 20 20 20 20 20 28 28 58 29  dex(X)      ((X)
124b0 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f  ->onError!=OE_No
124c0 6e 65 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  ne)../*.** Each 
124d0 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e  sample stored in
124e0 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
124f0 33 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65  3 table is repre
12500 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
12510 20 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72   .** using a str
12520 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74  ucture of this t
12530 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65  ype.  See docume
12540 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74  ntation at the t
12550 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61  op of the.** ana
12560 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69  lyze.c source fi
12570 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  le for additiona
12580 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
12590 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53 61  /.struct IndexSa
125a0 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70  mple {.  void *p
125b0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f  ;          /* Po
125c0 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64  inter to sampled
125d0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
125e0 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   n;            /
125f0 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64  * Size of record
12600 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74   in bytes */.  t
12610 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20  Rowcnt *anEq;   
12620 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
12630 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68  of rows where th
12640 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69  e key equals thi
12650 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
12660 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20  owcnt *anLt;    
12670 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
12680 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79  f rows where key
12690 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
126a0 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
126b0 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20  Rowcnt *anDLt;  
126c0 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
126d0 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73  of distinct keys
126e0 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
126f0 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  sample */.};../*
12700 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63  .** Each token c
12710 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65  oming out of the
12720 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73   lexer is an ins
12730 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73  tance of.** this
12740 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b   structure.  Tok
12750 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65  ens are also use
12760 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20  d as part of an 
12770 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a  expression..**.*
12780 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e  * Note if Token.
12790 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e  z==0 then Token.
127a0 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20  dyn and Token.n 
127b0 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e  are undefined an
127c0 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e  d.** may contain
127d0 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20   random values. 
127e0 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79   Do not make any
127f0 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f   assumptions abo
12800 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20  ut Token.dyn.** 
12810 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e  and Token.n when
12820 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a   Token.z==0..*/.
12830 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20  struct Token {. 
12840 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20   const char *z; 
12850 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74      /* Text of t
12860 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e  he token.  Not N
12870 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20  ULL-terminated! 
12880 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
12890 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65  t n;    /* Numbe
128a0 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  r of characters 
128b0 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f  in this token */
128c0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
128d0 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
128e0 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
128f0 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  s information ne
12900 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
12910 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53  .** code for a S
12920 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61  ELECT that conta
12930 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75  ins aggregate fu
12940 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49  nctions..**.** I
12950 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47  f Expr.op==TK_AG
12960 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41  G_COLUMN or TK_A
12970 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e  GG_FUNCTION then
12980 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69   Expr.pAggInfo i
12990 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  s a.** pointer t
129a0 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
129b0 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c  .  The Expr.iCol
129c0 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65  umn field is the
129d0 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67   index in.** Agg
129e0 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41  Info.aCol[] or A
129f0 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f  ggInfo.aFunc[] o
12a00 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  f information ne
12a10 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
12a20 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61  .** code for tha
12a30 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67  t node..**.** Ag
12a40 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61  gInfo.pGroupBy a
12a50 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63  nd AggInfo.aFunc
12a60 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20  .pExpr point to 
12a70 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68  fields within th
12a80 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65  e.** original Se
12a90 6c 65 63 74 20 73 74 72 75 63 74 75 72 65 20 74  lect structure t
12aa0 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
12ab0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
12ac0 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69  nt.  These.** fi
12ad0 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64  elds do not need
12ae0 20 74 6f 20 62 65 20 66 72 65 65 64 20 77 68 65   to be freed whe
12af0 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  n deallocating t
12b00 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63  he AggInfo struc
12b10 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
12b20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64  AggInfo {.  u8 d
12b30 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20  irectMode;      
12b40 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65      /* Direct re
12b50 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61  ndering mode mea
12b60 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64 69 72  ns take data dir
12b70 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20  ectly.          
12b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b90 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74  ** from source t
12ba0 61 62 6c 65 73 20 72 61 74 68 65 72 20 74 68 61  ables rather tha
12bb0 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74  n from accumulat
12bc0 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53  ors */.  u8 useS
12bd0 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
12be0 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f   /* In direct mo
12bf0 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68  de, reference th
12c00 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
12c10 72 61 74 68 65 72 0a 20 20 20 20 20 20 20 20 20  rather.         
12c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c30 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75   ** than the sou
12c40 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  rce table */.  i
12c50 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20  nt sortingIdx;  
12c60 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
12c70 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
12c80 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
12c90 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
12ca0 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72  PTab;     /* Cur
12cb0 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73  sor number of ps
12cc0 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20  eudo-table */.  
12cd0 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75  int nSortingColu
12ce0 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  mn;     /* Numbe
12cf0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
12d00 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
12d10 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67  x */.  int mnReg
12d20 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f  , mxReg;       /
12d30 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73  * Range of regis
12d40 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  ters allocated f
12d50 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e  or aCol and aFun
12d60 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  c */.  ExprList 
12d70 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f  *pGroupBy;     /
12d80 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63  * The group by c
12d90 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63  lause */.  struc
12da0 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20  t AggInfo_col { 
12db0 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63     /* For each c
12dc0 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f  olumn used in so
12dd0 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20  urce tables */. 
12de0 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
12df0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
12e00 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
12e10 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20     int iTable;  
12e20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
12e30 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
12e40 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
12e50 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c   */.    int iCol
12e60 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
12e70 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
12e80 72 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75  r within the sou
12e90 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
12ea0 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75   int iSorterColu
12eb0 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c  mn;       /* Col
12ec0 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68  umn number in th
12ed0 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
12ee0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b  */.    int iMem;
12ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f00 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  /* Memory locati
12f10 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20  on that acts as 
12f20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20  accumulator */. 
12f30 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
12f40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
12f50 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72  he original expr
12f60 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61  ession */.  } *a
12f70 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75  Col;.  int nColu
12f80 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  mn;            /
12f90 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64  * Number of used
12fa0 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c   entries in aCol
12fb0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63  [] */.  int nAcc
12fc0 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20  umulator;       
12fd0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
12fe0 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74  umns that show t
12ff0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75  hrough to the ou
13000 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20  tput..          
13010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13020 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f  ** Additional co
13030 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f  lumns are used o
13040 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65 72  nly as parameter
13050 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20  s to.           
13060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
13070 2a 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  * aggregate func
13080 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63  tions */.  struc
13090 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b  t AggInfo_func {
130a0 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61     /* For each a
130b0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
130c0 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  n */.    Expr *p
130d0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
130e0 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
130f0 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e  encoding the fun
13100 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e  ction */.    Fun
13110 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20  cDef *pFunc;    
13120 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67        /* The agg
13130 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
13140 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a  implementation *
13150 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20  /.    int iMem; 
13160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13170 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  * Memory locatio
13180 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61  n that acts as a
13190 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20  ccumulator */.  
131a0 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b    int iDistinct;
131b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70             /* Ep
131c0 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73  hemeral table us
131d0 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49  ed to enforce DI
131e0 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61  STINCT */.  } *a
131f0 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e  Func;.  int nFun
13200 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
13210 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
13220 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20  ries in aFunc[] 
13230 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
13240 20 64 61 74 61 74 79 70 65 20 79 6e 56 61 72 20   datatype ynVar 
13250 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65  is a signed inte
13260 67 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62  ger, either 16-b
13270 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a  it or 32-bit..**
13280 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31   Usually it is 1
13290 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66 20  6-bits.  But if 
132a0 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
132b0 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72  BLE_NUMBER is gr
132c0 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32  eater.** than 32
132d0 37 36 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d  767 we have to m
132e0 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20  ake it 32-bit.  
132f0 31 36 2d 62 69 74 20 69 73 20 70 72 65 66 65 72  16-bit is prefer
13300 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69  red because.** i
13310 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f  t uses less memo
13320 72 79 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f  ry in the Expr o
13330 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20  bject, which is 
13340 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65  a big memory use
13350 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20  r.** in systems 
13360 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65  with lots of pre
13370 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
13380 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69  .  And few appli
13390 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20  cations.** need 
133a0 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20  more than about 
133b0 31 30 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c  10 or 20 variabl
133c0 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78  es.  But some ex
133d0 74 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74  treme users want
133e0 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70  .** to have prep
133f0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  ared statements 
13400 77 69 74 68 20 6f 76 65 72 20 33 32 37 36 37 20  with over 32767 
13410 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66  variables, and f
13420 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f  or them.** the o
13430 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62  ption is availab
13440 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74  le (at compile-t
13450 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  ime)..*/.#if SQL
13460 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
13470 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74  _NUMBER<=32767.t
13480 79 70 65 64 65 66 20 69 31 36 20 79 6e 56 61 72  ypedef i16 ynVar
13490 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20  ;.#else.typedef 
134a0 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69  int ynVar;.#endi
134b0 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f  f../*.** Each no
134c0 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  de of an express
134d0 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65  ion in the parse
134e0 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74   tree is an inst
134f0 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
13500 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
13510 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20   Expr.op is the 
13520 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65  opcode. The inte
13530 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e  ger parser token
13540 20 63 6f 64 65 73 20 61 72 65 20 72 65 75 73 65   codes are reuse
13550 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20  d.** as opcodes 
13560 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c  here. For exampl
13570 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 64 65  e, the parser de
13580 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62  fines TK_GE to b
13590 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  e an integer.** 
135a0 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e  code representin
135b0 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61  g the ">=" opera
135c0 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69  tor. This same i
135d0 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73 20 72  nteger code is r
135e0 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72  eused.** to repr
135f0 65 73 65 6e 74 20 74 68 65 20 67 72 65 61 74 65  esent the greate
13600 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d  r-than-or-equal-
13610 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74  to operator in t
13620 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a  he expression.**
13630 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   tree..**.** If 
13640 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
13650 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c  s an SQL literal
13660 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b   (TK_INTEGER, TK
13670 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c  _FLOAT, TK_BLOB,
13680 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e   .** or TK_STRIN
13690 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  G), then Expr.to
136a0 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
136b0 20 74 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c   text of the SQL
136c0 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20   literal. If.** 
136d0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
136e0 73 20 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b  s a variable (TK
136f0 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e  _VARIABLE), then
13700 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
13710 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61 72  ains the .** var
13720 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61  iable name. Fina
13730 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70 72  lly, if the expr
13740 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
13750 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55   function (TK_FU
13760 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e  NCTION),.** then
13770 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
13780 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  ains the name of
13790 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a   the function..*
137a0 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74  *.** Expr.pRight
137b0 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20   and Expr.pLeft 
137c0 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64  are the left and
137d0 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65 73   right subexpres
137e0 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69  sions of a.** bi
137f0 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45  nary operator. E
13800 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61  ither or both ma
13810 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  y be NULL..**.**
13820 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73   Expr.x.pList is
13830 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d   a list of argum
13840 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70 72  ents if the expr
13850 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
13860 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20   function,.** a 
13870 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  CASE expression 
13880 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73  or an IN express
13890 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ion of the form 
138a0 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20  "<lhs> IN (<y>, 
138b0 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70  <z>...)"..** Exp
138c0 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75  r.x.pSelect is u
138d0 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72 65  sed if the expre
138e0 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73  ssion is a sub-s
138f0 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72  elect or an expr
13900 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  ession of.** the
13910 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
13920 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49  (SELECT ...)". I
13930 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65  f the EP_xIsSele
13940 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69 6e  ct bit is set in
13950 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61   the.** Expr.fla
13960 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78  gs mask, then Ex
13970 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
13980 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65  valid. Otherwise
13990 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  , Expr.x.pList i
139a0 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a  s .** valid..**.
139b0 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e  ** An expression
139c0 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20   of the form ID 
139d0 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20  or ID.ID refers 
139e0 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  to a column in a
139f0 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73   table..** For s
13a00 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c  uch expressions,
13a10 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20   Expr.op is set 
13a20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64  to TK_COLUMN and
13a30 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a   Expr.iTable is.
13a40 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63  ** the integer c
13a50 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
13a60 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f  a VDBE cursor po
13a70 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74  inting to that t
13a80 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72  able and.** Expr
13a90 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  .iColumn is the 
13aa0 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f  column number fo
13ab0 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63  r the specific c
13ac0 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a  olumn.  If the.*
13ad0 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  * expression is 
13ae0 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  used as a result
13af0 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65   in an aggregate
13b00 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68   SELECT, then th
13b10 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c  e.** value is al
13b20 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  so stored in the
13b30 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d   Expr.iAgg colum
13b40 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61  n in the aggrega
13b50 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74  te so that.** it
13b60 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64   can be accessed
13b70 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65   after all aggre
13b80 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74  gates are comput
13b90 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ed..**.** If the
13ba0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
13bb0 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62  n unbound variab
13bc0 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65  le marker (a que
13bd0 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63  stion mark .** c
13be0 68 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20  haracter '?' in 
13bf0 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c  the original SQL
13c00 29 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e  ) then the Expr.
13c10 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65  iTable holds the
13c20 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62 65   index .** numbe
13c30 72 20 66 6f 72 20 74 68 61 74 20 76 61 72 69 61  r for that varia
13c40 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ble..**.** If th
13c50 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
13c60 61 20 73 75 62 71 75 65 72 79 20 74 68 65 6e 20  a subquery then 
13c70 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c  Expr.iColumn hol
13c80 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  ds an integer.**
13c90 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
13ca0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
13cb0 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75  result of the su
13cc0 62 71 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a  bquery.  If the.
13cd0 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69 76 65  ** subquery give
13ce0 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73  s a constant res
13cf0 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65  ult, then iTable
13d00 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20   is -1.  If the 
13d10 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65  subquery.** give
13d20 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e  s a different an
13d30 73 77 65 72 20 61 74 20 64 69 66 66 65 72 65 6e  swer at differen
13d40 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73  t times during s
13d50 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73  tatement process
13d60 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62  ing.** then iTab
13d70 6c 65 20 69 73 20 74 68 65 20 61 64 64 72 65 73  le is the addres
13d80 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e  s of a subroutin
13d90 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20  e that computes 
13da0 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a  the subquery..**
13db0 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72 20  .** If the Expr 
13dc0 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f  is of type OP_Co
13dd0 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61  lumn, and the ta
13de0 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63 74  ble it is select
13df0 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61  ing from.** is a
13e00 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74   disk table or t
13e10 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64  he "old.*" pseud
13e20 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54  o-table, then pT
13e30 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ab points to the
13e40 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  .** correspondin
13e50 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69  g table definiti
13e60 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41  on..**.** ALLOCA
13e70 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a  TION NOTES:.**.*
13e80 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63  * Expr objects c
13e90 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20  an use a lot of 
13ea0 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20  memory space in 
13eb0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
13ec0 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64    To.** help red
13ed0 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  uce memory requi
13ee0 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d  rements, sometim
13ef0 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63  es an Expr objec
13f00 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75  t will be.** tru
13f10 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20  ncated.  And to 
13f20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65  reduce the numbe
13f30 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  r of memory allo
13f40 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d  cations, sometim
13f50 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72  es.** two or mor
13f60 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77  e Expr objects w
13f70 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e  ill be stored in
13f80 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79   a single memory
13f90 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20   allocation,.** 
13fa0 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 45 78  together with Ex
13fb0 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67  pr.zToken string
13fc0 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  s..**.** If the 
13fd0 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45  EP_Reduced and E
13fe0 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
13ff0 73 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a  s are set when.*
14000 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74  * an Expr object
14010 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20   is truncated.  
14020 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20  When EP_Reduced 
14030 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c  is set, then all
14040 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78  .** the child Ex
14050 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68  pr objects in th
14060 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64  e Expr.pLeft and
14070 20 45 78 70 72 2e 70 52 69 67 68 74 20 73 75 62   Expr.pRight sub
14080 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e  trees.** are con
14090 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68  tained within th
140a0 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c  e same memory al
140b0 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c  location.  Note,
140c0 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a   however, that.*
140d0 2a 20 74 68 65 20 73 75 62 74 72 65 65 73 20 69  * the subtrees i
140e0 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f  n Expr.x.pList o
140f0 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  r Expr.x.pSelect
14100 20 61 72 65 20 61 6c 77 61 79 73 20 73 65 70 61   are always sepa
14110 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61  rately.** alloca
14120 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20  ted, regardless 
14130 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  of whether or no
14140 74 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20  t EP_Reduced is 
14150 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  set..*/.struct E
14160 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20  xpr {.  u8 op;  
14170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14180 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66  * Operation perf
14190 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f  ormed by this no
141a0 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  de */.  char aff
141b0 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f  inity;         /
141c0 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f  * The affinity o
141d0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20  f the column or 
141e0 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d  0 if not a colum
141f0 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73  n */.  u32 flags
14200 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
14210 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20   Various flags. 
14220 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20   EP_* See below 
14230 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
14240 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20   char *zToken;  
14250 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
14260 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72   value. Zero ter
14270 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75  minated and dequ
14280 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20  oted */.    int 
14290 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20  iValue;         
142a0 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69     /* Non-negati
142b0 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ve integer value
142c0 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20   if EP_IntValue 
142d0 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20  */.  } u;..  /* 
142e0 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f  If the EP_TokenO
142f0 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74 20  nly flag is set 
14300 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
14310 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
14320 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
14330 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
14340 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
14350 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
14360 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
14370 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
14380 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
14390 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
143a0 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  . .  ***********
143b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
143c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
143d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
143e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45  **********/..  E
143f0 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20  xpr *pLeft;     
14400 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75        /* Left su
14410 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20  bnode */.  Expr 
14420 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20 20  *pRight;        
14430 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f    /* Right subno
14440 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  de */.  union {.
14450 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c      ExprList *pL
14460 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d  ist;     /* op =
14470 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c   IN, EXISTS, SEL
14480 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54  ECT, CASE, FUNCT
14490 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a  ION, BETWEEN */.
144a0 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
144b0 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78  ect;     /* EP_x
144c0 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20  IsSelect and op 
144d0 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45  = IN, EXISTS, SE
144e0 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a  LECT */.  } x;..
144f0 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52    /* If the EP_R
14500 65 64 75 63 65 64 20 66 6c 61 67 20 69 73 20 73  educed flag is s
14510 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  et in the Expr.f
14520 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
14530 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73  no.  ** space is
14540 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74   allocated for t
14550 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
14560 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61  this point. An a
14570 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61  ttempt to.  ** a
14580 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20  ccess them will 
14590 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66  result in a segf
145a0 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74  ault or malfunct
145b0 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
145c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
145d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
145e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
145f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23  ************/..#
14600 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58  if SQLITE_MAX_EX
14610 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74  PR_DEPTH>0.  int
14620 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20   nHeight;       
14630 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66      /* Height of
14640 20 74 68 65 20 74 72 65 65 20 68 65 61 64 65 64   the tree headed
14650 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
14660 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54  .#endif.  int iT
14670 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
14680 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
14690 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
146a0 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f  table holding co
146b0 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
146c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
146d0 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65   TK_REGISTER: re
146e0 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20  gister number.  
146f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14700 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49         ** TK_TRI
14710 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20  GGER: 1 -> new, 
14720 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20  0 -> old.       
14730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14740 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79    ** EP_Unlikely
14750 3a 20 20 31 33 34 32 31 37 37 32 38 20 74 69 6d  :  134217728 tim
14760 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f  es likelihood */
14770 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e  .  ynVar iColumn
14780 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f  ;         /* TK_
14790 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69  COLUMN: column i
147a0 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f  ndex.  -1 for ro
147b0 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20  wid..           
147c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
147d0 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61   TK_VARIABLE: va
147e0 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61  riable number (a
147f0 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a  lways >= 1). */.
14800 20 20 69 31 36 20 69 41 67 67 3b 20 20 20 20 20    i16 iAgg;     
14810 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
14820 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49  h entry in pAggI
14830 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d  nfo->aCol[] or -
14840 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31  >aFunc[] */.  i1
14850 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c  6 iRightJoinTabl
14860 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72  e;   /* If EP_Fr
14870 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68  omJoin, the righ
14880 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a  t table of the j
14890 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b  oin */.  u8 op2;
148a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148b0 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20  /* TK_REGISTER: 
148c0 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f  original value o
148d0 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20  f Expr.op.      
148e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148f0 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     ** TK_COLUMN:
14900 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35   the value of p5
14910 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20   for OP_Column. 
14920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14930 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47          ** TK_AG
14940 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74  G_FUNCTION: nest
14950 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41  ing depth */.  A
14960 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f  ggInfo *pAggInfo
14970 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79  ;     /* Used by
14980 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61   TK_AGG_COLUMN a
14990 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  nd TK_AGG_FUNCTI
149a0 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ON */.  Table *p
149b0 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Tab;           /
149c0 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43  * Table for TK_C
149d0 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e  OLUMN expression
149e0 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  s. */.};../*.** 
149f0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
14a00 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f  e the meanings o
14a10 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78  f bits in the Ex
14a20 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  pr.flags field..
14a30 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72  */.#define EP_Fr
14a40 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31  omJoin  0x000001
14a50 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73 20 69   /* Originates i
14a60 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73  n ON/USING claus
14a70 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20  e of outer join 
14a80 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67  */.#define EP_Ag
14a90 67 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32  g       0x000002
14aa0 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65   /* Contains one
14ab0 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61   or more aggrega
14ac0 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
14ad0 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c  #define EP_Resol
14ae0 76 65 64 20 20 30 78 30 30 30 30 30 34 20 2f 2a  ved  0x000004 /*
14af0 20 49 44 73 20 68 61 76 65 20 62 65 65 6e 20 72   IDs have been r
14b00 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d  esolved to COLUM
14b10 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  Ns */.#define EP
14b20 5f 45 72 72 6f 72 20 20 20 20 20 30 78 30 30 30  _Error     0x000
14b30 30 30 38 20 2f 2a 20 45 78 70 72 65 73 73 69 6f  008 /* Expressio
14b40 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  n contains one o
14b50 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f  r more errors */
14b60 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74  .#define EP_Dist
14b70 69 6e 63 74 20 20 30 78 30 30 30 30 31 30 20 2f  inct  0x000010 /
14b80 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63  * Aggregate func
14b90 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e  tion with DISTIN
14ba0 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  CT keyword */.#d
14bb0 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65  efine EP_VarSele
14bc0 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70  ct 0x000020 /* p
14bd0 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c  Select is correl
14be0 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61  ated, not consta
14bf0 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  nt */.#define EP
14c00 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30  _DblQuoted 0x000
14c10 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77  040 /* token.z w
14c20 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e  as originally in
14c30 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e   "..." */.#defin
14c40 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30  e EP_InfixFunc 0
14c50 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20  x000080 /* True 
14c60 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e  for an infix fun
14c70 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f  ction: LIKE, GLO
14c80 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e  B, etc */.#defin
14c90 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30  e EP_Collate   0
14ca0 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20  x000100 /* Tree 
14cb0 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f  contains a TK_CO
14cc0 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a  LLATE operator *
14cd0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e  /.#define EP_Gen
14ce0 65 72 69 63 20 20 20 30 78 30 30 30 32 30 30 20  eric   0x000200 
14cf0 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54  /* Ignore COLLAT
14d00 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e  E or affinity on
14d10 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64   this tree */.#d
14d20 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75  efine EP_IntValu
14d30 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49  e  0x000400 /* I
14d40 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e  nteger value con
14d50 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c  tained in u.iVal
14d60 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ue */.#define EP
14d70 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30 30 30  _xIsSelect 0x000
14d80 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74  800 /* x.pSelect
14d90 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72   is valid (other
14da0 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29  wise x.pList is)
14db0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
14dc0 6b 69 70 20 20 20 20 20 20 30 78 30 30 31 30 30  kip      0x00100
14dd0 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53  0 /* COLLATE, AS
14de0 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f  , or UNLIKELY */
14df0 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75  .#define EP_Redu
14e00 63 65 64 20 20 20 30 78 30 30 32 30 30 30 20 2f  ced   0x002000 /
14e10 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58  * Expr struct EX
14e20 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62  PR_REDUCEDSIZE b
14e30 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ytes only */.#de
14e40 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c  fine EP_TokenOnl
14e50 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78  y 0x004000 /* Ex
14e60 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 54  pr struct EXPR_T
14e70 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74  OKENONLYSIZE byt
14e80 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  es only */.#defi
14e90 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20 20 20  ne EP_Static    
14ea0 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c 64  0x008000 /* Held
14eb0 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f   in memory not o
14ec0 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c  btained from mal
14ed0 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  loc() */.#define
14ee0 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78   EP_MemToken  0x
14ef0 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74  010000 /* Need t
14f00 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  o sqlite3DbFree(
14f10 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f  ) Expr.zToken */
14f20 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65  .#define EP_NoRe
14f30 64 75 63 65 20 20 30 78 30 32 30 30 30 30 20 2f  duce  0x020000 /
14f40 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50  * Cannot EXPRDUP
14f50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70  _REDUCE this Exp
14f60 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
14f70 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30  Unlikely  0x0400
14f80 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29  00 /* unlikely()
14f90 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29   or likelihood()
14fa0 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
14fb0 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 61 6e 74  fine EP_Constant
14fc0 20 20 30 78 30 38 30 30 30 30 20 2f 2a 20 4e 6f    0x080000 /* No
14fd0 64 65 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74  de is a constant
14fe0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
14ff0 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30 30 30  anBeNull 0x10000
15000 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c 6c  0 /* Can be null
15010 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e 55 4c   despite NOT NUL
15020 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  L constraint */.
15030 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
15040 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
15050 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
15060 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
15070 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67  he .** Expr.flag
15080 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
15090 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65  ine ExprHasPrope
150a0 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28  rty(E,P)     (((
150b0 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d  E)->flags&(P))!=
150c0 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48  0).#define ExprH
150d0 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c  asAllProperty(E,
150e0 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73  P)  (((E)->flags
150f0 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66  &(P))==(P)).#def
15100 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ine ExprSetPrope
15110 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29  rty(E,P)     (E)
15120 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  ->flags|=(P).#de
15130 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72  fine ExprClearPr
15140 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45  operty(E,P)   (E
15150 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a  )->flags&=~(P)..
15160 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74 56 56  /* The ExprSetVV
15170 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72  AProperty() macr
15180 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 56 65  o is used for Ve
15190 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69  rification, Vali
151a0 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41  dation,.** and A
151b0 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c  ccreditation onl
151c0 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b  y.  It works lik
151d0 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74  e ExprSetPropert
151e0 79 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a  y() during VVA.*
151f0 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75 74 20  * processes but 
15200 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64  is a no-op for d
15210 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64  elivery..*/.#ifd
15220 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
15230 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  # define ExprSet
15240 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29  VVAProperty(E,P)
15250 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50    (E)->flags|=(P
15260 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
15270 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65   ExprSetVVAPrope
15280 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a  rty(E,P).#endif.
15290 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f  ./*.** Macros to
152a0 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e   determine the n
152b0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72  umber of bytes r
152c0 65 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72  equired by a nor
152d0 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74 72  mal Expr .** str
152e0 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72  uct, an Expr str
152f0 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f  uct with the EP_
15300 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65 74  Reduced flag set
15310 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 20 0a   in Expr.flags .
15320 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73  ** and an Expr s
15330 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
15340 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
15350 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65   set..*/.#define
15360 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20   EXPR_FULLSIZE  
15370 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28           sizeof(
15380 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20  Expr)           
15390 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a  /* Full size */.
153a0 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44  #define EXPR_RED
153b0 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20  UCEDSIZE        
153c0 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54  offsetof(Expr,iT
153d0 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e  able)  /* Common
153e0 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65   features */.#de
153f0 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f  fine EXPR_TOKENO
15400 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66  NLYSIZE      off
15410 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74  setof(Expr,pLeft
15420 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61  )   /* Fewer fea
15430 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tures */../*.** 
15440 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
15450 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  the sqlite3ExprD
15460 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53  up() function. S
15470 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f  ee the header co
15480 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20  mment .** above 
15490 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
154a0 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f   for details..*/
154b0 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44 55 50  .#define EXPRDUP
154c0 5f 52 45 44 55 43 45 20 20 20 20 20 20 20 20 20  _REDUCE         
154d0 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20  0x0001  /* Used 
154e0 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70  reduced-size Exp
154f0 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  r nodes */../*.*
15500 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72  * A list of expr
15510 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65  essions.  Each e
15520 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70  xpression may op
15530 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a  tionally have a.
15540 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70  ** name.  An exp
15550 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69  r/name combinati
15560 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69  on can be used i
15570 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20  n several ways, 
15580 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c  such.** as the l
15590 69 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20  ist of "expr AS 
155a0 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f  ID" fields follo
155b0 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20  wing a "SELECT" 
155c0 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73  or in the.** lis
155d0 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22  t of "ID = expr"
155e0 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44   items in an UPD
155f0 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20  ATE.  A list of 
15600 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a  expressions can.
15610 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  ** also be used 
15620 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  as the argument 
15630 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69  to a function, i
15640 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
15650 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c   a.zName.** fiel
15660 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a  d is not used..*
15670 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20  *.** By default 
15680 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66  the Expr.zSpan f
15690 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d  ield holds a hum
156a0 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63  an-readable desc
156b0 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ription of.** th
156c0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  e expression tha
156d0 74 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65  t is used in the
156e0 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65   generation of e
156f0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e  rror messages an
15700 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65  d.** column labe
15710 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  ls.  In this cas
15720 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73  e, Expr.zSpan is
15730 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74   typically the t
15740 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75  ext of a.** colu
15750 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73  mn expression as
15760 20 69 74 20 65 78 69 73 74 73 20 69 6e 20 61 20   it exists in a 
15770 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
15780 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a  .  However, if.*
15790 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62  * the bSpanIsTab
157a0 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68   flag is set, th
157b0 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72  en zSpan is over
157c0 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74  loaded to mean t
157d0 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68  he name.** of th
157e0 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20  e result column 
157f0 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54  in the form: DAT
15800 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55  ABASE.TABLE.COLU
15810 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a  MN.  This later.
15820 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20  ** form is used 
15830 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74  for name resolut
15840 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20  ion with nested 
15850 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f  FROM clauses..*/
15860 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74  .struct ExprList
15870 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20   {.  int nExpr; 
15880 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
15890 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73  umber of express
158a0 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  ions on the list
158b0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70   */.  struct Exp
158c0 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20  rList_item { /* 
158d0 46 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73  For each express
158e0 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ion in the list 
158f0 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
15900 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  pr;            /
15910 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78  * The list of ex
15920 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20  pressions */.   
15930 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
15940 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
15950 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
15960 68 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f  h this expressio
15970 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  n */.    char *z
15980 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20  Span;           
15990 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78   /* Original tex
159a0 74 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73  t of the express
159b0 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f  ion */.    u8 so
159c0 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
159d0 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43     /* 1 for DESC
159e0 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f   or 0 for ASC */
159f0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f  .    unsigned do
15a00 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20  ne :1;       /* 
15a10 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61  A flag to indica
15a20 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69  te when processi
15a30 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a  ng is finished *
15a40 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62  /.    unsigned b
15a50 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a  SpanIsTab :1; /*
15a60 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e   zSpan holds DB.
15a70 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a  TABLE.COLUMN */.
15a80 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75      unsigned reu
15a90 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43  sable :1;   /* C
15aa0 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
15ab0 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a  on is reusable *
15ac0 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20  /.    union {.  
15ad0 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20      struct {.   
15ae0 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42       u16 iOrderB
15af0 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f  yCol;      /* Fo
15b00 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75  r ORDER BY, colu
15b10 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73  mn number in res
15b20 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20  ult set */.     
15b30 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20     u16 iAlias;  
15b40 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
15b50 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c  x into Parse.aAl
15b60 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20  ias[] for zName 
15b70 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20  */.      } x;.  
15b80 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78      int iConstEx
15b90 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52  prReg;      /* R
15ba0 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68  egister in which
15bb0 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63   Expr value is c
15bc0 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75  ached */.    } u
15bd0 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20  ;.  } *a;       
15be0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
15bf0 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74  loc a power of t
15c00 77 6f 20 67 72 65 61 74 65 72 20 6f 72 20 65 71  wo greater or eq
15c10 75 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a  ual to nExpr */.
15c20 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
15c30 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
15c40 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
15c50 62 79 20 74 68 65 20 70 61 72 73 65 72 20 74 6f  by the parser to
15c60 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20   record both.** 
15c70 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66  the parse tree f
15c80 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
15c90 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66   and the span of
15ca0 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20   input text for 
15cb0 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  an.** expression
15cc0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
15cd0 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70  Span {.  Expr *p
15ce0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Expr;          /
15cf0 2a 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * The expression
15d00 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20   parse tree */. 
15d10 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74   const char *zSt
15d20 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20  art;   /* First 
15d30 63 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70  character of inp
15d40 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e  ut text */.  con
15d50 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20  st char *zEnd;  
15d60 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63     /* One charac
15d70 74 65 72 20 70 61 73 74 20 74 68 65 20 65 6e 64  ter past the end
15d80 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
15d90 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
15da0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
15db0 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f  structure can ho
15dc0 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74  ld a simple list
15dd0 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c   of identifiers,
15de0 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20  .** such as the 
15df0 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20  list "a,b,c" in 
15e00 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
15e10 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20  atements:.**.** 
15e20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
15e30 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53   t(a,b,c) VALUES
15e40 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52   ...;.**      CR
15e50 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f  EATE INDEX idx O
15e60 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20  N t(a,b,c);.**  
15e70 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
15e80 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55  ER trig BEFORE U
15e90 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63  PDATE ON t(a,b,c
15ea0 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65  ) ...;.**.** The
15eb0 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69   IdList.a.idx fi
15ec0 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e  eld is used when
15ed0 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72   the IdList repr
15ee0 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20  esents the list 
15ef0 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d  of.** column nam
15f00 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  es after a table
15f10 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45   name in an INSE
15f20 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  RT statement.  I
15f30 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  n the statement.
15f40 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54  **.**     INSERT
15f50 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e   INTO t(a,b,c) .
15f60 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20  ...**.** If "a" 
15f70 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75  is the k-th colu
15f80 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c  mn of table "t",
15f90 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30   then IdList.a[0
15fa0 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72  ].idx==k..*/.str
15fb0 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73  uct IdList {.  s
15fc0 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65  truct IdList_ite
15fd0 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e  m {.    char *zN
15fe0 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
15ff0 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66  e of the identif
16000 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ier */.    int i
16010 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  dx;          /* 
16020 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61  Index in some Ta
16030 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20  ble.aCol[] of a 
16040 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61  column named zNa
16050 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20  me */.  } *a;.  
16060 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20  int nId;        
16070 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64   /* Number of id
16080 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65  entifiers on the
16090 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
160a0 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64  ** The bitmask d
160b0 61 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20  atatype defined 
160c0 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f  below is used fo
160d0 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  r various optimi
160e0 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43  zations..**.** C
160f0 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f  hanging this fro
16100 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20  m a 64-bit to a 
16110 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69  32-bit type limi
16120 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
16130 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20  .** tables in a 
16140 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65  join to 32 inste
16150 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69  ad of 64.  But i
16160 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74  t also reduces t
16170 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68  he size.** of th
16180 65 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38  e library by 738
16190 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a   bytes on ix86..
161a0 2a 2f 0a 74 79 70 65 64 65 66 20 75 36 34 20 42  */.typedef u64 B
161b0 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54  itmask;../*.** T
161c0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  he number of bit
161d0 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20  s in a Bitmask. 
161e0 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69   "BMS" means "Bi
161f0 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a  tMask Size"..*/.
16200 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69  #define BMS  ((i
16210 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61  nt)(sizeof(Bitma
16220 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41  sk)*8))../*.** A
16230 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73   bit in a Bitmas
16240 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  k.*/.#define MAS
16250 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69 74  KBIT(n)   (((Bit
16260 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64  mask)1)<<(n)).#d
16270 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28  efine MASKBIT32(
16280 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69  n) (((unsigned i
16290 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a  nt)1)<<(n))../*.
162a0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
162b0 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
162c0 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c  ibes the FROM cl
162d0 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
162e0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45   statement..** E
162f0 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62  ach table or sub
16300 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f  query in the FRO
16310 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65  M clause is a se
16320 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f  parate element o
16330 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74  f.** the SrcList
16340 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a  .a[] array..**.*
16350 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74  * With the addit
16360 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ion of multiple 
16370 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74  database support
16380 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
16390 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e  structure.** can
163a0 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
163b0 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74   describe a part
163c0 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63  icular table suc
163d0 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74  h as the table t
163e0 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69  hat.** is modifi
163f0 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c  ed by an INSERT,
16400 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
16410 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  TE statement.  I
16420 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a  n standard SQL,.
16430 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20  ** such a table 
16440 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65  must be a simple
16450 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20   name: ID.  But 
16460 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74  in SQLite, the t
16470 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20  able can.** now 
16480 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  be identified by
16490 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65   a database name
164a0 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68  , a dot, then th
164b0 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44  e table name: ID
164c0 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a  .ID..**.** The j
164d0 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f  ointype starts o
164e0 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a  ut showing the j
164f0 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e  oin type between
16500 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62   the current tab
16510 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65  le.** and the ne
16520 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20  xt table on the 
16530 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65  list.  The parse
16540 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73  r builds the lis
16550 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42  t this way..** B
16560 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  ut sqlite3SrcLis
16570 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29  tShiftJoinType()
16580 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68   later shifts th
16590 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74  e jointypes so t
165a0 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e  hat each.** join
165b0 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74  type expresses t
165c0 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  he join between 
165d0 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  the table and th
165e0 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65  e previous table
165f0 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63  ..**.** In the c
16600 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68  olUsed field, th
16610 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
16620 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74   (bit 63) is set
16630 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a   if the table.**
16640 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
16650 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61  han 63 columns a
16660 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20  nd the 64-th or 
16670 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20  later column is 
16680 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  used..*/.struct 
16690 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20  SrcList {.  int 
166a0 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  nSrc;        /* 
166b0 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
166c0 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69   or subqueries i
166d0 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
166e0 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f  e */.  u32 nAllo
166f0 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  c;      /* Numbe
16700 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c  r of entries all
16710 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65  ocated in a[] be
16720 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  low */.  struct 
16730 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20  SrcList_item {. 
16740 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65     Schema *pSche
16750 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74  ma;  /* Schema t
16760 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65  o which this ite
16770 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20  m is fixed */.  
16780 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73    char *zDatabas
16790 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64  e;  /* Name of d
167a0 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
167b0 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
167c0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
167d0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
167e0 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  he table */.    
167f0 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20  char *zAlias;   
16800 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72    /* The "B" par
16810 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20  t of a "A AS B" 
16820 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69  phrase.  zName i
16830 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20  s the "A" */.   
16840 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
16850 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62     /* An SQL tab
16860 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  le corresponding
16870 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20   to zName */.   
16880 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
16890 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73  ;  /* A SELECT s
168a0 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e  tatement used in
168b0 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c   place of a tabl
168c0 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e  e name */.    in
168d0 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20  t addrFillSub;  
168e0 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75  /* Address of su
168f0 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69  broutine to mani
16900 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20  fest a subquery 
16910 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
16920 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69  turn;    /* Regi
16930 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74  ster holding ret
16940 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61  urn address of a
16950 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20  ddrFillSub */.  
16960 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b    int regResult;
16970 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73      /* Registers
16980 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73   holding results
16990 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65   of a co-routine
169a0 20 2a 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e 74   */.    u8 joint
169b0 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70  ype;      /* Typ
169c0 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65  e of join betwee
169d0 6e 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64 20  n this able and 
169e0 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a  the previous */.
169f0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74      unsigned not
16a00 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f  Indexed :1;    /
16a10 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  * True if there 
16a20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44  is a NOT INDEXED
16a30 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 75   clause */.    u
16a40 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c  nsigned isCorrel
16a50 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75  ated :1;  /* Tru
16a60 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20 69  e if sub-query i
16a70 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a  s correlated */.
16a80 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61      unsigned via
16a90 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f  Coroutine :1;  /
16aa0 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73  * Implemented as
16ab0 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f   a co-routine */
16ac0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73  .    unsigned is
16ad0 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20  Recursive :1;   
16ae0 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75  /* True for recu
16af0 72 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20  rsive reference 
16b00 69 6e 20 57 49 54 48 20 2a 2f 0a 23 69 66 6e 64  in WITH */.#ifnd
16b10 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45  ef SQLITE_OMIT_E
16b20 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53  XPLAIN.    u8 iS
16b30 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20  electId;     /* 
16b40 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74  If pSelect!=0, t
16b50 68 65 20 69 64 20 6f 66 20 74 68 65 20 73 75 62  he id of the sub
16b60 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a  -select in EQP *
16b70 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74  /.#endif.    int
16b80 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f   iCursor;      /
16b90 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
16ba0 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f  r number used to
16bb0 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61 62   access this tab
16bc0 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  le */.    Expr *
16bd0 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  pOn;        /* T
16be0 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20  he ON clause of 
16bf0 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64  a join */.    Id
16c00 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20  List *pUsing;   
16c10 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61  /* The USING cla
16c20 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
16c30 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c  .    Bitmask col
16c40 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20  Used;  /* Bit N 
16c50 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f  (1<<N) set if co
16c60 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69  lumn N of pTab i
16c70 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 63 68  s used */.    ch
16c80 61 72 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20  ar *zIndex;     
16c90 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72  /* Identifier fr
16ca0 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c  om "INDEXED BY <
16cb0 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20  zIndex>" clause 
16cc0 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  */.    Index *pI
16cd0 6e 64 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65  ndex;    /* Inde
16ce0 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72 72  x structure corr
16cf0 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e  esponding to zIn
16d00 64 65 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20  dex, if any */. 
16d10 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20   } a[1];        
16d20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72       /* One entr
16d30 79 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74  y for each ident
16d40 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73  ifier on the lis
16d50 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  t */.};../*.** P
16d60 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20  ermitted values 
16d70 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  of the SrcList.a
16d80 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a  .jointype field.
16d90 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e  */.#define JT_IN
16da0 4e 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20  NER     0x0001  
16db0 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66    /* Any kind of
16dc0 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20   inner or cross 
16dd0 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
16de0 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30  JT_CROSS     0x0
16df0 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63  002    /* Explic
16e00 69 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52  it use of the CR
16e10 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  OSS keyword */.#
16e20 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41  define JT_NATURA
16e30 4c 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a  L   0x0004    /*
16e40 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74   True for a "nat
16e50 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64  ural" join */.#d
16e60 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20  efine JT_LEFT   
16e70 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20     0x0008    /* 
16e80 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20  Left outer join 
16e90 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49  */.#define JT_RI
16ea0 47 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20  GHT     0x0010  
16eb0 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72    /* Right outer
16ec0 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
16ed0 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78   JT_OUTER     0x
16ee0 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22  0020    /* The "
16ef0 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69  OUTER" keyword i
16f00 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65  s present */.#de
16f10 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20  fine JT_ERROR   
16f20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75    0x0040    /* u
16f30 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70  nknown or unsupp
16f40 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20  orted join type 
16f50 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73  */.../*.** Flags
16f60 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72   appropriate for
16f70 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20   the wctrlFlags 
16f80 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c  parameter of sql
16f90 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29  ite3WhereBegin()
16fa0 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72  .** and the Wher
16fb0 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73  eInfo.wctrlFlags
16fc0 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66   member..*/.#def
16fd0 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
16fe0 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30  Y_NORMAL   0x000
16ff0 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64  0 /* No-op */.#d
17000 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
17010 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30  RBY_MIN      0x0
17020 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  001 /* ORDER BY 
17030 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d  processing for m
17040 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65  in() func */.#de
17050 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
17060 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30  BY_MAX      0x00
17070 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70  02 /* ORDER BY p
17080 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61  rocessing for ma
17090 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  x() func */.#def
170a0 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53  ine WHERE_ONEPAS
170b0 53 5f 44 45 53 49 52 45 44 20 20 30 78 30 30 30  S_DESIRED  0x000
170c0 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20  4 /* Want to do 
170d0 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f  one-pass UPDATE/
170e0 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e  DELETE */.#defin
170f0 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54  e WHERE_DUPLICAT
17100 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 30 38 20  ES_OK    0x0008 
17110 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20  /* Ok to return 
17120 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20  a row more than 
17130 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  once */.#define 
17140 57 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f  WHERE_OMIT_OPEN_
17150 43 4c 4f 53 45 20 20 30 78 30 30 31 30 20 2f 2a  CLOSE  0x0010 /*
17160 20 54 61 62 6c 65 20 63 75 72 73 6f 72 73 20 61   Table cursors a
17170 72 65 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20  re already open 
17180 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
17190 5f 46 4f 52 43 45 5f 54 41 42 4c 45 20 20 20 20  _FORCE_TABLE    
171a0 20 20 30 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e    0x0020 /* Do n
171b0 6f 74 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d  ot use an index-
171c0 6f 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a 23  only search */.#
171d0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45  define WHERE_ONE
171e0 54 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78  TABLE_ONLY    0x
171f0 30 30 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64  0040 /* Only cod
17200 65 20 74 68 65 20 31 73 74 20 74 61 62 6c 65 20  e the 1st table 
17210 69 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a 20  in pTabList */. 
17220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17230 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 30 78           /*   0x
17240 30 30 38 30 20 2f 2f 20 6e 6f 74 20 63 75 72 72  0080 // not curr
17250 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 23 64  ently used */.#d
17260 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55  efine WHERE_GROU
17270 50 42 59 20 20 20 20 20 20 20 20 20 20 30 78 30  PBY          0x0
17280 31 30 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20  100 /* pOrderBy 
17290 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55  is really a GROU
172a0 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  P BY */.#define 
172b0 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59  WHERE_DISTINCTBY
172c0 20 20 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a         0x0200 /*
172d0 20 70 4f 72 64 65 72 62 79 20 69 73 20 72 65 61   pOrderby is rea
172e0 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20 63  lly a DISTINCT c
172f0 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
17300 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54   WHERE_WANT_DIST
17310 49 4e 43 54 20 20 20 20 30 78 30 34 30 30 20 2f  INCT    0x0400 /
17320 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65  * All output nee
17330 64 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63  ds to be distinc
17340 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
17350 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20  RE_SORTBYGROUP  
17360 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20 53 75      0x0800 /* Su
17370 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65  pport sqlite3Whe
17380 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a  reIsSorted() */.
17390 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 52 45  #define WHERE_RE
173a0 4f 50 45 4e 5f 49 44 58 20 20 20 20 20 20 20 30  OPEN_IDX       0
173b0 78 31 30 30 30 20 2f 2a 20 54 72 79 20 74 6f 20  x1000 /* Try to 
173c0 75 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78  use OP_ReopenIdx
173d0 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20   */../* Allowed 
173e0 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72  return values fr
173f0 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  om sqlite3WhereI
17400 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23  sDistinct().*/.#
17410 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
17420 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20  TINCT_NOOP      
17430 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b  0  /* DISTINCT k
17440 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20  eyword not used 
17450 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
17460 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45  _DISTINCT_UNIQUE
17470 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70      1  /* No dup
17480 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69  licates */.#defi
17490 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
174a0 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f  T_ORDERED   2  /
174b0 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73  * All duplicates
174c0 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f   are adjacent */
174d0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
174e0 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45  ISTINCT_UNORDERE
174f0 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74  D 3  /* Duplicat
17500 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65 64  es are scattered
17510 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d   */../*.** A Nam
17520 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73  eContext defines
17530 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68   a context in wh
17540 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74  ich to resolve t
17550 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a  able and column.
17560 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63  ** names.  The c
17570 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20  ontext consists 
17580 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62  of a list of tab
17590 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69 73  les (the pSrcLis
175a0 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20  t) field and.** 
175b0 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20  a list of named 
175c0 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69  expression (pELi
175d0 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20  st).  The named 
175e0 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20  expression list 
175f0 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20  may.** be NULL. 
17600 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65 73   The pSrc corres
17610 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f  ponds to the FRO
17620 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
17630 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68  LECT or.** to th
17640 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70  e table being op
17650 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53  erated on by INS
17660 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20  ERT, UPDATE, or 
17670 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20  DELETE.  The.** 
17680 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e  pEList correspon
17690 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74  ds to the result
176a0 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54   set of a SELECT
176b0 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72   and is NULL for
176c0 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d  .** other statem
176d0 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65  ents..**.** Name
176e0 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20  Contexts can be 
176f0 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65  nested.  When re
17700 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74  solving names, t
17710 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a  he inner-most .*
17720 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61  * context is sea
17730 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66  rched first.  If
17740 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75   no match is fou
17750 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74  nd, the next out
17760 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  er.** context is
17770 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68   checked.  If th
17780 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20  ere is still no 
17790 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20  match, the next 
177a0 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68  context.** is ch
177b0 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f  ecked.  This pro
177c0 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75  cess continues u
177d0 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61  ntil either a ma
177e0 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20  tch is found.** 
177f0 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20  or all contexts 
17800 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e  are check.  When
17810 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
17820 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62  d, the nRef memb
17830 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  er of.** the con
17840 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20  text containing 
17850 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63  the match is inc
17860 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a  remented. .**.**
17870 20 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67   Each subquery g
17880 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f  ets a new NameCo
17890 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78  ntext.  The pNex
178a0 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74  t field points t
178b0 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  o the.** NameCon
178c0 74 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65  text in the pare
178d0 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20  nt query.  Thus 
178e0 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73  the process of s
178f0 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e  canning the.** N
17900 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20  ameContext list 
17910 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73  corresponds to s
17920 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68  earching through
17930 20 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75   successively ou
17940 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65  ter.** subquerie
17950 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20  s looking for a 
17960 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74  match..*/.struct
17970 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20   NameContext {. 
17980 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
17990 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
179a0 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ser */.  SrcList
179b0 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a   *pSrcList;   /*
179c0 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62   One or more tab
179d0 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f  les used to reso
179e0 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45  lve names */.  E
179f0 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b  xprList *pEList;
17a00 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
17a10 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73  list of result-s
17a20 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  et columns */.  
17a30 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
17a40 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  o;   /* Informat
17a50 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67  ion about aggreg
17a60 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76  ates at this lev
17a70 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74  el */.  NameCont
17a80 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  ext *pNext;  /* 
17a90 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20  Next outer name 
17aa0 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66  context.  NULL f
17ab0 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a  or outermost */.
17ac0 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
17ad0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17ae0 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76   of names resolv
17af0 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65  ed by this conte
17b00 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  xt */.  int nErr
17b10 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
17b20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
17b30 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69   encountered whi
17b40 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  le resolving nam
17b50 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c  es */.  u16 ncFl
17b60 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ags;         /* 
17b70 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f  Zero or more NC_
17b80 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20  * flags defined 
17b90 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  below */.};../*.
17ba0 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
17bb0 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f  s for the NameCo
17bc0 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66  ntext, ncFlags f
17bd0 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  ield..**.** Note
17be0 3a 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20  :  NC_MinMaxAgg 
17bf0 6d 75 73 74 20 68 61 76 65 20 74 68 65 20 73 61  must have the sa
17c00 6d 65 20 76 61 6c 75 65 20 61 73 20 53 46 5f 4d  me value as SF_M
17c10 69 6e 4d 61 78 41 67 67 20 61 6e 64 0a 2a 2a 20  inMaxAgg and.** 
17c20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
17c30 41 58 2e 0a 2a 2a 20 0a 2a 2f 0a 23 64 65 66 69  AX..** .*/.#defi
17c40 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20  ne NC_AllowAgg  
17c50 30 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65  0x0001  /* Aggre
17c60 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  gate functions a
17c70 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20  re allowed here 
17c80 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61  */.#define NC_Ha
17c90 73 41 67 67 20 20 20 20 30 78 30 30 30 32 20 20  sAgg    0x0002  
17ca0 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61  /* One or more a
17cb0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
17cc0 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69  ns seen */.#defi
17cd0 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20  ne NC_IsCheck   
17ce0 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20  0x0004  /* True 
17cf0 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  if resolving nam
17d00 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f  es in a CHECK co
17d10 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
17d20 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63  ine NC_InAggFunc
17d30 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65   0x0008  /* True
17d40 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72   if analyzing ar
17d50 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67  guments to an ag
17d60 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  g func */.#defin
17d70 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30  e NC_PartIdx   0
17d80 78 30 30 31 30 20 20 2f 2a 20 54 72 75 65 20 69  x0010  /* True i
17d90 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61  f resolving a pa
17da0 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52  rtial index WHER
17db0 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  E */.#define NC_
17dc0 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30  MinMaxAgg 0x1000
17dd0 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67    /* min/max agg
17de0 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53  regates seen.  S
17df0 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f  ee note above */
17e00 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
17e10 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
17e20 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
17e30 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f  ontains all info
17e40 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65  rmation.** neede
17e50 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f  d to generate co
17e60 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20  de for a single 
17e70 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
17e80 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69  ..**.** nLimit i
17e90 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74  s set to -1 if t
17ea0 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54  here is no LIMIT
17eb0 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65   clause.  nOffse
17ec0 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a  t is set to 0..*
17ed0 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20  * If there is a 
17ee0 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
17ef0 65 20 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c  e parser sets nL
17f00 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75  imit to the valu
17f10 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69  e of the.** limi
17f20 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f  t and nOffset to
17f30 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
17f40 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69  e offset (or 0 i
17f50 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a  f there is not.*
17f60 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20  * offset).  But 
17f70 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74  later on, nLimit
17f80 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63   and nOffset bec
17f90 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c  ome the memory l
17fa0 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74  ocations.** in t
17fb0 68 65 20 56 44 42 45 20 74 68 61 74 20 72 65 63  he VDBE that rec
17fc0 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e  ord the limit an
17fd0 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72  d offset counter
17fe0 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65  s..**.** addrOpe
17ff0 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20  nEphm[] entries 
18000 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72  contain the addr
18010 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70  ess of OP_OpenEp
18020 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e  hemeral opcodes.
18030 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65 73  .** These addres
18040 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72  ses must be stor
18050 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63 61  ed so that we ca
18060 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69  n go back and fi
18070 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f  ll in.** the P4_
18080 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70  KEYINFO and P2 p
18090 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e  arameters later.
180a0 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65    Neither the Ke
180b0 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65  yInfo nor.** the
180c0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
180d0 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20  ns in P2 can be 
180e0 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65 20  computed at the 
180f0 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20  same time.** as 
18100 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20  the OP_OpenEphm 
18110 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63  instruction is c
18120 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74  oded because not
18130 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72  .** enough infor
18140 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
18150 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20   compound query 
18160 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74  is known at that
18170 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b   point..** The K
18180 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f  eyInfo for addrO
18190 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b  penTran[0] and [
181a0 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  1] contains coll
181b0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a  ating sequences.
181c0 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c  ** for the resul
181d0 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49  t set.  The KeyI
181e0 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
181f0 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73  Ephm[2] contains
18200 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65   collating.** se
18210 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20  quences for the 
18220 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
18230 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63  .*/.struct Selec
18240 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a  t {.  ExprList *
18250 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20  pEList;      /* 
18260 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68  The fields of th
18270 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38  e result */.  u8
18280 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
18290 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20       /* One of: 
182a0 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20  TK_UNION TK_ALL 
182b0 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f  TK_INTERSECT TK_
182c0 45 58 43 45 50 54 20 2a 2f 0a 20 20 75 31 36 20  EXCEPT */.  u16 
182d0 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20  selFlags;       
182e0 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46     /* Various SF
182f0 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69  _* values */.  i
18300 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73  nt iLimit, iOffs
18310 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20  et;   /* Memory 
18320 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e  registers holdin
18330 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54  g LIMIT & OFFSET
18340 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66   counters */.#if
18350 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
18360 42 4c 45 44 0a 20 20 63 68 61 72 20 7a 53 65 6c  BLED.  char zSel
18370 4e 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a  Name[12];     /*
18380 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f   Symbolic name o
18390 66 20 74 68 69 73 20 53 45 4c 45 43 54 20 75 73  f this SELECT us
183a0 65 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20  e for debugging 
183b0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
183c0 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b  addrOpenEphm[2];
183d0 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68     /* OP_OpenEph
183e0 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74  em opcodes relat
183f0 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
18400 74 20 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65  t */.  u64 nSele
18410 63 74 52 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a  ctRow;        /*
18420 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65   Estimated numbe
18430 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  r of result rows
18440 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
18450 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Src;         /* 
18460 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  The FROM clause 
18470 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
18480 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  e;          /* T
18490 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
184a0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
184b0 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54  GroupBy;    /* T
184c0 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  he GROUP BY clau
184d0 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48  se */.  Expr *pH
184e0 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f  aving;         /
184f0 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61  * The HAVING cla
18500 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
18510 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20  t *pOrderBy;    
18520 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
18530 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65  clause */.  Sele
18540 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20  ct *pPrior;     
18550 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65     /* Prior sele
18560 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ct in a compound
18570 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e   select statemen
18580 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  t */.  Select *p
18590 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
185a0 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20   Next select to 
185b0 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f  the left in a co
185c0 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72  mpound */.  Expr
185d0 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20   *pLimit;       
185e0 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72     /* LIMIT expr
185f0 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61  ession. NULL mea
18600 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a  ns not used. */.
18610 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b    Expr *pOffset;
18620 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53           /* OFFS
18630 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e  ET expression. N
18640 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73  ULL means not us
18650 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ed. */.  With *p
18660 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  With;           
18670 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20 61  /* WITH clause a
18680 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20  ttached to this 
18690 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e  select. Or NULL.
186a0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
186b0 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
186c0 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73   Select.selFlags
186d0 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65 66  .  The "SF" pref
186e0 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ix stands for.**
186f0 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a   "Select Flag"..
18700 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69  */.#define SF_Di
18710 73 74 69 6e 63 74 20 20 20 20 20 20 20 20 30 78  stinct        0x
18720 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20  0001  /* Output 
18730 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e  should be DISTIN
18740 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  CT */.#define SF
18750 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20  _Resolved       
18760 20 30 78 30 30 30 32 20 20 2f 2a 20 49 64 65 6e   0x0002  /* Iden
18770 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65  tifiers have bee
18780 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64  n resolved */.#d
18790 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61  efine SF_Aggrega
187a0 74 65 20 20 20 20 20 20 20 30 78 30 30 30 34 20  te       0x0004 
187b0 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67   /* Contains agg
187c0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
187d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55   */.#define SF_U
187e0 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30  sesEphemeral   0
187f0 78 30 30 30 38 20 20 2f 2a 20 55 73 65 73 20 74  x0008  /* Uses t
18800 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  he OpenEphemeral
18810 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69   opcode */.#defi
18820 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20  ne SF_Expanded  
18830 20 20 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a        0x0010  /*
18840 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
18850 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e  pand() called on
18860 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65   this */.#define
18870 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20   SF_HasTypeInfo 
18880 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20 46      0x0020  /* F
18890 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20 68  ROM subqueries h
188a0 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61  ave Table metada
188b0 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ta */.#define SF
188c0 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20  _Compound       
188d0 20 30 78 30 30 34 30 20 20 2f 2a 20 50 61 72 74   0x0040  /* Part
188e0 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71   of a compound q
188f0 75 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  uery */.#define 
18900 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20  SF_Values       
18910 20 20 20 30 78 30 30 38 30 20 20 2f 2a 20 53 79     0x0080  /* Sy
18920 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56  nthesized from V
18930 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a  ALUES clause */.
18940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18950 20 20 20 20 2f 2a 20 20 20 20 20 30 78 30 31 30      /*     0x010
18960 30 20 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0a 23  0  NOT USED */.#
18970 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64  define SF_Nested
18980 46 72 6f 6d 20 20 20 20 20 20 30 78 30 32 30 30  From      0x0200
18990 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70    /* Part of a p
189a0 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f  arenthesized FRO
189b0 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  M clause */.#def
189c0 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76  ine SF_MaybeConv
189d0 65 72 74 20 20 20 20 30 78 30 34 30 30 20 20 2f  ert    0x0400  /
189e0 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f  * Need convertCo
189f0 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
18a00 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66  bquery() */.#def
18a10 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76 65  ine SF_Recursive
18a20 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20 2f         0x0800  /
18a30 2a 20 54 68 65 20 72 65 63 75 72 73 69 76 65 20  * The recursive 
18a40 70 61 72 74 20 6f 66 20 61 20 72 65 63 75 72 73  part of a recurs
18a50 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69  ive CTE */.#defi
18a60 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20  ne SF_MinMaxAgg 
18a70 20 20 20 20 20 20 30 78 31 30 30 30 20 20 2f 2a        0x1000  /*
18a80 20 41 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61   Aggregate conta
18a90 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d  ining min() or m
18aa0 61 78 28 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  ax() */.../*.** 
18ab0 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61  The results of a
18ac0 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64   SELECT can be d
18ad0 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 73 65  istributed in se
18ae0 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64  veral ways, as d
18af0 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65  efined.** by one
18b00 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
18b10 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22  g macros.  The "
18b20 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e  SRT" prefix mean
18b30 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74  s "SELECT Result
18b40 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a  .** Type"..**.**
18b50 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20       SRT_Union  
18b60 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
18b70 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61  ts as a key in a
18b80 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78   temporary index
18b90 20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20   .**            
18ba0 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69 66           identif
18bb0 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53  ied by pDest->iS
18bc0 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  DParm..**.**    
18bd0 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
18be0 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20   Remove results 
18bf0 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61  from the tempora
18c00 72 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e  ry index pDest->
18c10 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20  iSDParm..**.**  
18c20 20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20 20     SRT_Exists   
18c30 20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20     Store a 1 in 
18c40 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73  memory cell pDes
18c50 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68  t->iSDParm if th
18c60 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20  e result.**     
18c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c80 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  set is not empty
18c90 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
18ca0 44 69 73 63 61 72 64 20 20 20 20 20 54 68 72 6f  Discard     Thro
18cb0 77 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 77  w the results aw
18cc0 61 79 2e 20 20 54 68 69 73 20 69 73 20 75 73 65  ay.  This is use
18cd0 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20  d by SELECT.**  
18ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cf0 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69     statements wi
18d00 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 77 68  thin triggers wh
18d10 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65  ose only purpose
18d20 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   is.**          
18d30 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
18d40 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66  ide-effects of f
18d50 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
18d60 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  All of the above
18d70 20 61 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e   are free to ign
18d80 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45 52 20  ore their ORDER 
18d90 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65  BY clause. Those
18da0 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20   that.** follow 
18db0 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f  must honor the O
18dc0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
18dd0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75  **.**     SRT_Ou
18de0 74 70 75 74 20 20 20 20 20 20 47 65 6e 65 72 61  tput      Genera
18df0 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70  te a row of outp
18e00 75 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50  ut (using the OP
18e10 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20  _ResultRow.**   
18e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e30 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61    opcode) for ea
18e40 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65  ch row in the re
18e50 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  sult set..**.** 
18e60 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20      SRT_Mem     
18e70 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69      Only valid i
18e80 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  f the result is 
18e90 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
18ea0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18eb0 20 20 20 20 20 20 20 20 53 74 6f 72 65 20 74 68          Store th
18ec0 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f  e first column o
18ed0 66 20 74 68 65 20 66 69 72 73 74 20 72 65 73 75  f the first resu
18ee0 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20  lt row.**       
18ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
18f00 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d   register pDest-
18f10 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62  >iSDParm then ab
18f20 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a  andon the rest.*
18f30 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
18f40 20 20 20 20 20 20 6f 66 20 74 68 65 20 71 75 65        of the que
18f50 72 79 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e  ry.  This destin
18f60 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c  ation implies "L
18f70 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20  IMIT 1"..**.**  
18f80 20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20 20     SRT_Set      
18f90 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75     The result mu
18fa0 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63  st be a single c
18fb0 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61  olumn.  Store ea
18fc0 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ch.**           
18fd0 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66            row of
18fe0 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b   result as the k
18ff0 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73  ey in table pDes
19000 74 2d 3e 69 53 44 50 61 72 6d 2e 20 0a 2a 2a 20  t->iSDParm. .** 
19010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19020 20 20 20 20 41 70 70 6c 79 20 74 68 65 20 61 66      Apply the af
19030 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66  finity pDest->af
19040 66 53 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f  fSdst before sto
19050 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20  ring.**         
19060 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
19070 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d  lts.  Used to im
19080 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c  plement "IN (SEL
19090 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a  ECT ...)"..**.**
190a0 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61       SRT_EphemTa
190b0 62 20 20 20 20 43 72 65 61 74 65 20 61 6e 20 74  b    Create an t
190c0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
190d0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e  Dest->iSDParm an
190e0 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20  d store.**      
190f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19100 68 65 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e  he result there.
19110 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c   The cursor is l
19120 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a  eft open after.*
19130 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19140 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e        returning.
19150 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
19160 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20  RT_Table except 
19170 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  that.**         
19180 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
19190 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65   destination use
191a0 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  s OP_OpenEphemer
191b0 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20  al to create.** 
191c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191d0 20 20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69      the table fi
191e0 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  rst..**.**     S
191f0 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47  RT_Coroutine   G
19200 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75  enerate a co-rou
19210 74 69 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e  tine that return
19220 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a  s a new row of.*
19230 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19240 20 20 20 20 20 20 72 65 73 75 6c 74 73 20 65 61        results ea
19250 63 68 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e  ch time it is in
19260 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72  voked.  The entr
19270 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20  y point.**      
19280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
19290 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65  f the co-routine
192a0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
192b0 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53  gister pDest->iS
192c0 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20  DParm.**        
192d0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64               and
192e0 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20   the result row 
192f0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65  is stored in pDe
19300 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74  st->nDest regist
19310 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ers.**          
19320 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74             start
19330 69 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e  ing with pDest->
19340 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  iSdst..**.**    
19350 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
19360 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
19370 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  n temporary tabl
19380 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
19390 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66  ..**     SRT_Fif
193a0 6f 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73  o        This is
193b0 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54   like SRT_EphemT
193c0 61 62 20 65 78 63 65 70 74 20 74 68 61 74 20 74  ab except that t
193d0 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20  he table.**     
193e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193f0 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c  is assumed to al
19400 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20  ready be open.  
19410 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20  SRT_Fifo has.** 
19420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19430 20 20 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e      the addition
19440 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62  al property of b
19450 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e  eing able to ign
19460 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ore.**          
19470 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 4f             the O
19480 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
19490 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
194a0 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20  stFifo    Store 
194b0 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d  results in a tem
194c0 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
194d0 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
194e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194f0 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65      But also use
19500 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
19510 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b   pDest->iSDParm+
19520 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  1 as.**         
19530 20 20 20 20 20 20 20 20 20 20 20 20 61 20 72 65              a re
19540 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f  cord of all prio
19550 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67  r results and ig
19560 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61  nore any duplica
19570 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  te.**           
19580 20 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20            rows. 
19590 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44   Name means:  "D
195a0 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a  istinct Fifo"..*
195b0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65  *.**     SRT_Que
195c0 75 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  ue       Store r
195d0 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69  esults in priori
195e0 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e  ty queue pDest->
195f0 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a  iSDParm (really.
19600 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19610 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29         an index)
19620 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65 71 75  .  Append a sequ
19630 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74  ence number so t
19640 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a  hat all entries.
19650 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19660 20 20 20 20 20 20 20 61 72 65 20 64 69 73 74 69         are disti
19670 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  nct..**.**     S
19680 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 53  RT_DistQueue   S
19690 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
196a0 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70  priority queue p
196b0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e  Dest->iSDParm on
196c0 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20  ly if.**        
196d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
196e0 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73   same record has
196f0 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72   never been stor
19700 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a  ed before.  The.
19710 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19720 20 20 20 20 20 20 20 69 6e 64 65 78 20 61 74 20         index at 
19730 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31  pDest->iSDParm+1
19740 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20   hold all prior 
19750 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  stores..*/.#defi
19760 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20  ne SRT_Union    
19770 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20      1  /* Store 
19780 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69  result as keys i
19790 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
197a0 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74  efine SRT_Except
197b0 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d         2  /* Rem
197c0 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20  ove result from 
197d0 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f  a UNION index */
197e0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69  .#define SRT_Exi
197f0 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20  sts       3  /* 
19800 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72  Store 1 if the r
19810 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70  esult is not emp
19820 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ty */.#define SR
19830 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34  T_Discard      4
19840 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65    /* Do not save
19850 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79   the results any
19860 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65  where */.#define
19870 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20   SRT_Fifo       
19880 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    5  /* Store re
19890 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
198a0 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
198b0 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
198c0 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20  SRT_DistFifo    
198d0 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f   6  /* Like SRT_
198e0 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65  Fifo, but unique
198f0 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f   results only */
19900 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65  .#define SRT_Que
19910 75 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20  ue        7  /* 
19920 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
19930 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66  an queue */.#def
19940 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75  ine SRT_DistQueu
19950 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20  e    8  /* Like 
19960 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75  SRT_Queue, but u
19970 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e  nique results on
19980 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52  ly */../* The OR
19990 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73  DER BY clause is
199a0 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c   ignored for all
199b0 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f   of the above */
199c0 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62  .#define Ignorab
199d0 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58  leOrderby(X) ((X
199e0 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69  ->eDest)<=SRT_Di
199f0 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e  stQueue)..#defin
19a00 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20  e SRT_Output    
19a10 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20     9  /* Output 
19a20 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75  each row of resu
19a30 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  lt */.#define SR
19a40 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30  T_Mem         10
19a50 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
19a60 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65  t in a memory ce
19a70 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ll */.#define SR
19a80 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 31 31  T_Set         11
19a90 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
19aa0 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  ts as keys in an
19ab0 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
19ac0 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20  e SRT_EphemTab  
19ad0 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20    12  /* Create 
19ae0 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e  transient tab an
19af0 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54  d store like SRT
19b00 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e  _Table */.#defin
19b10 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20  e SRT_Coroutine 
19b20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74    13  /* Generat
19b30 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  e a single row o
19b40 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66  f result */.#def
19b50 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20  ine SRT_Table   
19b60 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65      14  /* Store
19b70 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20   result as data 
19b80 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
19b90 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a  c rowid */../*.*
19ba0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
19bb0 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73   this object des
19bc0 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20  cribes where to 
19bd0 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c  put of the resul
19be0 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43  ts of.** a SELEC
19bf0 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  T statement..*/.
19c00 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
19c10 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20  t {.  u8 eDest; 
19c20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f             /* Ho
19c30 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20  w to dispose of 
19c40 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e  the results.  On
19c50 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e   of SRT_* above.
19c60 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64   */.  char affSd
19c70 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 66  st;        /* Af
19c80 66 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e  finity used when
19c90 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20   eDest==SRT_Set 
19ca0 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d  */.  int iSDParm
19cb0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70  ;         /* A p
19cc0 61 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79  arameter used by
19cd0 20 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f   the eDest dispo
19ce0 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20  sal method */.  
19cf0 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20  int iSdst;      
19d00 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
19d10 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75  ister where resu
19d20 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20  lts are written 
19d30 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20  */.  int nSdst; 
19d40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
19d50 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
19d60 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20   allocated */.  
19d70 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
19d80 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75  By;  /* Key colu
19d90 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75  mns for SRT_Queu
19da0 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75  e and SRT_DistQu
19db0 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  eue */.};../*.**
19dc0 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e   During code gen
19dd0 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65  eration of state
19de0 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e  ments that do in
19df0 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49  serts into AUTOI
19e00 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62  NCREMENT .** tab
19e10 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69  les, the followi
19e20 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ng information i
19e30 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
19e40 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e  e Table.u.autoIn
19e50 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f  c.p.** pointer o
19e60 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65  f each autoincre
19e70 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65  ment table to re
19e80 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69  cord some side i
19e90 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a  nformation that.
19ea0 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  ** the code gene
19eb0 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65  rator needs.  We
19ec0 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65   have to keep pe
19ed0 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72  r-table autoincr
19ee0 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ement.** informa
19ef0 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73  tion in case ins
19f00 65 72 74 73 20 61 72 65 20 64 6f 77 6e 20 77 69  erts are down wi
19f10 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20  thin triggers.  
19f20 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a  Triggers do not.
19f30 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72  ** normally coor
19f40 64 69 6e 61 74 65 20 74 68 65 69 72 20 61 63 74  dinate their act
19f50 69 76 69 74 69 65 73 2c 20 62 75 74 20 77 65 20  ivities, but we 
19f60 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64  do need to coord
19f70 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61  inate the.** loa
19f80 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20  ding and saving 
19f90 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  of autoincrement
19fa0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
19fb0 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49  .struct AutoincI
19fc0 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49  nfo {.  AutoincI
19fd0 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a  nfo *pNext;   /*
19fe0 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b   Next info block
19ff0 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68   in a list of th
1a000 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c  em all */.  Tabl
1a010 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
1a020 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20    /* Table this 
1a030 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72  info block refer
1a040 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44  s to */.  int iD
1a050 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
1a060 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69  /* Index in sqli
1a070 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74  te3.aDb[] of dat
1a080 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54  abase holding pT
1a090 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43  ab */.  int regC
1a0a0 74 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  tr;           /*
1a0b0 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   Memory register
1a0c0 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77   holding the row
1a0d0 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b  id counter */.};
1a0e0 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20  ../*.** Size of 
1a0f0 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65  the column cache
1a100 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
1a110 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20  TE_N_COLCACHE.# 
1a120 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f  define SQLITE_N_
1a130 43 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64  COLCACHE 10.#end
1a140 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61  if../*.** At lea
1a150 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20  st one instance 
1a160 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1a170 20 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72   structure is cr
1a180 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 0a  eated for each .
1a190 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61 74 20  ** trigger that 
1a1a0 6d 61 79 20 62 65 20 66 69 72 65 64 20 77 68 69  may be fired whi
1a1b0 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e  le parsing an IN
1a1c0 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20  SERT, UPDATE or 
1a1d0 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d  DELETE.** statem
1a1e0 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62  ent. All such ob
1a1f0 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72 65 64  jects are stored
1a200 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c   in the linked l
1a210 69 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a  ist headed at.**
1a220 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
1a230 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f  rg and deleted o
1a240 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  nce statement co
1a250 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65  mpilation has be
1a260 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e  en.** completed.
1a270 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75  .**.** A Vdbe su
1a280 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69  b-program that i
1a290 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f  mplements the bo
1a2a0 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75  dy and WHEN clau
1a2b0 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a  se of trigger.**
1a2c0 20 54 72 69 67 67 65 72 50 72 67 2e 70 54 72 69   TriggerPrg.pTri
1a2d0 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61  gger, assuming a
1a2e0 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   default ON CONF
1a2f0 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a  LICT clause of.*
1a300 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63  * TriggerPrg.orc
1a310 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69  onf, is stored i
1a320 6e 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67  n the TriggerPrg
1a330 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62  .pProgram variab
1a340 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65  le..** The Parse
1a350 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73  .pTriggerPrg lis
1a360 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73  t never contains
1a370 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74   two entries wit
1a380 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61  h the same.** va
1a390 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54  lues for both pT
1a3a0 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e  rigger and orcon
1a3b0 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69  f..**.** The Tri
1a3c0 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b  ggerPrg.aColmask
1a3d0 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20  [0] variable is 
1a3e0 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66  set to a mask of
1a3f0 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a   old.* columns.*
1a400 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72 20 73  * accessed (or s
1a410 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67  et to 0 for trig
1a420 67 65 72 73 20 66 69 72 65 64 20 61 73 20 61 20  gers fired as a 
1a430 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54  result of INSERT
1a440 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29   .** statements)
1a450 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65  . Similarly, the
1a460 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
1a470 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65  mask[1] variable
1a480 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20   is set to.** a 
1a490 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  mask of new.* co
1a4a0 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68  lumns used by th
1a4b0 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74  e program..*/.st
1a4c0 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20  ruct TriggerPrg 
1a4d0 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  {.  Trigger *pTr
1a4e0 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54  igger;      /* T
1a4f0 72 69 67 67 65 72 20 74 68 69 73 20 70 72 6f 67  rigger this prog
1a500 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72  ram was coded fr
1a510 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50  om */.  TriggerP
1a520 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  rg *pNext;      
1a530 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e  /* Next entry in
1a540 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
1a550 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62  rg list */.  Sub
1a560 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
1a570 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20  m;   /* Program 
1a580 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72  implementing pTr
1a590 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a  igger/orconf */.
1a5a0 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20    int orconf;   
1a5b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1a5c0 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
1a5d0 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32   policy */.  u32
1a5e0 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20   aColmask[2];   
1a5f0 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66       /* Masks of
1a600 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f   old.*, new.* co
1a610 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a  lumns accessed *
1a620 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
1a630 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65  yDbMask datatype
1a640 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b   for the bitmask
1a650 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64   of all attached
1a660 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
1a670 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  if SQLITE_MAX_AT
1a680 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65  TACHED>30.  type
1a690 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61  def unsigned cha
1a6a0 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54  r yDbMask[(SQLIT
1a6b0 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39  E_MAX_ATTACHED+9
1a6c0 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44  )/8];.# define D
1a6d0 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20  bMaskTest(M,I)  
1a6e0 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28    (((M)[(I)/8]&(
1a6f0 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29  1<<((I)&7)))!=0)
1a700 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1a710 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d  Zero(M)      mem
1a720 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66  set((M),0,sizeof
1a730 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62  (M)).# define Db
1a740 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20  MaskSet(M,I)    
1a750 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c   (M)[(I)/8]|=(1<
1a760 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65 66 69  <((I)&7)).# defi
1a770 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  ne DbMaskAllZero
1a780 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d  (M)   sqlite3DbM
1a790 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20  askAllZero(M).# 
1a7a0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e  define DbMaskNon
1a7b0 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74  Zero(M)   (sqlit
1a7c0 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e3DbMaskAllZero(
1a7d0 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74  M)==0).#else.  t
1a7e0 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20  ypedef unsigned 
1a7f0 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64  int yDbMask;.# d
1a800 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74  efine DbMaskTest
1a810 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28  (M,I)    (((M)&(
1a820 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49  ((yDbMask)1)<<(I
1a830 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65  )))!=0).# define
1a840 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20   DbMaskZero(M)  
1a850 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69      (M)=0.# defi
1a860 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49  ne DbMaskSet(M,I
1a870 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44  )     (M)|=(((yD
1a880 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23  bMask)1)<<(I)).#
1a890 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c   define DbMaskAl
1a8a0 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d  lZero(M)   (M)==
1a8b0 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  0.# define DbMas
1a8c0 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d  kNonZero(M)   (M
1a8d0 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  )!=0.#endif../*.
1a8e0 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72  ** An SQL parser
1a8f0 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70   context.  A cop
1a900 79 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  y of this struct
1a910 75 72 65 20 69 73 20 70 61 73 73 65 64 20 74 68  ure is passed th
1a920 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72  rough.** the par
1a930 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74  ser and down int
1a940 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72  o all the parser
1a950 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20   action routine 
1a960 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63  in order to.** c
1a970 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f  arry around info
1a980 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  rmation that is 
1a990 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e  global to the en
1a9a0 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a  tire parse..**.*
1a9b0 2a 20 54 68 65 20 73 74 72 75 63 74 75 72 65 20  * The structure 
1a9c0 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20  is divided into 
1a9d0 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e  two parts.  When
1a9e0 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20   the parser and 
1a9f0 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65  code.** generate
1aa00 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73   call themselves
1aa10 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68   recursively, th
1aa20 65 20 66 69 72 73 74 20 70 61 72 74 20 6f 66 20  e first part of 
1aa30 74 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  the structure.**
1aa40 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74   is constant but
1aa50 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74   the second part
1aa60 20 69 73 20 72 65 73 65 74 20 61 74 20 74 68 65   is reset at the
1aa70 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65   beginning and e
1aa80 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65  nd of.** each re
1aa90 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  cursion..**.** T
1aaa0 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e  he nTableLock an
1aab0 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72  d aTableLock var
1aac0 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20  iables are only 
1aad0 75 73 65 64 20 69 66 20 74 68 65 20 73 68 61 72  used if the shar
1aae0 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65 61  ed-cache .** fea
1aaf0 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20  ture is enabled 
1ab00 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28 29  (if sqlite3Tsd()
1ab10 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 20  ->useSharedData 
1ab20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20 61  is true). They a
1ab30 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74  re.** used to st
1ab40 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20 74  ore the set of t
1ab50 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69  able-locks requi
1ab60 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65  red by the state
1ab70 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f  ment being.** co
1ab80 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e  mpiled. Function
1ab90 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
1aba0 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 61  k() is used to a
1abb0 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68  dd entries to th
1abc0 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74  e.** list..*/.st
1abd0 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73  ruct Parse {.  s
1abe0 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
1abf0 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20      /* The main 
1ac00 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74 75  database structu
1ac10 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45  re */.  char *zE
1ac20 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20  rrMsg;       /* 
1ac30 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  An error message
1ac40 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62   */.  Vdbe *pVdb
1ac50 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e  e;         /* An
1ac60 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63   engine for exec
1ac70 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 62  uting database b
1ac80 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74  ytecode */.  int
1ac90 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
1aca0 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65    /* Return code
1acb0 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20   from execution 
1acc0 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73  */.  u8 colNames
1acd0 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55  Set;      /* TRU
1ace0 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d  E after OP_Colum
1acf0 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69  nName has been i
1ad00 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a  ssued to pVdbe *
1ad10 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68 65  /.  u8 checkSche
1ad20 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73  ma;      /* Caus
1ad30 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  es schema cookie
1ad40 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20   check after an 
1ad50 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65  error */.  u8 ne
1ad60 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  sted;           
1ad70 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
1ad80 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65  ted calls to the
1ad90 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e   parser/code gen
1ada0 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e  erator */.  u8 n
1adb0 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20  TempReg;        
1adc0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65   /* Number of te
1add0 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
1ade0 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20  s in aTempReg[] 
1adf0 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57  */.  u8 isMultiW
1ae00 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75  rite;     /* Tru
1ae10 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d  e if statement m
1ae20 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74  ay modify/insert
1ae30 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
1ae40 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b  /.  u8 mayAbort;
1ae50 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1ae60 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61   if statement ma
1ae70 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54  y throw an ABORT
1ae80 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20   exception */.  
1ae90 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20  u8 hasCompound; 
1aea0 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20       /* Need to 
1aeb0 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f  invoke convertCo
1aec0 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
1aed0 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38  bquery() */.  u8
1aee0 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20   okConstFactor; 
1aef0 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74     /* OK to fact
1af00 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73  or out constants
1af10 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70 52   */.  int aTempR
1af20 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f  eg[8];     /* Ho
1af30 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74  lding area for t
1af40 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
1af50 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e  rs */.  int nRan
1af60 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  geReg;       /* 
1af70 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70  Size of the temp
1af80 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62  orary register b
1af90 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52  lock */.  int iR
1afa0 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f  angeReg;       /
1afb0 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65 72  * First register
1afc0 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65   in temporary re
1afd0 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a  gister block */.
1afe0 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
1aff0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b000 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20   of errors seen 
1b010 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20  */.  int nTab;  
1b020 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1b030 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c  ber of previousl
1b040 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45  y allocated VDBE
1b050 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e   cursors */.  in
1b060 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t nMem;         
1b070 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1b080 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65  memory cells use
1b090 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  d so far */.  in
1b0a0 74 20 6e 53 65 74 3b 20 20 20 20 20 20 20 20 20  t nSet;         
1b0b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1b0c0 73 65 74 73 20 75 73 65 64 20 73 6f 20 66 61 72  sets used so far
1b0d0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b   */.  int nOnce;
1b0e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1b0f0 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20  mber of OP_Once 
1b100 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 73 6f 20  instructions so 
1b110 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70  far */.  int nOp
1b120 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a  Alloc;        /*
1b130 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73   Number of slots
1b140 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56   allocated for V
1b150 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69  dbe.aOp[] */.  i
1b160 6e 74 20 69 46 69 78 65 64 4f 70 3b 20 20 20 20  nt iFixedOp;    
1b170 20 20 20 20 2f 2a 20 4e 65 76 65 72 20 62 61 63      /* Never bac
1b180 6b 20 6f 75 74 20 6f 70 63 6f 64 65 73 20 69 46  k out opcodes iF
1b190 69 78 65 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c  ixedOp-1 or earl
1b1a0 69 65 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42  ier */.  int ckB
1b1b0 61 73 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ase;          /*
1b1c0 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20 6f   Base register o
1b1d0 66 20 64 61 74 61 20 64 75 72 69 6e 67 20 63 68  f data during ch
1b1e0 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  eck constraints 
1b1f0 2a 2f 0a 20 20 69 6e 74 20 69 50 61 72 74 49 64  */.  int iPartId
1b200 78 54 61 62 3b 20 20 20 20 20 2f 2a 20 54 61 62  xTab;     /* Tab
1b210 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  le corresponding
1b220 20 74 6f 20 61 20 70 61 72 74 69 61 6c 20 69 6e   to a partial in
1b230 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61  dex */.  int iCa
1b240 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a  cheLevel;     /*
1b250 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20   ColCache valid 
1b260 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d  when aColCache[]
1b270 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c  .iLevel<=iCacheL
1b280 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43  evel */.  int iC
1b290 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f  acheCnt;       /
1b2a0 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74  * Counter used t
1b2b0 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43  o generate aColC
1b2c0 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65  ache[].lru value
1b2d0 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65  s */.  int nLabe
1b2e0 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  l;          /* N
1b2f0 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20  umber of labels 
1b300 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  used */.  int *a
1b310 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f  Label;         /
1b320 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20  * Space to hold 
1b330 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20  the labels */.  
1b340 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65  struct yColCache
1b350 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c   {.    int iTabl
1b360 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
1b370 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d  Table cursor num
1b380 62 65 72 20 2a 2f 0a 20 20 20 20 69 31 36 20 69  ber */.    i16 i
1b390 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
1b3a0 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e   /* Table column
1b3b0 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75   number */.    u
1b3c0 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20  8 tempReg;      
1b3d0 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20       /* iReg is 
1b3e0 61 20 74 65 6d 70 20 72 65 67 69 73 74 65 72 20  a temp register 
1b3f0 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65  that needs to be
1b400 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e   freed */.    in
1b410 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  t iLevel;       
1b420 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c      /* Nesting l
1b430 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20  evel */.    int 
1b440 69 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20  iReg;           
1b450 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61    /* Reg with va
1b460 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  lue of this colu
1b470 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65  mn. 0 means none
1b480 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75  . */.    int lru
1b490 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1b4a0 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79  * Least recently
1b4b0 20 75 73 65 64 20 65 6e 74 72 79 20 68 61 73 20   used entry has 
1b4c0 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c  the smallest val
1b4d0 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61  ue */.  } aColCa
1b4e0 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  che[SQLITE_N_COL
1b4f0 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20  CACHE];  /* One 
1b500 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
1b510 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20  cache entry */. 
1b520 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73   ExprList *pCons
1b530 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e  tExpr;/* Constan
1b540 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  t expressions */
1b550 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61  .  Token constra
1b560 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20  intName;/* Name 
1b570 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  of the constrain
1b580 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  t currently bein
1b590 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44  g parsed */.  yD
1b5a0 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b  bMask writeMask;
1b5b0 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72     /* Start a wr
1b5c0 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
1b5d0 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62 61 73  on these databas
1b5e0 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20  es */.  yDbMask 
1b5f0 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20  cookieMask;  /* 
1b600 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d  Bitmask of schem
1b610 61 20 76 65 72 69 66 69 65 64 20 64 61 74 61 62  a verified datab
1b620 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f  ases */.  int co
1b630 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49 54 45  okieValue[SQLITE
1b640 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 32 5d  _MAX_ATTACHED+2]
1b650 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20  ;  /* Values of 
1b660 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72 69 66  cookies to verif
1b670 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  y */.  int regRo
1b680 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52  wid;        /* R
1b690 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1b6a0 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45 20  rowid of CREATE 
1b6b0 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20  TABLE entry */. 
1b6c0 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20   int regRoot;   
1b6d0 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
1b6e0 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70  r holding root p
1b6f0 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e  age number for n
1b700 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20  ew objects */.  
1b710 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20  int nMaxArg;    
1b720 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73       /* Max args
1b730 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72 20   passed to user 
1b740 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d  function by sub-
1b750 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53  program */.#if S
1b760 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
1b770 45 44 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74  ED.  int nSelect
1b780 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
1b790 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74  ber of SELECT st
1b7a0 61 74 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f  atements seen */
1b7b0 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e  .  int nSelectIn
1b7c0 64 65 6e 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66  dent;   /* How f
1b7d0 61 72 20 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c  ar to indent SEL
1b7e0 45 43 54 54 52 41 43 45 28 29 20 6f 75 74 70 75  ECTTRACE() outpu
1b7f0 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  t */.#endif.#ifn
1b800 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1b810 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69  SHARED_CACHE.  i
1b820 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20  nt nTableLock;  
1b830 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b840 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62  of locks in aTab
1b850 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c  leLock */.  Tabl
1b860 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63  eLock *aTableLoc
1b870 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74  k; /* Required t
1b880 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73  able locks for s
1b890 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
1b8a0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74   */.#endif.  Aut
1b8b0 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b  oincInfo *pAinc;
1b8c0 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
1b8d0 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45   about AUTOINCRE
1b8e0 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f  MENT counters */
1b8f0 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ..  /* Informati
1b900 6f 6e 20 75 73 65 64 20 77 68 69 6c 65 20 63 6f  on used while co
1b910 64 69 6e 67 20 74 72 69 67 67 65 72 20 70 72 6f  ding trigger pro
1b920 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73  grams. */.  Pars
1b930 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20  e *pToplevel;   
1b940 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74   /* Parse struct
1b950 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f  ure for main pro
1b960 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a  gram (or NULL) *
1b970 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67  /.  Table *pTrig
1b980 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c  gerTab;  /* Tabl
1b990 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62  e triggers are b
1b9a0 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a  eing coded for *
1b9b0 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54 61  /.  int addrCrTa
1b9c0 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72  b;       /* Addr
1b9d0 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65  ess of OP_Create
1b9e0 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20  Table opcode on 
1b9f0 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a  CREATE TABLE */.
1ba00 20 20 69 6e 74 20 61 64 64 72 53 6b 69 70 50 4b    int addrSkipPK
1ba10 3b 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73  ;      /* Addres
1ba20 73 20 6f 66 20 69 6e 73 74 72 75 63 74 69 6f 6e  s of instruction
1ba30 20 74 6f 20 73 6b 69 70 20 50 52 49 4d 41 52 59   to skip PRIMARY
1ba40 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 20 20   KEY index */.  
1ba50 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20  u32 nQueryLoop; 
1ba60 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62       /* Est numb
1ba70 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73  er of iterations
1ba80 20 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a   of a query (10*
1ba90 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33  log2(N)) */.  u3
1baa0 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20  2 oldmask;      
1bab0 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c     /* Mask of ol
1bac0 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  d.* columns refe
1bad0 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20  renced */.  u32 
1bae0 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  newmask;        
1baf0 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e   /* Mask of new.
1bb00 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
1bb10 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72  nced */.  u8 eTr
1bb20 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f  iggerOp;       /
1bb30 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  * TK_UPDATE, TK_
1bb40 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c  INSERT or TK_DEL
1bb50 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63  ETE */.  u8 eOrc
1bb60 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
1bb70 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
1bb80 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20  LICT policy for 
1bb90 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f  trigger steps */
1bba0 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69  .  u8 disableTri
1bbb0 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20  ggers;  /* True 
1bbc0 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67  to disable trigg
1bbd0 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a  ers */..  /*****
1bbe0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bbf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bc00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bc10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bc20 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69  ***.  ** Above i
1bc30 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65  s constant betwe
1bc40 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20  en recursions.  
1bc50 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62  Below is reset b
1bc60 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a  efore and after.
1bc70 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73    ** each recurs
1bc80 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61  ion.  The bounda
1bc90 72 79 20 62 65 74 77 65 65 6e 20 74 68 65 73 65  ry between these
1bca0 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20   two regions is 
1bcb0 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20  determined.  ** 
1bcc0 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50  using offsetof(P
1bcd0 61 72 73 65 2c 6e 56 61 72 29 20 73 6f 20 74 68  arse,nVar) so th
1bce0 65 20 6e 56 61 72 20 66 69 65 6c 64 20 6d 75 73  e nVar field mus
1bcf0 74 20 62 65 20 74 68 65 20 66 69 72 73 74 20 66  t be the first f
1bd00 69 65 6c 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65  ield.  ** in the
1bd10 20 72 65 63 75 72 73 69 76 65 20 72 65 67 69 6f   recursive regio
1bd20 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
1bd30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bd40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bd50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bd60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
1bd70 20 20 69 6e 74 20 6e 56 61 72 3b 20 20 20 20 20    int nVar;     
1bd80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1bd90 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72  umber of '?' var
1bda0 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74  iables seen in t
1bdb0 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f  he SQL so far */
1bdc0 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20  .  int nzVar;   
1bdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1bde0 4e 75 6d 62 65 72 20 6f 66 20 61 76 61 69 6c 61  Number of availa
1bdf0 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56  ble slots in azV
1be00 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b  ar[] */.  u8 iPk
1be10 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
1be20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45      /* ASC or DE
1be30 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50  SC for INTEGER P
1be40 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20  RIMARY KEY */.  
1be50 75 38 20 62 46 72 65 65 57 69 74 68 3b 20 20 20  u8 bFreeWith;   
1be60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1be70 65 20 69 66 20 70 57 69 74 68 20 73 68 6f 75 6c  e if pWith shoul
1be80 64 20 62 65 20 66 72 65 65 64 20 77 69 74 68 20  d be freed with 
1be90 70 61 72 73 65 72 20 2a 2f 0a 20 20 75 38 20 65  parser */.  u8 e
1bea0 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20  xplain;         
1beb0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1bec0 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61   the EXPLAIN fla
1bed0 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68  g is found on th
1bee0 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64  e query */.#ifnd
1bef0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
1bf00 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75 38  IRTUALTABLE.  u8
1bf10 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20 20 20   declareVtab;   
1bf20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1bf30 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69 74 65  if inside sqlite
1bf40 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
1bf50 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c   */.  int nVtabL
1bf60 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ock;            
1bf70 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72  /* Number of vir
1bf80 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c  tual tables to l
1bf90 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ock */.#endif.  
1bfa0 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20 20 20  int nAlias;     
1bfb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1bfc0 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64 20 72  ber of aliased r
1bfd0 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e  esult set column
1bfe0 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67  s */.  int nHeig
1bff0 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ht;             
1c000 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74   /* Expression t
1c010 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63 75  ree height of cu
1c020 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74  rrent sub-select
1c030 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
1c040 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
1c050 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64 3b    int iSelectId;
1c060 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1c070 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65 6c  D of current sel
1c080 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e 20  ect for EXPLAIN 
1c090 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20  output */.  int 
1c0a0 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20 20  iNextSelectId;  
1c0b0 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61 76        /* Next av
1c0c0 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20 49  ailable select I
1c0d0 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75  D for EXPLAIN ou
1c0e0 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  tput */.#endif. 
1c0f0 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20   char **azVar;  
1c100 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f             /* Po
1c110 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65 73 20  inters to names 
1c120 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f  of parameters */
1c130 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65 70  .  Vdbe *pReprep
1c140 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  are;         /* 
1c150 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70 61  VM being reprepa
1c160 72 65 64 20 28 73 71 6c 69 74 65 33 52 65 70 72  red (sqlite3Repr
1c170 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f  epare()) */.  co
1c180 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b  nst char *zTail;
1c190 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53          /* All S
1c1a0 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65  QL text past the
1c1b0 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20   last semicolon 
1c1c0 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c  parsed */.  Tabl
1c1d0 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20  e *pNewTable;   
1c1e0 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65        /* A table
1c1f0 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74   being construct
1c200 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42  ed by CREATE TAB
1c210 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  LE */.  Trigger 
1c220 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20  *pNewTrigger;   
1c230 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64    /* Trigger und
1c240 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20  er construct by 
1c250 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  a CREATE TRIGGER
1c260 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1c270 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
1c280 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d  /* The 6th param
1c290 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74  eter to db->xAut
1c2a0 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20  h callbacks */. 
1c2b0 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65   Token sNameToke
1c2c0 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f  n;         /* To
1c2d0 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69  ken with unquali
1c2e0 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65  fied schema obje
1c2f0 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b  ct name */.  Tok
1c300 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20  en sLastToken;  
1c310 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61         /* The la
1c320 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20  st token parsed 
1c330 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1c340 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
1c350 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67  BLE.  Token sArg
1c360 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1c370 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74  /* Complete text
1c380 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67   of a module arg
1c390 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65  ument */.  Table
1c3a0 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20   **apVtabLock;  
1c3b0 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
1c3c0 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  to virtual table
1c3d0 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e  s needing lockin
1c3e0 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61  g */.#endif.  Ta
1c3f0 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b  ble *pZombieTab;
1c400 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
1c410 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  of Table objects
1c420 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72   to delete after
1c430 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54   code gen */.  T
1c440 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69 67  riggerPrg *pTrig
1c450 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b  gerPrg;  /* Link
1c460 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64  ed list of coded
1c470 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20 57   triggers */.  W
1c480 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20  ith *pWith;     
1c490 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
1c4a0 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65 2c  ent WITH clause,
1c4b0 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a 0a   or NULL */.};..
1c4c0 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
1c4d0 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69  e if currently i
1c4e0 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33  nside an sqlite3
1c4f0 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20  _declare_vtab() 
1c500 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  call..*/.#ifdef 
1c510 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1c520 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69  UALTABLE.  #defi
1c530 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54  ne IN_DECLARE_VT
1c540 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65  AB 0.#else.  #de
1c550 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
1c560 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65  VTAB (pParse->de
1c570 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69  clareVtab).#endi
1c580 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
1c590 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1c5a0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1c5b0 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20  can be declared 
1c5c0 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75  on a stack and u
1c5d0 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74  sed.** to save t
1c5e0 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  he Parse.zAuthCo
1c5f0 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74  ntext value so t
1c600 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65  hat it can be re
1c610 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f  stored later..*/
1c620 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74  .struct AuthCont
1c630 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ext {.  const ch
1c640 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
1c650 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64  ;   /* Put saved
1c660 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
1c670 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61  ext here */.  Pa
1c680 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
1c690 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1c6a0 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
1c6b0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69   */.};../*.** Bi
1c6c0 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72  tfield flags for
1c6d0 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72   P5 value in var
1c6e0 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f  ious opcodes..*/
1c6f0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1c700 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78  NCHANGE       0x
1c710 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20  01    /* Set to 
1c720 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e  update db->nChan
1c730 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ge */.#define OP
1c740 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20  FLAG_EPHEM      
1c750 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
1c760 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72  _Column: Ephemer
1c770 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20  al output is ok 
1c780 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1c790 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20  G_LASTROWID     
1c7a0 30 78 30 32 20 20 20 20 2f 2a 20 53 65 74 20 74  0x02    /* Set t
1c7b0 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73  o update db->las
1c7c0 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e  tRowid */.#defin
1c7d0 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  e OPFLAG_ISUPDAT
1c7e0 45 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f  E      0x04    /
1c7f0 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74  * This OP_Insert
1c800 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54   is an sql UPDAT
1c810 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E */.#define OPF
1c820 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20  LAG_APPEND      
1c830 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69    0x08    /* Thi
1c840 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62  s is likely to b
1c850 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23  e an append */.#
1c860 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53  define OPFLAG_US
1c870 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30  ESEEKRESULT 0x10
1c880 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76      /* Try to av
1c890 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74  oid a seek in Bt
1c8a0 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23  reeInsert() */.#
1c8b0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45  define OPFLAG_LE
1c8c0 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34 30  NGTHARG     0x40
1c8d0 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
1c8e0 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c   only used for l
1c8f0 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69  ength() */.#defi
1c900 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  ne OPFLAG_TYPEOF
1c910 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20 20  ARG     0x80    
1c920 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
1c930 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f  y used for typeo
1c940 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  f() */.#define O
1c950 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20  PFLAG_BULKCSR   
1c960 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
1c970 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f  P_Open** used to
1c980 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f   open bulk curso
1c990 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
1c9a0 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20  LAG_P2ISREG     
1c9b0 20 20 30 78 30 32 20 20 20 20 2f 2a 20 50 32 20    0x02    /* P2 
1c9c0 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20  to OP_Open** is 
1c9d0 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  a register numbe
1c9e0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
1c9f0 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20  LAG_PERMUTE     
1ca00 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
1ca10 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65  Compare: use the
1ca20 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a   permutation */.
1ca30 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67  ./*. * Each trig
1ca40 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ger present in t
1ca50 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
1ca60 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  ma is stored as 
1ca70 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20  an instance of. 
1ca80 2a 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  * struct Trigger
1ca90 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72  . . *. * Pointer
1caa0 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f  s to instances o
1cab0 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1cac0 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
1cad0 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49  wo ways.. * 1. I
1cae0 6e 20 74 68 65 20 22 74 72 69 67 48 61 73 68 22  n the "trigHash"
1caf0 20 68 61 73 68 20 74 61 62 6c 65 20 28 70 61 72   hash table (par
1cb00 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  t of the sqlite3
1cb10 2a 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74  * that represent
1cb20 73 20 74 68 65 20 0a 20 2a 20 20 20 20 64 61 74  s the . *    dat
1cb30 61 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c  abase). This all
1cb40 6f 77 73 20 54 72 69 67 67 65 72 20 73 74 72 75  ows Trigger stru
1cb50 63 74 75 72 65 73 20 74 6f 20 62 65 20 72 65 74  ctures to be ret
1cb60 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a  rieved by name..
1cb70 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65   * 2. All trigge
1cb80 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  rs associated wi
1cb90 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  th a single tabl
1cba0 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20  e form a linked 
1cbb0 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a  list, using the.
1cbc0 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62   *    pNext memb
1cbd0 65 72 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  er of struct Tri
1cbe0 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20  gger. A pointer 
1cbf0 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
1cc00 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20  ment of the. *  
1cc10 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73    linked list is
1cc20 20 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 22   stored as the "
1cc30 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72  pTrigger" member
1cc40 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74   of the associat
1cc50 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20  ed. *    struct 
1cc60 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65  Table.. *. * The
1cc70 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d   "step_list" mem
1cc80 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  ber points to th
1cc90 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
1cca0 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  of a linked list
1ccb0 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  . * containing t
1ccc0 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
1ccd0 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  s specified as t
1cce0 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
1ccf0 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54  am.. */.struct T
1cd00 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20  rigger {.  char 
1cd10 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
1cd20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f     /* The name o
1cd30 66 20 74 68 65 20 74 72 69 67 67 65 72 20 20 20  f the trigger   
1cd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd50 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a       */.  char *
1cd60 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  table;          
1cd70 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f    /* The table o
1cd80 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20  r view to which 
1cd90 74 68 65 20 74 72 69 67 67 65 72 20 61 70 70 6c  the trigger appl
1cda0 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ies */.  u8 op; 
1cdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cdc0 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
1cdd0 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
1cde0 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20   TK_INSERT      
1cdf0 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d     */.  u8 tr_tm
1ce00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ce10 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45  /* One of TRIGGE
1ce20 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45  R_BEFORE, TRIGGE
1ce30 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70  R_AFTER */.  Exp
1ce40 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20  r *pWhen;       
1ce50 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e       /* The WHEN
1ce60 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65   clause of the e
1ce70 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62  xpression (may b
1ce80 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c  e NULL) */.  IdL
1ce90 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20  ist *pColumns;  
1cea0 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20       /* If this 
1ceb0 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20  is an UPDATE OF 
1cec0 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72  <column-list> tr
1ced0 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20  igger,.         
1cee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cef0 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d      the <column-
1cf00 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20  list> is stored 
1cf10 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  here */.  Schema
1cf20 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
1cf30 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
1cf40 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67  aining the trigg
1cf50 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  er */.  Schema *
1cf60 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20  pTabSchema;     
1cf70 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
1cf80 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a  ning the table *
1cf90 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
1cfa0 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c  *step_list; /* L
1cfb0 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67  ink list of trig
1cfc0 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70  ger program step
1cfd0 73 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f  s             */
1cfe0 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78  .  Trigger *pNex
1cff0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
1d000 78 74 20 74 72 69 67 67 65 72 20 61 73 73 6f 63  xt trigger assoc
1d010 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74  iated with the t
1d020 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  able */.};../*.*
1d030 2a 20 41 20 74 72 69 67 67 65 72 20 69 73 20 65  * A trigger is e
1d040 69 74 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f  ither a BEFORE o
1d050 72 20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67  r an AFTER trigg
1d060 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  er.  The followi
1d070 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20  ng constants.** 
1d080 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e  determine which.
1d090 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65   .**.** If there
1d0a0 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72   are multiple tr
1d0b0 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68  iggers, you migh
1d0c0 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45  t of some BEFORE
1d0d0 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e   and some AFTER.
1d0e0 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65  .** In that case
1d0f0 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73  s, the constants
1d100 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52   below can be OR
1d110 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a  ed together..*/.
1d120 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f  #define TRIGGER_
1d130 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e  BEFORE  1.#defin
1d140 65 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20  e TRIGGER_AFTER 
1d150 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e    2../*. * An in
1d160 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74  stance of struct
1d170 20 54 72 69 67 67 65 72 53 74 65 70 20 69 73 20   TriggerStep is 
1d180 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20  used to store a 
1d190 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65  single SQL state
1d1a0 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20  ment. * that is 
1d1b0 61 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67  a part of a trig
1d1c0 67 65 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a  ger-program. . *
1d1d0 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66  . * Instances of
1d1e0 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
1d1f0 74 65 70 20 61 72 65 20 73 74 6f 72 65 64 20 69  tep are stored i
1d200 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65  n a singly linke
1d210 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20  d list (linked. 
1d220 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65  * using the "pNe
1d230 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65  xt" member) refe
1d240 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 22 73  renced by the "s
1d250 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
1d260 20 6f 66 20 74 68 65 20 0a 20 2a 20 61 73 73 6f   of the . * asso
1d270 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54 72  ciated struct Tr
1d280 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20  igger instance. 
1d290 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
1d2a0 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20  t of the linked 
1d2b0 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66  list is. * the f
1d2c0 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68 65  irst step of the
1d2d0 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
1d2e0 2e 0a 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70  .. * . * The "op
1d2f0 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74  " member indicat
1d300 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20  es whether this 
1d310 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22  is a "DELETE", "
1d320 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45  INSERT", "UPDATE
1d330 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22  " or. * "SELECT"
1d340 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20   statement. The 
1d350 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20  meanings of the 
1d360 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73  other members is
1d370 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
1d380 68 65 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20  he . * value of 
1d390 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  "op" as follows:
1d3a0 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
1d3b0 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f  _INSERT). * orco
1d3c0 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20  nf    -> stores 
1d3d0 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
1d3e0 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65  algorithm. * pSe
1d3f0 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69  lect   -> If thi
1d400 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
1d410 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e  NTO ... SELECT .
1d420 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  .. statement, th
1d430 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  en. *           
1d440 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61     this stores a
1d450 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
1d460 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1d470 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c  . Otherwise NULL
1d480 2e 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d  .. * target    -
1d490 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e  > A token holdin
1d4a0 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d  g the quoted nam
1d4b0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
1d4c0 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20  o insert into.. 
1d4d0 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49  * pExprList -> I
1d4e0 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
1d4f0 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c  ERT INTO ... VAL
1d500 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e  UES ... statemen
1d510 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20  t, then. *      
1d520 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f          this sto
1d530 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65  res values to be
1d540 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72   inserted. Other
1d550 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49  wise NULL.. * pI
1d560 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68  dList   -> If th
1d570 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
1d580 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d  INTO ... (<colum
1d590 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53  n-names>) VALUES
1d5a0 20 2e 2e 2e 20 0a 20 2a 20 20 20 20 20 20 20 20   ... . *        
1d5b0 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c        statement,
1d5c0 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65   then this store
1d5d0 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d  s the column-nam
1d5e0 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20  es to be. *     
1d5f0 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74 65           inserte
1d600 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f  d into.. *. * (o
1d610 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a  p == TK_DELETE).
1d620 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20   * target    -> 
1d630 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20  A token holding 
1d640 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20  the quoted name 
1d650 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
1d660 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20  delete from.. * 
1d670 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65  pWhere    -> The
1d680 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66   WHERE clause of
1d690 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74   the DELETE stat
1d6a0 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20  ement if one is 
1d6b0 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20  specified.. *   
1d6c0 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72             Other
1d6d0 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20  wise NULL.. * . 
1d6e0 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41  * (op == TK_UPDA
1d6f0 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20  TE). * target   
1d700 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64   -> A token hold
1d710 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e  ing the quoted n
1d720 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
1d730 20 74 6f 20 75 70 64 61 74 65 20 72 6f 77 73 20   to update rows 
1d740 6f 66 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  of.. * pWhere   
1d750 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
1d760 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41  ause of the UPDA
1d770 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
1d780 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
1d790 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
1d7a0 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
1d7b0 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d  .. * pExprList -
1d7c0 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20  > A list of the 
1d7d0 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74  columns to updat
1d7e0 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73  e and the expres
1d7f0 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a  sions to update.
1d800 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1d810 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c  them to. See sql
1d820 69 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63  ite3Update() doc
1d830 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70  umentation of "p
1d840 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20  Changes". *     
1d850 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e           argumen
1d860 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63  t.. * . */.struc
1d870 74 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a  t TriggerStep {.
1d880 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
1d890 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
1d8a0 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
1d8b0 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
1d8c0 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20  , TK_SELECT */. 
1d8d0 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20   u8 orconf;     
1d8e0 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c        /* OE_Roll
1d8f0 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54  back etc. */.  T
1d900 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20  rigger *pTrig;  
1d910 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67      /* The trigg
1d920 65 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65  er that this ste
1d930 70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a  p is a part of *
1d940 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
1d950 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45  ect;     /* SELE
1d960 43 54 20 73 74 61 74 6d 65 6e 74 20 6f 72 20 52  CT statment or R
1d970 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54  HS of INSERT INT
1d980 4f 20 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20  O .. SELECT ... 
1d990 2a 2f 0a 20 20 54 6f 6b 65 6e 20 74 61 72 67 65  */.  Token targe
1d9a0 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61 72  t;        /* Tar
1d9b0 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45  get table for DE
1d9c0 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e  LETE, UPDATE, IN
1d9d0 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a  SERT */.  Expr *
1d9e0 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f  pWhere;        /
1d9f0 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  * The WHERE clau
1da00 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72  se for DELETE or
1da10 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f   UPDATE steps */
1da20 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78  .  ExprList *pEx
1da30 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63  prList; /* SET c
1da40 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54 45  lause for UPDATE
1da50 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70  . */.  IdList *p
1da60 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43  IdList;     /* C
1da70 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20  olumn names for 
1da80 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67  INSERT */.  Trig
1da90 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20  gerStep *pNext; 
1daa0 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20   /* Next in the 
1dab0 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54  link-list */.  T
1dac0 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73  riggerStep *pLas
1dad0 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d  t;  /* Last elem
1dae0 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74  ent in link-list
1daf0 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20  . Valid for 1st 
1db00 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a  elem only */.};.
1db10 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
1db20 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
1db30 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
1db40 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
1db50 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20  sqliteFix....** 
1db60 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79  routines as they
1db70 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20   walk the parse 
1db80 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74  tree to make dat
1db90 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73  abase references
1dba0 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a  .** explicit.  .
1dbb0 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
1dbc0 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65  t DbFixer DbFixe
1dbd0 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65  r;.struct DbFixe
1dbe0 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  r {.  Parse *pPa
1dbf0 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rse;      /* The
1dc00 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74   parsing context
1dc10 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  .  Error message
1dc20 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a  s written here *
1dc30 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
1dc40 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69  ema;    /* Fix i
1dc50 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68  tems to this sch
1dc60 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61  ema */.  int bVa
1dc70 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20  rOnly;       /* 
1dc80 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62  Check for variab
1dc90 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e  le references on
1dca0 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ly */.  const ch
1dcb0 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d  ar *zDb;    /* M
1dcc0 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a  ake sure all obj
1dcd0 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e  ects are contain
1dce0 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61 62  ed in this datab
1dcf0 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ase */.  const c
1dd00 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20  har *zType;  /* 
1dd10 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Type of the cont
1dd20 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
1dd30 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
1dd40 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  */.  const Token
1dd50 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65   *pName; /* Name
1dd60 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
1dd70 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
1dd80 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d  or messages */.}
1dd90 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65  ;../*.** An obje
1dda0 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63 63  cted used to acc
1ddb0 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78 74  umulate the text
1ddc0 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68 65   of a string whe
1ddd0 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20  re we.** do not 
1dde0 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77  necessarily know
1ddf0 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74 72   how big the str
1de00 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74  ing will be in t
1de10 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63  he end..*/.struc
1de20 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73  t StrAccum {.  s
1de30 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
1de40 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
1de50 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f  database for loo
1de60 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20  kaside.  Can be 
1de70 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a  NULL */.  char *
1de80 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f  zBase;         /
1de90 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74  * A base allocat
1dea0 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d  ion.  Not from m
1deb0 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72  alloc. */.  char
1dec0 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20   *zText;        
1ded0 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63   /* The string c
1dee0 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20  ollected so far 
1def0 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61 72 3b  */.  int  nChar;
1df00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
1df10 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e  gth of the strin
1df20 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  g so far */.  in
1df30 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  t  nAlloc;      
1df40 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20     /* Amount of 
1df50 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  space allocated 
1df60 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e  in zText */.  in
1df70 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20  t  mxAlloc;     
1df80 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c     /* Maximum al
1df90 6c 6f 77 65 64 20 73 74 72 69 6e 67 20 6c 65 6e  lowed string len
1dfa0 67 74 68 20 2a 2f 0a 20 20 75 38 20 20 20 75 73  gth */.  u8   us
1dfb0 65 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a  eMalloc;      /*
1dfc0 20 30 3a 20 6e 6f 6e 65 2c 20 20 31 3a 20 73 71   0: none,  1: sq
1dfd0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20 20  lite3DbMalloc,  
1dfe0 32 3a 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  2: sqlite3_mallo
1dff0 63 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63 45  c */.  u8   accE
1e000 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 53  rror;       /* S
1e010 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72  TRACCUM_NOMEM or
1e020 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47   STRACCUM_TOOBIG
1e030 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53   */.};.#define S
1e040 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20  TRACCUM_NOMEM   
1e050 31 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43  1.#define STRACC
1e060 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a 0a 2f 2a  UM_TOOBIG  2../*
1e070 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  .** A pointer to
1e080 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
1e090 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75  is used to commu
1e0a0 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69  nicate informati
1e0b0 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74  on.** from sqlit
1e0c0 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61  e3Init and OP_Pa
1e0d0 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74  rseSchema into t
1e0e0 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  he sqlite3InitCa
1e0f0 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64  llback..*/.typed
1e100 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71  ef struct {.  sq
1e110 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
1e120 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
1e130 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  e being initiali
1e140 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  zed */.  char **
1e150 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20  pzErrMsg;    /* 
1e160 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  Error message st
1e170 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69  ored here */.  i
1e180 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  nt iDb;         
1e190 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e     /* 0 for main
1e1a0 20 64 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f   database.  1 fo
1e1b0 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20  r TEMP, 2.. for 
1e1c0 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e  ATTACHed */.  in
1e1d0 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
1e1e0 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65    /* Result code
1e1f0 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
1e200 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a  } InitData;../*.
1e210 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e  ** Structure con
1e220 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63  taining global c
1e230 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74  onfiguration dat
1e240 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  a for the SQLite
1e250 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20   library..**.** 
1e260 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61  This structure a
1e270 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d  lso contains som
1e280 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74  e state informat
1e290 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
1e2a0 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20  qlite3Config {. 
1e2b0 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20   int bMemstat;  
1e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2d0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
1e2e0 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74  able memory stat
1e2f0 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72  us */.  int bCor
1e300 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  eMutex;         
1e310 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1e320 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65  e to enable core
1e330 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69   mutexing */.  i
1e340 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20  nt bFullMutex;  
1e350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e360 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
1e370 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67  le full mutexing
1e380 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55   */.  int bOpenU
1e390 72 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ri;             
1e3a0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1e3b0 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c  to interpret fil
1e3c0 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a  enames as URIs *
1e3d0 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b  /.  int bUseCis;
1e3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3f0 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76        /* Use cov
1e400 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f  ering indices fo
1e410 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a  r full-scans */.
1e420 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20    int mxStrlen; 
1e430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e440 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73      /* Maximum s
1e450 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a  tring length */.
1e460 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75    int neverCorru
1e470 70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pt;             
1e480 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
1e490 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66  is always well-f
1e4a0 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73  ormed */.  int s
1e4b0 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20  zLookaside;     
1e4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e4d0 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
1e4e0 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f  e buffer size */
1e4f0 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64  .  int nLookasid
1e500 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1e510 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
1e520 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
1e530 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 73 71 6c 69   count */.  sqli
1e540 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
1e550 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
1e560 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72   Low-level memor
1e570 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74  y allocation int
1e580 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
1e590 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
1e5a0 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a  s mutex;      /*
1e5b0 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78   Low-level mutex
1e5c0 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
1e5d0 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d  sqlite3_pcache_m
1e5e0 65 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b  ethods2 pcache2;
1e5f0 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70    /* Low-level p
1e600 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66  age-cache interf
1e610 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
1e620 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
1e630 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65             /* He
1e640 61 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65  ap storage space
1e650 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b   */.  int nHeap;
1e660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e670 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
1e680 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20  of pHeap[] */.  
1e690 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71  int mnReq, mxReq
1e6a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e6b0 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78    /* Min and max
1e6c0 20 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73   heap requests s
1e6d0 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  izes */.  sqlite
1e6e0 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20  3_int64 szMmap; 
1e6f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d              /* m
1e700 6d 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20  map() space per 
1e710 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73  open file */.  s
1e720 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d  qlite3_int64 mxM
1e730 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
1e740 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75   /* Maximum valu
1e750 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a  e for szMmap */.
1e760 20 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63 68    void *pScratch
1e770 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e780 20 20 20 20 2f 2a 20 53 63 72 61 74 63 68 20 6d      /* Scratch m
1e790 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
1e7a0 7a 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  zScratch;       
1e7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e7c0 53 69 7a 65 20 6f 66 20 65 61 63 68 20 73 63 72  Size of each scr
1e7d0 61 74 63 68 20 62 75 66 66 65 72 20 2a 2f 0a 20  atch buffer */. 
1e7e0 20 69 6e 74 20 6e 53 63 72 61 74 63 68 3b 20 20   int nScratch;  
1e7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e800 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1e810 73 63 72 61 74 63 68 20 62 75 66 66 65 72 73 20  scratch buffers 
1e820 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65  */.  void *pPage
1e830 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e840 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63         /* Page c
1e850 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20  ache memory */. 
1e860 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20   int szPage;    
1e870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e880 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
1e890 63 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65  ch page in pPage
1e8a0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67  [] */.  int nPag
1e8b0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1e8c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1e8d0 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
1e8e0 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pPage[] */.  int
1e8f0 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20   mxParserStack; 
1e900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e910 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20  * maximum depth 
1e920 6f 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74  of the parser st
1e930 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61  ack */.  int sha
1e940 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b  redCacheEnabled;
1e950 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72             /* tr
1e960 75 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63  ue if shared-cac
1e970 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20  he mode enabled 
1e980 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b 20  */.  u32 szPma; 
1e990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9a0 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
1e9b0 6d 20 53 6f 72 74 65 72 20 50 4d 41 20 73 69 7a  m Sorter PMA siz
1e9c0 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62  e */.  /* The ab
1e9d0 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69  ove might be ini
1e9e0 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d  tialized to non-
1e9f0 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  zero.  The follo
1ea00 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77  wing need to alw
1ea10 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c  ays.  ** initial
1ea20 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65  ly be zero, howe
1ea30 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ver. */.  int is
1ea40 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
1ea50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1ea60 72 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61  rue after initia
1ea70 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e  lization has fin
1ea80 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  ished */.  int i
1ea90 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20  nProgress;      
1eaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1eab0 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69  True while initi
1eac0 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f  alization in pro
1ead0 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69  gress */.  int i
1eae0 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20  sMutexInit;     
1eaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1eb00 54 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78  True after mutex
1eb10 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  es are initializ
1eb20 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61  ed */.  int isMa
1eb30 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20  llocInit;       
1eb40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1eb50 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69  e after malloc i
1eb60 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  s initialized */
1eb70 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49  .  int isPCacheI
1eb80 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
1eb90 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
1eba0 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
1ebb0 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
1ebc0 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b  t nRefInitMutex;
1ebd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebe0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65  /* Number of use
1ebf0 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78  rs of pInitMutex
1ec00 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
1ec10 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b  tex *pInitMutex;
1ec20 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78          /* Mutex
1ec30 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
1ec40 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f  _initialize() */
1ec50 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28  .  void (*xLog)(
1ec60 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
1ec70 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74  char*); /* Funct
1ec80 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20  ion for logging 
1ec90 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41  */.  void *pLogA
1eca0 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
1ecb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
1ecc0 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78  st argument to x
1ecd0 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20  Log() */.#ifdef 
1ece0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51  SQLITE_ENABLE_SQ
1ecf0 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71  LLOG.  void(*xSq
1ed00 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69  llog)(void*,sqli
1ed10 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
1ed20 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a  , int);.  void *
1ed30 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64  pSqllogArg;.#end
1ed40 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
1ed50 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20  _VDBE_COVERAGE. 
1ed60 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
1ed70 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e  g callback (if n
1ed80 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f  ot NULL) is invo
1ed90 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42  ked on every VDB
1eda0 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70  E branch.  ** op
1edb0 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68  eration.  Set th
1edc0 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67  e callback using
1edd0 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
1ede0 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a  _VDBE_COVERAGE..
1edf0 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56    */.  void (*xV
1ee00 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a  dbeBranch)(void*
1ee10 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75 38  ,int iSrcLine,u8
1ee20 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20   eThis,u8 eMx); 
1ee30 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a   /* Callback */.
1ee40 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61    void *pVdbeBra
1ee50 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20  nchArg;         
1ee60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
1ee80 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23  st argument */.#
1ee90 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
1eea0 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
1eeb0 4e 5f 54 45 53 54 0a 20 20 69 6e 74 20 28 2a 78  N_TEST.  int (*x
1eec0 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e  TestCallback)(in
1eed0 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  t);        /* In
1eee0 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74 65 33  voked by sqlite3
1eef0 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65  FaultSim() */.#e
1ef00 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61  ndif.  int bLoca
1ef10 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20  ltimeFault;     
1ef20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1ef30 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69   to fail localti
1ef40 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 7d 3b  me() calls */.};
1ef50 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63  ../*.** This mac
1ef60 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64  ro is used insid
1ef70 65 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74  e of assert() st
1ef80 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69  atements to indi
1ef90 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65  cate that.** the
1efa0 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20   assert is only 
1efb0 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d  valid on a well-
1efc0 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e  formed database.
1efd0 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a    Instead of:.**
1efe0 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
1eff0 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77  X );.**.** One w
1f000 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  rites:.**.**    
1f010 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f   assert( X || CO
1f020 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a  RRUPT_DB );.**.*
1f030 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20  * CORRUPT_DB is 
1f040 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d  true during norm
1f050 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43  al operation.  C
1f060 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e  ORRUPT_DB does n
1f070 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74  ot indicate.** t
1f080 68 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65  hat the database
1f090 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63   is definitely c
1f0a0 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61  orrupt, only tha
1f0b0 74 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f  t it might be co
1f0c0 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f  rrupt..** For mo
1f0d0 73 74 20 74 65 73 74 20 63 61 73 65 73 2c 20 43  st test cases, C
1f0e0 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73 65 74  ORRUPT_DB is set
1f0f0 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20   to false using 
1f100 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c  a special.** sql
1f110 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
1f120 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c  l().  This enabl
1f130 65 73 20 61 73 73 65 72 74 28 29 20 73 74 61 74  es assert() stat
1f140 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a  ements to prove.
1f150 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20 61  ** things that a
1f160 72 65 20 61 6c 77 61 79 73 20 74 72 75 65 20 66  re always true f
1f170 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64  or well-formed d
1f180 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65  atabases..*/.#de
1f190 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20  fine CORRUPT_DB 
1f1a0 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e   (sqlite3Config.
1f1b0 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29  neverCorrupt==0)
1f1c0 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20  ../*.** Context 
1f1d0 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64  pointer passed d
1f1e0 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20  own through the 
1f1f0 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74  tree-walk..*/.st
1f200 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20  ruct Walker {.  
1f210 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62  int (*xExprCallb
1f220 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78  ack)(Walker*, Ex
1f230 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c  pr*);     /* Cal
1f240 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73  lback for expres
1f250 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28  sions */.  int (
1f260 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b  *xSelectCallback
1f270 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74  )(Walker*,Select
1f280 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b  *);  /* Callback
1f290 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a   for SELECTs */.
1f2a0 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63 74    void (*xSelect
1f2b0 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65  Callback2)(Walke
1f2c0 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53  r*,Select*);/* S
1f2d0 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66  econd callback f
1f2e0 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20  or SELECTs */.  
1f2f0 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
1f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f310 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
1f320 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f  ser context.  */
1f330 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70  .  int walkerDep
1f340 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  th;             
1f350 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f360 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65  Number of subque
1f370 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f  ries */.  u8 eCo
1f380 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
1f390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3a0 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70      /* A small p
1f3b0 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a  rocessing code *
1f3c0 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20  /.  union {     
1f3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f3f0 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20   Extra data for 
1f400 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20  callback */.    
1f410 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43  NameContext *pNC
1f420 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f430 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
1f440 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  ming context */.
1f450 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20      int n;      
1f460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f480 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  * A counter */. 
1f490 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20     int iCur;    
1f4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f4c0 20 41 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72   A cursor number
1f4d0 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20   */.    SrcList 
1f4e0 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20  *pSrcList;      
1f4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f500 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73     /* FROM claus
1f510 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  e */.    struct 
1f520 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f  SrcCount *pSrcCo
1f530 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  unt;            
1f540 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20      /* Counting 
1f550 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65  column reference
1f560 73 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a  s */.  } u;.};..
1f570 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61  /* Forward decla
1f580 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73  rations */.int s
1f590 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57  qlite3WalkExpr(W
1f5a0 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  alker*, Expr*);.
1f5b0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
1f5c0 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c  xprList(Walker*,
1f5d0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
1f5e0 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
1f5f0 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  ct(Walker*, Sele
1f600 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
1f610 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28  3WalkSelectExpr(
1f620 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
1f630 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
1f640 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c  lkSelectFrom(Wal
1f650 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
1f660 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f  ./*.** Return co
1f670 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73  de from the pars
1f680 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70  e-tree walking p
1f690 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68  rimitives and th
1f6a0 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73  eir.** callbacks
1f6b0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  ..*/.#define WRC
1f6c0 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20  _Continue    0  
1f6d0 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77   /* Continue dow
1f6e0 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20  n into children 
1f6f0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50  */.#define WRC_P
1f700 72 75 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f  rune       1   /
1f710 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20  * Omit children 
1f720 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c  but continue wal
1f730 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f  king siblings */
1f740 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f  .#define WRC_Abo
1f750 72 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20  rt       2   /* 
1f760 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65  Abandon the tree
1f770 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   walk */../*.** 
1f780 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1f790 68 69 73 20 73 74 72 75 63 74 75 72 65 20 72 65  his structure re
1f7a0 70 72 65 73 65 6e 74 73 20 61 20 73 65 74 20 6f  presents a set o
1f7b0 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54  f one or more CT
1f7c0 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61  Es.** (common ta
1f7d0 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 29  ble expressions)
1f7e0 20 63 72 65 61 74 65 64 20 62 79 20 61 20 73 69   created by a si
1f7f0 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65  ngle WITH clause
1f800 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 74 68  ..*/.struct With
1f810 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20 20   {.  int nCte;  
1f820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f830 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1f840 66 20 43 54 45 73 20 69 6e 20 74 68 65 20 57 49  f CTEs in the WI
1f850 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57  TH clause */.  W
1f860 69 74 68 20 2a 70 4f 75 74 65 72 3b 20 20 20 20  ith *pOuter;    
1f870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f880 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54  * Containing WIT
1f890 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c  H clause, or NUL
1f8a0 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43 74  L */.  struct Ct
1f8b0 65 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  e {             
1f8c0 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 65 61         /* For ea
1f8d0 63 68 20 43 54 45 20 69 6e 20 74 68 65 20 57 49  ch CTE in the WI
1f8e0 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f  TH clause.... */
1f8f0 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
1f900 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f910 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
1f920 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20  this CTE */.    
1f930 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b  ExprList *pCols;
1f940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f950 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78 70 6c 69  /* List of expli
1f960 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  cit column names
1f970 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20  , or NULL */.   
1f980 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
1f990 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f9a0 20 2f 2a 20 54 68 65 20 64 65 66 69 6e 69 74 69   /* The definiti
1f9b0 6f 6e 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a  on of this CTE *
1f9c0 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  /.    const char
1f9d0 20 2a 7a 45 72 72 3b 20 20 20 20 20 20 20 20 20   *zErr;         
1f9e0 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d        /* Error m
1f9f0 65 73 73 61 67 65 20 66 6f 72 20 63 69 72 63 75  essage for circu
1fa00 6c 61 72 20 72 65 66 65 72 65 6e 63 65 73 20 2a  lar references *
1fa10 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a  /.  } a[1];.};..
1fa20 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1fa30 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  BUG./*.** An ins
1fa40 74 61 6e 63 65 20 6f 66 20 74 68 65 20 54 72 65  tance of the Tre
1fa50 65 56 69 65 77 20 6f 62 6a 65 63 74 20 69 73 20  eView object is 
1fa60 75 73 65 64 20 66 6f 72 20 70 72 69 6e 74 69 6e  used for printin
1fa70 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  g the content of
1fa80 0a 2a 2a 20 64 61 74 61 20 73 74 72 75 63 74 75  .** data structu
1fa90 72 65 73 20 6f 6e 20 73 71 6c 69 74 65 33 44 65  res on sqlite3De
1faa0 62 75 67 50 72 69 6e 74 66 28 29 20 75 73 69 6e  bugPrintf() usin
1fab0 67 20 61 20 74 72 65 65 2d 6c 69 6b 65 20 76 69  g a tree-like vi
1fac0 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72  ew..*/.struct Tr
1fad0 65 65 56 69 65 77 20 7b 0a 20 20 69 6e 74 20 69  eeView {.  int i
1fae0 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
1faf0 20 20 20 2f 2a 20 57 68 69 63 68 20 6c 65 76 65     /* Which leve
1fb00 6c 20 6f 66 20 74 68 65 20 74 72 65 65 20 77 65  l of the tree we
1fb10 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38 20   are on */.  u8 
1fb20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20 20   bLine[100];    
1fb30 20 20 20 20 20 2f 2a 20 44 72 61 77 20 76 65 72       /* Draw ver
1fb40 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20  tical in column 
1fb50 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69 73  i if bLine[i] is
1fb60 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64   true */.};.#end
1fb70 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  if /* SQLITE_DEB
1fb80 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73  UG */../*.** Ass
1fb90 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73  uming zIn points
1fba0 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79   to the first by
1fbb0 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68  te of a UTF-8 ch
1fbc0 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61  aracter,.** adva
1fbd0 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74  nce zIn to point
1fbe0 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79   to the first by
1fbf0 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55  te of the next U
1fc00 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a  TF-8 character..
1fc10 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
1fc20 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29  E_SKIP_UTF8(zIn)
1fc30 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
1fc40 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66            \.  if
1fc50 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78  ( (*(zIn++))>=0x
1fc60 63 30 20 29 7b 20 20 20 20 20 20 20 20 20 20 20  c0 ){           
1fc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc80 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20     \.    while( 
1fc90 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30  (*zIn & 0xc0)==0
1fca0 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20  x80 ){ zIn++; } 
1fcb0 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
1fcc0 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
1fcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fcf0 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20       \.}../*.** 
1fd00 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50  The SQLITE_*_BKP
1fd10 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62  T macros are sub
1fd20 73 74 69 74 75 74 65 73 20 66 6f 72 20 74 68 65  stitutes for the
1fd30 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74   error codes wit
1fd40 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61  h.** the same na
1fd50 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74 20 74  me but without t
1fd60 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e  he _BKPT suffix.
1fd70 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69    These macros i
1fd80 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65  nvoke.** routine
1fd90 73 20 74 68 61 74 20 72 65 70 6f 72 74 20 74 68  s that report th
1fda0 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e  e line-number on
1fdb0 20 77 68 69 63 68 20 74 68 65 20 65 72 72 6f 72   which the error
1fdc0 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75   originated.** u
1fdd0 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67  sing sqlite3_log
1fde0 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65  ().  The routine
1fdf0 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61  s also provide a
1fe00 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63   convenient plac
1fe10 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65  e.** to set a de
1fe20 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e  bugger breakpoin
1fe30 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
1fe40 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e  3CorruptError(in
1fe50 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  t);.int sqlite3M
1fe60 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b  isuseError(int);
1fe70 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74  .int sqlite3Cant
1fe80 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a  openError(int);.
1fe90 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
1fea0 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69  ORRUPT_BKPT sqli
1feb0 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
1fec0 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e  __LINE__).#defin
1fed0 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f  e SQLITE_MISUSE_
1fee0 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75  BKPT sqlite3Misu
1fef0 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  seError(__LINE__
1ff00 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ).#define SQLITE
1ff10 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73  _CANTOPEN_BKPT s
1ff20 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
1ff30 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a  ror(__LINE__)...
1ff40 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65  /*.** FTS4 is re
1ff50 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f  ally an extensio
1ff60 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20  n for FTS3.  It 
1ff70 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67  is enabled using
1ff80 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45   the.** SQLITE_E
1ff90 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f  NABLE_FTS3 macro
1ffa0 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20  .  But to avoid 
1ffb0 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73  confusion we als
1ffc0 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51  o call.** the SQ
1ffd0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
1ffe0 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20   macro to serve 
1fff0 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  as an alias for 
20000 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
20010 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  S3..*/.#if defin
20020 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
20030 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e  _FTS4) && !defin
20040 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
20050 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20  _FTS3).# define 
20060 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
20070 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  S3.#endif../*.**
20080 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61   The ctype.h hea
20090 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f  der is needed fo
200a0 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74  r non-ASCII syst
200b0 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f  ems.  It is also
200c0 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54  .** needed by FT
200d0 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20  S3 when FTS3 is 
200e0 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20  included in the 
200f0 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f  amalgamation..*/
20100 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
20110 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c  LITE_ASCII) || \
20120 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51  .    (defined(SQ
20130 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
20140 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
20150 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
20160 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74  )).# include <ct
20170 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  ype.h>.#endif../
20180 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
20190 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20  ng macros mimic 
201a0 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62  the standard lib
201b0 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74  rary functions t
201c0 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73  oupper(),.** iss
201d0 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28  pace(), isalnum(
201e0 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64  ), isdigit() and
201f0 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73   isxdigit(), res
20200 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a  pectively. The.*
20210 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e  * sqlite version
20220 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20  s only work for 
20230 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
20240 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
20250 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  locale..*/.#ifde
20260 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23  f SQLITE_ASCII.#
20270 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
20280 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26  oupper(x)  ((x)&
20290 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  ~(sqlite3CtypeMa
202a0 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
202b0 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64  )(x)]&0x20)).# d
202c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
202d0 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74  pace(x)   (sqlit
202e0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
202f0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
20300 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x01).# define sq
20310 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
20320 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
20330 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
20340 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64  r)(x)]&0x06).# d
20350 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
20360 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74  lpha(x)   (sqlit
20370 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
20380 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
20390 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x02).# define sq
203a0 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20  lite3Isdigit(x) 
203b0 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
203c0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
203d0 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64  r)(x)]&0x04).# d
203e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78  efine sqlite3Isx
203f0 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74  digit(x)  (sqlit
20400 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
20410 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
20420 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x08).# define sq
20430 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20  lite3Tolower(x) 
20440 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54    (sqlite3UpperT
20450 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64  oLower[(unsigned
20460 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65 6c 73   char)(x)]).#els
20470 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
20480 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20 74  e3Toupper(x)   t
20490 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64  oupper((unsigned
204a0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
204b0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61  ine sqlite3Isspa
204c0 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65 28  ce(x)   isspace(
204d0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
204e0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
204f0 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
20500 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e   isalnum((unsign
20510 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
20520 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
20530 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70 68  lpha(x)   isalph
20540 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  a((unsigned char
20550 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
20560 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
20570 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73 69     isdigit((unsi
20580 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
20590 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
205a0 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78 64  sxdigit(x)  isxd
205b0 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
205c0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
205d0 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  e sqlite3Tolower
205e0 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75  (x)   tolower((u
205f0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
20600 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ).#endif.int sql
20610 69 74 65 33 49 73 49 64 43 68 61 72 28 75 38 29  ite3IsIdChar(u8)
20620 3b 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61  ;../*.** Interna
20630 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f  l function proto
20640 74 79 70 65 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  types.*/.#define
20650 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 20   sqlite3StrICmp 
20660 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 0a  sqlite3_stricmp.
20670 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65  int sqlite3Strle
20680 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  n30(const char*)
20690 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ;.#define sqlite
206a0 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65  3StrNICmp sqlite
206b0 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20  3_strnicmp..int 
206c0 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69  sqlite3MallocIni
206d0 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  t(void);.void sq
206e0 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76  lite3MallocEnd(v
206f0 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  oid);.void *sqli
20700 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a  te3Malloc(u64);.
20710 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
20720 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f  locZero(u64);.vo
20730 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
20740 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a  locZero(sqlite3*
20750 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
20760 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
20770 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b  (sqlite3*, u64);
20780 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62  .char *sqlite3Db
20790 53 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  StrDup(sqlite3*,
207a0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
207b0 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72  ar *sqlite3DbStr
207c0 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f  NDup(sqlite3*,co
207d0 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34 29 3b  nst char*, u64);
207e0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65  .void *sqlite3Re
207f0 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34  alloc(void*, u64
20800 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
20810 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28  DbReallocOrFree(
20820 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20  sqlite3 *, void 
20830 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
20840 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28  qlite3DbRealloc(
20850 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20  sqlite3 *, void 
20860 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 73 71  *, u64);.void sq
20870 6c 69 74 65 33 44 62 46 72 65 65 28 73 71 6c 69  lite3DbFree(sqli
20880 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e  te3*, void*);.in
20890 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53  t sqlite3MallocS
208a0 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  ize(void*);.int 
208b0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53  sqlite3DbMallocS
208c0 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ize(sqlite3*, vo
208d0 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  id*);.void *sqli
208e0 74 65 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63  te3ScratchMalloc
208f0 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
20900 74 65 33 53 63 72 61 74 63 68 46 72 65 65 28 76  te3ScratchFree(v
20910 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  oid*);.void *sql
20920 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69  ite3PageMalloc(i
20930 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
20940 33 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29  3PageFree(void*)
20950 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65  ;.void sqlite3Me
20960 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64  mSetDefault(void
20970 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
20980 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73  enignMallocHooks
20990 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c  (void (*)(void),
209a0 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29   void (*)(void))
209b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61  ;.int sqlite3Hea
209c0 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64  pNearlyFull(void
209d0 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73  );../*.** On sys
209e0 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20  tems with ample 
209f0 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20  stack space and 
20a00 74 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c  that support all
20a10 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75  oca(), make.** u
20a20 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74  se of alloca() t
20a30 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66  o obtain space f
20a40 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74  or large automat
20a50 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20  ic objects.  By 
20a60 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61  default,.** obta
20a70 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61  in space from ma
20a80 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68  lloc()..**.** Th
20a90 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69  e alloca() routi
20aa0 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73  ne never returns
20ab0 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c   NULL.  This wil
20ac0 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70 61 74  l cause code pat
20ad0 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20  hs.** that deal 
20ae0 77 69 74 68 20 73 71 6c 69 74 65 33 53 74 61 63  with sqlite3Stac
20af0 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65  kAlloc() failure
20b00 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61  s to be unreacha
20b10 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ble..*/.#ifdef S
20b20 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41  QLITE_USE_ALLOCA
20b30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20b40 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44  3StackAllocRaw(D
20b50 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a  ,N)   alloca(N).
20b60 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20b70 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
20b80 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f  ,N)  memset(allo
20b90 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64  ca(N), 0, N).# d
20ba0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
20bb0 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20  ckFree(D,P)     
20bc0 20 20 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e    .#else.# defin
20bd0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
20be0 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71  locRaw(D,N)   sq
20bf0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
20c00 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  (D,N).# define s
20c10 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
20c20 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74  Zero(D,N)  sqlit
20c30 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44  e3DbMallocZero(D
20c40 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,N).# define sql
20c50 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
20c60 50 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  P)       sqlite3
20c70 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64  DbFree(D,P).#end
20c80 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
20c90 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33  E_ENABLE_MEMSYS3
20ca0 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
20cb0 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
20cc0 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33  te3MemGetMemsys3
20cd0 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23  (void);.#endif.#
20ce0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
20cf0 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73  BLE_MEMSYS5.cons
20d00 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  t sqlite3_mem_me
20d10 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65  thods *sqlite3Me
20d20 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64  mGetMemsys5(void
20d30 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e  );.#endif...#ifn
20d40 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58  def SQLITE_MUTEX
20d50 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f  _OMIT.  sqlite3_
20d60 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f  mutex_methods co
20d70 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61  nst *sqlite3Defa
20d80 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  ultMutex(void);.
20d90 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
20da0 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73  methods const *s
20db0 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28  qlite3NoopMutex(
20dc0 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
20dd0 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d  _mutex *sqlite3M
20de0 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a  utexAlloc(int);.
20df0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74    int sqlite3Mut
20e00 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20  exInit(void);.  
20e10 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78  int sqlite3Mutex
20e20 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  End(void);.#endi
20e30 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  f..int sqlite3St
20e40 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a  atusValue(int);.
20e50 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
20e60 75 73 41 64 64 28 69 6e 74 2c 20 69 6e 74 29 3b  usAdd(int, int);
20e70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
20e80 74 75 73 53 65 74 28 69 6e 74 2c 20 69 6e 74 29  tusSet(int, int)
20e90 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
20ea0 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
20eb0 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69  POINT.  int sqli
20ec0 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29  te3IsNaN(double)
20ed0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
20ee0 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29   sqlite3IsNaN(X)
20ef0 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a    0.#endif../*.*
20f00 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
20f10 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
20f20 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69  tructure holds i
20f30 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
20f40 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   SQL.** function
20f50 73 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74  s arguments that
20f60 20 61 72 65 20 74 68 65 20 70 61 72 61 6d 65 74   are the paramet
20f70 65 72 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74  ers to the print
20f80 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f  f() function..*/
20f90 0a 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72  .struct PrintfAr
20fa0 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20  guments {.  int 
20fb0 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  nArg;           
20fc0 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75       /* Total nu
20fd0 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
20fe0 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64  s */.  int nUsed
20ff0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21000 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
21010 75 6d 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66  uments used so f
21020 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ar */.  sqlite3_
21030 76 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20  value **apArg;  
21040 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74   /* The argument
21050 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 23   values */.};..#
21060 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
21070 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78  INTF_INTERNAL 0x
21080 30 31 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  01.#define SQLIT
21090 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43  E_PRINTF_SQLFUNC
210a0 20 20 30 78 30 32 0a 76 6f 69 64 20 73 71 6c 69    0x02.void sqli
210b0 74 65 33 56 58 50 72 69 6e 74 66 28 53 74 72 41  te3VXPrintf(StrA
210c0 63 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73  ccum*, u32, cons
210d0 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74  t char*, va_list
210e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58  );.void sqlite3X
210f0 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a  Printf(StrAccum*
21100 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61  , u32, const cha
21110 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a  r*, ...);.char *
21120 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73  sqlite3MPrintf(s
21130 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
21140 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20  ar*, ...);.char 
21150 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66  *sqlite3VMPrintf
21160 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
21170 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
21180 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 41  .char *sqlite3MA
21190 70 70 65 6e 64 66 28 73 71 6c 69 74 65 33 2a 2c  ppendf(sqlite3*,
211a0 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
211b0 2a 2c 2e 2e 2e 29 3b 0a 23 69 66 20 64 65 66 69  *,...);.#if defi
211c0 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
211d0 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
211e0 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64  TE_DEBUG).  void
211f0 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
21200 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ntf(const char*,
21210 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69   ...);.#endif.#i
21220 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
21230 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73  _TEST).  void *s
21240 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f  qlite3TestTextTo
21250 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  Ptr(const char*)
21260 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ;.#endif..#if de
21270 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
21280 55 47 29 0a 20 20 54 72 65 65 56 69 65 77 20 2a  UG).  TreeView *
21290 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 50  sqlite3TreeViewP
212a0 75 73 68 28 54 72 65 65 56 69 65 77 2a 2c 75 38  ush(TreeView*,u8
212b0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
212c0 33 54 72 65 65 56 69 65 77 50 6f 70 28 54 72 65  3TreeViewPop(Tre
212d0 65 56 69 65 77 2a 29 3b 0a 20 20 76 6f 69 64 20  eView*);.  void 
212e0 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 4c  sqlite3TreeViewL
212f0 69 6e 65 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ine(TreeView*, c
21300 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
21310 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
21320 54 72 65 65 56 69 65 77 49 74 65 6d 28 54 72 65  TreeViewItem(Tre
21330 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 63 68  eView*, const ch
21340 61 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64  ar*, u8);.  void
21350 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
21360 45 78 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20  Expr(TreeView*, 
21370 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29  const Expr*, u8)
21380 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
21390 54 72 65 65 56 69 65 77 45 78 70 72 4c 69 73 74  TreeViewExprList
213a0 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
213b0 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c  t ExprList*, u8,
213c0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
213d0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
213e0 65 56 69 65 77 53 65 6c 65 63 74 28 54 72 65 65  eViewSelect(Tree
213f0 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c  View*, const Sel
21400 65 63 74 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69  ect*, u8);.#endi
21410 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  f...void sqlite3
21420 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a  SetString(char *
21430 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  *, sqlite3*, con
21440 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
21450 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
21460 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e  rMsg(Parse*, con
21470 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
21480 69 6e 74 20 73 71 6c 69 74 65 33 44 65 71 75 6f  int sqlite3Dequo
21490 74 65 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  te(char*);.int s
214a0 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64  qlite3KeywordCod
214b0 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  e(const unsigned
214c0 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   char*, int);.in
214d0 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73  t sqlite3RunPars
214e0 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  er(Parse*, const
214f0 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29   char*, char **)
21500 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  ;.void sqlite3Fi
21510 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65  nishCoding(Parse
21520 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
21530 65 74 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a  etTempReg(Parse*
21540 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
21550 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50 61  eleaseTempReg(Pa
21560 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  rse*,int);.int s
21570 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e  qlite3GetTempRan
21580 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  ge(Parse*,int);.
21590 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
215a0 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72  aseTempRange(Par
215b0 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f  se*,int,int);.vo
215c0 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54  id sqlite3ClearT
215d0 65 6d 70 52 65 67 43 61 63 68 65 28 50 61 72 73  empRegCache(Pars
215e0 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  e*);.Expr *sqlit
215f0 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69  e3ExprAlloc(sqli
21600 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54  te3*,int,const T
21610 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72  oken*,int);.Expr
21620 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73 71   *sqlite3Expr(sq
21630 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
21640 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
21650 6c 69 74 65 33 45 78 70 72 41 74 74 61 63 68 53  lite3ExprAttachS
21660 75 62 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a  ubtrees(sqlite3*
21670 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70  ,Expr*,Expr*,Exp
21680 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
21690 65 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20  e3PExpr(Parse*, 
216a0 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  int, Expr*, Expr
216b0 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29  *, const Token*)
216c0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
216d0 78 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c  xprAnd(sqlite3*,
216e0 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45  Expr*, Expr*);.E
216f0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
21700 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  Function(Parse*,
21710 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  ExprList*, Token
21720 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21730 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d  ExprAssignVarNum
21740 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ber(Parse*, Expr
21750 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21760 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74  ExprDelete(sqlit
21770 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  e3*, Expr*);.Exp
21780 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
21790 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72  prListAppend(Par
217a0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  se*,ExprList*,Ex
217b0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
217c0 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d  e3ExprListSetNam
217d0 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  e(Parse*,ExprLis
217e0 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  t*,Token*,int);.
217f0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
21800 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61 72 73  ListSetSpan(Pars
21810 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  e*,ExprList*,Exp
21820 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  rSpan*);.void sq
21830 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c  lite3ExprListDel
21840 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78  ete(sqlite3*, Ex
21850 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
21860 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65  lite3Init(sqlite
21870 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74  3*, char**);.int
21880 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
21890 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  back(void*, int,
218a0 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29   char**, char**)
218b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
218c0 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65  agma(Parse*,Toke
218d0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  n*,Token*,Token*
218e0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
218f0 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
21900 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73  asOfConnection(s
21910 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
21920 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63  qlite3ResetOneSc
21930 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e  hema(sqlite3*,in
21940 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21950 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65  CollapseDatabase
21960 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b  Array(sqlite3*);
21970 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
21980 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69  inParse(Parse*,i
21990 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
219a0 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43  3CommitInternalC
219b0 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29  hanges(sqlite3*)
219c0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
219d0 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63  ResultSetOfSelec
219e0 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a  t(Parse*,Select*
219f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
21a00 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50  penMasterTable(P
21a10 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e  arse *, int);.In
21a20 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d  dex *sqlite3Prim
21a30 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c  aryKeyIndex(Tabl
21a40 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33  e*);.i16 sqlite3
21a50 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e  ColumnOfIndex(In
21a60 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64  dex*, i16);.void
21a70 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61 62   sqlite3StartTab
21a80 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  le(Parse*,Token*
21a90 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Token*,int,int,
21aa0 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
21ab0 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28  qlite3AddColumn(
21ac0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a  Parse*,Token*);.
21ad0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e  void sqlite3AddN
21ae0 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69  otNull(Parse*, i
21af0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21b00 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50  3AddPrimaryKey(P
21b10 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
21b20 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
21b30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
21b40 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74  dCheckConstraint
21b50 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
21b60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
21b70 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65  ColumnType(Parse
21b80 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  *,Token*);.void 
21b90 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c  sqlite3AddDefaul
21ba0 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78  tValue(Parse*,Ex
21bb0 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73  prSpan*);.void s
21bc0 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65  qlite3AddCollate
21bd0 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
21be0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
21bf0 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65  e3EndTable(Parse
21c00 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
21c10 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  u8,Select*);.int
21c20 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69   sqlite3ParseUri
21c30 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  (const char*,con
21c40 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65  st char*,unsigne
21c50 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20  d int*,.        
21c60 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
21c70 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a  te3_vfs**,char**
21c80 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65  ,char **);.Btree
21c90 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54   *sqlite3DbNameT
21ca0 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c  oBtree(sqlite3*,
21cb0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
21cc0 74 20 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63  t sqlite3CodeOnc
21cd0 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 23 69 66  e(Parse *);..#if
21ce0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
21cf0 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 20 64  BUILTIN_TEST.# d
21d00 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75  efine sqlite3Fau
21d10 6c 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f  ltSim(X) SQLITE_
21d20 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73  OK.#else.  int s
21d30 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69  qlite3FaultSim(i
21d40 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74  nt);.#endif..Bit
21d50 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76  vec *sqlite3Bitv
21d60 65 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69  ecCreate(u32);.i
21d70 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
21d80 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33  Test(Bitvec*, u3
21d90 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
21da0 69 74 76 65 63 53 65 74 28 42 69 74 76 65 63 2a  itvecSet(Bitvec*
21db0 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c  , u32);.void sql
21dc0 69 74 65 33 42 69 74 76 65 63 43 6c 65 61 72 28  ite3BitvecClear(
21dd0 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f  Bitvec*, u32, vo
21de0 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
21df0 65 33 42 69 74 76 65 63 44 65 73 74 72 6f 79 28  e3BitvecDestroy(
21e00 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71  Bitvec*);.u32 sq
21e10 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a 65 28  lite3BitvecSize(
21e20 42 69 74 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71  Bitvec*);.int sq
21e30 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74  lite3BitvecBuilt
21e40 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29  inTest(int,int*)
21e50 3b 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74  ;..RowSet *sqlit
21e60 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c  e3RowSetInit(sql
21e70 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e  ite3*, void*, un
21e80 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69  signed int);.voi
21e90 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43  d sqlite3RowSetC
21ea0 6c 65 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76  lear(RowSet*);.v
21eb0 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65  oid sqlite3RowSe
21ec0 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c  tInsert(RowSet*,
21ed0 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74   i64);.int sqlit
21ee0 65 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77  e3RowSetTest(Row
21ef0 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74 63 68  Set*, int iBatch
21f00 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  , i64);.int sqli
21f10 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f  te3RowSetNext(Ro
21f20 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76  wSet*, i64*);..v
21f30 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
21f40 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b  eView(Parse*,Tok
21f50 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  en*,Token*,Token
21f60 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e  *,Select*,int,in
21f70 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
21f80 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
21f90 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28  EW) || !defined(
21fa0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
21fb0 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20  UALTABLE).  int 
21fc0 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
21fd0 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a  lumnNames(Parse*
21fe0 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a  ,Table*);.#else.
21ff0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
22000 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d  ViewGetColumnNam
22010 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66  es(A,B) 0.#endif
22020 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
22030 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69  _ATTACHED>30.  i
22040 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b  nt sqlite3DbMask
22050 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29  AllZero(yDbMask)
22060 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
22070 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50  lite3DropTable(P
22080 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
22090 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
220a0 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70   sqlite3CodeDrop
220b0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61  Table(Parse*, Ta
220c0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ble*, int, int);
220d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
220e0 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33  eteTable(sqlite3
220f0 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e  *, Table*);.#ifn
22100 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
22110 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
22120 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
22130 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50  incrementBegin(P
22140 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20  arse *pParse);. 
22150 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
22160 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61  oincrementEnd(Pa
22170 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65  rse *pParse);.#e
22180 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
22190 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
221a0 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69  tBegin(X).# defi
221b0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
221c0 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65  crementEnd(X).#e
221d0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
221e0 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20  3Insert(Parse*, 
221f0 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74  SrcList*, Select
22200 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29  *, IdList*, int)
22210 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41  ;.void *sqlite3A
22220 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c  rrayAllocate(sql
22230 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c  ite3*,void*,int,
22240 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69  int*,int*);.IdLi
22250 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
22260 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a  tAppend(sqlite3*
22270 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  , IdList*, Token
22280 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
22290 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73  dListIndex(IdLis
222a0 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  t*,const char*);
222b0 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
222c0 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28  3SrcListEnlarge(
222d0 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
222e0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53  t*, int, int);.S
222f0 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
22300 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c  rcListAppend(sql
22310 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  ite3*, SrcList*,
22320 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
22330 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
22340 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46  e3SrcListAppendF
22350 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20  romTerm(Parse*, 
22360 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
22370 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20  , Token*,.      
22380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223a0 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c  Token*, Select*,
223b0 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29   Expr*, IdList*)
223c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
223d0 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28 50  cListIndexedBy(P
223e0 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20  arse *, SrcList 
223f0 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e 74  *, Token *);.int
22400 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42   sqlite3IndexedB
22410 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c  yLookup(Parse *,
22420 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
22430 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71  item *);.void sq
22440 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66  lite3SrcListShif
22450 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73  tJoinType(SrcLis
22460 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
22470 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75  3SrcListAssignCu
22480 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72  rsors(Parse*, Sr
22490 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
224a0 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74  lite3IdListDelet
224b0 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69  e(sqlite3*, IdLi
224c0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
224d0 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28  e3SrcListDelete(
224e0 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
224f0 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  t*);.Index *sqli
22500 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78  te3AllocateIndex
22510 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c  Object(sqlite3*,
22520 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b  i16,int,char**);
22530 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 43  .Index *sqlite3C
22540 72 65 61 74 65 49 6e 64 65 78 28 50 61 72 73 65  reateIndex(Parse
22550 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
22560 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73  SrcList*,ExprLis
22570 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20  t*,int,Token*,. 
22580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22590 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20           Expr*, 
225a0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
225b0 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78  sqlite3DropIndex
225c0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
225d0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
225e0 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73 65  ite3Select(Parse
225f0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65  *, Select*, Sele
22600 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74  ctDest*);.Select
22610 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e   *sqlite3SelectN
22620 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  ew(Parse*,ExprLi
22630 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  st*,SrcList*,Exp
22640 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20  r*,ExprList*,.  
22650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22660 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70         Expr*,Exp
22670 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78 70 72 2a  rList*,u16,Expr*
22680 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,Expr*);.void sq
22690 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74  lite3SelectDelet
226a0 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65  e(sqlite3*, Sele
226b0 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ct*);.Table *sql
226c0 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75  ite3SrcListLooku
226d0 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  p(Parse*, SrcLis
226e0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
226f0 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65  IsReadOnly(Parse
22700 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  *, Table*, int);
22710 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
22720 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69  nTable(Parse*, i
22730 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62  nt iCur, int iDb
22740 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
22750 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
22760 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45  TE_ENABLE_UPDATE
22770 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26  _DELETE_LIMIT) &
22780 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
22790 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29  E_OMIT_SUBQUERY)
227a0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69  .Expr *sqlite3Li
227b0 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c  mitWhere(Parse*,
227c0 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
227d0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  xprList*,Expr*,E
227e0 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e  xpr*,char*);.#en
227f0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
22800 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65  DeleteFrom(Parse
22810 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
22820 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
22830 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20  3Update(Parse*, 
22840 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
22850 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  st*, Expr*, int)
22860 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c  ;.WhereInfo *sql
22870 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50  ite3WhereBegin(P
22880 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  arse*,SrcList*,E
22890 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  xpr*,ExprList*,E
228a0 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74  xprList*,u16,int
228b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
228c0 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66  hereEnd(WhereInf
228d0 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69 74 65 33  o*);.u64 sqlite3
228e0 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f  WhereOutputRowCo
228f0 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  unt(WhereInfo*);
22900 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
22910 65 49 73 44 69 73 74 69 6e 63 74 28 57 68 65 72  eIsDistinct(Wher
22920 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
22930 69 74 65 33 57 68 65 72 65 49 73 4f 72 64 65 72  ite3WhereIsOrder
22940 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  ed(WhereInfo*);.
22950 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
22960 49 73 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e  IsSorted(WhereIn
22970 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
22980 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61  3WhereContinueLa
22990 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  bel(WhereInfo*);
229a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
229b0 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72  eBreakLabel(Wher
229c0 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
229d0 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61  ite3WhereOkOnePa
229e0 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69  ss(WhereInfo*, i
229f0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
22a00 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
22a10 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  mn(Parse*, Table
22a20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
22a30 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
22a40 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
22a50 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65  lumnOfTable(Vdbe
22a60 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
22a70 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
22a80 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d  sqlite3ExprCodeM
22a90 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ove(Parse*, int,
22aa0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
22ab0 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
22ac0 65 53 74 6f 72 65 28 50 61 72 73 65 2a 2c 20 69  eStore(Parse*, i
22ad0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
22ae0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
22af0 61 63 68 65 50 75 73 68 28 50 61 72 73 65 2a 29  achePush(Parse*)
22b00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
22b10 70 72 43 61 63 68 65 50 6f 70 28 50 61 72 73 65  prCachePop(Parse
22b20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22b30 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28  ExprCacheRemove(
22b40 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
22b50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
22b60 78 70 72 43 61 63 68 65 43 6c 65 61 72 28 50 61  xprCacheClear(Pa
22b70 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
22b80 74 65 33 45 78 70 72 43 61 63 68 65 41 66 66 69  te3ExprCacheAffi
22b90 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72 73 65  nityChange(Parse
22ba0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
22bb0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
22bc0 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  de(Parse*, Expr*
22bd0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
22be0 69 74 65 33 45 78 70 72 43 6f 64 65 46 61 63 74  ite3ExprCodeFact
22bf0 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 45  orable(Parse*, E
22c00 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
22c10 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
22c20 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45  AtInit(Parse*, E
22c30 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  xpr*, int, u8);.
22c40 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
22c50 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20  odeTemp(Parse*, 
22c60 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  Expr*, int*);.in
22c70 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
22c80 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20  eTarget(Parse*, 
22c90 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
22ca0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
22cb0 65 41 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a  eAndCache(Parse*
22cc0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
22cd0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
22ce0 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73 65  deExprList(Parse
22cf0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
22d00 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20  t, u8);.#define 
22d10 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50 20  SQLITE_ECEL_DUP 
22d20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44 65       0x01  /* De
22d30 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20  ep, not shallow 
22d40 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e  copies */.#defin
22d50 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41  e SQLITE_ECEL_FA
22d60 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a 20  CTOR   0x02  /* 
22d70 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74  Factor out const
22d80 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 76 6f 69  ant terms */.voi
22d90 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 54  d sqlite3ExprIfT
22da0 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  rue(Parse*, Expr
22db0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
22dc0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
22dd0 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78  False(Parse*, Ex
22de0 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
22df0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69  Table *sqlite3Fi
22e00 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  ndTable(sqlite3*
22e10 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
22e20 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c  nst char*);.Tabl
22e30 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
22e40 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74  Table(Parse*,int
22e50 20 69 73 56 69 65 77 2c 63 6f 6e 73 74 20 63 68   isView,const ch
22e60 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
22e70 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
22e80 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d  3LocateTableItem
22e90 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69  (Parse*,int isVi
22ea0 65 77 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73  ew,struct SrcLis
22eb0 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78  t_item *);.Index
22ec0 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64   *sqlite3FindInd
22ed0 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ex(sqlite3*,cons
22ee0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
22ef0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
22f00 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
22f10 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
22f20 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
22f30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
22f40 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
22f50 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  dex(sqlite3*,int
22f60 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
22f70 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75  oid sqlite3Vacuu
22f80 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73  m(Parse*);.int s
22f90 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
22fa0 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a  char**, sqlite3*
22fb0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
22fc0 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71  NameFromToken(sq
22fd0 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
22fe0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
22ff0 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45  Compare(Expr*, E
23000 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
23010 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43  sqlite3ExprListC
23020 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a  ompare(ExprList*
23030 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
23040 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
23050 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28 45 78  prImpliesExpr(Ex
23060 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
23070 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
23080 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61  prAnalyzeAggrega
23090 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  tes(NameContext*
230a0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
230b0 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
230c0 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e  eAggList(NameCon
230d0 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29  text*,ExprList*)
230e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e  ;.int sqlite3Fun
230f0 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63  ctionUsesThisSrc
23100 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a  (Expr*, SrcList*
23110 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33  );.Vdbe *sqlite3
23120 47 65 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b  GetVdbe(Parse*);
23130 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
23140 67 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29  gSaveState(void)
23150 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
23160 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76  ngRestoreState(v
23170 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
23180 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71  e3RollbackAll(sq
23190 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
231a0 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
231b0 69 66 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a  ifySchema(Parse*
231c0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
231d0 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61  ite3CodeVerifyNa
231e0 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a  medSchema(Parse*
231f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44  , const char *zD
23200 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  b);.void sqlite3
23210 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e  BeginTransaction
23220 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
23230 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69  oid sqlite3Commi
23240 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  tTransaction(Par
23250 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
23260 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61  e3RollbackTransa
23270 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76  ction(Parse*);.v
23280 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70  oid sqlite3Savep
23290 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  oint(Parse*, int
232a0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
232b0 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65  sqlite3CloseSave
232c0 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a  points(sqlite3 *
232d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c  );.void sqlite3L
232e0 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73  eaveMutexAndClos
232f0 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a  eZombie(sqlite3*
23300 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
23310 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70  prIsConstant(Exp
23320 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
23330 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f  ExprIsConstantNo
23340 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  tJoin(Expr*);.in
23350 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
23360 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f  onstantOrFunctio
23370 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e  n(Expr*, u8);.in
23380 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 54  t sqlite3ExprIsT
23390 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70  ableConstant(Exp
233a0 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  r*,int);.int sql
233b0 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65  ite3ExprIsIntege
233c0 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  r(Expr*, int*);.
233d0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
233e0 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45  anBeNull(const E
233f0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
23400 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66  e3ExprNeedsNoAff
23410 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73  inityChange(cons
23420 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a  t Expr*, char);.
23430 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77  int sqlite3IsRow
23440 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  id(const char*);
23450 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
23460 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 50  erateRowDelete(P
23470 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69  arse*,Table*,Tri
23480 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  gger*,int,int,in
23490 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 29 3b  t,i16,u8,u8,u8);
234a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
234b0 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c  erateRowIndexDel
234c0 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ete(Parse*, Tabl
234d0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
234e0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
234f0 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79  GenerateIndexKey
23500 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c  (Parse*, Index*,
23510 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20   int, int, int, 
23520 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29  int*,Index*,int)
23530 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
23540 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65  solvePartIdxLabe
23550 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  l(Parse*,int);.v
23560 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
23570 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65  ateConstraintChe
23580 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  cks(Parse*,Table
23590 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69  *,int*,int,int,i
235a0 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20  nt,int,.        
235b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235c0 20 20 20 20 20 20 20 20 20 20 20 20 20 75 38 2c               u8,
235d0 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f  u8,int,int*);.vo
235e0 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65  id sqlite3Comple
235f0 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73  teInsertion(Pars
23600 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e  e*,Table*,int,in
23610 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69  t,int,int*,int,i
23620 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  nt,int);.int sql
23630 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64  ite3OpenTableAnd
23640 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20  Indices(Parse*, 
23650 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
23660 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  , u8*, int*, int
23670 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23680 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74  BeginWriteOperat
23690 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ion(Parse*, int,
236a0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
236b0 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61  te3MultiWrite(Pa
236c0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
236d0 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73  te3MayAbort(Pars
236e0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
236f0 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28  3HaltConstraint(
23700 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
23710 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29  , char*, i8, u8)
23720 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
23730 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50  iqueConstraint(P
23740 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65  arse*, int, Inde
23750 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
23760 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74  3RowidConstraint
23770 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61  (Parse*, int, Ta
23780 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ble*);.Expr *sql
23790 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c 69  ite3ExprDup(sqli
237a0 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b  te3*,Expr*,int);
237b0 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
237c0 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73 71  e3ExprListDup(sq
237d0 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a  lite3*,ExprList*
237e0 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ,int);.SrcList *
237f0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75  sqlite3SrcListDu
23800 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69  p(sqlite3*,SrcLi
23810 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74  st*,int);.IdList
23820 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44   *sqlite3IdListD
23830 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69  up(sqlite3*,IdLi
23840 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
23850 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28 73  lite3SelectDup(s
23860 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c  qlite3*,Select*,
23870 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54  int);.#if SELECT
23880 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f  TRACE_ENABLED.vo
23890 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
238a0 53 65 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c  SetName(Select*,
238b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
238c0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
238d0 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d  ite3SelectSetNam
238e0 65 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f  e(A,B).#endif.vo
238f0 69 64 20 73 71 6c 69 74 65 33 46 75 6e 63 44 65  id sqlite3FuncDe
23900 66 49 6e 73 65 72 74 28 46 75 6e 63 44 65 66 48  fInsert(FuncDefH
23910 61 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b  ash*, FuncDef*);
23920 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65  .FuncDef *sqlite
23930 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71  3FindFunction(sq
23940 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
23950 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38  r*,int,int,u8,u8
23960 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
23970 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75  egisterBuiltinFu
23980 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
23990 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
239a0 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46  egisterDateTimeF
239b0 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
239c0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
239d0 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69  sterGlobalFuncti
239e0 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73  ons(void);.int s
239f0 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
23a00 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  kOk(sqlite3*);.i
23a10 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
23a20 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71  CheckSickOrOk(sq
23a30 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
23a40 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69  lite3ChangeCooki
23a50 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  e(Parse*, int);.
23a60 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
23a70 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
23a80 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
23a90 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
23aa0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74  .void sqlite3Mat
23ab0 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72  erializeView(Par
23ac0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
23ad0 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66  r*, int);.#endif
23ae0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
23af0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20  _OMIT_TRIGGER.  
23b00 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
23b10 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  nTrigger(Parse*,
23b20 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69   Token*,Token*,i
23b30 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53  nt,int,IdList*,S
23b40 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  rcList*,.       
23b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b60 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69      Expr*,int, i
23b70 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
23b80 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72  te3FinishTrigger
23b90 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
23ba0 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  Step*, Token*);.
23bb0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
23bc0 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  opTrigger(Parse*
23bd0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
23be0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
23bf0 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50  DropTriggerPtr(P
23c00 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29  arse*, Trigger*)
23c10 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
23c20 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
23c30 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
23c40 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
23c50 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a  *, int *pMask);.
23c60 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
23c70 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61  e3TriggerList(Pa
23c80 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b  rse *, Table *);
23c90 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
23ca0 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61  odeRowTrigger(Pa
23cb0 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  rse*, Trigger *,
23cc0 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
23cd0 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20   int, Table *,. 
23ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cf0 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20             int, 
23d00 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
23d10 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
23d20 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61  TriggerDirect(Pa
23d30 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a  rse *, Trigger *
23d40 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
23d50 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
23d60 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67  d sqliteViewTrig
23d70 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62  gers(Parse*, Tab
23d80 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  le*, Expr*, int,
23d90 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76   ExprList*);.  v
23da0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
23db0 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c  eTriggerStep(sql
23dc0 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74  ite3*, TriggerSt
23dd0 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ep*);.  TriggerS
23de0 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
23df0 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71  gerSelectStep(sq
23e00 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b  lite3*,Select*);
23e10 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
23e20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e  sqlite3TriggerIn
23e30 73 65 72 74 53 74 65 70 28 73 71 6c 69 74 65 33  sertStep(sqlite3
23e40 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74  *,Token*, IdList
23e50 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
23e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e70 20 20 20 20 20 20 20 20 20 20 20 53 65 6c 65 63             Selec
23e80 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65  t*,u8);.  Trigge
23e90 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
23ea0 69 67 67 65 72 55 70 64 61 74 65 53 74 65 70 28  iggerUpdateStep(
23eb0 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c  sqlite3*,Token*,
23ec0 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a  ExprList*, Expr*
23ed0 2c 20 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72  , u8);.  Trigger
23ee0 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
23ef0 67 67 65 72 44 65 6c 65 74 65 53 74 65 70 28 73  ggerDeleteStep(s
23f00 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20  qlite3*,Token*, 
23f10 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Expr*);.  void s
23f20 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
23f30 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72  ger(sqlite3*, Tr
23f40 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20  igger*);.  void 
23f50 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
23f60 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71  DeleteTrigger(sq
23f70 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
23f80 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73   char*);.  u32 s
23f90 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c  qlite3TriggerCol
23fa0 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67  mask(Parse*,Trig
23fb0 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ger*,ExprList*,i
23fc0 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e  nt,int,Table*,in
23fd0 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  t);.# define sql
23fe0 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65  ite3ParseTopleve
23ff0 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c  l(p) ((p)->pTopl
24000 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70  evel ? (p)->pTop
24010 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 65 6c  level : (p)).#el
24020 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
24030 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
24040 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20  (B,C,D,E,F) 0.# 
24050 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65  define sqlite3De
24060 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 29  leteTrigger(A,B)
24070 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24080 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28  3DropTriggerPtr(
24090 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
240a0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
240b0 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c  leteTrigger(A,B,
240c0 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  C).# define sqli
240d0 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
240e0 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c  r(A,B,C,D,E,F,G,
240f0 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71  H,I).# define sq
24100 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
24110 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c  gerDirect(A,B,C,
24120 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20  D,E,F).# define 
24130 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
24140 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66  st(X, Y) 0.# def
24150 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65  ine sqlite3Parse
24160 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20  Toplevel(p) p.# 
24170 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
24180 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42  iggerColmask(A,B
24190 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65  ,C,D,E,F,G) 0.#e
241a0 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65  ndif..int sqlite
241b0 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a  3JoinType(Parse*
241c0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
241d0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
241e0 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72  sqlite3CreateFor
241f0 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20  eignKey(Parse*, 
24200 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  ExprList*, Token
24210 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
24220 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24230 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28  DeferForeignKey(
24240 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69  Parse*, int);.#i
24250 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
24260 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
24270 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
24280 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78  thRead(Parse*,Ex
24290 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c  pr*,Schema*,SrcL
242a0 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ist*);.  int sql
242b0 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 50 61  ite3AuthCheck(Pa
242c0 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  rse*,int, const 
242d0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
242e0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
242f0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
24300 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28  AuthContextPush(
24310 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74  Parse*, AuthCont
24320 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ext*, const char
24330 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
24340 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70  e3AuthContextPop
24350 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a  (AuthContext*);.
24360 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74    int sqlite3Aut
24370 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c  hReadCol(Parse*,
24380 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63   const char *, c
24390 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
243a0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
243b0 65 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  e sqlite3AuthRea
243c0 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66  d(a,b,c,d).# def
243d0 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
243e0 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20  heck(a,b,c,d,e) 
243f0 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64     SQLITE_OK.# d
24400 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
24410 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62  hContextPush(a,b
24420 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,c).# define sql
24430 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
24440 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29 28 61  op(a)  ((void)(a
24450 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  )).#endif.void s
24460 71 6c 69 74 65 33 41 74 74 61 63 68 28 50 61 72  qlite3Attach(Par
24470 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  se*, Expr*, Expr
24480 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
24490 73 71 6c 69 74 65 33 44 65 74 61 63 68 28 50 61  sqlite3Detach(Pa
244a0 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
244b0 69 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69  id sqlite3FixIni
244c0 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73  t(DbFixer*, Pars
244d0 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  e*, int, const c
244e0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  har*, const Toke
244f0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
24500 46 69 78 53 72 63 4c 69 73 74 28 44 62 46 69 78  FixSrcList(DbFix
24510 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  er*, SrcList*);.
24520 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 65  int sqlite3FixSe
24530 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53  lect(DbFixer*, S
24540 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
24550 69 74 65 33 46 69 78 45 78 70 72 28 44 62 46 69  ite3FixExpr(DbFi
24560 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  xer*, Expr*);.in
24570 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72  t sqlite3FixExpr
24580 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45  List(DbFixer*, E
24590 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
245a0 71 6c 69 74 65 33 46 69 78 54 72 69 67 67 65 72  qlite3FixTrigger
245b0 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54  Step(DbFixer*, T
245c0 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e  riggerStep*);.in
245d0 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f  t sqlite3AtoF(co
245e0 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75  nst char *z, dou
245f0 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  ble*, int, u8);.
24600 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e  int sqlite3GetIn
24610 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  t32(const char *
24620 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
24630 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63  ite3Atoi(const c
24640 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
24650 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63  e3Utf16ByteLen(c
24660 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61  onst void *pData
24670 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e  , int nChar);.in
24680 74 20 73 71 6c 69 74 65 33 55 74 66 38 43 68 61  t sqlite3Utf8Cha
24690 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20  rLen(const char 
246a0 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74  *pData, int nByt
246b0 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55  e);.u32 sqlite3U
246c0 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38  tf8Read(const u8
246d0 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69  **);.LogEst sqli
246e0 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a  te3LogEst(u64);.
246f0 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
24700 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c  gEstAdd(LogEst,L
24710 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20  ogEst);.#ifndef 
24720 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
24730 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20  UALTABLE.LogEst 
24740 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f  sqlite3LogEstFro
24750 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b  mDouble(double);
24760 0a 23 65 6e 64 69 66 0a 75 36 34 20 73 71 6c 69  .#endif.u64 sqli
24770 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c  te3LogEstToInt(L
24780 6f 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52  ogEst);../*.** R
24790 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20  outines to read 
247a0 61 6e 64 20 77 72 69 74 65 20 76 61 72 69 61 62  and write variab
247b0 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65  le-length intege
247c0 72 73 2e 20 20 54 68 65 73 65 20 75 73 65 64 20  rs.  These used 
247d0 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64  to.** be defined
247e0 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f   locally, but no
247f0 77 20 77 65 20 75 73 65 20 74 68 65 20 76 61 72  w we use the var
24800 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20  int routines in 
24810 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69  the util.c.** fi
24820 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  le..*/.int sqlit
24830 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69  e3PutVarint(unsi
24840 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29  gned char*, u64)
24850 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56  ;.u8 sqlite3GetV
24860 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69  arint(const unsi
24870 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34  gned char *, u64
24880 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47   *);.u8 sqlite3G
24890 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74  etVarint32(const
248a0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
248b0 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71  , u32 *);.int sq
248c0 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75  lite3VarintLen(u
248d0 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68  64 v);../*.** Th
248e0 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73  e common case is
248f0 20 66 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f   for a varint to
24900 20 62 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74   be a single byt
24910 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69  e.  They followi
24920 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e  ng.** macros han
24930 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63  dle the common c
24940 61 73 65 20 77 69 74 68 6f 75 74 20 61 20 70 72  ase without a pr
24950 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75  ocedure call, bu
24960 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74  t then call.** t
24970 68 65 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72  he procedure for
24980 20 6c 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e   larger varints.
24990 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56  .*/.#define getV
249a0 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a  arint32(A,B)  \.
249b0 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38    (u8)((*(A)<(u8
249c0 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32  )0x80)?((B)=(u32
249d0 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33  )*(A)),1:sqlite3
249e0 47 65 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c  GetVarint32((A),
249f0 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64  (u32 *)&(B))).#d
24a00 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33  efine putVarint3
24a10 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
24a20 28 28 28 75 33 32 29 28 42 29 3c 28 75 33 32 29  (((u32)(B)<(u32)
24a30 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73  0x80)?(*(A)=(uns
24a40 69 67 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c  igned char)(B)),
24a50 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74  1:\.  sqlite3Put
24a60 56 61 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29  Varint((A),(B)))
24a70 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69  .#define getVari
24a80 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65 74  nt    sqlite3Get
24a90 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70  Varint.#define p
24aa0 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69  utVarint    sqli
24ab0 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63  te3PutVarint...c
24ac0 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
24ad0 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53  e3IndexAffinityS
24ae0 74 72 28 56 64 62 65 20 2a 2c 20 49 6e 64 65 78  tr(Vdbe *, Index
24af0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
24b00 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56  3TableAffinity(V
24b10 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  dbe*, Table*, in
24b20 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  t);.char sqlite3
24b30 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28  CompareAffinity(
24b40 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
24b50 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c  r aff2);.int sql
24b60 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
24b70 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c  yOk(Expr *pExpr,
24b80 20 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69   char idx_affini
24b90 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  ty);.char sqlite
24ba0 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45 78  3ExprAffinity(Ex
24bb0 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20  pr *pExpr);.int 
24bc0 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f  sqlite3Atoi64(co
24bd0 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c  nst char*, i64*,
24be0 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
24bf0 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f  qlite3DecOrHexTo
24c00 49 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  I64(const char*,
24c10 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c   i64*);.void sql
24c20 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67  ite3ErrorWithMsg
24c30 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
24c40 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
24c50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
24c60 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ror(sqlite3*,int
24c70 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
24c80 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65  HexToBlob(sqlite
24c90 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  3*, const char *
24ca0 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71  z, int n);.u8 sq
24cb0 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e  lite3HexToInt(in
24cc0 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  t h);.int sqlite
24cd0 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72  3TwoPartName(Par
24ce0 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  se *, Token *, T
24cf0 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a  oken *, Token **
24d00 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  );..#if defined(
24d10 53 51 4c 49 54 45 5f 54 45 53 54 29 20 0a 63 6f  SQLITE_TEST) .co
24d20 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
24d30 33 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23  3ErrName(int);.#
24d40 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61  endif..const cha
24d50 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72  r *sqlite3ErrStr
24d60 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
24d70 65 33 52 65 61 64 53 63 68 65 6d 61 28 50 61 72  e3ReadSchema(Par
24d80 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c  se *pParse);.Col
24d90 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e  lSeq *sqlite3Fin
24da0 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33  dCollSeq(sqlite3
24db0 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20  *,u8 enc, const 
24dc0 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c  char*,int);.Coll
24dd0 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  Seq *sqlite3Loca
24de0 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  teCollSeq(Parse 
24df0 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
24e00 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c  har*zName);.Coll
24e10 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72  Seq *sqlite3Expr
24e20 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
24e30 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78  Parse, Expr *pEx
24e40 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  pr);.Expr *sqlit
24e50 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65  e3ExprAddCollate
24e60 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61  Token(Parse *pPa
24e70 72 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73  rse, Expr*, cons
24e80 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20  t Token*);.Expr 
24e90 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43  *sqlite3ExprAddC
24ea0 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72  ollateString(Par
24eb0 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20  se*,Expr*,const 
24ec0 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  char*);.Expr *sq
24ed0 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c  lite3ExprSkipCol
24ee0 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74  late(Expr*);.int
24ef0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c   sqlite3CheckCol
24f00 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f  lSeq(Parse *, Co
24f10 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71  llSeq *);.int sq
24f20 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74  lite3CheckObject
24f30 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f  Name(Parse *, co
24f40 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69  nst char *);.voi
24f50 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74  d sqlite3VdbeSet
24f60 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20  Changes(sqlite3 
24f70 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
24f80 69 74 65 33 41 64 64 49 6e 74 36 34 28 69 36 34  ite3AddInt64(i64
24f90 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
24fa0 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a  te3SubInt64(i64*
24fb0 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
24fc0 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c  e3MulInt64(i64*,
24fd0 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
24fe0 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a  3AbsInt32(int);.
24ff0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
25000 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76  ABLE_8_3_NAMES.v
25010 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53  oid sqlite3FileS
25020 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61  uffix3(const cha
25030 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73  r*, char*);.#els
25040 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
25050 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c  e3FileSuffix3(X,
25060 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c  Y).#endif.u8 sql
25070 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63  ite3GetBoolean(c
25080 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75 38 29  onst char *z,u8)
25090 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73  ;..const void *s
250a0 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28  qlite3ValueText(
250b0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
250c0 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
250d0 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74  ValueBytes(sqlit
250e0 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a  e3_value*, u8);.
250f0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
25100 65 53 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f  eSetStr(sqlite3_
25110 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e  value*, int, con
25120 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20  st void *,u8, . 
25130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25140 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76         void(*)(v
25150 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c  oid*));.void sql
25160 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c  ite3ValueSetNull
25170 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
25180 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
25190 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f  lueFree(sqlite3_
251a0 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33  value*);.sqlite3
251b0 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56  _value *sqlite3V
251c0 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20  alueNew(sqlite3 
251d0 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
251e0 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65  3Utf16to8(sqlite
251f0 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  3 *, const void*
25200 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
25210 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d  sqlite3ValueFrom
25220 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20  Expr(sqlite3 *, 
25230 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20  Expr *, u8, u8, 
25240 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
25250 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
25260 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74  alueApplyAffinit
25270 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  y(sqlite3_value 
25280 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e  *, u8, u8);.#ifn
25290 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47  def SQLITE_AMALG
252a0 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63  AMATION.extern c
252b0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
252c0 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65  ar sqlite3Opcode
252d0 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65  Property[];.exte
252e0 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
252f0 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55 70  d char sqlite3Up
25300 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78  perToLower[];.ex
25310 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
25320 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
25330 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65  CtypeMap[];.exte
25340 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73  rn const Token s
25350 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b  qlite3IntTokens[
25360 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45  ];.extern SQLITE
25370 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c 69  _WSD struct Sqli
25380 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65  te3Config sqlite
25390 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20  3Config;.extern 
253a0 53 51 4c 49 54 45 5f 57 53 44 20 46 75 6e 63 44  SQLITE_WSD FuncD
253b0 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 47 6c  efHash sqlite3Gl
253c0 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a 23  obalFunctions;.#
253d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
253e0 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e  IT_WSD.extern in
253f0 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67  t sqlite3Pending
25400 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e  Byte;.#endif.#en
25410 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
25420 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71  RootPageMoved(sq
25430 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
25440 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
25450 69 74 65 33 52 65 69 6e 64 65 78 28 50 61 72 73  ite3Reindex(Pars
25460 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
25470 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
25480 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28  3AlterFunctions(
25490 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
254a0 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61  te3AlterRenameTa
254b0 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
254c0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ist*, Token*);.i
254d0 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b  nt sqlite3GetTok
254e0 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  en(const unsigne
254f0 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29  d char *, int *)
25500 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65  ;.void sqlite3Ne
25510 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65 2a  stedParse(Parse*
25520 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
25530 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
25540 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
25550 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65  tatements(sqlite
25560 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
25570 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50 61  CodeSubselect(Pa
25580 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69  rse *, Expr *, i
25590 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
255a0 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65 70  qlite3SelectPrep
255b0 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
255c0 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b  , NameContext*);
255d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63  .int sqlite3Matc
255e0 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20  hSpanName(const 
255f0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
25600 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
25610 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69   const char*);.i
25620 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  nt sqlite3Resolv
25630 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43  eExprNames(NameC
25640 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b  ontext*, Expr*);
25650 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
25660 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28  olveSelectNames(
25670 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
25680 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a   NameContext*);.
25690 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
256a0 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65  lveSelfReference
256b0 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69  (Parse*,Table*,i
256c0 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  nt,Expr*,ExprLis
256d0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
256e0 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75  ResolveOrderGrou
256f0 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  pBy(Parse*, Sele
25700 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  ct*, ExprList*, 
25710 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
25720 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  id sqlite3Column
25730 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20  Default(Vdbe *, 
25740 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Table *, int, in
25750 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25760 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f  AlterFinishAddCo
25770 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f  lumn(Parse *, To
25780 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ken *);.void sql
25790 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64  ite3AlterBeginAd
257a0 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c  dColumn(Parse *,
257b0 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c   SrcList *);.Col
257c0 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74  lSeq *sqlite3Get
257d0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20  CollSeq(Parse*, 
257e0 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63  u8, CollSeq *, c
257f0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61  onst char*);.cha
25800 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74  r sqlite3Affinit
25810 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72  yType(const char
25820 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71  *, u8*);.void sq
25830 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72  lite3Analyze(Par
25840 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
25850 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
25860 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c  3InvokeBusyHandl
25870 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29  er(BusyHandler*)
25880 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
25890 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f  dDb(sqlite3*, To
258a0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
258b0 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c  e3FindDbName(sql
258c0 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
258d0 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar *);.int sqlit
258e0 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73  e3AnalysisLoad(s
258f0 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29  qlite3*,int iDB)
25900 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
25910 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73  leteIndexSamples
25920 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a  (sqlite3*,Index*
25930 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
25940 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64  efaultRowEst(Ind
25950 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
25960 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75  e3RegisterLikeFu
25970 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
25980 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
25990 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f  te3IsLikeFunctio
259a0 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  n(sqlite3*,Expr*
259b0 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f  ,int*,char*);.vo
259c0 69 64 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75  id sqlite3Minimu
259d0 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50 61 72 73  mFileFormat(Pars
259e0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
259f0 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d  oid sqlite3Schem
25a00 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a  aClear(void *);.
25a10 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53  Schema *sqlite3S
25a20 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33  chemaGet(sqlite3
25a30 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e   *, Btree *);.in
25a40 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54  t sqlite3SchemaT
25a50 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a  oIndex(sqlite3 *
25a60 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b  db, Schema *);.K
25a70 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
25a80 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69  eyInfoAlloc(sqli
25a90 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76  te3*,int,int);.v
25aa0 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e  oid sqlite3KeyIn
25ab0 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a  foUnref(KeyInfo*
25ac0 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
25ad0 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65  te3KeyInfoRef(Ke
25ae0 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f  yInfo*);.KeyInfo
25af0 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
25b00 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  OfIndex(Parse*, 
25b10 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65 66 20  Index*);.#ifdef 
25b20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74  SQLITE_DEBUG.int
25b30 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49   sqlite3KeyInfoI
25b40 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e  sWriteable(KeyIn
25b50 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  fo*);.#endif.int
25b60 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75   sqlite3CreateFu
25b70 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  nc(sqlite3 *, co
25b80 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c  nst char *, int,
25b90 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20   int, void *, . 
25ba0 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
25bb0 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
25bc0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
25bd0 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  ,.  void (*)(sql
25be0 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
25bf0 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
25c00 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71  **), void (*)(sq
25c10 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c  lite3_context*),
25c20 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
25c30 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29  r *pDestructor.)
25c40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69  ;.int sqlite3Api
25c50 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  Exit(sqlite3 *db
25c60 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
25c70 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62  te3OpenTempDatab
25c80 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76  ase(Parse *);..v
25c90 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
25ca0 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d  cumInit(StrAccum
25cb0 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69  *, char*, int, i
25cc0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25cd0 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28  3StrAccumAppend(
25ce0 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20  StrAccum*,const 
25cf0 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  char*,int);.void
25d00 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
25d10 41 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63 63  AppendAll(StrAcc
25d20 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  um*,const char*)
25d30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 70  ;.void sqlite3Ap
25d40 70 65 6e 64 43 68 61 72 28 53 74 72 41 63 63 75  pendChar(StrAccu
25d50 6d 2a 2c 69 6e 74 2c 63 68 61 72 29 3b 0a 63 68  m*,int,char);.ch
25d60 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63  ar *sqlite3StrAc
25d70 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63  cumFinish(StrAcc
25d80 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  um*);.void sqlit
25d90 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74 28  e3StrAccumReset(
25da0 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64  StrAccum*);.void
25db0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65   sqlite3SelectDe
25dc0 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73  stInit(SelectDes
25dd0 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70  t*,int,int);.Exp
25de0 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65  r *sqlite3Create
25df0 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74  ColumnExpr(sqlit
25e00 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  e3 *, SrcList *,
25e10 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69   int, int);..voi
25e20 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52  d sqlite3BackupR
25e30 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62  estart(sqlite3_b
25e40 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73  ackup *);.void s
25e50 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64 61  qlite3BackupUpda
25e60 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  te(sqlite3_backu
25e70 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74  p *, Pgno, const
25e80 20 75 38 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20   u8 *);..#ifdef 
25e90 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
25ea0 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69  AT3_OR_STAT4.voi
25eb0 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65  d sqlite3Analyze
25ec0 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
25ed0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74  .int sqlite3Stat
25ee0 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28 50  4ProbeSetValue(P
25ef0 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70  arse*,Index*,Unp
25f00 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78  ackedRecord**,Ex
25f10 70 72 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29  pr*,u8,int,int*)
25f20 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  ;.int sqlite3Sta
25f30 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28  t4ValueFromExpr(
25f40 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75  Parse*, Expr*, u
25f50 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  8, sqlite3_value
25f60 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
25f70 33 53 74 61 74 34 50 72 6f 62 65 46 72 65 65 28  3Stat4ProbeFree(
25f80 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 29  UnpackedRecord*)
25f90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  ;.int sqlite3Sta
25fa0 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33  t4Column(sqlite3
25fb0 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  *, const void*, 
25fc0 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65  int, int, sqlite
25fd0 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 23 65 6e 64  3_value**);.#end
25fe0 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e  if../*.** The in
25ff0 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c  terface to the L
26000 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70  EMON-generated p
26010 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73  arser.*/.void *s
26020 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f  qlite3ParserAllo
26030 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29 29  c(void*(*)(u64))
26040 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
26050 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20  rserFree(void*, 
26060 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b  void(*)(void*));
26070 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72  .void sqlite3Par
26080 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  ser(void*, int, 
26090 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a  Token, Parse*);.
260a0 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41  #ifdef YYTRACKMA
260b0 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e  XSTACKDEPTH.  in
260c0 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 53  t sqlite3ParserS
260d0 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b  tackPeak(void*);
260e0 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71  .#endif..void sq
260f0 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74  lite3AutoLoadExt
26100 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  ensions(sqlite3*
26110 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
26120 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45  E_OMIT_LOAD_EXTE
26130 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c  NSION.  void sql
26140 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69  ite3CloseExtensi
26150 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
26160 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
26170 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
26180 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ions(X).#endif..
26190 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
261a0 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
261b0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
261c0 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a  ableLock(Parse *
261d0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20  , int, int, u8, 
261e0 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23  const char *);.#
261f0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
26200 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
26210 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69  v,w,x,y,z).#endi
26220 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
26230 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69  _TEST.  int sqli
26240 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67  te3Utf8To8(unsig
26250 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  ned char*);.#end
26260 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
26270 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
26280 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71  BLE.#  define sq
26290 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 59  lite3VtabClear(Y
262a0 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
262b0 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29  te3VtabSync(X,Y)
262c0 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65   SQLITE_OK.#  de
262d0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
262e0 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64  Rollback(X).#  d
262f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
26300 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65  bCommit(X).#  de
26310 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
26320 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20  InSync(db) 0.#  
26330 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
26340 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20 20 64 65  abLock(X) .#  de
26350 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
26360 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66  Unlock(X).#  def
26370 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55  ine sqlite3VtabU
26380 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20  nlockList(X).#  
26390 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
263a0 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59  abSavepoint(X, Y
263b0 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  , Z) SQLITE_OK.#
263c0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
263d0 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20  GetVTable(X,Y)  
263e0 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c  ((VTable*)0).#el
263f0 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  se.   void sqlit
26400 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69  e3VtabClear(sqli
26410 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29  te3 *db, Table*)
26420 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
26430 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28  3VtabDisconnect(
26440 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62  sqlite3 *db, Tab
26450 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73  le *p);.   int s
26460 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 73  qlite3VtabSync(s
26470 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62 65  qlite3 *db, Vdbe
26480 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  *);.   int sqlit
26490 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73  e3VtabRollback(s
264a0 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
264b0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
264c0 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64  ommit(sqlite3 *d
264d0 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  b);.   void sqli
264e0 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62  te3VtabLock(VTab
264f0 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  le *);.   void s
26500 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
26510 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76  (VTable *);.   v
26520 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55  oid sqlite3VtabU
26530 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65  nlockList(sqlite
26540 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  3*);.   int sqli
26550 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
26560 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c  (sqlite3 *, int,
26570 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20 73   int);.   void s
26580 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
26590 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73 71  Errmsg(Vdbe*, sq
265a0 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20  lite3_vtab*);.  
265b0 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33   VTable *sqlite3
265c0 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74 65  GetVTable(sqlite
265d0 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20 20  3*, Table*);.#  
265e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
265f0 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64  abInSync(db) ((d
26600 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26  b)->nVTrans>0 &&
26610 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d   (db)->aVTrans==
26620 30 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  0).#endif.void s
26630 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72  qlite3VtabMakeWr
26640 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61  itable(Parse*,Ta
26650 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ble*);.void sqli
26660 74 65 33 56 74 61 62 42 65 67 69 6e 50 61 72 73  te3VtabBeginPars
26670 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
26680 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
26690 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
266a0 69 74 65 33 56 74 61 62 46 69 6e 69 73 68 50 61  ite3VtabFinishPa
266b0 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  rse(Parse*, Toke
266c0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
266d0 33 56 74 61 62 41 72 67 49 6e 69 74 28 50 61 72  3VtabArgInit(Par
266e0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
266f0 65 33 56 74 61 62 41 72 67 45 78 74 65 6e 64 28  e3VtabArgExtend(
26700 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
26710 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
26720 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69 74  CallCreate(sqlit
26730 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
26740 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29  char *, char **)
26750 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
26760 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72  bCallConnect(Par
26770 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e  se*, Table*);.in
26780 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
26790 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33  lDestroy(sqlite3
267a0 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
267b0 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar *);.int sqlit
267c0 65 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c 69  e3VtabBegin(sqli
267d0 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29  te3 *, VTable *)
267e0 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74  ;.FuncDef *sqlit
267f0 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75  e3VtabOverloadFu
26800 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a  nction(sqlite3 *
26810 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e  ,FuncDef*, int n
26820 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  Arg, Expr*);.voi
26830 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69 64  d sqlite3Invalid
26840 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
26850 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
26860 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
26870 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71  sqlite3_int64 sq
26880 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e 74  lite3StmtCurrent
26890 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e  Time(sqlite3_con
268a0 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  text*);.int sqli
268b0 74 65 33 56 64 62 65 50 61 72 61 6d 65 74 65 72  te3VdbeParameter
268c0 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e  Index(Vdbe*, con
268d0 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  st char*, int);.
268e0 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73  int sqlite3Trans
268f0 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69  ferBindings(sqli
26900 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69  te3_stmt *, sqli
26910 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69  te3_stmt *);.voi
26920 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 52  d sqlite3ParserR
26930 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 69 6e  eset(Parse*);.in
26940 74 20 73 71 6c 69 74 65 33 52 65 70 72 65 70 61  t sqlite3Reprepa
26950 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20  re(Vdbe*);.void 
26960 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43  sqlite3ExprListC
26970 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73 65  heckLength(Parse
26980 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  *, ExprList*, co
26990 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c  nst char*);.Coll
269a0 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e 61  Seq *sqlite3Bina
269b0 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71  ryCompareCollSeq
269c0 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
269d0 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73  , Expr *);.int s
269e0 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f  qlite3TempInMemo
269f0 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  ry(const sqlite3
26a00 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  *);.const char *
26a10 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f  sqlite3JournalMo
26a20 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66  dename(int);.#if
26a30 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
26a40 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74  _WAL.  int sqlit
26a50 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c  e3Checkpoint(sql
26a60 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ite3*, int, int,
26a70 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20   int*, int*);.  
26a80 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44 65  int sqlite3WalDe
26a90 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c  faultHook(void*,
26aa0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
26ab0 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69  har*,int);.#endi
26ac0 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
26ad0 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74 68  _OMIT_CTE.  With
26ae0 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64 64   *sqlite3WithAdd
26af0 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54 6f  (Parse*,With*,To
26b00 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  ken*,ExprList*,S
26b10 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20  elect*);.  void 
26b20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74  sqlite3WithDelet
26b30 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68 2a  e(sqlite3*,With*
26b40 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
26b50 33 57 69 74 68 50 75 73 68 28 50 61 72 73 65 2a  3WithPush(Parse*
26b60 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65  , With*, u8);.#e
26b70 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  lse.#define sqli
26b80 74 65 33 57 69 74 68 50 75 73 68 28 78 2c 79 2c  te3WithPush(x,y,
26b90 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  z).#define sqlit
26ba0 65 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c 79  e3WithDelete(x,y
26bb0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63  ).#endif../* Dec
26bc0 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75  larations for fu
26bd0 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e  nctions in fkey.
26be0 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20  c. All of these 
26bf0 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a  are replaced by.
26c00 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20  ** no-op macros 
26c10 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  if OMIT_FOREIGN_
26c20 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20  KEY is defined. 
26c30 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20  In this case no 
26c40 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66  foreign.** key f
26c50 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
26c60 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d  available. If OM
26c70 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64 65  IT_TRIGGER is de
26c80 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49  fined but.** OMI
26c90 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
26ca0 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20   not, only some 
26cb0 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73  of the functions
26cc0 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e   are no-oped. In
26cd0 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f  .** this case fo
26ce0 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70  reign keys are p
26cf0 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74  arsed, but no ot
26d00 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  her functionalit
26d10 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64 65  y is .** provide
26d20 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f  d (enforcement o
26d30 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  f FK constraints
26d40 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74 72   requires the tr
26d50 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74 65  iggers sub-syste
26d60 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  m)..*/.#if !defi
26d70 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
26d80 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20  FOREIGN_KEY) && 
26d90 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
26da0 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20  OMIT_TRIGGER).  
26db0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68  void sqlite3FkCh
26dc0 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  eck(Parse*, Tabl
26dd0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
26de0 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  t*, int);.  void
26df0 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
26e00 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
26e10 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ist *, Table*);.
26e20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
26e30 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20  Actions(Parse*, 
26e40 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74  Table*, ExprList
26e50 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  *, int, int*, in
26e60 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
26e70 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72 73  3FkRequired(Pars
26e80 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a  e*, Table*, int*
26e90 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71  , int);.  u32 sq
26ea0 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50  lite3FkOldmask(P
26eb0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  arse*, Table*);.
26ec0 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46    FKey *sqlite3F
26ed0 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c  kReferences(Tabl
26ee0 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  e *);.#else.  #d
26ef0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41  efine sqlite3FkA
26f00 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65  ctions(a,b,c,d,e
26f10 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,f).  #define sq
26f20 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62  lite3FkCheck(a,b
26f30 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66  ,c,d,e,f).  #def
26f40 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72 6f  ine sqlite3FkDro
26f50 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20  pTable(a,b,c).  
26f60 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
26f70 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20 20  kOldmask(a,b)   
26f80 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e        0.  #defin
26f90 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69  e sqlite3FkRequi
26fa0 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20 20  red(a,b,c,d)    
26fb0 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  0.#endif.#ifndef
26fc0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
26fd0 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20  EIGN_KEY.  void 
26fe0 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28  sqlite3FkDelete(
26ff0 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c 65  sqlite3 *, Table
27000 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
27010 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 50  3FkLocateIndex(P
27020 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65  arse*,Table*,FKe
27030 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a  y*,Index**,int**
27040 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
27050 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65  ne sqlite3FkDele
27060 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69 6e  te(a,b).  #defin
27070 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74  e sqlite3FkLocat
27080 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65  eIndex(a,b,c,d,e
27090 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a  ).#endif.../*.**
270a0 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74   Available fault
270b0 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f   injectors.  Sho
270c0 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20  uld be numbered 
270d0 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30  beginning with 0
270e0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
270f0 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f  ITE_FAULTINJECTO
27100 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23  R_MALLOC     0.#
27110 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41  define SQLITE_FA
27120 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e  ULTINJECTOR_COUN
27130 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20  T      1../*.** 
27140 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f  The interface to
27150 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75   the code in fau
27160 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64  lt.c used for id
27170 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67  entifying "benig
27180 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69  n".** malloc fai
27190 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f  lures. This is o
271a0 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20 53  nly present if S
271b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
271c0 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e 6f  IN_TEST.** is no
271d0 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69  t defined..*/.#i
271e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
271f0 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20  T_BUILTIN_TEST. 
27200 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67   void sqlite3Beg
27210 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76  inBenignMalloc(v
27220 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  oid);.  void sql
27230 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
27240 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65  loc(void);.#else
27250 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
27260 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
27270 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20  loc().  #define 
27280 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
27290 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a  Malloc().#endif.
272a0 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72  ./*.** Allowed r
272b0 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f  eturn values fro
272c0 6d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  m sqlite3FindInI
272d0 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e  ndex().*/.#defin
272e0 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44  e IN_INDEX_ROWID
272f0 20 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 53          1   /* S
27300 65 61 72 63 68 20 74 68 65 20 72 6f 77 69 64 20  earch the rowid 
27310 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  of the table */.
27320 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
27330 5f 45 50 48 20 20 20 20 20 20 20 20 20 20 32 20  _EPH          2 
27340 20 20 2f 2a 20 53 65 61 72 63 68 20 61 6e 20 65    /* Search an e
27350 70 68 65 6d 65 72 61 6c 20 62 2d 74 72 65 65 20  phemeral b-tree 
27360 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
27370 44 45 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20  DEX_INDEX_ASC   
27380 20 33 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67   3   /* Existing
27390 20 69 6e 64 65 78 20 41 53 43 45 4e 44 49 4e 47   index ASCENDING
273a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
273b0 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20  NDEX_INDEX_DESC 
273c0 20 20 34 20 20 20 2f 2a 20 45 78 69 73 74 69 6e    4   /* Existin
273d0 67 20 69 6e 64 65 78 20 44 45 53 43 45 4e 44 49  g index DESCENDI
273e0 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  NG */.#define IN
273f0 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20  _INDEX_NOOP     
27400 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61      5   /* No ta
27410 62 6c 65 20 61 76 61 69 6c 61 62 6c 65 2e 20 55  ble available. U
27420 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a  se comparisons *
27430 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  /./*.** Allowed 
27440 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20 33 72  flags for the 3r
27450 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73  d parameter to s
27460 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
27470 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  x()..*/.#define 
27480 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b  IN_INDEX_NOOP_OK
27490 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20       0x0001  /* 
274a0 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f  OK to return IN_
274b0 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64  INDEX_NOOP */.#d
274c0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d  efine IN_INDEX_M
274d0 45 4d 42 45 52 53 48 49 50 20 20 30 78 30 30 30  EMBERSHIP  0x000
274e0 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f  2  /* IN operato
274f0 72 20 75 73 65 64 20 66 6f 72 20 6d 65 6d 62 65  r used for membe
27500 72 73 68 69 70 20 74 65 73 74 20 2a 2f 0a 23 64  rship test */.#d
27510 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c  efine IN_INDEX_L
27520 4f 4f 50 20 20 20 20 20 20 20 20 30 78 30 30 30  OOP        0x000
27530 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f  4  /* IN operato
27540 72 20 75 73 65 64 20 61 73 20 61 20 6c 6f 6f 70  r used as a loop
27550 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46   */.int sqlite3F
27560 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65  indInIndex(Parse
27570 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 33 32 2c   *, Expr *, u32,
27580 20 69 6e 74 2a 29 3b 0a 0a 23 69 66 64 65 66 20   int*);..#ifdef 
27590 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54  SQLITE_ENABLE_AT
275a0 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20 69 6e 74  OMIC_WRITE.  int
275b0 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f   sqlite3JournalO
275c0 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20  pen(sqlite3_vfs 
275d0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
275e0 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c   sqlite3_file *,
275f0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 69 6e   int, int);.  in
27600 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
27610 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73  Size(sqlite3_vfs
27620 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74   *);.  int sqlit
27630 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28  e3JournalCreate(
27640 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b  sqlite3_file *);
27650 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
27660 75 72 6e 61 6c 45 78 69 73 74 73 28 73 71 6c 69  urnalExists(sqli
27670 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 23 65  te3_file *p);.#e
27680 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
27690 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65  lite3JournalSize
276a0 28 70 56 66 73 29 20 28 28 70 56 66 73 29 2d 3e  (pVfs) ((pVfs)->
276b0 73 7a 4f 73 46 69 6c 65 29 0a 20 20 23 64 65 66  szOsFile).  #def
276c0 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  ine sqlite3Journ
276d0 61 6c 45 78 69 73 74 73 28 70 29 20 31 0a 23 65  alExists(p) 1.#e
276e0 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74  ndif..void sqlit
276f0 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e  e3MemJournalOpen
27700 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
27710 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d  ;.int sqlite3Mem
27720 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 76 6f 69 64  JournalSize(void
27730 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
27740 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c 69 74  MemJournal(sqlit
27750 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 23 69 66  e3_file *);..#if
27760 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52   SQLITE_MAX_EXPR
27770 5f 44 45 50 54 48 3e 30 0a 20 20 76 6f 69 64 20  _DEPTH>0.  void 
27780 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65  sqlite3ExprSetHe
27790 69 67 68 74 28 50 61 72 73 65 20 2a 70 50 61 72  ight(Parse *pPar
277a0 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 20 20  se, Expr *p);.  
277b0 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
277c0 74 45 78 70 72 48 65 69 67 68 74 28 53 65 6c 65  tExprHeight(Sele
277d0 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ct *);.  int sql
277e0 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69  ite3ExprCheckHei
277f0 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ght(Parse*, int)
27800 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
27810 65 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74  e sqlite3ExprSet
27820 48 65 69 67 68 74 28 78 2c 79 29 0a 20 20 23 64  Height(x,y).  #d
27830 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c  efine sqlite3Sel
27840 65 63 74 45 78 70 72 48 65 69 67 68 74 28 78 29  ectExprHeight(x)
27850 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
27860 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69  ite3ExprCheckHei
27870 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a  ght(x,y).#endif.
27880 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65 74 34  .u32 sqlite3Get4
27890 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b  byte(const u8*);
278a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74  .void sqlite3Put
278b0 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b  4byte(u8*, u32);
278c0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
278d0 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
278e0 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  TIFY.  void sqli
278f0 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f  te3ConnectionBlo
27900 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20  cked(sqlite3 *, 
27910 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f  sqlite3 *);.  vo
27920 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
27930 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c  tionUnlocked(sql
27940 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69  ite3 *db);.  voi
27950 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
27960 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65  ionClosed(sqlite
27970 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20  3 *db);.#else.  
27980 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
27990 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64  onnectionBlocked
279a0 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20  (x,y).  #define 
279b0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
279c0 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23  nUnlocked(x).  #
279d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
279e0 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78  nnectionClosed(x
279f0 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ).#endif..#ifdef
27a00 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
27a10 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
27a20 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63  erTrace(FILE*, c
27a30 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  har *);.#endif..
27a40 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  /*.** If the SQL
27a50 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41  ITE_ENABLE IOTRA
27a60 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20 74  CE exists then t
27a70 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
27a80 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54  le.** sqlite3IoT
27a90 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65  race is a pointe
27aa0 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69  r to a printf-li
27ab0 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20  ke routine used 
27ac0 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20  to.** print I/O 
27ad0 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73  tracing messages
27ae0 2e 20 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  . .*/.#ifdef SQL
27af0 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41  ITE_ENABLE_IOTRA
27b00 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52  CE.# define IOTR
27b10 41 43 45 28 41 29 20 20 69 66 28 20 73 71 6c 69  ACE(A)  if( sqli
27b20 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71  te3IoTrace ){ sq
27b30 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20  lite3IoTrace A; 
27b40 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  }.  void sqlite3
27b50 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56  VdbeIOTraceSql(V
27b60 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 45 58  dbe*);.SQLITE_EX
27b70 54 45 52 4e 20 76 6f 69 64 20 28 2a 73 71 6c 69  TERN void (*sqli
27b80 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73  te3IoTrace)(cons
27b90 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65  t char*,...);.#e
27ba0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54  lse.# define IOT
27bb0 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65  RACE(A).# define
27bc0 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
27bd0 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66  aceSql(X).#endif
27be0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f  ../*.** These ro
27bf0 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c  utines are avail
27c00 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d  able for the mem
27c10 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65  2.c debugging me
27c20 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a  mory allocator.*
27c30 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72  * only.  They ar
27c40 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79  e used to verify
27c50 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74 20   that different 
27c60 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72  "types" of memor
27c70 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  y.** allocations
27c80 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72   are properly tr
27c90 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79 73  acked by the sys
27ca0 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  tem..**.** sqlit
27cb0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
27cc0 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74 79  e() sets the "ty
27cd0 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61  pe" of an alloca
27ce0 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a  tion to one of.*
27cf0 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20  * the MEMTYPE_* 
27d00 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62  macros defined b
27d10 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20  elow.  The type 
27d20 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61 73  must be a bitmas
27d30 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67  k with.** a sing
27d40 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a  le bit set..**.*
27d50 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
27d60 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75 72  gHasType() retur
27d70 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f  ns true if any o
27d80 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
27d90 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
27da0 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
27db0 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
27dc0 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
27dd0 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
27de0 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  ..** sqlite3Memd
27df0 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69 73  ebugHasType() is
27e00 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73   intended for us
27e10 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74 28  e inside assert(
27e20 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  ) statements..**
27e30 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
27e40 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75  bugNoType() retu
27e50 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65  rns true if none
27e60 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20   of the bits in 
27e70 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72  its second.** ar
27e80 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65  gument match the
27e90 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65   type set by the
27ea0 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65   previous sqlite
27eb0 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
27ec0 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70  ()..**.** Perhap
27ed0 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72  s the most impor
27ee0 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68  tant point is th
27ef0 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
27f00 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41  ween MEMTYPE_HEA
27f10 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45  P.** and MEMTYPE
27f20 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20  _LOOKASIDE.  If 
27f30 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73  an allocation is
27f40 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
27f50 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a  DE, that means.*
27f60 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20  * it might have 
27f70 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62  been allocated b
27f80 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63  y lookaside, exc
27f90 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69  ept the allocati
27fa0 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61  on was.** too la
27fb0 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65  rge or lookaside
27fc0 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c   was already ful
27fd0 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74  l.  It is import
27fe0 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  ant to verify.**
27ff0 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e   that allocation
28000 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76  s that might hav
28010 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65 64  e been satisfied
28020 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72   by lookaside ar
28030 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20  e not.** passed 
28040 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b  back to non-look
28050 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75  aside free() rou
28060 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20  tines.  Asserts 
28070 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65  such as the.** e
28080 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65  xample above are
28090 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e   placed on the n
280a0 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
280b0 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20  e() routines to 
280c0 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63  verify.** this c
280d0 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a  onstraint. .**.*
280e0 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73  * All of this is
280f0 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f   no-op for a pro
28100 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20  duction build.  
28110 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e  It only comes in
28120 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20  to.** play when 
28130 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  the SQLITE_MEMDE
28140 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  BUG compile-time
28150 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e   option is used.
28160 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
28170 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69  E_MEMDEBUG.  voi
28180 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  d sqlite3Memdebu
28190 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75  gSetType(void*,u
281a0 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
281b0 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
281c0 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
281d0 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
281e0 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  gNoType(void*,u8
281f0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
28200 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
28210 67 53 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f  gSetType(X,Y)  /
28220 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66  * no-op */.# def
28230 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
28240 62 75 67 48 61 73 54 79 70 65 28 58 2c 59 29 20  bugHasType(X,Y) 
28250 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   1.# define sqli
28260 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
28270 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69  e(X,Y)   1.#endi
28280 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  f.#define MEMTYP
28290 45 5f 48 45 41 50 20 20 20 20 20 20 20 30 78 30  E_HEAP       0x0
282a0 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65  1  /* General he
282b0 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  ap allocations *
282c0 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
282d0 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30  E_LOOKASIDE  0x0
282e0 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20  2  /* Heap that 
282f0 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
28300 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65  lookaside */.#de
28310 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52  fine MEMTYPE_SCR
28320 41 54 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a  ATCH    0x04  /*
28330 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74   Scratch allocat
28340 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
28350 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20  MEMTYPE_PCACHE  
28360 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65     0x08  /* Page
28370 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f   cache allocatio
28380 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72  ns */../*.** Thr
28390 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65  eading interface
283a0 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
283b0 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
283c0 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  S>0.int sqlite3T
283d0 68 72 65 61 64 43 72 65 61 74 65 28 53 51 4c 69  hreadCreate(SQLi
283e0 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a  teThread**,void*
283f0 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a  (*)(void*),void*
28400 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68  );.int sqlite3Th
28410 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54  readJoin(SQLiteT
28420 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b  hread*, void**);
28430 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20  .#endif..#endif 
28440 2f 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  /* _SQLITEINT_H_
28450 20 2a 2f 0a                                       */.