/ Hex Artifact Content
Login

Artifact c97db3c4d20b34c050a801c93451ef18e4f22de1:


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 54 68  #endif../*.** Th
1b60: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
1b70: 5f 4d 45 4d 53 54 41 54 55 53 20 6d 61 63 72 6f  _MEMSTATUS macro
1b80: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
1b90: 20 61 73 20 65 69 74 68 65 72 20 30 20 6f 72 20   as either 0 or 
1ba0: 31 2e 0a 2a 2a 20 49 74 20 64 65 74 65 72 6d 69  1..** It determi
1bb0: 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e  nes whether or n
1bc0: 6f 74 20 74 68 65 20 66 65 61 74 75 72 65 73 20  ot the features 
1bd0: 72 65 6c 61 74 65 64 20 74 6f 20 0a 2a 2a 20 53  related to .** S
1be0: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d  QLITE_CONFIG_MEM
1bf0: 53 54 41 54 55 53 20 61 72 65 20 61 76 61 69 6c  STATUS are avail
1c00: 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74 20  able by default 
1c10: 6f 72 20 6e 6f 74 2e 20 54 68 69 73 20 76 61 6c  or not. This val
1c20: 75 65 20 63 61 6e 0a 2a 2a 20 62 65 20 6f 76 65  ue can.** be ove
1c30: 72 72 69 64 64 65 6e 20 61 74 20 72 75 6e 74 69  rridden at runti
1c40: 6d 65 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c  me using the sql
1c50: 69 74 65 33 5f 63 6f 6e 66 69 67 28 29 20 41 50  ite3_config() AP
1c60: 49 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  I..*/.#if !defin
1c70: 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ed(SQLITE_DEFAUL
1c80: 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a 23 20 64  T_MEMSTATUS).# d
1c90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
1ca0: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 31  AULT_MEMSTATUS 1
1cb0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
1cc0: 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68  xactly one of th
1cd0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1ce0: 6f 73 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e  os must be defin
1cf0: 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ed in order to.*
1d00: 2a 20 73 70 65 63 69 66 79 20 77 68 69 63 68 20  * specify which 
1d10: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
1d20: 6e 20 73 75 62 73 79 73 74 65 6d 20 74 6f 20 75  n subsystem to u
1d30: 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51  se..**.**     SQ
1d40: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
1d50: 4f 43 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  OC          // U
1d60: 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d  se normal system
1d70: 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20   malloc().**    
1d80: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
1d90: 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20 2f  LLOC           /
1da0: 2f 20 55 73 65 20 57 69 6e 33 32 20 6e 61 74 69  / Use Win32 nati
1db0: 76 65 20 68 65 61 70 20 41 50 49 0a 2a 2a 20 20  ve heap API.**  
1dc0: 20 20 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d     SQLITE_ZERO_M
1dd0: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20  ALLOC           
1de0: 20 2f 2f 20 55 73 65 20 61 20 73 74 75 62 20 61   // Use a stub a
1df0: 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74 20 61 6c  llocator that al
1e00: 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20  ways fails.**   
1e10: 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55    SQLITE_MEMDEBU
1e20: 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  G               
1e30: 2f 2f 20 44 65 62 75 67 67 69 6e 67 20 76 65 72  // Debugging ver
1e40: 73 69 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d  sion of system m
1e50: 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e  alloc().**.** On
1e60: 20 57 69 6e 64 6f 77 73 2c 20 69 66 20 74 68 65   Windows, if the
1e70: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
1e80: 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d 61  LLOC_VALIDATE ma
1e90: 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 20 61  cro is defined a
1ea0: 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74  nd the.** assert
1eb0: 28 29 20 6d 61 63 72 6f 20 69 73 20 65 6e 61 62  () macro is enab
1ec0: 6c 65 64 2c 20 65 61 63 68 20 63 61 6c 6c 20 69  led, each call i
1ed0: 6e 74 6f 20 74 68 65 20 57 69 6e 33 32 20 6e 61  nto the Win32 na
1ee0: 74 69 76 65 20 68 65 61 70 20 73 75 62 73 79 73  tive heap subsys
1ef0: 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73  tem.** will caus
1f00: 65 20 48 65 61 70 56 61 6c 69 64 61 74 65 20 74  e HeapValidate t
1f10: 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20 20 49 66  o be called.  If
1f20: 20 68 65 61 70 20 76 61 6c 69 64 61 74 69 6f 6e   heap validation
1f30: 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e   should fail, an
1f40: 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e 20 77 69  .** assertion wi
1f50: 6c 6c 20 62 65 20 74 72 69 67 67 65 72 65 64 2e  ll be triggered.
1f60: 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f  .**.** If none o
1f70: 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20  f the above are 
1f80: 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 73 65  defined, then se
1f90: 74 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  t SQLITE_SYSTEM_
1fa0: 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65  MALLOC as.** the
1fb0: 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66   default..*/.#if
1fc0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1fd0: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c  SYSTEM_MALLOC) \
1fe0: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
1ff0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2000: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2010: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2020: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
2030: 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  d(SQLITE_MEMDEBU
2040: 47 29 3e 31 0a 23 20 65 72 72 6f 72 20 22 54 77  G)>1.# error "Tw
2050: 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65  o or more of the
2060: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69   following compi
2070: 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72  le-time configur
2080: 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20  ation options\. 
2090: 61 72 65 20 64 65 66 69 6e 65 64 20 62 75 74 20  are defined but 
20a0: 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61  at most one is a
20b0: 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45  llowed:\. SQLITE
20c0: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20  _SYSTEM_MALLOC, 
20d0: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
20e0: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44  LOC, SQLITE_MEMD
20f0: 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a  EBUG,\. SQLITE_Z
2100: 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64  ERO_MALLOC".#end
2110: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
2120: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2130: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2140: 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  ed(SQLITE_WIN32_
2150: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2160: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52  fined(SQLITE_ZER
2170: 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  O_MALLOC) \.  + 
2180: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
2190: 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23 20 64 65  EMDEBUG)==0.# de
21a0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 59 53 54  fine SQLITE_SYST
21b0: 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64  EM_MALLOC 1.#end
21c0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c  if../*.** If SQL
21d0: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
21e0: 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65 72  LIMIT is not zer
21f0: 6f 2c 20 74 68 65 6e 20 74 72 79 20 74 6f 20 6b  o, then try to k
2200: 65 65 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73  eep the.** sizes
2210: 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
2220: 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69  ations below thi
2230: 73 20 76 61 6c 75 65 20 77 68 65 72 65 20 70 6f  s value where po
2240: 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21  ssible..*/.#if !
2250: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
2260: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
2270: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
2280: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
2290: 4d 49 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a  MIT 1024.#endif.
22a0: 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74  ./*.** We need t
22b0: 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f  o define _XOPEN_
22c0: 53 4f 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77  SOURCE as follow
22d0: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
22e0: 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76  able.** recursiv
22f0: 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73  e mutexes on mos
2300: 74 20 55 6e 69 78 20 73 79 73 74 65 6d 73 20 61  t Unix systems a
2310: 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f  nd fchmod() on O
2320: 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f  penBSD..** But _
2330: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 64 65 66  XOPEN_SOURCE def
2340: 69 6e 65 20 63 61 75 73 65 73 20 70 72 6f 62 6c  ine causes probl
2350: 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  ems for Mac OS X
2360: 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e  , so omit.** it.
2370: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
2380: 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20  (_XOPEN_SOURCE) 
2390: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 44 41  && !defined(__DA
23a0: 52 57 49 4e 5f 5f 29 20 26 26 20 21 64 65 66 69  RWIN__) && !defi
23b0: 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23  ned(__APPLE__).#
23c0: 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f    define _XOPEN_
23d0: 53 4f 55 52 43 45 20 36 30 30 0a 23 65 6e 64 69  SOURCE 600.#endi
23e0: 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20  f../*.** NDEBUG 
23f0: 61 6e 64 20 53 51 4c 49 54 45 5f 44 45 42 55 47  and SQLITE_DEBUG
2400: 20 61 72 65 20 6f 70 70 6f 73 69 74 65 73 2e 20   are opposites. 
2410: 20 49 74 20 73 68 6f 75 6c 64 20 61 6c 77 61 79   It should alway
2420: 73 20 62 65 20 74 72 75 65 20 74 68 61 74 0a 2a  s be true that.*
2430: 2a 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47  * defined(NDEBUG
2440: 29 3d 3d 21 64 65 66 69 6e 65 64 28 53 51 4c 49  )==!defined(SQLI
2450: 54 45 5f 44 45 42 55 47 29 2e 20 20 49 66 20 74  TE_DEBUG).  If t
2460: 68 69 73 20 69 73 20 6e 6f 74 20 63 75 72 72 65  his is not curre
2470: 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61  ntly true,.** ma
2480: 6b 65 20 69 74 20 74 72 75 65 20 62 79 20 64 65  ke it true by de
2490: 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66 69  fining or undefi
24a0: 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a  ning NDEBUG..**.
24b0: 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45 42 55  ** Setting NDEBU
24c0: 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f 64 65  G makes the code
24d0: 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61 73   smaller and fas
24e0: 74 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67  ter by disabling
24f0: 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29   the.** assert()
2500: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
2510: 68 65 20 63 6f 64 65 2e 20 20 53 6f 20 77 65 20  he code.  So we 
2520: 77 61 6e 74 20 74 68 65 20 64 65 66 61 75 6c 74  want the default
2530: 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65   action.** to be
2540: 20 66 6f 72 20 4e 44 45 42 55 47 20 74 6f 20 62   for NDEBUG to b
2550: 65 20 73 65 74 20 61 6e 64 20 4e 44 45 42 55 47  e set and NDEBUG
2560: 20 74 6f 20 62 65 20 75 6e 64 65 66 69 6e 65 64   to be undefined
2570: 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49 54 45 5f   only if SQLITE_
2580: 44 45 42 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e  DEBUG.** is set.
2590: 20 20 54 68 75 73 20 4e 44 45 42 55 47 20 62 65    Thus NDEBUG be
25a0: 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20  comes an opt-in 
25b0: 72 61 74 68 65 72 20 74 68 61 6e 20 61 6e 20 6f  rather than an o
25c0: 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72  pt-out.** featur
25d0: 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  e..*/.#if !defin
25e0: 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 21 64  ed(NDEBUG) && !d
25f0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
2600: 42 55 47 29 20 0a 23 20 64 65 66 69 6e 65 20 4e  BUG) .# define N
2610: 44 45 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23  DEBUG 1.#endif.#
2620: 69 66 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55  if defined(NDEBU
2630: 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  G) && defined(SQ
2640: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e  LITE_DEBUG).# un
2650: 64 65 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69  def NDEBUG.#endi
2660: 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20  f../*.** Enable 
2670: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
2680: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
2690: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69  f SQLITE_DEBUG i
26a0: 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a  s turned on..*/.
26b0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
26c0: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
26d0: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20  IN_COMMENTS) && 
26e0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
26f0: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53  EBUG).# define S
2700: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
2710: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a  LAIN_COMMENTS 1.
2720: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
2730: 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63  e testcase() mac
2740: 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61 69  ro is used to ai
2750: 64 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65  d in coverage te
2760: 73 74 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a 2a  sting.  When .**
2770: 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20   doing coverage 
2780: 74 65 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e  testing, the con
2790: 64 69 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68  dition inside th
27a0: 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a  e argument to.**
27b0: 20 74 65 73 74 63 61 73 65 28 29 20 6d 75 73 74   testcase() must
27c0: 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f   be evaluated bo
27d0: 74 68 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73  th true and fals
27e0: 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
27f0: 20 67 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68   get full branch
2800: 20 63 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20   coverage.  The 
2810: 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f  testcase() macro
2820: 20 69 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20   is inserted.** 
2830: 74 6f 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61  to help ensure a
2840: 64 65 71 75 61 74 65 20 74 65 73 74 20 63 6f 76  dequate test cov
2850: 65 72 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20  erage in places 
2860: 77 68 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20  where simple.** 
2870: 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69  condition/decisi
2880: 6f 6e 20 63 6f 76 65 72 61 67 65 20 69 73 20 69  on coverage is i
2890: 6e 61 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20  nadequate.  For 
28a0: 65 78 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73  example, testcas
28b0: 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73  e().** can be us
28c0: 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ed to make sure 
28d0: 62 6f 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20  boundary values 
28e0: 61 72 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72  are tested.  For
28f0: 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74  .** bitmask test
2900: 73 2c 20 74 65 73 74 63 61 73 65 28 29 20 63 61  s, testcase() ca
2910: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b  n be used to mak
2920: 65 20 73 75 72 65 20 65 61 63 68 20 62 69 74 0a  e sure each bit.
2930: 2a 2a 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e  ** is significan
2940: 74 20 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65  t and used at le
2950: 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77  ast once.  On sw
2960: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a  itch statements.
2970: 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c  ** where multipl
2980: 65 20 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68  e cases go to th
2990: 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20  e same block of 
29a0: 63 6f 64 65 2c 20 74 65 73 74 63 61 73 65 28 29  code, testcase()
29b0: 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74  .** can insure t
29c0: 68 61 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72  hat all cases ar
29d0: 65 20 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a  e evaluated..**.
29e0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
29f0: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20  _COVERAGE_TEST. 
2a00: 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76   void sqlite3Cov
2a10: 65 72 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65  erage(int);.# de
2a20: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
2a30: 20 20 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74    if( X ){ sqlit
2a40: 65 33 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e  e3Coverage(__LIN
2a50: 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20  E__); }.#else.# 
2a60: 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65 28  define testcase(
2a70: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2a80: 20 54 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61   The TESTONLY ma
2a90: 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65  cro is used to e
2aa0: 6e 63 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20  nclose variable 
2ab0: 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a  declarations or.
2ac0: 2a 2a 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66  ** other bits of
2ad0: 20 63 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e   code that are n
2ae0: 65 65 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74  eeded to support
2af0: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a   the arguments.*
2b00: 2a 20 77 69 74 68 69 6e 20 74 65 73 74 63 61 73  * within testcas
2b10: 65 28 29 20 61 6e 64 20 61 73 73 65 72 74 28 29  e() and assert()
2b20: 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20   macros..*/.#if 
2b30: 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29  !defined(NDEBUG)
2b40: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
2b50: 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54  TE_COVERAGE_TEST
2b60: 29 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f  ).# define TESTO
2b70: 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a  NLY(X)  X.#else.
2b80: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
2b90: 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  Y(X).#endif../*.
2ba0: 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20  ** Sometimes we 
2bb0: 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f  need a small amo
2bc0: 75 6e 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68  unt of code such
2bd0: 20 61 73 20 61 20 76 61 72 69 61 62 6c 65 20 69   as a variable i
2be0: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a  nitialization.**
2bf0: 20 74 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20   to setup for a 
2c00: 6c 61 74 65 72 20 61 73 73 65 72 74 28 29 20 73  later assert() s
2c10: 74 61 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f  tatement.  We do
2c20: 20 6e 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63   not want this c
2c30: 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72  ode to.** appear
2c40: 20 77 68 65 6e 20 61 73 73 65 72 74 28 29 20 69   when assert() i
2c50: 73 20 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65  s disabled.  The
2c60: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
2c70: 20 69 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a   is therefore.**
2c80: 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e   used to contain
2c90: 20 74 68 61 74 20 73 65 74 75 70 20 63 6f 64 65   that setup code
2ca0: 2e 20 20 54 68 65 20 22 56 56 41 22 20 61 63 72  .  The "VVA" acr
2cb0: 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a  onym stands for.
2cc0: 2a 2a 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e  ** "Verification
2cd0: 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e  , Validation, an
2ce0: 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22  d Accreditation"
2cf0: 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
2d00: 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77  s, the.** code w
2d10: 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29  ithin VVA_ONLY()
2d20: 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64   will only run d
2d30: 75 72 69 6e 67 20 76 65 72 69 66 69 63 61 74 69  uring verificati
2d40: 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f  on processes..*/
2d50: 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
2d60: 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c  # define VVA_ONL
2d70: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
2d80: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
2d90: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2da0: 20 54 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20   The ALWAYS and 
2db0: 4e 45 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72  NEVER macros sur
2dc0: 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78  round boolean ex
2dd0: 70 72 65 73 73 69 6f 6e 73 20 77 68 69 63 68 20  pressions which 
2de0: 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64  .** are intended
2df0: 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72   to always be tr
2e00: 75 65 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73  ue or false, res
2e10: 70 65 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68  pectively.  Such
2e20: 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20  .** expressions 
2e30: 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64  could be omitted
2e40: 20 66 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63   from the code c
2e50: 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20  ompletely.  But 
2e60: 74 68 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c  they.** are incl
2e70: 75 64 65 64 20 69 6e 20 61 20 66 65 77 20 63 61  uded in a few ca
2e80: 73 65 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ses in order to 
2e90: 65 6e 68 61 6e 63 65 20 74 68 65 20 72 65 73 69  enhance the resi
2ea0: 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c  lience.** of SQL
2eb0: 69 74 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65  ite to unexpecte
2ec0: 64 20 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20  d behavior - to 
2ed0: 6d 61 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73  make the code "s
2ee0: 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20  elf-healing".** 
2ef0: 6f 72 20 22 64 75 63 74 69 6c 65 22 20 72 61 74  or "ductile" rat
2f00: 68 65 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22  her than being "
2f10: 62 72 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61  brittle" and cra
2f20: 73 68 69 6e 67 20 61 74 20 74 68 65 20 66 69 72  shing at the fir
2f30: 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e  st.** hint of un
2f40: 70 6c 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72  planned behavior
2f50: 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ..**.** In other
2f60: 20 77 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61   words, ALWAYS a
2f70: 6e 64 20 4e 45 56 45 52 20 61 72 65 20 61 64 64  nd NEVER are add
2f80: 65 64 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65  ed for defensive
2f90: 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65   code..**.** Whe
2fa0: 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65  n doing coverage
2fb0: 20 74 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20   testing ALWAYS 
2fc0: 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 68 61  and NEVER are ha
2fd0: 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62  rd-coded to.** b
2fe0: 65 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65  e true and false
2ff0: 20 73 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72   so that the unr
3000: 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68  eachable code th
3010: 65 79 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a  ey specify will.
3020: 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65  ** not be counte
3030: 64 20 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f  d as untested co
3040: 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  de..*/.#if defin
3050: 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41  ed(SQLITE_COVERA
3060: 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e  GE_TEST).# defin
3070: 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20  e ALWAYS(X)     
3080: 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45   (1).# define NE
3090: 56 45 52 28 58 29 20 20 20 20 20 20 20 28 30 29  VER(X)       (0)
30a0: 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
30b0: 4e 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65  NDEBUG).# define
30c0: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
30d0: 28 28 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30  ((X)?1:(assert(0
30e0: 29 2c 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e  ),0)).# define N
30f0: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 28  EVER(X)       ((
3100: 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29  X)?(assert(0),1)
3110: 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  :0).#else.# defi
3120: 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20  ne ALWAYS(X)    
3130: 20 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e    (X).# define N
3140: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 58  EVER(X)       (X
3150: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
3160: 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e  Return true (non
3170: 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e  -zero) if the in
3180: 70 75 74 20 69 73 20 61 6e 20 69 6e 74 65 67 65  put is an intege
3190: 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61  r that is too la
31a0: 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e  rge.** to fit in
31b0: 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20   32-bits.  This 
31c0: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
31d0: 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20  side of various 
31e0: 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61  testcase().** ma
31f0: 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74  cros to verify t
3200: 68 61 74 20 77 65 20 68 61 76 65 20 74 65 73 74  hat we have test
3210: 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61  ed SQLite for la
3220: 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74  rge-file support
3230: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f  ..*/.#define IS_
3240: 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58  BIG_INT(X)  (((X
3250: 29 26 7e 28 69 36 34 29 30 78 66 66 66 66 66 66  )&~(i64)0xffffff
3260: 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54  ff)!=0)../*.** T
3270: 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c  he macro unlikel
3280: 79 28 29 20 69 73 20 61 20 68 69 6e 74 20 74 68  y() is a hint th
3290: 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62  at surrounds a b
32a0: 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73  oolean.** expres
32b0: 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75  sion that is usu
32c0: 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63  ally false.  Mac
32d0: 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72  ro likely() surr
32e0: 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65  ounds.** a boole
32f0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  an expression th
3300: 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72  at is usually tr
3310: 75 65 2e 20 20 54 68 65 73 65 20 68 69 6e 74 73  ue.  These hints
3320: 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68   could,.** in th
3330: 65 6f 72 79 2c 20 62 65 20 75 73 65 64 20 62 79  eory, be used by
3340: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f   the compiler to
3350: 20 67 65 6e 65 72 61 74 65 20 62 65 74 74 65 72   generate better
3360: 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75   code, but.** cu
3370: 72 72 65 6e 74 6c 79 20 74 68 65 79 20 61 72 65  rrently they are
3380: 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66   just comments f
3390: 6f 72 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73  or human readers
33a0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b  ..*/.#define lik
33b0: 65 6c 79 28 58 29 20 20 20 20 28 58 29 0a 23 64  ely(X)    (X).#d
33c0: 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58  efine unlikely(X
33d0: 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65  )  (X)..#include
33e0: 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75   "hash.h".#inclu
33f0: 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e  de "parse.h".#in
3400: 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a  clude <stdio.h>.
3410: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62  #include <stdlib
3420: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
3430: 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  ring.h>.#include
3440: 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63   <assert.h>.#inc
3450: 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a  lude <stddef.h>.
3460: 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c  ./*.** If compil
3470: 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73  ing for a proces
3480: 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66  sor that lacks f
3490: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75  loating point su
34a0: 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69  pport,.** substi
34b0: 74 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72  tute integer for
34c0: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a   floating-point.
34d0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
34e0: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
34f0: 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f  OINT.# define do
3500: 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36  uble sqlite_int6
3510: 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74  4.# define float
3520: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
3530: 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c  define LONGDOUBL
3540: 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e  E_TYPE sqlite_in
3550: 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c  t64.# ifndef SQL
3560: 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20  ITE_BIG_DBL.#   
3570: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
3580: 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33  G_DBL (((sqlite3
3590: 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23  _int64)1)<<50).#
35a0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
35b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45  SQLITE_OMIT_DATE
35c0: 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64  TIME_FUNCS 1.# d
35d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49  efine SQLITE_OMI
35e0: 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65  T_TRACE 1.# unde
35f0: 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45  f SQLITE_MIXED_E
3600: 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41  NDIAN_64BIT_FLOA
3610: 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  T.# undef SQLITE
3620: 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64  _HAVE_ISNAN.#end
3630: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
3640: 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69  E_BIG_DBL.# defi
3650: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ne SQLITE_BIG_DB
3660: 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a  L (1e99).#endif.
3670: 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50  ./*.** OMIT_TEMP
3680: 44 42 20 69 73 20 73 65 74 20 74 6f 20 31 20 69  DB is set to 1 i
3690: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45  f SQLITE_OMIT_TE
36a0: 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c  MPDB is defined,
36b0: 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61   or 0.** afterwa
36c0: 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20  rd. Having this 
36d0: 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20  macro allows us 
36e0: 74 6f 20 63 61 75 73 65 20 74 68 65 20 43 20 63  to cause the C c
36f0: 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20 74 6f 20 6f  ompiler .** to o
3700: 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20 62 79  mit code used by
3710: 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74   TEMP tables wit
3720: 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64  hout messy #ifnd
3730: 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  ef statements..*
3740: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
3750: 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66  OMIT_TEMPDB.#def
3760: 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ine OMIT_TEMPDB 
3770: 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  1.#else.#define 
3780: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65  OMIT_TEMPDB 0.#e
3790: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
37a0: 22 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75  "file format" nu
37b0: 6d 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67  mber is an integ
37c0: 65 72 20 74 68 61 74 20 69 73 20 69 6e 63 72 65  er that is incre
37d0: 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a  mented whenever.
37e0: 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65  ** the VDBE-leve
37f0: 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68  l file format ch
3800: 61 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c  anges.  The foll
3810: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66  owing macros def
3820: 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64  ine the.** the d
3830: 65 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d  efault file form
3840: 61 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62  at for new datab
3850: 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78  ases and the max
3860: 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74  imum file format
3870: 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62  .** that the lib
3880: 72 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a  rary can read..*
3890: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
38a0: 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  _MAX_FILE_FORMAT
38b0: 20 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54   4.#ifndef SQLIT
38c0: 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46  E_DEFAULT_FILE_F
38d0: 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53  ORMAT.# define S
38e0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49  QLITE_DEFAULT_FI
38f0: 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64  LE_FORMAT 4.#end
3900: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d  if../*.** Determ
3910: 69 6e 65 20 77 68 65 74 68 65 72 20 74 72 69 67  ine whether trig
3920: 67 65 72 73 20 61 72 65 20 72 65 63 75 72 73 69  gers are recursi
3930: 76 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  ve by default.  
3940: 54 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63  This can be.** c
3950: 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69  hanged at run-ti
3960: 6d 65 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d  me using a pragm
3970: 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  a..*/.#ifndef SQ
3980: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43  LITE_DEFAULT_REC
3990: 55 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a  URSIVE_TRIGGERS.
39a0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
39b0: 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56  DEFAULT_RECURSIV
39c0: 45 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e  E_TRIGGERS 0.#en
39d0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69  dif../*.** Provi
39e0: 64 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c  de a default val
39f0: 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45  ue for SQLITE_TE
3a00: 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65  MP_STORE in case
3a10: 20 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69   it is not speci
3a20: 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63  fied.** on the c
3a30: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23  ommand-line.*/.#
3a40: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45  ifndef SQLITE_TE
3a50: 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e  MP_STORE.# defin
3a60: 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  e SQLITE_TEMP_ST
3a70: 4f 52 45 20 31 0a 23 20 64 65 66 69 6e 65 20 53  ORE 1.# define S
3a80: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
3a90: 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64  _xc 1  /* Exclud
3aa0: 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a  e from ctime.c *
3ab0: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
3ac0: 49 66 20 6e 6f 20 76 61 6c 75 65 20 68 61 73 20  If no value has 
3ad0: 62 65 65 6e 20 70 72 6f 76 69 64 65 64 20 66 6f  been provided fo
3ae0: 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  r SQLITE_MAX_WOR
3af0: 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 6f 72 20  KER_THREADS, or 
3b00: 69 66 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45 4d  if.** SQLITE_TEM
3b10: 50 5f 53 54 4f 52 45 20 69 73 20 73 65 74 20 74  P_STORE is set t
3b20: 6f 20 33 20 28 6e 65 76 65 72 20 75 73 65 20 74  o 3 (never use t
3b30: 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 29 2c  emporary files),
3b40: 20 73 65 74 20 69 74 20 0a 2a 2a 20 74 6f 20 7a   set it .** to z
3b50: 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  ero..*/.#if SQLI
3b60: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33  TE_TEMP_STORE==3
3b70: 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48 52 45 41   || SQLITE_THREA
3b80: 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e 64 65 66  DSAFE==0.# undef
3b90: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
3ba0: 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66  ER_THREADS.# def
3bb0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  ine SQLITE_MAX_W
3bc0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a  ORKER_THREADS 0.
3bd0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
3be0: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
3bf0: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
3c00: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  e SQLITE_MAX_WOR
3c10: 4b 45 52 5f 54 48 52 45 41 44 53 20 38 0a 23 65  KER_THREADS 8.#e
3c20: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
3c30: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
3c40: 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66  ER_THREADS.# def
3c50: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
3c60: 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  LT_WORKER_THREAD
3c70: 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 53  S 0.#endif.#if S
3c80: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
3c90: 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 53 51 4c  RKER_THREADS>SQL
3ca0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
3cb0: 48 52 45 41 44 53 0a 23 20 75 6e 64 65 66 20 53  HREADS.# undef S
3cc0: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
3cd0: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
3ce0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  e SQLITE_MAX_WOR
3cf0: 4b 45 52 5f 54 48 52 45 41 44 53 20 53 51 4c 49  KER_THREADS SQLI
3d00: 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45  TE_DEFAULT_WORKE
3d10: 52 5f 54 48 52 45 41 44 53 0a 23 65 6e 64 69 66  R_THREADS.#endif
3d20: 0a 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65  .../*.** GCC doe
3d30: 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65  s not define the
3d40: 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72   offsetof() macr
3d50: 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20  o so we'll have 
3d60: 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73  to do it.** ours
3d70: 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65  elves..*/.#ifnde
3d80: 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69  f offsetof.#defi
3d90: 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55  ne offsetof(STRU
3da0: 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69  CTURE,FIELD) ((i
3db0: 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54  nt)((char*)&((ST
3dc0: 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45  RUCTURE*)0)->FIE
3dd0: 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  LD)).#endif../*.
3de0: 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d  ** Macros to com
3df0: 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64  pute minimum and
3e00: 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20   maximum of two 
3e10: 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64 65 66  numbers..*/.#def
3e20: 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41  ine MIN(A,B) ((A
3e30: 29 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23  )<(B)?(A):(B)).#
3e40: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
3e50: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
3e60: 29 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20 74 77  )../*.** Swap tw
3e70: 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 79 70  o objects of typ
3e80: 65 20 54 59 50 45 2e 0a 2a 2f 0a 23 64 65 66 69  e TYPE..*/.#defi
3e90: 6e 65 20 53 57 41 50 28 54 59 50 45 2c 41 2c 42  ne SWAP(TYPE,A,B
3ea0: 29 20 7b 54 59 50 45 20 74 3d 41 3b 20 41 3d 42  ) {TYPE t=A; A=B
3eb0: 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43  ; B=t;}../*.** C
3ec0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
3ed0: 68 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73  his machine uses
3ee0: 20 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20   EBCDIC.  (Yes, 
3ef0: 62 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a  believe it or.**
3f00: 20 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20   not, there are 
3f10: 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f  still machines o
3f20: 75 74 20 74 68 65 72 65 20 74 68 61 74 20 75 73  ut there that us
3f30: 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69  e EBCDIC.).*/.#i
3f40: 66 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a  f 'A' == '\301'.
3f50: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3f60: 45 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23  EBCDIC 1.#else.#
3f70: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41   define SQLITE_A
3f80: 53 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  SCII 1.#endif../
3f90: 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66  *.** Integers of
3fa0: 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54   known sizes.  T
3fb0: 68 65 73 65 20 74 79 70 65 64 65 66 73 20 6d 69  hese typedefs mi
3fc0: 67 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61  ght change for a
3fd0: 72 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20  rchitectures.** 
3fe0: 77 68 65 72 65 20 74 68 65 20 73 69 7a 65 73 20  where the sizes 
3ff0: 76 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73  very.  Preproces
4000: 73 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61  sor macros are a
4010: 76 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74  vailable so that
4020: 20 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61   the.** types ca
4030: 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c  n be convenientl
4040: 79 20 72 65 64 65 66 69 6e 65 64 20 61 74 20 63  y redefined at c
4050: 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69  ompile-type.  Li
4060: 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20  ke this:.**.**  
4070: 20 20 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e         cc '-DUIN
4080: 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c  TPTR_TYPE=long l
4090: 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a  ong int' ....*/.
40a0: 23 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54  #ifndef UINT32_T
40b0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
40c0: 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66  _UINT32_T.#  def
40d0: 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20  ine UINT32_TYPE 
40e0: 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a  uint32_t.# else.
40f0: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32  #  define UINT32
4100: 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69  _TYPE unsigned i
4110: 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  nt.# endif.#endi
4120: 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36  f.#ifndef UINT16
4130: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
4140: 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64  VE_UINT16_T.#  d
4150: 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50  efine UINT16_TYP
4160: 45 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73  E uint16_t.# els
4170: 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  e.#  define UINT
4180: 31 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  16_TYPE unsigned
4190: 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64   short int.# end
41a0: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
41b0: 66 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69  f INT16_TYPE.# i
41c0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f  fdef HAVE_INT16_
41d0: 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31  T.#  define INT1
41e0: 36 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23  6_TYPE int16_t.#
41f0: 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20   else.#  define 
4200: 49 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74  INT16_TYPE short
4210: 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e   int.# endif.#en
4220: 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54  dif.#ifndef UINT
4230: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
4240: 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64  AVE_UINT8_T.#  d
4250: 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45  efine UINT8_TYPE
4260: 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a   uint8_t.# else.
4270: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f  #  define UINT8_
4280: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68  TYPE unsigned ch
4290: 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  ar.# endif.#endi
42a0: 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54  f.#ifndef INT8_T
42b0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
42c0: 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e  _INT8_T.#  defin
42d0: 65 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38  e INT8_TYPE int8
42e0: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
42f0: 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69  ine INT8_TYPE si
4300: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
4310: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
4320: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
4330: 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f  .# define LONGDO
4340: 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64  UBLE_TYPE long d
4350: 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70  ouble.#endif.typ
4360: 65 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36  edef sqlite_int6
4370: 34 20 69 36 34 3b 20 20 20 20 20 20 20 20 20 20  4 i64;          
4380: 2f 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64  /* 8-byte signed
4390: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
43a0: 64 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36  def sqlite_uint6
43b0: 34 20 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f  4 u64;         /
43c0: 2a 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 8-byte unsigne
43d0: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
43e0: 65 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45  edef UINT32_TYPE
43f0: 20 75 33 32 3b 20 20 20 20 20 20 20 20 20 20 20   u32;           
4400: 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 4-byte unsign
4410: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
4420: 70 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50  pedef UINT16_TYP
4430: 45 20 75 31 36 3b 20 20 20 20 20 20 20 20 20 20  E u16;          
4440: 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67   /* 2-byte unsig
4450: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
4460: 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50  ypedef INT16_TYP
4470: 45 20 69 31 36 3b 20 20 20 20 20 20 20 20 20 20  E i16;          
4480: 20 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e    /* 2-byte sign
4490: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
44a0: 70 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45  pedef UINT8_TYPE
44b0: 20 75 38 3b 20 20 20 20 20 20 20 20 20 20 20 20   u8;            
44c0: 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67   /* 1-byte unsig
44d0: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
44e0: 79 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45  ypedef INT8_TYPE
44f0: 20 69 38 3b 20 20 20 20 20 20 20 20 20 20 20 20   i8;            
4500: 20 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e    /* 1-byte sign
4510: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f  ed integer */../
4520: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f  *.** SQLITE_MAX_
4530: 55 33 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e  U32 is a u64 con
4540: 73 74 61 6e 74 20 74 68 61 74 20 69 73 20 74 68  stant that is th
4550: 65 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61  e maximum u64 va
4560: 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20  lue.** that can 
4570: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75  be stored in a u
4580: 33 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20  32 without loss 
4590: 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 76 61  of data.  The va
45a0: 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30  lue.** is 0x0000
45b0: 30 30 30 30 66 66 66 66 66 66 66 66 2e 20 20 42  0000ffffffff.  B
45c0: 75 74 20 62 65 63 61 75 73 65 20 6f 66 20 71 75  ut because of qu
45d0: 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d  irks of some com
45e0: 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61  pilers, we.** ha
45f0: 76 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68  ve to specify th
4600: 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c  e value in the l
4610: 65 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61  ess intuitive ma
4620: 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23  nner shown:.*/.#
4630: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
4640: 58 5f 55 33 32 20 20 28 28 28 28 75 36 34 29 31  X_U32  ((((u64)1
4650: 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a  )<<32)-1)../*.**
4660: 20 54 68 65 20 64 61 74 61 74 79 70 65 20 75 73   The datatype us
4670: 65 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69  ed to store esti
4680: 6d 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d  mates of the num
4690: 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61  ber of rows in a
46a0: 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
46b0: 65 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20  ex.  This is an 
46c0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
46d0: 20 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39   type.  For 99.9
46e0: 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c  % of.** the worl
46f0: 64 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65  d, a 32-bit inte
4700: 67 65 72 20 69 73 20 73 75 66 66 69 63 69 65 6e  ger is sufficien
4710: 74 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69 74  t.  But a 64-bit
4720: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20   integer.** can 
4730: 62 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69  be used at compi
4740: 6c 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72  le-time if desir
4750: 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ed..*/.#ifdef SQ
4760: 4c 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53  LITE_64BIT_STATS
4770: 0a 20 74 79 70 65 64 65 66 20 75 36 34 20 74 52  . typedef u64 tR
4780: 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d  owcnt;    /* 64-
4790: 62 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75  bit only if requ
47a0: 65 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65  ested at compile
47b0: 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20  -time */.#else. 
47c0: 74 79 70 65 64 65 66 20 75 33 32 20 74 52 6f 77  typedef u32 tRow
47d0: 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69  cnt;    /* 32-bi
47e0: 74 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74  t is the default
47f0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
4800: 2a 20 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e  * Estimated quan
4810: 74 69 74 69 65 73 20 75 73 65 64 20 66 6f 72 20  tities used for 
4820: 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61  query planning a
4830: 72 65 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d  re stored as 16-
4840: 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d  bit.** logarithm
4850: 73 2e 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79  s.  For quantity
4860: 20 58 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74   X, the value st
4870: 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28  ored is 10*log2(
4880: 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76  X).  This.** giv
4890: 65 73 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61  es a possible ra
48a0: 6e 67 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66  nge of values of
48b0: 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31   approximately 1
48c0: 2e 30 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36  .0e986 to 1e-986
48d0: 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c  ..** But the all
48e0: 6f 77 65 64 20 76 61 6c 75 65 73 20 61 72 65 20  owed values are 
48f0: 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65  "grainy".  Not e
4900: 76 65 72 79 20 76 61 6c 75 65 20 69 73 20 72 65  very value is re
4910: 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20  presentable..** 
4920: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61  For example, qua
4930: 6e 74 69 74 69 65 73 20 31 36 20 61 6e 64 20 31  ntities 16 and 1
4940: 37 20 61 72 65 20 62 6f 74 68 20 72 65 70 72 65  7 are both repre
4950: 73 65 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45  sented by a LogE
4960: 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f  st.** of 40.  Ho
4970: 77 65 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67  wever, since Log
4980: 45 73 74 20 71 75 61 6e 74 61 74 69 65 73 20 61  Est quantaties a
4990: 72 65 20 73 75 70 70 6f 73 65 20 74 6f 20 62 65  re suppose to be
49a0: 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e   estimates,.** n
49b0: 6f 74 20 65 78 61 63 74 20 76 61 6c 75 65 73 2c  ot exact values,
49c0: 20 74 68 69 73 20 69 6d 70 72 65 63 69 73 69 6f   this imprecisio
49d0: 6e 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c  n is not a probl
49e0: 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73  em..**.** "LogEs
49f0: 74 22 20 69 73 20 73 68 6f 72 74 20 66 6f 72 20  t" is short for 
4a00: 22 4c 6f 67 61 72 69 74 68 6d 69 63 20 45 73 74  "Logarithmic Est
4a10: 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78  imate"..**.** Ex
4a20: 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20  amples:.**      
4a30: 31 20 2d 3e 20 30 20 20 20 20 20 20 20 20 20 20  1 -> 0          
4a40: 20 20 20 20 32 30 20 2d 3e 20 34 33 20 20 20 20      20 -> 43    
4a50: 20 20 20 20 20 20 31 30 30 30 30 20 2d 3e 20 31        10000 -> 1
4a60: 33 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20  32.**      2 -> 
4a70: 31 30 20 20 20 20 20 20 20 20 20 20 20 20 20 32  10             2
4a80: 35 20 2d 3e 20 34 36 20 20 20 20 20 20 20 20 20  5 -> 46         
4a90: 20 32 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a   25000 -> 146.**
4aa0: 20 20 20 20 20 20 33 20 2d 3e 20 31 36 20 20 20        3 -> 16   
4ab0: 20 20 20 20 20 20 20 20 20 31 30 30 20 2d 3e 20           100 -> 
4ac0: 36 36 20 20 20 20 20 20 20 20 31 30 30 30 30 30  66        100000
4ad0: 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20  0 -> 199.**     
4ae0: 20 34 20 2d 3e 20 32 30 20 20 20 20 20 20 20 20   4 -> 20        
4af0: 20 20 20 31 30 30 30 20 2d 3e 20 39 39 20 20 20     1000 -> 99   
4b00: 20 20 20 20 20 31 30 34 38 35 37 36 20 2d 3e 20       1048576 -> 
4b10: 32 30 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e  200.**     10 ->
4b20: 20 33 33 20 20 20 20 20 20 20 20 20 20 20 31 30   33           10
4b30: 32 34 20 2d 3e 20 31 30 30 20 20 20 20 34 32 39  24 -> 100    429
4b40: 34 39 36 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a  4967296 -> 320.*
4b50: 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74 20  *.** The LogEst 
4b60: 63 61 6e 20 62 65 20 6e 65 67 61 74 69 76 65 20  can be negative 
4b70: 74 6f 20 69 6e 64 69 63 61 74 65 20 66 72 61 63  to indicate frac
4b80: 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 20 0a  tional values. .
4b90: 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a  ** Examples:.**.
4ba0: 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30  **    0.5 -> -10
4bb0: 20 20 20 20 20 20 20 20 20 20 20 30 2e 31 20 2d             0.1 -
4bc0: 3e 20 2d 33 33 20 20 20 20 20 20 20 20 30 2e 30  > -33        0.0
4bd0: 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79  625 -> -40.*/.ty
4be0: 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  pedef INT16_TYPE
4bf0: 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20   LogEst;../*.** 
4c00: 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d  Macros to determ
4c10: 69 6e 65 20 77 68 65 74 68 65 72 20 74 68 65 20  ine whether the 
4c20: 6d 61 63 68 69 6e 65 20 69 73 20 62 69 67 20 6f  machine is big o
4c30: 72 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c  r little endian,
4c40: 0a 2a 2a 20 61 6e 64 20 77 68 65 74 68 65 72 20  .** and whether 
4c50: 6f 72 20 6e 6f 74 20 74 68 61 74 20 64 65 74 65  or not that dete
4c60: 72 6d 69 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e  rmination is run
4c70: 2d 74 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65  -time or compile
4c80: 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72  -time..**.** For
4c90: 20 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63   best performanc
4ca0: 65 2c 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73  e, an attempt is
4cb0: 20 6d 61 64 65 20 74 6f 20 67 75 65 73 73 20 61   made to guess a
4cc0: 74 20 74 68 65 20 62 79 74 65 2d 6f 72 64 65 72  t the byte-order
4cd0: 0a 2a 2a 20 75 73 69 6e 67 20 43 2d 70 72 65 70  .** using C-prep
4ce0: 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e  rocessor macros.
4cf0: 20 20 49 66 20 74 68 61 74 20 69 73 20 75 6e 73    If that is uns
4d00: 75 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 69 66  uccessful, or if
4d10: 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 52 55 4e  .** -DSQLITE_RUN
4d20: 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 3d 31  TIME_BYTEORDER=1
4d30: 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 62 79   is set, then by
4d40: 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65 74 65  te-order is dete
4d50: 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75 6e  rmined.** at run
4d60: 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  -time..*/.#ifdef
4d70: 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
4d80: 54 49 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73  TION.const int s
4d90: 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23  qlite3one = 1;.#
4da0: 65 6c 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73  else.extern cons
4db0: 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65  t int sqlite3one
4dc0: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 28 64 65  ;.#endif.#if (de
4dd0: 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20  fined(i386)     
4de0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
4df0: 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  6__)   || define
4e00: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
4e10: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
4e20: 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64 65 66  __x86_64) || def
4e30: 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29  ined(__x86_64__)
4e40: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58   || defined(_M_X
4e50: 36 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20  64)  ||    \.   
4e60: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44    defined(_M_AMD
4e70: 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  64) || defined(_
4e80: 4d 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20 64 65  M_ARM)     || de
4e90: 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c  fined(__x86)   |
4ea0: 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69  |    \.     defi
4eb0: 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 29 20 26 26  ned(__arm__)) &&
4ec0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
4ed0: 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44  _RUNTIME_BYTEORD
4ee0: 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ER).# define SQL
4ef0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20  ITE_BYTEORDER   
4f00: 20 31 32 33 34 0a 23 20 64 65 66 69 6e 65 20 53   1234.# define S
4f10: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
4f20: 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51     0.# define SQ
4f30: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
4f40: 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  N 1.# define SQL
4f50: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
4f60: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a   SQLITE_UTF16LE.
4f70: 23 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69  #endif.#if (defi
4f80: 6e 65 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c  ned(sparc)    ||
4f90: 20 64 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f   defined(__ppc__
4fa0: 29 29 20 20 5c 0a 20 20 20 20 26 26 20 21 64 65  ))  \.    && !de
4fb0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 52 55 4e  fined(SQLITE_RUN
4fc0: 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 29 0a  TIME_BYTEORDER).
4fd0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4fe0: 42 59 54 45 4f 52 44 45 52 20 20 20 20 34 33 32  BYTEORDER    432
4ff0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
5000: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31  E_BIGENDIAN    1
5010: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5020: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a  _LITTLEENDIAN 0.
5030: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5040: 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c  UTF16NATIVE  SQL
5050: 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6e 64  ITE_UTF16BE.#end
5060: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
5070: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
5080: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
5090: 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 30  E_BYTEORDER    0
50a0: 20 20 20 20 20 2f 2a 20 30 20 6d 65 61 6e 73 20       /* 0 means 
50b0: 22 75 6e 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d 70  "unknown at comp
50c0: 69 6c 65 2d 74 69 6d 65 22 20 2a 2f 0a 23 20 64  ile-time" */.# d
50d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
50e0: 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61  ENDIAN    (*(cha
50f0: 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65  r *)(&sqlite3one
5100: 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53  )==0).# define S
5110: 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49  QLITE_LITTLEENDI
5120: 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73  AN (*(char *)(&s
5130: 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23  qlite3one)==1).#
5140: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55   define SQLITE_U
5150: 54 46 31 36 4e 41 54 49 56 45 20 20 28 53 51 4c  TF16NATIVE  (SQL
5160: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51  ITE_BIGENDIAN?SQ
5170: 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c  LITE_UTF16BE:SQL
5180: 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e  ITE_UTF16LE).#en
5190: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74  dif../*.** Const
51a0: 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72  ants for the lar
51b0: 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73  gest and smalles
51c0: 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69  t possible 64-bi
51d0: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
51e0: 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  s..** These macr
51f0: 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20  os are designed 
5200: 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c  to work correctl
5210: 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74  y on both 32-bit
5220: 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63   and 64-bit.** c
5230: 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65  ompilers..*/.#de
5240: 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54  fine LARGEST_INT
5250: 36 34 20 20 28 30 78 66 66 66 66 66 66 66 66 7c  64  (0xffffffff|
5260: 28 28 28 69 36 34 29 30 78 37 66 66 66 66 66 66  (((i64)0x7ffffff
5270: 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65  f)<<32)).#define
5280: 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20   SMALLEST_INT64 
5290: 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52  (((i64)-1) - LAR
52a0: 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20  GEST_INT64)../* 
52b0: 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e  .** Round up a n
52c0: 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78  umber to the nex
52d0: 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c  t larger multipl
52e0: 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73  e of 8.  This is
52f0: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63   used.** to forc
5300: 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  e 8-byte alignme
5310: 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63  nt on 64-bit arc
5320: 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23  hitectures..*/.#
5330: 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29  define ROUND8(x)
5340: 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37       (((x)+7)&~7
5350: 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64  )../*.** Round d
5360: 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65  own to the neare
5370: 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  st multiple of 8
5380: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
5390: 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e  DDOWN8(x) ((x)&~
53a0: 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74  7)../*.** Assert
53b0: 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65   that the pointe
53c0: 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74  r X is aligned t
53d0: 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e  o an 8-byte boun
53e0: 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d  dary.  This.** m
53f0: 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c  acro is used onl
5400: 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74 28  y within assert(
5410: 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  ) to verify that
5420: 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a   the code gets.*
5430: 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20  * all alignment 
5440: 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72  restrictions cor
5450: 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65  rect..**.** Exce
5460: 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f  pt, if SQLITE_4_
5470: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
5480: 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20  LOC is defined, 
5490: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65  then the.** unde
54a0: 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20  rlying malloc() 
54b0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d  implementation m
54c0: 69 67 68 74 20 72 65 74 75 72 6e 20 75 73 20 34  ight return us 4
54d0: 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a  -byte aligned.**
54e0: 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74   pointers.  In t
54f0: 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76  hat case, only v
5500: 65 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69  erify 4-byte ali
5510: 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65  gnment..*/.#ifde
5520: 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f  f SQLITE_4_BYTE_
5530: 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23  ALIGNED_MALLOC.#
5540: 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59   define EIGHT_BY
5550: 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20  TE_ALIGNMENT(X) 
5560: 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20    ((((char*)(X) 
5570: 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d  - (char*)0)&3)==
5580: 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
5590: 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49  e EIGHT_BYTE_ALI
55a0: 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28  GNMENT(X)   ((((
55b0: 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61  char*)(X) - (cha
55c0: 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e  r*)0)&7)==0).#en
55d0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62  dif../*.** Disab
55e0: 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66  le MMAP on platf
55f0: 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20 69 73  orms where it is
5600: 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f   known to not wo
5610: 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  rk.*/.#if define
5620: 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c  d(__OpenBSD__) |
5630: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e  | defined(__QNXN
5640: 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51  TO__).# undef SQ
5650: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
5660: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
5670: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
5680: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
5690: 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d   Default maximum
56a0: 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20   size of memory 
56b0: 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d  used by memory-m
56c0: 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65  apped I/O in the
56d0: 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f   VFS.*/.#ifdef _
56e0: 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75  _APPLE__.# inclu
56f0: 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74  de <TargetCondit
5700: 69 6f 6e 61 6c 73 2e 68 3e 0a 23 20 69 66 20 54  ionals.h>.# if T
5710: 41 52 47 45 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a  ARGET_OS_IPHONE.
5720: 23 20 20 20 75 6e 64 65 66 20 53 51 4c 49 54 45  #   undef SQLITE
5730: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
5740: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
5750: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
5760: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5770: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  #ifndef SQLITE_M
5780: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69  AX_MMAP_SIZE.# i
5790: 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75  f defined(__linu
57a0: 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69  x__) \.  || defi
57b0: 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20  ned(_WIN32) \.  
57c0: 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41 50  || (defined(__AP
57d0: 50 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e 65  PLE__) && define
57e0: 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20  d(__MACH__)) \. 
57f0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 75   || defined(__su
5800: 6e 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  n).#   define SQ
5810: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
5820: 5a 45 20 30 78 37 66 66 66 30 30 30 30 20 20 2f  ZE 0x7fff0000  /
5830: 2a 20 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a  * 2147418112 */.
5840: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
5850: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
5860: 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66  P_SIZE 0.# endif
5870: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5880: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78  _MAX_MMAP_SIZE_x
5890: 63 20 31 20 2f 2a 20 65 78 63 6c 75 64 65 20 66  c 1 /* exclude f
58a0: 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23  rom ctime.c */.#
58b0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
58c0: 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49   default MMAP_SI
58d0: 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c  ZE is zero on al
58e0: 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72  l platforms.  Or
58f0: 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67  , even if a larg
5900: 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d  er.** default MM
5910: 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69  AP_SIZE is speci
5920: 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  fied at compile-
5930: 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  time, make sure 
5940: 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20  that it does.** 
5950: 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d  not exceed the m
5960: 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65  aximum mmap size
5970: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
5980: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
5990: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
59a0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
59b0: 41 50 5f 53 49 5a 45 20 30 0a 23 20 64 65 66 69  AP_SIZE 0.# defi
59c0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
59d0: 54 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31  T_MMAP_SIZE_xc 1
59e0: 20 20 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f    /* Exclude fro
59f0: 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e  m ctime.c */.#en
5a00: 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44  dif.#if SQLITE_D
5a10: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
5a20: 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50  >SQLITE_MAX_MMAP
5a30: 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51  _SIZE.# undef SQ
5a40: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
5a50: 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20  P_SIZE.# define 
5a60: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
5a70: 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f  MAP_SIZE SQLITE_
5a80: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65  MAX_MMAP_SIZE.#e
5a90: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79  ndif../*.** Only
5aa0: 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 45   one of SQLITE_E
5ab0: 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f 72 20 53  NABLE_STAT3 or S
5ac0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5ad0: 54 34 20 63 61 6e 20 62 65 20 64 65 66 69 6e 65  T4 can be define
5ae0: 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20 69  d..** Priority i
5af0: 73 20 67 69 76 65 6e 20 74 6f 20 53 51 4c 49 54  s given to SQLIT
5b00: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20  E_ENABLE_STAT4. 
5b10: 20 49 66 20 65 69 74 68 65 72 20 61 72 65 20 64   If either are d
5b20: 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20  efined, also.** 
5b30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
5b40: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
5b50: 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  AT4.*/.#ifdef SQ
5b60: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
5b70: 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  4.# undef SQLITE
5b80: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20  _ENABLE_STAT3.# 
5b90: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
5ba0: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
5bb0: 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49  AT4 1.#elif SQLI
5bc0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a  TE_ENABLE_STAT3.
5bd0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5be0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
5bf0: 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51  STAT4 1.#elif SQ
5c00: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
5c10: 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e 64  3_OR_STAT4.# und
5c20: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
5c30: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
5c40: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45  #endif../*.** SE
5c50: 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
5c60: 44 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72  D will be either
5c70: 20 31 20 6f 72 20 30 20 64 65 70 65 6e 64 69 6e   1 or 0 dependin
5c80: 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20  g on whether or 
5c90: 6e 6f 74 0a 2a 2a 20 74 68 65 20 53 65 6c 65 63  not.** the Selec
5ca0: 74 20 71 75 65 72 79 20 67 65 6e 65 72 61 74 6f  t query generato
5cb0: 72 20 74 72 61 63 69 6e 67 20 6c 6f 67 69 63 20  r tracing logic 
5cc0: 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f  is turned on..*/
5cd0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
5ce0: 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
5cf0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
5d00: 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29  BLE_SELECTTRACE)
5d10: 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54  .# define SELECT
5d20: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a  TRACE_ENABLED 1.
5d30: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
5d40: 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
5d50: 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ED 0.#endif../*.
5d60: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
5d70: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
5d80: 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
5d90: 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62  d to store the b
5da0: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
5db0: 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69  allback for a gi
5dc0: 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c  ven sqlite handl
5dd0: 65 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71  e. .**.** The sq
5de0: 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72  lite.busyHandler
5df0: 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73   member of the s
5e00: 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e  qlite struct con
5e10: 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a  tains the busy.*
5e20: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74  * callback for t
5e30: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
5e40: 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f  le. Each pager o
5e50: 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73 71  pened via the sq
5e60: 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69  lite.** handle i
5e70: 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74  s passed a point
5e80: 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73  er to sqlite.bus
5e90: 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75  yHandler. The bu
5ea0: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
5eb0: 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e  llback is curren
5ec0: 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79  tly invoked only
5ed0: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67   from within pag
5ee0: 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  er.c..*/.typedef
5ef0: 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64   struct BusyHand
5f00: 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b  ler BusyHandler;
5f10: 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64  .struct BusyHand
5f20: 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46  ler {.  int (*xF
5f30: 75 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29  unc)(void *,int)
5f40: 3b 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63  ;  /* The busy c
5f50: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
5f60: 64 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20  d *pArg;        
5f70: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
5f80: 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c   arg to busy cal
5f90: 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  lback */.  int n
5fa0: 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  Busy;           
5fb0: 20 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65        /* Increme
5fc0: 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62  nted with each b
5fd0: 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a  usy call */.};..
5fe0: 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68  /*.** Name of th
5ff0: 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73  e master databas
6000: 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61  e table.  The ma
6010: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
6020: 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63  ble.** is a spec
6030: 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68  ial table that h
6040: 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61  olds the names a
6050: 6e 64 20 61 74 74 72 69 62 75 74 65 73 20 6f 66  nd attributes of
6060: 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62   all.** user tab
6070: 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e  les and indices.
6080: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54  .*/.#define MAST
6090: 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73  ER_NAME       "s
60a0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64  qlite_master".#d
60b0: 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45  efine TEMP_MASTE
60c0: 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f  R_NAME  "sqlite_
60d0: 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a  temp_master"../*
60e0: 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67  .** The root-pag
60f0: 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20  e of the master 
6100: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a  database table..
6110: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45  */.#define MASTE
6120: 52 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a  R_ROOT       1..
6130: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f  /*.** The name o
6140: 66 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62  f the schema tab
6150: 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  le..*/.#define S
6160: 43 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20  CHEMA_TABLE(x)  
6170: 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26  ((!OMIT_TEMPDB)&
6180: 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53  &(x==1)?TEMP_MAS
6190: 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f  TER_NAME:MASTER_
61a0: 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63  NAME)../*.** A c
61b0: 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f  onvenience macro
61c0: 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 74 68   that returns th
61d0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d  e number of elem
61e0: 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72  ents in.** an ar
61f0: 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ray..*/.#define 
6200: 41 72 72 61 79 53 69 7a 65 28 58 29 20 20 20 20  ArraySize(X)    
6210: 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29  ((int)(sizeof(X)
6220: 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a  /sizeof(X[0]))).
6230: 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65  ./*.** Determine
6240: 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   if the argument
6250: 20 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74   is a power of t
6260: 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73  wo.*/.#define Is
6270: 50 6f 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28  PowerOfTwo(X) ((
6280: 28 58 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29  (X)&((X)-1))==0)
6290: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
62a0: 6f 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61  owing value as a
62b0: 20 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e   destructor mean
62c0: 73 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33  s to use sqlite3
62d0: 44 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65  DbFree()..** The
62e0: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
62f0: 20 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65   routine require
6300: 73 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73  s two parameters
6310: 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20   instead of the 
6320: 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65  .** one paramete
6330: 72 20 74 68 61 74 20 64 65 73 74 72 75 63 74 6f  r that destructo
6340: 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74  rs normally want
6350: 2e 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f  .  So we have to
6360: 20 69 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74   introduce .** t
6370: 68 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20  his magic value 
6380: 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e  that the code kn
6390: 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69  ows to handle di
63a0: 66 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20  fferently.  Any 
63b0: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c  .** pointer will
63c0: 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f   work here as lo
63d0: 6e 67 20 61 73 20 69 74 20 69 73 20 64 69 73 74  ng as it is dist
63e0: 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45  inct from SQLITE
63f0: 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53  _STATIC.** and S
6400: 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e  QLITE_TRANSIENT.
6410: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
6420: 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73  TE_DYNAMIC   ((s
6430: 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f  qlite3_destructo
6440: 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61  r_type)sqlite3Ma
6450: 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a  llocSize)../*.**
6460: 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49   When SQLITE_OMI
6470: 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65 64  T_WSD is defined
6480: 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
6490: 74 68 65 20 74 61 72 67 65 74 20 70 6c 61 74 66  the target platf
64a0: 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20  orm does.** not 
64b0: 73 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65  support Writable
64c0: 20 53 74 61 74 69 63 20 44 61 74 61 20 28 57 53   Static Data (WS
64d0: 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61  D) such as globa
64e0: 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76 61 72  l and static var
64f0: 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76  iables..** All v
6500: 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69  ariables must ei
6510: 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73  ther be on the s
6520: 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61  tack or dynamica
6530: 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72  lly allocated fr
6540: 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20  om.** the heap. 
6550: 20 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73   When WSD is uns
6560: 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61  upported, the va
6570: 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69  riable declarati
6580: 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a  ons scattered.**
6590: 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20   throughout the 
65a0: 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74  SQLite code must
65b0: 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74   become constant
65c0: 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20  s instead.  The 
65d0: 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61  SQLITE_WSD.** ma
65e0: 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20  cro is used for 
65f0: 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41  this purpose.  A
6600: 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65  nd instead of re
6610: 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61  ferencing the va
6620: 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74  riable.** direct
6630: 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73 20 63  ly, we use its c
6640: 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79  onstant as a key
6650: 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72   to lookup the r
6660: 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65  un-time allocate
6670: 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74  d.** buffer that
6680: 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69   holds real vari
6690: 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74  able.  The const
66a0: 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20  ant is also the 
66b0: 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66  initializer.** f
66c0: 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  or the run-time 
66d0: 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72  allocated buffer
66e0: 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75  ..**.** In the u
66f0: 73 75 61 6c 20 63 61 73 65 20 77 68 65 72 65 20  sual case where 
6700: 57 53 44 20 69 73 20 73 75 70 70 6f 72 74 65 64  WSD is supported
6710: 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44  , the SQLITE_WSD
6720: 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d   and GLOBAL.** m
6730: 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d  acros become no-
6740: 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72  ops and have zer
6750: 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d  o performance im
6760: 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  pact..*/.#ifdef 
6770: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a  SQLITE_OMIT_WSD.
6780: 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
6790: 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65  _WSD const.  #de
67a0: 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29  fine GLOBAL(t,v)
67b0: 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77   (*(t*)sqlite3_w
67c0: 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26  sd_find((void*)&
67d0: 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29  (v), sizeof(v)))
67e0: 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
67f0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47  e3GlobalConfig G
6800: 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c  LOBAL(struct Sql
6810: 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69  ite3Config, sqli
6820: 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74  te3Config).  int
6830: 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69   sqlite3_wsd_ini
6840: 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b  t(int N, int J);
6850: 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
6860: 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a  _wsd_find(void *
6870: 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65  K, int L);.#else
6880: 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54  .  #define SQLIT
6890: 45 5f 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65  E_WSD .  #define
68a0: 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20   GLOBAL(t,v) v. 
68b0: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
68c0: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c  GlobalConfig sql
68d0: 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69  ite3Config.#endi
68e0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
68f0: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
6900: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
6910: 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e  ss compiler warn
6920: 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d  ings and to.** m
6930: 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20  ake it clear to 
6940: 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68  human readers wh
6950: 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61  en a function pa
6960: 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62  rameter is delib
6970: 65 72 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74  erately .** left
6980: 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74   unused within t
6990: 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e  he body of a fun
69a0: 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61  ction. This usua
69b0: 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e  lly happens when
69c0: 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69  .** a function i
69d0: 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66  s called via a f
69e0: 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e  unction pointer.
69f0: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65   For example the
6a00: 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74   .** implementat
6a10: 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67  ion of an SQL ag
6a20: 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c  gregate step cal
6a30: 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73  lback may not us
6a40: 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74  e the.** paramet
6a50: 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  er indicating th
6a60: 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
6a70: 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20  ments passed to 
6a80: 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a  the aggregate,.*
6a90: 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68  * if it knows th
6aa0: 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72  at this is enfor
6ab0: 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a  ced elsewhere..*
6ac0: 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63  *.** When a func
6ad0: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
6ae0: 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c  s not used at al
6af0: 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  l within the bod
6b00: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c  y of a function,
6b10: 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61  .** it is genera
6b20: 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73  lly named "NotUs
6b30: 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32  ed" or "NotUsed2
6b40: 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73  " to make things
6b50: 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a   even clearer..*
6b60: 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65  * However, these
6b70: 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f   macros may also
6b80: 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70   be used to supp
6b90: 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65  ress warnings re
6ba0: 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61  lated to.** para
6bb0: 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20  meters that may 
6bc0: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73  or may not be us
6bd0: 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ed depending on 
6be0: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69  compilation opti
6bf0: 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ons..** For exam
6c00: 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65  ple those parame
6c10: 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  ters only used i
6c20: 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  n assert() state
6c30: 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a  ments. In these.
6c40: 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72  ** cases the par
6c50: 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65  ameters are name
6c60: 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75  d as per the usu
6c70: 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a  al conventions..
6c80: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
6c90: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
6ca0: 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65  void)(x).#define
6cb0: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
6cc0: 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50  R2(x,y) UNUSED_P
6cd0: 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53  ARAMETER(x),UNUS
6ce0: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a  ED_PARAMETER(y).
6cf0: 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72  ./*.** Forward r
6d00: 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72  eferences to str
6d10: 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64  uctures.*/.typed
6d20: 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  ef struct AggInf
6d30: 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64  o AggInfo;.typed
6d40: 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f  ef struct AuthCo
6d50: 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78  ntext AuthContex
6d60: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
6d70: 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75  t AutoincInfo Au
6d80: 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64  toincInfo;.typed
6d90: 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63  ef struct Bitvec
6da0: 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66   Bitvec;.typedef
6db0: 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20   struct CollSeq 
6dc0: 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66  CollSeq;.typedef
6dd0: 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43   struct Column C
6de0: 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73  olumn;.typedef s
6df0: 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70  truct Db Db;.typ
6e00: 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65  edef struct Sche
6e10: 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64  ma Schema;.typed
6e20: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45  ef struct Expr E
6e30: 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  xpr;.typedef str
6e40: 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70  uct ExprList Exp
6e50: 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  rList;.typedef s
6e60: 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 45  truct ExprSpan E
6e70: 78 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66  xprSpan;.typedef
6e80: 20 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65   struct FKey FKe
6e90: 79 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  y;.typedef struc
6ea0: 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  t FuncDestructor
6eb0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b   FuncDestructor;
6ec0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6ed0: 46 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b  FuncDef FuncDef;
6ee0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6ef0: 46 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63  FuncDefHash Func
6f00: 44 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66  DefHash;.typedef
6f10: 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49   struct IdList I
6f20: 64 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  dList;.typedef s
6f30: 74 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65  truct Index Inde
6f40: 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  x;.typedef struc
6f50: 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e  t IndexSample In
6f60: 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64  dexSample;.typed
6f70: 65 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61  ef struct KeyCla
6f80: 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70  ss KeyClass;.typ
6f90: 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49  edef struct KeyI
6fa0: 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70  nfo KeyInfo;.typ
6fb0: 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b  edef struct Look
6fc0: 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b  aside Lookaside;
6fd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6fe0: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f  LookasideSlot Lo
6ff0: 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70  okasideSlot;.typ
7000: 65 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75  edef struct Modu
7010: 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64  le Module;.typed
7020: 65 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f  ef struct NameCo
7030: 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78  ntext NameContex
7040: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
7050: 74 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74  t Parse Parse;.t
7060: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72  ypedef struct Pr
7070: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72  intfArguments Pr
7080: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74  intfArguments;.t
7090: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f  ypedef struct Ro
70a0: 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70  wSet RowSet;.typ
70b0: 65 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65  edef struct Save
70c0: 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b  point Savepoint;
70d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
70e0: 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74  Select Select;.t
70f0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 51  ypedef struct SQ
7100: 4c 69 74 65 54 68 72 65 61 64 20 53 51 4c 69 74  LiteThread SQLit
7110: 65 54 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66  eThread;.typedef
7120: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65   struct SelectDe
7130: 73 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74  st SelectDest;.t
7140: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72  ypedef struct Sr
7150: 63 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74  cList SrcList;.t
7160: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 74  ypedef struct St
7170: 72 41 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b  rAccum StrAccum;
7180: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7190: 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70  Table Table;.typ
71a0: 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c  edef struct Tabl
71b0: 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b  eLock TableLock;
71c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
71d0: 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70  Token Token;.typ
71e0: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 65 65  edef struct Tree
71f0: 56 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74  View TreeView;.t
7200: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
7210: 69 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74  igger Trigger;.t
7220: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
7230: 69 67 67 65 72 50 72 67 20 54 72 69 67 67 65 72  iggerPrg Trigger
7240: 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Prg;.typedef str
7250: 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
7260: 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70  TriggerStep;.typ
7270: 65 64 65 66 20 73 74 72 75 63 74 20 55 6e 70 61  edef struct Unpa
7280: 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63  ckedRecord Unpac
7290: 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64  kedRecord;.typed
72a0: 65 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65  ef struct VTable
72b0: 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66   VTable;.typedef
72c0: 20 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20   struct VtabCtx 
72d0: 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66  VtabCtx;.typedef
72e0: 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57   struct Walker W
72f0: 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73  alker;.typedef s
7300: 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20  truct WhereInfo 
7310: 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64  WhereInfo;.typed
7320: 65 66 20 73 74 72 75 63 74 20 57 69 74 68 20 57  ef struct With W
7330: 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65  ith;../*.** Defe
7340: 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e  r sourcing vdbe.
7350: 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e  h and btree.h un
7360: 74 69 6c 20 61 66 74 65 72 20 74 68 65 20 22 75  til after the "u
7370: 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73 79  8" and .** "Busy
7380: 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66  Handler" typedef
7390: 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72  s. vdbe.h also r
73a0: 65 71 75 69 72 65 73 20 61 20 66 65 77 20 6f 66  equires a few of
73b0: 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70   the opaque.** p
73c0: 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e  ointer types (i.
73d0: 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65 66 69  e. FuncDef) defi
73e0: 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69  ned above..*/.#i
73f0: 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22  nclude "btree.h"
7400: 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e  .#include "vdbe.
7410: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67  h".#include "pag
7420: 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  er.h".#include "
7430: 70 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63 6c  pcache.h"..#incl
7440: 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c  ude "os.h".#incl
7450: 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 0a  ude "mutex.h"...
7460: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
7470: 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61  ase file to be a
7480: 63 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73  ccessed by the s
7490: 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74  ystem is an inst
74a0: 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66  ance.** of the f
74b0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
74c0: 72 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e  re.  There are n
74d0: 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74  ormally two of t
74e0: 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a  hese structures.
74f0: 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ** in the sqlite
7500: 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61  .aDb[] array.  a
7510: 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69  Db[0] is the mai
7520: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
7530: 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73  and.** aDb[1] is
7540: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
7550: 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  le used to hold 
7560: 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
7570: 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a  .  Additional.**
7580: 20 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62   databases may b
7590: 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73  e attached..*/.s
75a0: 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61  truct Db {.  cha
75b0: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
75c0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
75d0: 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
75e0: 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20  Btree *pBt;     
75f0: 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72       /* The B*Tr
7600: 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ee structure for
7610: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66   this database f
7620: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65  ile */.  u8 safe
7630: 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a  ty_level;     /*
7640: 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20   How aggressive 
7650: 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20  at syncing data 
7660: 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63 68  to disk */.  Sch
7670: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
7680: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
7690: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
76a0: 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64  (possibly shared
76b0: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ) */.};../*.** A
76c0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
76d0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
76e0: 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64  cture stores a d
76f0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a  atabase schema..
7700: 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d  **.** Most Schem
7710: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73  a objects are as
7720: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
7730: 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65  Btree.  The exce
7740: 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20  ption is.** the 
7750: 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54  Schema for the T
7760: 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71  EMP databaes (sq
7770: 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68  lite3.aDb[1]) wh
7780: 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e  ich is free-stan
7790: 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72  ding..** In shar
77a0: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61  ed cache mode, a
77b0: 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f   single Schema o
77c0: 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61  bject can be sha
77d0: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a  red by multiple.
77e0: 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72  ** Btrees that r
77f0: 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65  efer to the same
7800: 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68   underlying BtSh
7810: 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20  ared object..** 
7820: 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  .** Schema objec
7830: 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  ts are automatic
7840: 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64  ally deallocated
7850: 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42   when the last B
7860: 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66  tree that.** ref
7870: 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20  erences them is 
7880: 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65  destroyed.   The
7890: 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20   TEMP Schema is 
78a0: 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62  manually freed b
78b0: 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f  y.** sqlite3_clo
78c0: 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72  se()..*.** A thr
78d0: 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64  ead must be hold
78e0: 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74  ing a mutex on t
78f0: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
7900: 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a   Btree in order.
7910: 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68  ** to access Sch
7920: 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68  ema content.  Th
7930: 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20  is implies that 
7940: 74 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20  the thread must 
7950: 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69  also be.** holdi
7960: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
7970: 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63  e sqlite3 connec
7980: 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61  tion pointer tha
7990: 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65  t owns the Btree
79a0: 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20  ..** For a TEMP 
79b0: 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65  Schema, only the
79c0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65   connection mute
79d0: 78 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a  x is required..*
79e0: 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20  /.struct Schema 
79f0: 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63  {.  int schema_c
7a00: 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61  ookie;   /* Data
7a10: 62 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73  base schema vers
7a20: 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  ion number for t
7a30: 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e  his file */.  in
7a40: 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20  t iGeneration;  
7a50: 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e     /* Generation
7a60: 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65   counter.  Incre
7a70: 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68  mented with each
7a80: 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73   change */.  Has
7a90: 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20  h tblHash;      
7aa0: 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20    /* All tables 
7ab0: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
7ac0: 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73  */.  Hash idxHas
7ad0: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  h;        /* All
7ae0: 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73   (named) indices
7af0: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
7b00: 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48   */.  Hash trigH
7b10: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
7b20: 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78  l triggers index
7b30: 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20  ed by name */.  
7b40: 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20  Hash fkeyHash;  
7b50: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65       /* All fore
7b60: 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65  ign keys by refe
7b70: 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d  renced table nam
7b80: 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53  e */.  Table *pS
7b90: 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54  eqTab;      /* T
7ba0: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
7bb0: 63 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79  ce table used by
7bc0: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
7bd0: 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d  /.  u8 file_form
7be0: 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65  at;      /* Sche
7bf0: 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f  ma format versio
7c00: 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  n for this file 
7c10: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
7c20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
7c30: 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20  t encoding used 
7c40: 62 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65  by this database
7c50: 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61   */.  u16 schema
7c60: 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c  Flags;     /* Fl
7c70: 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
7c80: 69 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20  ith this schema 
7c90: 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73  */.  int cache_s
7ca0: 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ize;      /* Num
7cb0: 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20  ber of pages to 
7cc0: 75 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65  use in the cache
7cd0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
7ce0: 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
7cf0: 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
7d00: 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
7d10: 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44 62  ts in the .** Db
7d20: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20  .pSchema->flags 
7d30: 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
7d40: 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28  e DbHasProperty(
7d50: 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44 29  D,I,P)     (((D)
7d60: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
7d70: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50  ->schemaFlags&(P
7d80: 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65  ))==(P)).#define
7d90: 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74   DbHasAnyPropert
7da0: 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d  y(D,I,P)  (((D)-
7db0: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
7dc0: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29  >schemaFlags&(P)
7dd0: 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62  )!=0).#define Db
7de0: 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  SetProperty(D,I,
7df0: 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b  P)     (D)->aDb[
7e00: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  I].pSchema->sche
7e10: 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  maFlags|=(P).#de
7e20: 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70  fine DbClearProp
7e30: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44  erty(D,I,P)   (D
7e40: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
7e50: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d  a->schemaFlags&=
7e60: 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ~(P)../*.** Allo
7e70: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74  wed values for t
7e80: 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66  he DB.pSchema->f
7e90: 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a  lags field..**.*
7ea0: 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c  * The DB_SchemaL
7eb0: 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20 73 65  oaded flag is se
7ec0: 74 20 61 66 74 65 72 20 74 68 65 20 64 61 74 61  t after the data
7ed0: 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20  base schema has 
7ee0: 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74  been.** read int
7ef0: 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20  o internal hash 
7f00: 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42  tables..**.** DB
7f10: 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65  _UnresetViews me
7f20: 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20  ans that one or 
7f30: 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76 65 20  more views have 
7f40: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61  column names tha
7f50: 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66  t.** have been f
7f60: 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74  illed out.  If t
7f70: 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  he schema change
7f80: 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20  s, these column 
7f90: 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63  names might.** c
7fa0: 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68  hanges and so th
7fb0: 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64  e view will need
7fc0: 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f   to be reset..*/
7fd0: 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65  .#define DB_Sche
7fe0: 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30  maLoaded    0x00
7ff0: 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d  01  /* The schem
8000: 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65  a has been loade
8010: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  d */.#define DB_
8020: 55 6e 72 65 73 65 74 56 69 65 77 73 20 20 20 20  UnresetViews    
8030: 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20  0x0002  /* Some 
8040: 76 69 65 77 73 20 68 61 76 65 20 64 65 66 69 6e  views have defin
8050: 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ed column names 
8060: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d  */.#define DB_Em
8070: 70 74 79 20 20 20 20 20 20 20 20 20 20 20 30 78  pty           0x
8080: 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c  0004  /* The fil
8090: 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67  e is empty (leng
80a0: 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a  th 0 bytes) */..
80b0: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  /*.** The number
80c0: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69   of different ki
80d0: 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68  nds of things th
80e0: 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65  at can be limite
80f0: 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73  d.** using the s
8100: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69  qlite3_limit() i
8110: 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65  nterface..*/.#de
8120: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49  fine SQLITE_N_LI
8130: 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49  MIT (SQLITE_LIMI
8140: 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  T_WORKER_THREADS
8150: 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61  +1)../*.** Looka
8160: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61  side malloc is a
8170: 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69   set of fixed-si
8180: 7a 65 20 62 75 66 66 65 72 73 20 74 68 61 74 20  ze buffers that 
8190: 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74  can be used.** t
81a0: 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20  o satisfy small 
81b0: 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79  transient memory
81c0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75   allocation requ
81d0: 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73  ests for objects
81e0: 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77  .** associated w
81f0: 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72  ith a particular
8200: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
8210: 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f  tion.  The use o
8220: 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d  f.** lookaside m
8230: 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61  alloc provides a
8240: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72   significant per
8250: 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65  formance enhance
8260: 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20  ment.** (approx 
8270: 31 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67  10%) by avoiding
8280: 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63   numerous malloc
8290: 2f 66 72 65 65 20 72 65 71 75 65 73 74 73 20 77  /free requests w
82a0: 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20  hile parsing.** 
82b0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  SQL statements..
82c0: 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73  **.** The Lookas
82d0: 69 64 65 20 73 74 72 75 63 74 75 72 65 20 68 6f  ide structure ho
82e0: 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  lds configuratio
82f0: 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  n information ab
8300: 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61  out the.** looka
8310: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73  side malloc subs
8320: 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61  ystem.  Each ava
8330: 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c  ilable memory al
8340: 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74  location in.** t
8350: 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62  he lookaside sub
8360: 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64  system is stored
8370: 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   on a linked lis
8380: 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  t of LookasideSl
8390: 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a  ot.** objects..*
83a0: 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61  *.** Lookaside a
83b0: 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f  llocations are o
83c0: 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20  nly allowed for 
83d0: 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61 72 65  objects that are
83e0: 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77   associated.** w
83f0: 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72  ith a particular
8400: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
8410: 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63  tion.  Hence, sc
8420: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
8430: 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74   cannot.** be st
8440: 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64  ored in lookasid
8450: 65 20 62 65 63 61 75 73 65 20 69 6e 20 73 68 61  e because in sha
8460: 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74  red cache mode t
8470: 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  he schema inform
8480: 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72  ation.** is shar
8490: 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64  ed by multiple d
84a0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
84b0: 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c  ons.  Therefore,
84c0: 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a   while parsing.*
84d0: 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  * schema informa
84e0: 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73  tion, the Lookas
84f0: 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61  ide.bEnabled fla
8500: 67 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20  g is cleared so 
8510: 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64  that.** lookasid
8520: 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72  e allocations ar
8530: 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f  e not used to co
8540: 6e 73 74 72 75 63 74 20 74 68 65 20 73 63 68 65  nstruct the sche
8550: 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73  ma objects..*/.s
8560: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20  truct Lookaside 
8570: 7b 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20  {.  u16 sz;     
8580: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
8590: 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66  ize of each buff
85a0: 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  er in bytes */. 
85b0: 20 75 38 20 62 45 6e 61 62 6c 65 64 3b 20 20 20   u8 bEnabled;   
85c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 73           /* Fals
85d0: 65 20 74 6f 20 64 69 73 61 62 6c 65 20 6e 65 77  e to disable new
85e0: 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   lookaside alloc
85f0: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62  ations */.  u8 b
8600: 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20  Malloced;       
8610: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70      /* True if p
8620: 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66  Start obtained f
8630: 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  rom sqlite3_mall
8640: 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f  oc() */.  int nO
8650: 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ut;             
8660: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
8670: 75 66 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79  uffers currently
8680: 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a   checked out */.
8690: 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20    int mxOut;    
86a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67            /* Hig
86b0: 68 77 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20  hwater mark for 
86c0: 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e  nOut */.  int an
86d0: 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20  Stat[3];        
86e0: 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31    /* 0: hits.  1
86f0: 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20  : size misses.  
8700: 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a  2: full misses *
8710: 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  /.  LookasideSlo
8720: 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c  t *pFree;   /* L
8730: 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  ist of available
8740: 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f   buffers */.  vo
8750: 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20  id *pStart;     
8760: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62        /* First b
8770: 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  yte of available
8780: 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f   memory space */
8790: 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20  .  void *pEnd;  
87a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
87b0: 72 73 74 20 62 79 74 65 20 70 61 73 74 20 65 6e  rst byte past en
87c0: 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73  d of available s
87d0: 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63  pace */.};.struc
87e0: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20  t LookasideSlot 
87f0: 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  {.  LookasideSlo
8800: 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20  t *pNext;    /* 
8810: 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e 20 74  Next buffer in t
8820: 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20  he list of free 
8830: 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f  buffers */.};../
8840: 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c  *.** A hash tabl
8850: 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64  e for function d
8860: 65 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a  efinitions..**.*
8870: 2a 20 48 61 73 68 20 65 61 63 68 20 46 75 6e 63  * Hash each Func
8880: 44 65 66 20 73 74 72 75 63 74 75 72 65 20 69 6e  Def structure in
8890: 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75  to one of the Fu
88a0: 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c  ncDefHash.a[] sl
88b0: 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f  ots..** Collisio
88c0: 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75  ns are on the Fu
88d0: 6e 63 44 65 66 2e 70 48 61 73 68 20 63 68 61 69  ncDef.pHash chai
88e0: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  n..*/.struct Fun
88f0: 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e  cDefHash {.  Fun
8900: 63 44 65 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20  cDef *a[23];    
8910: 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65     /* Hash table
8920: 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a   for functions *
8930: 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  /.};..#ifdef SQL
8940: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
8950: 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e  ICATION./*.** In
8960: 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69  formation held i
8970: 6e 20 74 68 65 20 22 73 71 6c 69 74 65 33 22 20  n the "sqlite3" 
8980: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
8990: 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75  ion object and u
89a0: 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65  sed.** to manage
89b0: 20 75 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   user authentica
89c0: 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  tion..*/.typedef
89d0: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f   struct sqlite3_
89e0: 75 73 65 72 61 75 74 68 20 73 71 6c 69 74 65 33  userauth sqlite3
89f0: 5f 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63  _userauth;.struc
8a00: 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  t sqlite3_userau
8a10: 74 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65  th {.  u8 authLe
8a20: 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  vel;            
8a30: 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
8a40: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c  authentication l
8a50: 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  evel */.  int nA
8a60: 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20  uthPW;          
8a70: 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
8a80: 6f 66 20 74 68 65 20 7a 41 75 74 68 50 57 20 69  of the zAuthPW i
8a90: 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61  n bytes */.  cha
8aa0: 72 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20  r *zAuthPW;     
8ab0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
8ac0: 73 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61  ssword used to a
8ad0: 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20  uthenticate */. 
8ae0: 20 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72   char *zAuthUser
8af0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
8b00: 2a 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64  * User name used
8b10: 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65   to authenticate
8b20: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77   */.};../* Allow
8b30: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71  ed values for sq
8b40: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61  lite3_userauth.a
8b50: 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66  uthLevel */.#def
8b60: 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77  ine UAUTH_Unknow
8b70: 6e 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41  n     0     /* A
8b80: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f  uthentication no
8b90: 74 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f  t yet checked */
8ba0: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46  .#define UAUTH_F
8bb0: 61 69 6c 20 20 20 20 20 20 20 20 31 20 20 20 20  ail        1    
8bc0: 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74   /* User authent
8bd0: 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a  ication failed *
8be0: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
8bf0: 55 73 65 72 20 20 20 20 20 20 20 20 32 20 20 20  User        2   
8c00: 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74    /* Authenticat
8c10: 65 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75  ed as a normal u
8c20: 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ser */.#define U
8c30: 41 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20  AUTH_Admin      
8c40: 20 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e   3     /* Authen
8c50: 74 69 63 61 74 65 64 20 61 73 20 61 6e 20 61 64  ticated as an ad
8c60: 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a  ministrator */..
8c70: 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65  /* Functions use
8c80: 64 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61  d only by user a
8c90: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67  uthorization log
8ca0: 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  ic */.int sqlite
8cb0: 33 55 73 65 72 41 75 74 68 54 61 62 6c 65 28 63  3UserAuthTable(c
8cc0: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
8cd0: 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68   sqlite3UserAuth
8ce0: 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74  CheckLogin(sqlit
8cf0: 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
8d00: 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
8d10: 65 33 55 73 65 72 41 75 74 68 49 6e 69 74 28 73  e3UserAuthInit(s
8d20: 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
8d30: 71 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63 28  qlite3CryptFunc(
8d40: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
8d50: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
8d60: 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f  ue**);..#endif /
8d70: 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  * SQLITE_USER_AU
8d80: 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a  THENTICATION */.
8d90: 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66  ./*.** typedef f
8da0: 6f 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61  or the authoriza
8db0: 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75  tion callback fu
8dc0: 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65  nction..*/.#ifde
8dd0: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
8de0: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74  THENTICATION.  t
8df0: 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c  ypedef int (*sql
8e00: 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64  ite3_xauth)(void
8e10: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
8e20: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
8e30: 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20  nst char*,.     
8e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e50: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
8e60: 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
8e70: 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  r*);.#else.  typ
8e80: 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74  edef int (*sqlit
8e90: 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c  e3_xauth)(void*,
8ea0: 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  int,const char*,
8eb0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
8ec0: 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20  t char*,.       
8ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ee0: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
8ef0: 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 2f  ar*);.#endif.../
8f00: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
8f10: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  se connection is
8f20: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
8f30: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
8f40: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
8f50: 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73  ct sqlite3 {.  s
8f60: 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73  qlite3_vfs *pVfs
8f70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
8f80: 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a  OS Interface */.
8f90: 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70    struct Vdbe *p
8fa0: 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20  Vdbe;           
8fb0: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76  /* List of activ
8fc0: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
8fd0: 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  es */.  CollSeq 
8fe0: 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20  *pDfltColl;     
8ff0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66        /* The def
9000: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ault collating s
9010: 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29  equence (BINARY)
9020: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
9030: 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20  tex *mutex;     
9040: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
9050: 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20  n mutex */.  Db 
9060: 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20  *aDb;           
9070: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
9080: 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  l backends */.  
9090: 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20  int nDb;        
90a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
90b0: 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65   Number of backe
90c0: 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  nds currently in
90d0: 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c   use */.  int fl
90e0: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
90f0: 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65          /* Misce
9100: 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20  llaneous flags. 
9110: 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  See below */.  i
9120: 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20  64 lastRowid;   
9130: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9140: 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65  ROWID of most re
9150: 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65  cent insert (see
9160: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34   above) */.  i64
9170: 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
9180: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
9190: 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20  fault mmap_size 
91a0: 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73  setting */.  uns
91b0: 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c  igned int openFl
91c0: 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c  ags;       /* Fl
91d0: 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71  ags passed to sq
91e0: 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28  lite3_vfs.xOpen(
91f0: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f  ) */.  int errCo
9200: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
9210: 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63       /* Most rec
9220: 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28  ent error code (
9230: 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69  SQLITE_*) */.  i
9240: 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20  nt errMask;     
9250: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9260: 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77  & result codes w
9270: 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20  ith this before 
9280: 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75  returning */.  u
9290: 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20  16 dbOptFlags;  
92a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
92b0: 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f  Flags to enable/
92c0: 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61  disable optimiza
92d0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 61 75  tions */.  u8 au
92e0: 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20  toCommit;       
92f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
9300: 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
9310: 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73  . */.  u8 temp_s
9320: 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20  tore;           
9330: 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20       /* 1: file 
9340: 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66  2: memory 0: def
9350: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c  ault */.  u8 mal
9360: 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20  locFailed;      
9370: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
9380: 69 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20  if we have seen 
9390: 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  a malloc failure
93a0: 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63   */.  u8 dfltLoc
93b0: 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  kMode;          
93c0: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
93d0: 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20  ocking-mode for 
93e0: 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a  attached dbs */.
93f0: 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65    signed char ne
9400: 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20  xtAutovac;      
9410: 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69  /* Autovac setti
9420: 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20  ng after VACUUM 
9430: 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73  if >=0 */.  u8 s
9440: 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20  uppressErr;     
9450: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
9460: 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20  not issue error 
9470: 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65  messages if true
9480: 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43   */.  u8 vtabOnC
9490: 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20  onflict;        
94a0: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
94b0: 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74  return for s3_vt
94c0: 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29  ab_on_conflict()
94d0: 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73   */.  u8 isTrans
94e0: 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
94f0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
9500: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76  he outermost sav
9510: 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a  epoint is a TS *
9520: 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65  /.  int nextPage
9530: 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20  size;           
9540: 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66    /* Pagesize af
9550: 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30  ter VACUUM if >0
9560: 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b   */.  u32 magic;
9570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9580: 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d      /* Magic num
9590: 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c  ber for detect l
95a0: 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f  ibrary misuse */
95b0: 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20  .  int nChange; 
95c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95d0: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
95e0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68  ed by sqlite3_ch
95f0: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
9600: 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20   nTotalChange;  
9610: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
9620: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
9630: 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
9640: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
9650: 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e   aLimit[SQLITE_N
9660: 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69  _LIMIT];   /* Li
9670: 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  mits */.  int nM
9680: 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20  axSorterMmap;   
9690: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
96a0: 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67 69 6f  um size of regio
96b0: 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73 6f 72  ns mapped by sor
96c0: 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ter */.  struct 
96d0: 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20  sqlite3InitInfo 
96e0: 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d  {      /* Inform
96f0: 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e  ation used durin
9700: 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
9710: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54   */.    int newT
9720: 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
9730: 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20      /* Rootpage 
9740: 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  of table being i
9750: 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
9760: 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20 20    u8 iDb;       
9770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9780: 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20 69   Which db file i
9790: 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  s being initiali
97a0: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75  zed */.    u8 bu
97b0: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
97c0: 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69         /* TRUE i
97d0: 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74  f currently init
97e0: 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20  ializing */.    
97f0: 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72  u8 orphanTrigger
9800: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
9810: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ast statement is
9820: 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74   orphaned TEMP t
9830: 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69 6e  rigger */.  } in
9840: 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41  it;.  int nVdbeA
9850: 63 74 69 76 65 3b 20 20 20 20 20 20 20 20 20 20  ctive;          
9860: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
9870: 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79   VDBEs currently
9880: 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e   running */.  in
9890: 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20  t nVdbeRead;    
98a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
98b0: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
98c0: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
98d0: 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e  or write */.  in
98e0: 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20  t nVdbeWrite;   
98f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
9900: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
9910: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
9920: 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69  and write */.  i
9930: 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20  nt nVdbeExec;   
9940: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9950: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
9960: 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78   calls to VdbeEx
9970: 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  ec() */.  int nE
9980: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
9990: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
99a0: 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65  r of loaded exte
99b0: 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64  nsions */.  void
99c0: 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20   **aExtension;  
99d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72            /* Arr
99e0: 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62  ay of shared lib
99f0: 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a  rary handles */.
9a00: 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29    void (*xTrace)
9a10: 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61  (void*,const cha
9a20: 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  r*);        /* T
9a30: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  race function */
9a40: 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41  .  void *pTraceA
9a50: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
9a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9a70: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
9a80: 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  trace function *
9a90: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66  /.  void (*xProf
9aa0: 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ile)(void*,const
9ab0: 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a   char*,u64);  /*
9ac0: 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74   Profiling funct
9ad0: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
9ae0: 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20  ProfileArg;     
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b00: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
9b10: 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69  o profile functi
9b20: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43  on */.  void *pC
9b30: 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20  ommitArg;       
9b40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
9b50: 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74  ument to xCommit
9b60: 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20  Callback() */   
9b70: 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74  .  int (*xCommit
9b80: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29  Callback)(void*)
9b90: 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  ;    /* Invoked 
9ba0: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
9bb0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c   */.  void *pRol
9bc0: 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20  lbackArg;       
9bd0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
9be0: 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b  ent to xRollback
9bf0: 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20  Callback() */   
9c00: 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62  .  void (*xRollb
9c10: 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  ackCallback)(voi
9c20: 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  d*); /* Invoked 
9c30: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
9c40: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64   */.  void *pUpd
9c50: 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28  ateArg;.  void (
9c60: 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  *xUpdateCallback
9c70: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
9c80: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
9c90: 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36  har*,sqlite_int6
9ca0: 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  4);.#ifndef SQLI
9cb0: 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
9cc0: 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b  t (*xWalCallback
9cd0: 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65  )(void *, sqlite
9ce0: 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
9cf0: 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
9d00: 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66  *pWalArg;.#endif
9d10: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
9d20: 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69  eded)(void*,sqli
9d30: 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65  te3*,int eTextRe
9d40: 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  p,const char*);.
9d50: 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65    void(*xCollNee
9d60: 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c  ded16)(void*,sql
9d70: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
9d80: 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  ep,const void*);
9d90: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65  .  void *pCollNe
9da0: 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74  ededArg;.  sqlit
9db0: 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20  e3_value *pErr; 
9dc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
9dd0: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
9de0: 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e  ssage */.  union
9df0: 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20   {.    volatile 
9e00: 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74 65  int isInterrupte
9e10: 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71  d; /* True if sq
9e20: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20  lite3_interrupt 
9e30: 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20  has been called 
9e40: 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f  */.    double no
9e50: 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20 20  tUsed1;         
9e60: 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a     /* Spacer */.
9e70: 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73    } u1;.  Lookas
9e80: 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20  ide lookaside;  
9e90: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61          /* Looka
9ea0: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66  side malloc conf
9eb0: 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66  iguration */.#if
9ec0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
9ed0: 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
9ee0: 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78   sqlite3_xauth x
9ef0: 41 75 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f  Auth;          /
9f00: 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f 72 69  * Access authori
9f10: 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20  zation function 
9f20: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68  */.  void *pAuth
9f30: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
9f40: 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
9f50: 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65 73 73  nt to the access
9f60: 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a   auth function *
9f70: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
9f80: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
9f90: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
9fa0: 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73   int (*xProgress
9fb0: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f  )(void *);     /
9fc0: 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63  * The progress c
9fd0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
9fe0: 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b  d *pProgressArg;
9ff0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
a000: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72  gument to the pr
a010: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
a020: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  */.  unsigned nP
a030: 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20  rogressOps;     
a040: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
a050: 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67  opcodes for prog
a060: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
a070: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
a080: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
a090: 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
a0a0: 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  VTrans;         
a0b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
a0c0: 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56  cated size of aV
a0d0: 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  Trans */.  Hash 
a0e0: 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20  aModule;        
a0f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75           /* popu
a100: 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74 65 33  lated by sqlite3
a110: 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29  _create_module()
a120: 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70   */.  VtabCtx *p
a130: 56 74 61 62 43 74 78 3b 20 20 20 20 20 20 20 20  VtabCtx;        
a140: 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66      /* Context f
a150: 6f 72 20 61 63 74 69 76 65 20 76 74 61 62 20 63  or active vtab c
a160: 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f  onnect/create */
a170: 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72  .  VTable **aVTr
a180: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
a190: 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c   /* Virtual tabl
a1a0: 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61  es with open tra
a1b0: 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56  nsactions */.  V
a1c0: 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65  Table *pDisconne
a1d0: 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e  ct;    /* Discon
a1e0: 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65  nect these in ne
a1f0: 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  xt sqlite3_prepa
a200: 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  re() */.#endif. 
a210: 20 46 75 6e 63 44 65 66 48 61 73 68 20 61 46 75   FuncDefHash aFu
a220: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  nc;            /
a230: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20  * Hash table of 
a240: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74  connection funct
a250: 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61  ions */.  Hash a
a260: 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20  CollSeq;        
a270: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63          /* All c
a280: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
a290: 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64  es */.  BusyHand
a2a0: 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b  ler busyHandler;
a2b0: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61        /* Busy ca
a2c0: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61  llback */.  Db a
a2d0: 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20  DbStatic[2];    
a2e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61            /* Sta
a2f0: 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74 68  tic space for th
a300: 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b  e 2 default back
a310: 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f  ends */.  Savepo
a320: 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
a330: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
a340: 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70 6f  of active savepo
a350: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75  ints */.  int bu
a360: 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20  syTimeout;      
a370: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20          /* Busy 
a380: 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c  handler timeout,
a390: 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e   in msec */.  in
a3a0: 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t nSavepoint;   
a3b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
a3c0: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
a3d0: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
a3e0: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74  nts */.  int nSt
a3f0: 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20  atement;        
a400: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
a410: 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74 65   of nested state
a420: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
a430: 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  s  */.  i64 nDef
a440: 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
a450: 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66        /* Net def
a460: 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
a470: 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  s this transacti
a480: 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  on. */.  i64 nDe
a490: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
a4a0: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
a4b0: 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65  ferred immediate
a4c0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
a4d0: 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72    int *pnBytesFr
a4e0: 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eed;            
a4f0: 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20  /* If not NULL, 
a500: 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69  increment this i
a510: 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69  n DbFree() */.#i
a520: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
a530: 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
a540: 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
a550: 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61 72  ing variables ar
a560: 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20  e all protected 
a570: 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41  by the STATIC_MA
a580: 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74 65 78  STER .  ** mutex
a590: 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33  , not by sqlite3
a5a0: 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65  .mutex. They are
a5b0: 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e   used by code in
a5c0: 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20 2a 2a   notify.c. .  **
a5d0: 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e  .  ** When X.pUn
a5e0: 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d  lockConnection==
a5f0: 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  Y, that means th
a600: 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67 20  at X is waiting 
a610: 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e  for Y to.  ** un
a620: 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20  lock so that it 
a630: 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a  can proceed..  *
a640: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42  *.  ** When X.pB
a650: 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f  lockingConnectio
a660: 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73  n==Y, that means
a670: 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20   that something 
a680: 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a  that X tried.  *
a690: 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65  * tried to do re
a6a0: 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69  cently failed wi
a6b0: 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43  th an SQLITE_LOC
a6c0: 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f  KED error due to
a6d0: 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64   locks.  ** held
a6e0: 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71   by Y..  */.  sq
a6f0: 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67  lite3 *pBlocking
a700: 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43  Connection; /* C
a710: 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63  onnection that c
a720: 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43  aused SQLITE_LOC
a730: 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  KED */.  sqlite3
a740: 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74   *pUnlockConnect
a750: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ion;           /
a760: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  * Connection to 
a770: 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b  watch for unlock
a780: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c   */.  void *pUnl
a790: 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20  ockArg;         
a7a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
a7b0: 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f  rgument to xUnlo
a7c0: 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f  ckNotify */.  vo
a7d0: 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69  id (*xUnlockNoti
a7e0: 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74  fy)(void **, int
a7f0: 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f  );  /* Unlock no
a800: 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  tify callback */
a810: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78  .  sqlite3 *pNex
a820: 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20  tBlocked;       
a830: 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74   /* Next in list
a840: 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20   of all blocked 
a850: 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23  connections */.#
a860: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
a870: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
a880: 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65  ICATION.  sqlite
a890: 33 5f 75 73 65 72 61 75 74 68 20 61 75 74 68 3b  3_userauth auth;
a8a0: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20          /* User 
a8b0: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69  authentication i
a8c0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65  nformation */.#e
a8d0: 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ndif.};../*.** A
a8e0: 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76   macro to discov
a8f0: 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  er the encoding 
a900: 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a  of a database..*
a910: 2f 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62  /.#define ENC(db
a920: 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e  ) ((db)->aDb[0].
a930: 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 0a 2f  pSchema->enc)../
a940: 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
a950: 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c  lues for the sql
a960: 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23  ite3.flags..*/.#
a970: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
a980: 62 65 54 72 61 63 65 20 20 20 20 20 20 30 78 30  beTrace      0x0
a990: 30 30 30 30 30 30 31 20 20 2f 2a 20 54 72 75 65  0000001  /* True
a9a0: 20 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65   to trace VDBE e
a9b0: 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  xecution */.#def
a9c0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74 65 72  ine SQLITE_Inter
a9d0: 6e 43 68 61 6e 67 65 73 20 20 30 78 30 30 30 30  nChanges  0x0000
a9e0: 30 30 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69  0002  /* Uncommi
a9f0: 74 74 65 64 20 48 61 73 68 20 74 61 62 6c 65 20  tted Hash table 
aa00: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
aa10: 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53  ne SQLITE_FullFS
aa20: 79 6e 63 20 20 20 20 20 20 30 78 30 30 30 30 30  ync      0x00000
aa30: 30 30 34 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c  004  /* Use full
aa40: 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61   fsync on the ba
aa50: 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ckend */.#define
aa60: 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c   SQLITE_CkptFull
aa70: 46 53 79 6e 63 20 20 30 78 30 30 30 30 30 30 30  FSync  0x0000000
aa80: 38 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66  8  /* Use full f
aa90: 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f  sync for checkpo
aaa0: 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  int */.#define S
aab0: 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c  QLITE_CacheSpill
aac0: 20 20 20 20 20 30 78 30 30 30 30 30 30 31 30 20       0x00000010 
aad0: 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20   /* OK to spill 
aae0: 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23  pager cache */.#
aaf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
ab00: 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30  llColNames   0x0
ab10: 30 30 30 30 30 32 30 20 20 2f 2a 20 53 68 6f 77  0000020  /* Show
ab20: 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d   full column nam
ab30: 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a  es on SELECT */.
ab40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
ab50: 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78  hortColNames  0x
ab60: 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f  00000040  /* Sho
ab70: 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20  w short columns 
ab80: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
ab90: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
aba0: 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30 38  s      0x0000008
abb0: 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73  0  /* Count rows
abc0: 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45   changed by INSE
abd0: 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  RT, */.         
abe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac00: 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72   /*   DELETE, or
ac10: 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75   UPDATE and retu
ac20: 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  rn */.          
ac30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac50: 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75  /*   the count u
ac60: 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e  sing a callback.
ac70: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ac80: 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20  TE_NullCallback 
ac90: 20 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a    0x00000100  /*
aca0: 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c   Invoke the call
acb0: 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65  back once if the
acc0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
acd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ace0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
acf0: 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73     result set is
ad00: 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
ad10: 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  e SQLITE_SqlTrac
ad20: 65 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32  e       0x000002
ad30: 30 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69  00  /* Debug pri
ad40: 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65  nt SQL as it exe
ad50: 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cutes */.#define
ad60: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
ad70: 69 6e 67 20 20 20 20 30 78 30 30 30 30 30 34 30  ing    0x0000040
ad80: 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74  0  /* Debug list
ad90: 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f  ings of VDBE pro
ada0: 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65  grams */.#define
adb0: 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68   SQLITE_WriteSch
adc0: 65 6d 61 20 20 20 20 30 78 30 30 30 30 30 38 30  ema    0x0000080
add0: 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61  0  /* OK to upda
ade0: 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52  te SQLITE_MASTER
adf0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ae00: 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63  TE_VdbeAddopTrac
ae10: 65 20 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a  e 0x00001000  /*
ae20: 20 54 72 61 63 65 20 73 71 6c 69 74 65 33 56 64   Trace sqlite3Vd
ae30: 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20  beAddOp() calls 
ae40: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ae50: 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20  E_IgnoreChecks  
ae60: 20 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20   0x00002000  /* 
ae70: 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63  Do not enforce c
ae80: 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73  heck constraints
ae90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
aea0: 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74  TE_ReadUncommitt
aeb0: 65 64 20 30 78 30 30 30 34 30 30 30 20 20 2f 2a  ed 0x0004000  /*
aec0: 20 46 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68   For shared-cach
aed0: 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e  e mode */.#defin
aee0: 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46  e SQLITE_LegacyF
aef0: 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30 38 30  ileFmt  0x000080
af00: 30 30 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65  00  /* Create ne
af10: 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66  w databases in f
af20: 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69  ormat 1 */.#defi
af30: 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65  ne SQLITE_Recove
af40: 72 79 4d 6f 64 65 20 20 20 30 78 30 30 30 31 30  ryMode   0x00010
af50: 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73  000  /* Ignore s
af60: 63 68 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a  chema errors */.
af70: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
af80: 65 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78  everseOrder   0x
af90: 30 30 30 32 30 30 30 30 20 20 2f 2a 20 52 65 76  00020000  /* Rev
afa0: 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53  erse unordered S
afb0: 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e  ELECTs */.#defin
afc0: 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67  e SQLITE_RecTrig
afd0: 67 65 72 73 20 20 20 20 30 78 30 30 30 34 30 30  gers    0x000400
afe0: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65  00  /* Enable re
aff0: 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73  cursive triggers
b000: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b010: 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20  TE_ForeignKeys  
b020: 20 20 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a    0x00080000  /*
b030: 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e   Enforce foreign
b040: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
b050: 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c    */.#define SQL
b060: 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20  ITE_AutoIndex   
b070: 20 20 20 30 78 30 30 31 30 30 30 30 30 20 20 2f     0x00100000  /
b080: 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74  * Enable automat
b090: 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64  ic indexes */.#d
b0a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 65  efine SQLITE_Pre
b0b0: 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30  ferBuiltin  0x00
b0c0: 32 30 30 30 30 30 20 20 2f 2a 20 50 72 65 66 65  200000  /* Prefe
b0d0: 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69  rence to built-i
b0e0: 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69  n funcs */.#defi
b0f0: 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78  ne SQLITE_LoadEx
b100: 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 34 30 30  tension  0x00400
b110: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c  000  /* Enable l
b120: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f  oad_extension */
b130: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b140: 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20 30  EnableTrigger  0
b150: 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20 54 72  x00800000  /* Tr
b160: 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69  ue to enable tri
b170: 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  ggers */.#define
b180: 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73   SQLITE_DeferFKs
b190: 20 20 20 20 20 20 20 30 78 30 31 30 30 30 30 30         0x0100000
b1a0: 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20  0  /* Defer all 
b1b0: 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  FK constraints *
b1c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b1d0: 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20  _QueryOnly      
b1e0: 30 78 30 32 30 30 30 30 30 30 20 20 2f 2a 20 44  0x02000000  /* D
b1f0: 69 73 61 62 6c 65 20 64 61 74 61 62 61 73 65 20  isable database 
b200: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
b210: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51  ne SQLITE_VdbeEQ
b220: 50 20 20 20 20 20 20 20 20 30 78 30 34 30 30 30  P        0x04000
b230: 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58  000  /* Debug EX
b240: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
b250: 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73   */.../*.** Bits
b260: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e   of the sqlite3.
b270: 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64  dbOptFlags field
b280: 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 62   that are used b
b290: 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  y the.** sqlite3
b2a0: 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51  _test_control(SQ
b2b0: 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50  LITE_TESTCTRL_OP
b2c0: 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29  TIMIZATIONS,...)
b2d0: 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a   interface to.**
b2e0: 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73   selectively dis
b2f0: 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74  able various opt
b300: 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23  imizations..*/.#
b310: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75  define SQLITE_Qu
b320: 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30  eryFlattener 0x0
b330: 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66  001   /* Query f
b340: 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65  lattening */.#de
b350: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75  fine SQLITE_Colu
b360: 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30 30 30  mnCache    0x000
b370: 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61  2   /* Column ca
b380: 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  che */.#define S
b390: 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64  QLITE_GroupByOrd
b3a0: 65 72 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a  er   0x0004   /*
b3b0: 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f   GROUPBY cover o
b3c0: 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65  f ORDERBY */.#de
b3d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74  fine SQLITE_Fact
b3e0: 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30  orOutConst 0x000
b3f0: 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  8   /* Constant 
b400: 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20  factoring */./* 
b410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
b420: 6f 74 20 75 73 65 64 20 20 20 20 30 78 30 30 31  ot used    0x001
b430: 30 20 20 20 2f 2f 20 57 61 73 3a 20 53 51 4c 49  0   // Was: SQLI
b440: 54 45 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20  TE_IdxRealAsInt 
b450: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b460: 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20  E_DistinctOpt   
b470: 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44 49 53   0x0020   /* DIS
b480: 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65  TINCT using inde
b490: 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  xes */.#define S
b4a0: 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63  QLITE_CoverIdxSc
b4b0: 61 6e 20 20 20 30 78 30 30 34 30 20 20 20 2f 2a  an   0x0040   /*
b4c0: 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20   Covering index 
b4d0: 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  scans */.#define
b4e0: 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49   SQLITE_OrderByI
b4f0: 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20 20 20  dxJoin 0x0080   
b500: 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a  /* ORDER BY of j
b510: 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a  oins via index *
b520: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b530: 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65 20 20  _SubqCoroutine  
b540: 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76 61 6c  0x0100   /* Eval
b550: 75 61 74 65 20 73 75 62 71 75 65 72 69 65 73 20  uate subqueries 
b560: 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a 2f  as coroutines */
b570: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b580: 54 72 61 6e 73 69 74 69 76 65 20 20 20 20 20 30  Transitive     0
b590: 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61 6e 73  x0200   /* Trans
b5a0: 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74  itive constraint
b5b0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b5c0: 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e  ITE_OmitNoopJoin
b5d0: 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20 4f     0x0400   /* O
b5e0: 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65  mit unused table
b5f0: 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64  s in joins */.#d
b600: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61  efine SQLITE_Sta
b610: 74 33 20 20 20 20 20 20 20 20 20 20 30 78 30 38  t3          0x08
b620: 30 30 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20  00   /* Use the 
b630: 53 51 4c 49 54 45 5f 53 54 41 54 33 20 74 61 62  SQLITE_STAT3 tab
b640: 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  le */.#define SQ
b650: 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20  LITE_AllOpts    
b660: 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20      0xffff   /* 
b670: 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  All optimization
b680: 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  s */../*.** Macr
b690: 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77  os for testing w
b6a0: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70  hether or not op
b6b0: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20  timizations are 
b6c0: 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62  enabled or disab
b6d0: 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  led..*/.#ifndef 
b6e0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
b6f0: 54 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e 65  TIN_TEST.#define
b700: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73   OptimizationDis
b710: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
b720: 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c   (((db)->dbOptFl
b730: 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a  ags&(mask))!=0).
b740: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
b750: 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20  tionEnabled(db, 
b760: 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e  mask)   (((db)->
b770: 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b  dbOptFlags&(mask
b780: 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65  ))==0).#else.#de
b790: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
b7a0: 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61  nDisabled(db, ma
b7b0: 73 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20 4f  sk)  0.#define O
b7c0: 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c  ptimizationEnabl
b7d0: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 31  ed(db, mask)   1
b7e0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52  .#endif../*.** R
b7f0: 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74  eturn true if it
b800: 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f   OK to factor co
b810: 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
b820: 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74  ns into the init
b830: 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f  ialization.** co
b840: 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74  de. The argument
b850: 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65   is a Parse obje
b860: 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20  ct for the code 
b870: 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64  generator..*/.#d
b880: 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f  efine ConstFacto
b890: 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43  rOk(P) ((P)->okC
b8a0: 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a  onstFactor)../*.
b8b0: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
b8c0: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
b8d0: 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a  e.magic field..*
b8e0: 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72  * The numbers ar
b8f0: 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61  e obtained at ra
b900: 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f  ndom and have no
b910: 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67   special meaning
b920: 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20  , other.** than 
b930: 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66  being distinct f
b940: 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e  rom one another.
b950: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
b960: 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20  TE_MAGIC_OPEN   
b970: 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a    0xa029a697  /*
b980: 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65   Database is ope
b990: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
b9a0: 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
b9b0: 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f     0x9f3c2d33  /
b9c0: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c  * Database is cl
b9d0: 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  osed */.#define 
b9e0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43  SQLITE_MAGIC_SIC
b9f0: 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30  K     0x4b771290
ba00: 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61    /* Error and a
ba10: 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f  waiting close */
ba20: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ba30: 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30  MAGIC_BUSY     0
ba40: 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61  xf03b7906  /* Da
ba50: 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79  tabase currently
ba60: 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69   in use */.#defi
ba70: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
ba80: 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37  ERROR    0xb5357
ba90: 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54  930  /* An SQLIT
baa0: 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f  E_MISUSE error o
bab0: 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69  ccurred */.#defi
bac0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
bad0: 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66  ZOMBIE   0x64cff
bae0: 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69  c7f  /* Close wi
baf0: 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e  th last statemen
bb00: 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a  t close */../*.*
bb10: 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74  * Each SQL funct
bb20: 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62  ion is defined b
bb30: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
bb40: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   the following.*
bb50: 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 41 20  * structure.  A 
bb60: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
bb70: 73 74 72 75 63 74 75 72 65 20 69 73 20 73 74 6f  structure is sto
bb80: 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74  red in the sqlit
bb90: 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20  e.aFunc.** hash 
bba0: 74 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c  table.  When mul
bbb0: 74 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20  tiple functions 
bbc0: 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61  have the same na
bbd0: 6d 65 2c 20 74 68 65 20 68 61 73 68 20 74 61 62  me, the hash tab
bbe0: 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20  le.** points to 
bbf0: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  a linked list of
bc00: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
bc10: 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  s..*/.struct Fun
bc20: 63 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41 72  cDef {.  i16 nAr
bc30: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  g;            /*
bc40: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
bc50: 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20  ents.  -1 means 
bc60: 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75  unlimited */.  u
bc70: 31 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20  16 funcFlags;   
bc80: 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62      /* Some comb
bc90: 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54  ination of SQLIT
bca0: 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f  E_FUNC_* */.  vo
bcb0: 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20  id *pUserData;  
bcc0: 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20     /* User data 
bcd0: 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46  parameter */.  F
bce0: 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20  uncDef *pNext;  
bcf0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63      /* Next func
bd00: 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e  tion with same n
bd10: 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ame */.  void (*
bd20: 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63  xFunc)(sqlite3_c
bd30: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
bd40: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a  te3_value**); /*
bd50: 20 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69 6f   Regular functio
bd60: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53  n */.  void (*xS
bd70: 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tep)(sqlite3_con
bd80: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
bd90: 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41  3_value**); /* A
bda0: 67 67 72 65 67 61 74 65 20 73 74 65 70 20 2a 2f  ggregate step */
bdb0: 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c  .  void (*xFinal
bdc0: 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  ize)(sqlite3_con
bdd0: 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20  text*);         
bde0: 20 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65 67         /* Aggreg
bdf0: 61 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f  ate finalizer */
be00: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
be10: 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e          /* SQL n
be20: 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
be30: 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65  ion. */.  FuncDe
be40: 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f  f *pHash;      /
be50: 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69  * Next with a di
be60: 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74  fferent name but
be70: 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a   the same hash *
be80: 2f 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74  /.  FuncDestruct
be90: 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b  or *pDestructor;
bea0: 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20     /* Reference 
beb0: 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74  counted destruct
bec0: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d  or function */.}
bed0: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74  ;../*.** This st
bee0: 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c  ructure encapsul
bef0: 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63  ates a user-func
bf00: 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20  tion destructor 
bf10: 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20  callback (as.** 
bf20: 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67  configured using
bf30: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
bf40: 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66  _v2()) and a ref
bf50: 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20  erence counter. 
bf60: 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66  When.** create_f
bf70: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20  unction_v2() is 
bf80: 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65  called to create
bf90: 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68   a function with
bfa0: 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a   a destructor,.*
bfb0: 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63  * a single objec
bfc0: 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
bfd0: 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e  s allocated. Fun
bfe0: 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66  cDestructor.nRef
bff0: 20 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74   is set to .** t
c000: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e  he number of Fun
c010: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65  cDef objects cre
c020: 61 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f  ated (either 1 o
c030: 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f  r 3, depending o
c040: 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20  n whether.** or 
c050: 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65  not the specifie
c060: 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51  d encoding is SQ
c070: 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46  LITE_ANY). The F
c080: 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74  uncDef.pDestruct
c090: 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20  or.** member of 
c0a0: 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20  each of the new 
c0b0: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
c0c0: 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20  is set to point 
c0d0: 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64  to the allocated
c0e0: 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74  .** FuncDestruct
c0f0: 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61  or..**.** Therea
c100: 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f  fter, when one o
c110: 66 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62  f the FuncDef ob
c120: 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64  jects is deleted
c130: 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a  , the reference.
c140: 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73  ** count on this
c150: 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65   object is decre
c160: 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20  mented. When it 
c170: 72 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64  reaches 0, the d
c180: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20  estructor.** is 
c190: 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20  invoked and the 
c1a0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73  FuncDestructor s
c1b0: 74 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a  tructure freed..
c1c0: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
c1d0: 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74  structor {.  int
c1e0: 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a   nRef;.  void (*
c1f0: 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
c200: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  );.  void *pUser
c210: 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  Data;.};../*.** 
c220: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
c230: 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67  for FuncDef.flag
c240: 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68  s.  Note that th
c250: 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54  e _LENGTH and _T
c260: 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20  YPEOF.** values 
c270: 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20  must correspond 
c280: 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  to OPFLAG_LENGTH
c290: 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54  ARG and OPFLAG_T
c2a0: 59 50 45 4f 46 41 52 47 2e 20 20 54 68 65 72 65  YPEOFARG.  There
c2b0: 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29  .** are assert()
c2c0: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
c2d0: 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66  he code to verif
c2e0: 79 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69  y this..*/.#defi
c2f0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45  ne SQLITE_FUNC_E
c300: 4e 43 4d 41 53 4b 20 20 30 78 30 30 33 20 2f 2a  NCMASK  0x003 /*
c310: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
c320: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20  LITE_UTF16BE or 
c330: 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69  UTF16LE */.#defi
c340: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
c350: 49 4b 45 20 20 20 20 20 30 78 30 30 34 20 2f 2a  IKE     0x004 /*
c360: 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74   Candidate for t
c370: 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61  he LIKE optimiza
c380: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
c390: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45  SQLITE_FUNC_CASE
c3a0: 20 20 20 20 20 30 78 30 30 38 20 2f 2a 20 43 61       0x008 /* Ca
c3b0: 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b  se-sensitive LIK
c3c0: 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20  E-type function 
c3d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c3e0: 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20  E_FUNC_EPHEM    
c3f0: 30 78 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72  0x010 /* Ephemer
c400: 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68  al.  Delete with
c410: 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65   VDBE */.#define
c420: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45   SQLITE_FUNC_NEE
c430: 44 43 4f 4c 4c 20 30 78 30 32 30 20 2f 2a 20 73  DCOLL 0x020 /* s
c440: 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c  qlite3GetFuncCol
c450: 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20  lSeq() might be 
c460: 63 61 6c 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e  called */.#defin
c470: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45  e SQLITE_FUNC_LE
c480: 4e 47 54 48 20 20 20 30 78 30 34 30 20 2f 2a 20  NGTH   0x040 /* 
c490: 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28  Built-in length(
c4a0: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
c4b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
c4c0: 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30 38 30  C_TYPEOF   0x080
c4d0: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70   /* Built-in typ
c4e0: 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  eof() function *
c4f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c500: 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30  _FUNC_COUNT    0
c510: 78 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  x100 /* Built-in
c520: 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67   count(*) aggreg
c530: 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ate */.#define S
c540: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45  QLITE_FUNC_COALE
c550: 53 43 45 20 30 78 32 30 30 20 2f 2a 20 42 75 69  SCE 0x200 /* Bui
c560: 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29  lt-in coalesce()
c570: 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a   or ifnull() */.
c580: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
c590: 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 34  UNC_UNLIKELY 0x4
c5a0: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75  00 /* Built-in u
c5b0: 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69  nlikely() functi
c5c0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
c5d0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
c5e0: 4e 54 20 30 78 38 30 30 20 2f 2a 20 43 6f 6e 73  NT 0x800 /* Cons
c5f0: 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76 65  tant inputs give
c600: 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70   a constant outp
c610: 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ut */.#define SQ
c620: 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
c630: 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72 75 65    0x1000 /* True
c640: 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20 6d   for min() and m
c650: 61 78 28 29 20 61 67 67 72 65 67 61 74 65 73 20  ax() aggregates 
c660: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  */../*.** The fo
c670: 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61  llowing three ma
c680: 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29  cros, FUNCTION()
c690: 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64  , LIKEFUNC() and
c6a0: 20 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65   AGGREGATE() are
c6b0: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61  .** used to crea
c6c0: 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  te the initializ
c6d0: 65 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63  ers for the Func
c6e0: 44 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a  Def structures..
c6f0: 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e  **.**   FUNCTION
c700: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
c710: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
c720: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
c730: 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
c740: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
c750: 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
c760: 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69   zName .**     i
c770: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20  mplemented by C 
c780: 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74  function xFunc t
c790: 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67  hat accepts nArg
c7a0: 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a   arguments. The.
c7b0: 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73  **     value pas
c7c0: 73 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63  sed as iArg is c
c7d0: 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29  ast to a (void*)
c7e0: 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61   and made availa
c7f0: 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68  ble.**     as th
c800: 65 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c  e user-data (sql
c810: 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29  ite3_user_data()
c820: 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69  ) for the functi
c830: 6f 6e 2e 20 49 66 20 0a 2a 2a 20 20 20 20 20 61  on. If .**     a
c840: 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74  rgument bNC is t
c850: 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51  rue, then the SQ
c860: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
c870: 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a  LL flag is set..
c880: 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f  **.**   VFUNCTIO
c890: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
c8a0: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
c8b0: 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e  .**     Like FUN
c8c0: 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20  CTION except it 
c8d0: 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45  omits the SQLITE
c8e0: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66  _FUNC_CONSTANT f
c8f0: 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47  lag..**.**   AGG
c900: 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  REGATE(zName, nA
c910: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
c920: 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a  Step, xFinal).**
c930: 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
c940: 61 74 65 20 61 6e 20 61 67 67 72 65 67 61 74 65  ate an aggregate
c950: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
c960: 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64  tion implemented
c970: 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43   by.**     the C
c980: 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70   functions xStep
c990: 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65   and xFinal. The
c9a0: 20 66 69 72 73 74 20 66 6f 75 72 20 70 61 72 61   first four para
c9b0: 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72  meters.**     ar
c9c0: 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e  e interpreted in
c9d0: 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73   the same way as
c9e0: 20 74 68 65 20 66 69 72 73 74 20 34 20 70 61 72   the first 4 par
c9f0: 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20  ameters to.**   
ca00: 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a    FUNCTION()..**
ca10: 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a  .**   LIKEFUNC(z
ca20: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67  Name, nArg, pArg
ca30: 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20  , flags).**     
ca40: 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
ca50: 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e   scalar function
ca60: 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61   definition of a
ca70: 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20   function zName 
ca80: 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63 63  .**     that acc
ca90: 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65  epts nArg argume
caa0: 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c 65  nts and is imple
cab0: 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c 6c  mented by a call
cac0: 20 74 6f 20 43 20 0a 2a 2a 20 20 20 20 20 66 75   to C .**     fu
cad0: 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e  nction likeFunc.
cae0: 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20 69   Argument pArg i
caf0: 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69  s cast to a (voi
cb00: 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a  d *) and made.**
cb10: 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 61       available a
cb20: 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 75  s the function u
cb30: 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65  ser-data (sqlite
cb40: 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e 20  3_user_data()). 
cb50: 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44  The.**     FuncD
cb60: 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62 6c  ef.flags variabl
cb70: 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  e is set to the 
cb80: 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20  value passed as 
cb90: 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20  the flags.**    
cba0: 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23   parameter..*/.#
cbb0: 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28  define FUNCTION(
cbc0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
cbd0: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
cbe0: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
cbf0: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
cc00: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
cc10: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
cc20: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
cc30: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
cc40: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
cc50: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
cc60: 30 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43  0}.#define VFUNC
cc70: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
cc80: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
cc90: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
cca0: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
ccb0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
ccc0: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
ccd0: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
cce0: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
ccf0: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
cd00: 30 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54  0}.#define FUNCT
cd10: 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ION2(zName, nArg
cd20: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
cd30: 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  nc, extraFlags) 
cd40: 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45  \.  {nArg,SQLITE
cd50: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
cd60: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
cd70: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
cd80: 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73  COLL)|extraFlags
cd90: 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54  ,\.   SQLITE_INT
cda0: 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
cdb0: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  , xFunc, 0, 0, #
cdc0: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
cdd0: 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f  fine STR_FUNCTIO
cde0: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70  N(zName, nArg, p
cdf0: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
ce00: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
ce10: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
ce20: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e  |SQLITE_UTF8|(bN
ce30: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
ce40: 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41  EDCOLL), \.   pA
ce50: 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  rg, 0, xFunc, 0,
ce60: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
ce70: 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46 55  }.#define LIKEFU
ce80: 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  NC(zName, nArg, 
ce90: 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20  arg, flags) \.  
cea0: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
ceb0: 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
cec0: 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c  TE_UTF8|flags, \
ced0: 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67 2c  .   (void *)arg,
cee0: 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c   0, likeFunc, 0,
cef0: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
cf00: 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
cf10: 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
cf20: 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c   arg, nc, xStep,
cf30: 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41   xFinal) \.  {nA
cf40: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
cf50: 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  (nc*SQLITE_FUNC_
cf60: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
cf70: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
cf80: 52 28 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53  R(arg), 0, 0, xS
cf90: 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d  tep,xFinal,#zNam
cfa0: 65 2c 30 2c 30 7d 0a 23 64 65 66 69 6e 65 20 41  e,0,0}.#define A
cfb0: 47 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c  GGREGATE2(zName,
cfc0: 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
cfd0: 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65  xStep, xFinal, e
cfe0: 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b  xtraFlags) \.  {
cff0: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
d000: 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e  8|(nc*SQLITE_FUN
d010: 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72  C_NEEDCOLL)|extr
d020: 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c  aFlags, \.   SQL
d030: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
d040: 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70  rg), 0, 0, xStep
d050: 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30  ,xFinal,#zName,0
d060: 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63  ,0}../*.** All c
d070: 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  urrent savepoint
d080: 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
d090: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74  a linked list st
d0a0: 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c  arting at.** sql
d0b0: 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e  ite3.pSavepoint.
d0c0: 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
d0d0: 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69  nt in the list i
d0e0: 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  s the most recen
d0f0: 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61  tly.** opened sa
d100: 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69  vepoint. Savepoi
d110: 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f  nts are added to
d120: 20 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65   the list by the
d130: 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65   vdbe.** OP_Save
d140: 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  point instructio
d150: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76  n..*/.struct Sav
d160: 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20  epoint {.  char 
d170: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
d180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d190: 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65  * Savepoint name
d1a0: 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64   (nul-terminated
d1b0: 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  ) */.  i64 nDefe
d1c0: 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20  rredCons;       
d1d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
d1e0: 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64  mber of deferred
d1f0: 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a   fk violations *
d200: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
d210: 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20  dImmCons;       
d220: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
d230: 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d  r of deferred im
d240: 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70  m fk. */.  Savep
d250: 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  oint *pNext;    
d260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d270: 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69  * Parent savepoi
d280: 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d  nt (if any) */.}
d290: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
d2a0: 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20  lowing are used 
d2b0: 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  as the second pa
d2c0: 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74  rameter to sqlit
d2d0: 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a  e3Savepoint(),.*
d2e0: 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20  * and as the P1 
d2f0: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
d300: 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
d310: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65  truction..*/.#de
d320: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42  fine SAVEPOINT_B
d330: 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66  EGIN      0.#def
d340: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45  ine SAVEPOINT_RE
d350: 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69  LEASE    1.#defi
d360: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  ne SAVEPOINT_ROL
d370: 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a  LBACK   2.../*.*
d380: 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f  * Each SQLite mo
d390: 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61  dule (virtual ta
d3a0: 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20  ble definition) 
d3b0: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
d3c0: 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
d3d0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
d3e0: 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20  ructure, stored 
d3f0: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61  in the sqlite3.a
d400: 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74  Module.** hash t
d410: 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  able..*/.struct 
d420: 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74  Module {.  const
d430: 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
d440: 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20  *pModule;       
d450: 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e  /* Callback poin
d460: 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ters */.  const 
d470: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
d480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d490: 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f  * Name passed to
d4a0: 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29   create_module()
d4b0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78   */.  void *pAux
d4c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d4d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41             /* pA
d4e0: 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65  ux passed to cre
d4f0: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
d500: 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f    void (*xDestro
d510: 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20  y)(void *);     
d520: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65         /* Module
d530: 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63   destructor func
d540: 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  tion */.};../*.*
d550: 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * information ab
d560: 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  out each column 
d570: 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  of an SQL table 
d580: 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e  is held in an in
d590: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
d5a0: 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  s structure..*/.
d5b0: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a  struct Column {.
d5c0: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
d5d0: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
d5e0: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45  is column */.  E
d5f0: 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20  xpr *pDflt;     
d600: 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65  /* Default value
d610: 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20   of this column 
d620: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c 74  */.  char *zDflt
d630: 3b 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61  ;     /* Origina
d640: 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 64 65  l text of the de
d650: 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20  fault value */. 
d660: 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 20   char *zType;   
d670: 20 20 2f 2a 20 44 61 74 61 20 74 79 70 65 20 66    /* Data type f
d680: 6f 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  or this column *
d690: 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b  /.  char *zColl;
d6a0: 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e       /* Collatin
d6b0: 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20  g sequence.  If 
d6c0: 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65  NULL, use the de
d6d0: 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f  fault */.  u8 no
d6e0: 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41  tNull;      /* A
d6f0: 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68  n OE_ code for h
d700: 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55  andling a NOT NU
d710: 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  LL constraint */
d720: 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
d730: 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68  ;   /* One of th
d740: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e  e SQLITE_AFF_...
d750: 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20   values */.  u8 
d760: 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  szEst;        /*
d770: 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20   Estimated size 
d780: 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20  of this column. 
d790: 20 49 4e 54 3d 3d 31 20 2a 2f 0a 20 20 75 38 20   INT==1 */.  u8 
d7a0: 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a  colFlags;     /*
d7b0: 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74   Boolean propert
d7c0: 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41  ies.  See COLFLA
d7d0: 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77  G_ defines below
d7e0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77   */.};../* Allow
d7f0: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f  ed values for Co
d800: 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a  lumn.colFlags:.*
d810: 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
d820: 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30  G_PRIMKEY  0x000
d830: 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69  1    /* Column i
d840: 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72  s part of the pr
d850: 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65  imary key */.#de
d860: 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44  fine COLFLAG_HID
d870: 44 45 4e 20 20 20 30 78 30 30 30 32 20 20 20 20  DEN   0x0002    
d880: 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75  /* A hidden colu
d890: 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20  mn in a virtual 
d8a0: 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  table */../*.** 
d8b0: 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71  A "Collating Seq
d8c0: 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65  uence" is define
d8d0: 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  d by an instance
d8e0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
d8f0: 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20  g.** structure. 
d900: 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20  Conceptually, a 
d910: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
d920: 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  ce consists of a
d930: 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63   name and.** a c
d940: 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e  omparison routin
d950: 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  e that defines t
d960: 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74  he order of that
d970: 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a   sequence..**.**
d980: 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70   If CollSeq.xCmp
d990: 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61   is NULL, it mea
d9a0: 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63  ns that the.** c
d9b0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
d9c0: 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20  e is undefined. 
d9d0: 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f   Indices built o
d9e0: 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a  n an undefined.*
d9f0: 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * collating sequ
da00: 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20  ence may not be 
da10: 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e  read or written.
da20: 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53  .*/.struct CollS
da30: 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  eq {.  char *zNa
da40: 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  me;          /* 
da50: 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c  Name of the coll
da60: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20  ating sequence, 
da70: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f  UTF-8 encoded */
da80: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
da90: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
daa0: 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65   encoding handle
dab0: 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20  d by xCmp() */. 
dac0: 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20   void *pUser;   
dad0: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
dae0: 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70  argument to xCmp
daf0: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43  () */.  int (*xC
db00: 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  mp)(void*,int, c
db10: 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
db20: 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20   const void*);. 
db30: 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f   void (*xDel)(vo
db40: 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75  id*);  /* Destru
db50: 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a  ctor for pUser *
db60: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f  /.};../*.** A so
db70: 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20  rt order can be 
db80: 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45  either ASC or DE
db90: 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  SC..*/.#define S
dba0: 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20  QLITE_SO_ASC    
dbb0: 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e     0  /* Sort in
dbc0: 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
dbd0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dbe0: 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20  TE_SO_DESC      
dbf0: 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73  1  /* Sort in as
dc00: 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f  cending order */
dc10: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61  ../*.** Column a
dc20: 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a  ffinity types..*
dc30: 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20  *.** These used 
dc40: 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63  to have mnemonic
dc50: 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66   name like 'i' f
dc60: 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  or SQLITE_AFF_IN
dc70: 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27  TEGER and.** 't'
dc80: 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
dc90: 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61  TEXT.  But we ca
dca0: 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20  n save a little 
dcb0: 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76  space and improv
dcc0: 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61  e.** the speed a
dcd0: 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65   little by numbe
dce0: 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20  ring the values 
dcf0: 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20  consecutively.  
dd00: 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65  .**.** But rathe
dd10: 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74  r than start wit
dd20: 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67  h 0 or 1, we beg
dd30: 69 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54 68  in with 'A'.  Th
dd40: 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20  at way,.** when 
dd50: 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74  multiple affinit
dd60: 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63  y types are conc
dd70: 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20  atenated into a 
dd80: 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73  string and.** us
dd90: 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65  ed as the P4 ope
dda0: 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20  rand, they will 
ddb0: 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65  be more readable
ddc0: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73  ..**.** Note als
ddd0: 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72  o that the numer
dde0: 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f  ic types are gro
ddf0: 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f  uped together so
de00: 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a   that testing.**
de10: 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74   for a numeric t
de20: 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ype is a single 
de30: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64  comparison.  And
de40: 20 74 68 65 20 4e 4f 4e 45 20 74 79 70 65 20 69   the NONE type i
de50: 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66  s first..*/.#def
de60: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  ine SQLITE_AFF_N
de70: 4f 4e 45 20 20 20 20 20 27 41 27 0a 23 64 65 66  ONE     'A'.#def
de80: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  ine SQLITE_AFF_T
de90: 45 58 54 20 20 20 20 20 27 42 27 0a 23 64 65 66  EXT     'B'.#def
dea0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  ine SQLITE_AFF_N
deb0: 55 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65 66  UMERIC  'C'.#def
dec0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  ine SQLITE_AFF_I
ded0: 4e 54 45 47 45 52 20 20 27 44 27 0a 23 64 65 66  NTEGER  'D'.#def
dee0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52  ine SQLITE_AFF_R
def0: 45 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65  EAL     'E'..#de
df00: 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75  fine sqlite3IsNu
df10: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29  mericAffinity(X)
df20: 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41    ((X)>=SQLITE_A
df30: 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a  FF_NUMERIC)../*.
df40: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46  ** The SQLITE_AF
df50: 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61  F_MASK values ma
df60: 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e  sks off the sign
df70: 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20  ificant bits of 
df80: 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76  an.** affinity v
df90: 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e  alue. .*/.#defin
dfa0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
dfb0: 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a  K     0x47../*.*
dfc0: 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74  * Additional bit
dfd0: 20 76 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e   values that can
dfe0: 20 62 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e   be ORed with an
dff0: 20 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75   affinity withou
e000: 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68  t.** changing th
e010: 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a  e affinity..**.*
e020: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54  * The SQLITE_NOT
e030: 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63  NULL flag is a c
e040: 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55  ombination of NU
e050: 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e  LLEQ and JUMPIFN
e060: 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65  ULL..** It cause
e070: 73 20 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f  s an assert() to
e080: 20 66 69 72 65 20 69 66 20 65 69 74 68 65 72 20   fire if either 
e090: 6f 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d  operand to a com
e0a0: 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61  parison.** opera
e0b0: 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74  tor is NULL.  It
e0c0: 20 69 73 20 61 64 64 65 64 20 74 6f 20 63 65 72   is added to cer
e0d0: 74 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20  tain comparison 
e0e0: 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20  operators to.** 
e0f0: 70 72 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f  prove that the o
e100: 70 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61  perands are alwa
e110: 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ys NOT NULL..*/.
e120: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a  #define SQLITE_J
e130: 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30  UMPIFNULL   0x10
e140: 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69    /* jumps if ei
e150: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
e160: 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
e170: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20  SQLITE_STOREP2  
e180: 20 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f      0x20  /* Sto
e190: 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  re result in reg
e1a0: 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e  [P2] rather than
e1b0: 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65   jump */.#define
e1c0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20   SQLITE_NULLEQ  
e1d0: 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55       0x80  /* NU
e1e0: 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  LL=NULL */.#defi
e1f0: 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c  ne SQLITE_NOTNUL
e200: 4c 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20  L      0x90  /* 
e210: 41 73 73 65 72 74 20 74 68 61 74 20 6f 70 65 72  Assert that oper
e220: 61 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e  ands are never N
e230: 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  ULL */../*.** An
e240: 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20   object of this 
e250: 74 79 70 65 20 69 73 20 63 72 65 61 74 65 64 20  type is created 
e260: 66 6f 72 20 65 61 63 68 20 76 69 72 74 75 61 6c  for each virtual
e270: 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69   table present i
e280: 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73  n.** the databas
e290: 65 20 73 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a  e schema. .**.**
e2a0: 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65   If the database
e2b0: 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65   schema is share
e2c0: 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69 73  d, then there is
e2d0: 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66   one instance of
e2e0: 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75   this.** structu
e2f0: 72 65 20 66 6f 72 20 65 61 63 68 20 64 61 74 61  re for each data
e300: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
e310: 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74 20  (sqlite3*) that 
e320: 75 73 65 73 20 74 68 65 20 73 68 61 72 65 64 0a  uses the shared.
e330: 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20  ** schema. This 
e340: 69 73 20 62 65 63 61 75 73 65 20 65 61 63 68 20  is because each 
e350: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
e360: 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74 73  ion requires its
e370: 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69   own unique.** i
e380: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 73  nstance of the s
e390: 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
e3a0: 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63 65  dle used to acce
e3b0: 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  ss the virtual t
e3c0: 61 62 6c 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65  able .** impleme
e3d0: 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33  ntation. sqlite3
e3e0: 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63  _vtab* handles c
e3f0: 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64  an not be shared
e400: 20 62 65 74 77 65 65 6e 20 0a 2a 2a 20 64 61 74   between .** dat
e410: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
e420: 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65  s, even when the
e430: 20 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d   rest of the in-
e440: 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 20  memory database 
e450: 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68  .** schema is sh
e460: 61 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70  ared, as the imp
e470: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65  lementation ofte
e480: 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64 61 74  n stores the dat
e490: 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  abase.** connect
e4a0: 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65  ion handle passe
e4b0: 64 20 74 6f 20 69 74 20 76 69 61 20 74 68 65 20  d to it via the 
e4c0: 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43  xConnect() or xC
e4d0: 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a  reate() method.*
e4e0: 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c  * during initial
e4f0: 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c  ization internal
e500: 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62 61 73  ly. This databas
e510: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
e520: 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20  dle may.** then 
e530: 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20 76  be used by the v
e540: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
e550: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61  lementation to a
e560: 63 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65  ccess real table
e570: 73 20 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65  s .** within the
e580: 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68   database. So th
e590: 61 74 20 74 68 65 79 20 61 70 70 65 61 72 20 61  at they appear a
e5a0: 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 61  s part of the ca
e5b0: 6c 6c 65 72 73 20 0a 2a 2a 20 74 72 61 6e 73 61  llers .** transa
e5c0: 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63  ction, these acc
e5d0: 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65  esses need to be
e5e0: 20 6d 61 64 65 20 76 69 61 20 74 68 65 20 73 61   made via the sa
e5f0: 6d 65 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20  me database .** 
e600: 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68  connection as th
e610: 61 74 20 75 73 65 64 20 74 6f 20 65 78 65 63 75  at used to execu
e620: 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e  te SQL operation
e630: 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c  s on the virtual
e640: 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c   table..**.** Al
e650: 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  l VTable objects
e660: 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
e670: 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62   to a single tab
e680: 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a  le in a shared.*
e690: 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  * database schem
e6a0: 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20  a are initially 
e6b0: 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b  stored in a link
e6c0: 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20  ed-list pointed 
e6d0: 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62  to by.** the Tab
e6e0: 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65  le.pVTable membe
e6f0: 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68  r variable of th
e700: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
e710: 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a  Table object..**
e720: 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33   When an sqlite3
e730: 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65 72 61  _prepare() opera
e740: 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64  tion is required
e750: 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76   to access the v
e760: 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c  irtual.** table,
e770: 20 69 74 20 73 65 61 72 63 68 65 73 20 74 68 65   it searches the
e780: 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56 54   list for the VT
e790: 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73  able that corres
e7a0: 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20  ponds to the.** 
e7b0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
e7c0: 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72  ion doing the pr
e7d0: 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f  eparing so as to
e7e0: 20 75 73 65 20 74 68 65 20 63 6f 72 72 65 63 74   use the correct
e7f0: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62  .** sqlite3_vtab
e800: 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20  * handle in the 
e810: 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a  compiled query..
e820: 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e  **.** When an in
e830: 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62  -memory Table ob
e840: 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65 64 20  ject is deleted 
e850: 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65  (for example whe
e860: 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  n the.** schema 
e870: 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65  is being reloade
e880: 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f  d for some reaso
e890: 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f  n), the VTable o
e8a0: 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 20 0a  bjects are not .
e8b0: 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74  ** deleted and t
e8c0: 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  he sqlite3_vtab*
e8d0: 20 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74   handles are not
e8e0: 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64   xDisconnect()ed
e8f0: 20 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79   .** immediately
e900: 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20  . Instead, they 
e910: 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74  are moved from t
e920: 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65  he Table.pVTable
e930: 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74   list to.** anot
e940: 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  her linked list 
e950: 68 65 61 64 65 64 20 62 79 20 74 68 65 20 73 71  headed by the sq
e960: 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63  lite3.pDisconnec
e970: 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a  t member of the.
e980: 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ** corresponding
e990: 20 73 71 6c 69 74 65 33 20 73 74 72 75 63 74 75   sqlite3 structu
e9a0: 72 65 2e 20 54 68 65 79 20 61 72 65 20 74 68 65  re. They are the
e9b0: 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f  n deleted/xDisco
e9c0: 6e 6e 65 63 74 65 64 20 0a 2a 2a 20 6e 65 78 74  nnected .** next
e9d0: 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65 6e   time a statemen
e9e0: 74 20 69 73 20 70 72 65 70 61 72 65 64 20 75 73  t is prepared us
e9f0: 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65 33  ing said sqlite3
ea00: 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65 0a  *. This is done.
ea10: 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64  ** to avoid dead
ea20: 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76 6f  lock issues invo
ea30: 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73  lving multiple s
ea40: 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74  qlite3.mutex mut
ea50: 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74  exes..** Refer t
ea60: 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65  o comments above
ea70: 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65   function sqlite
ea80: 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
ea90: 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c  ) for an.** expl
eaa0: 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77 68  anation as to wh
eab0: 79 20 69 74 20 69 73 20 73 61 66 65 20 74 6f 20  y it is safe to 
eac0: 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f 20  add an entry to 
ead0: 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  an sqlite3.pDisc
eae0: 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77  onnect.** list w
eaf0: 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74  ithout holding t
eb00: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
eb10: 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d   sqlite3.mutex m
eb20: 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  utex..**.** The 
eb30: 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63  memory for objec
eb40: 74 73 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ts of this type 
eb50: 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61  is always alloca
eb60: 74 65 64 20 62 79 20 0a 2a 2a 20 73 71 6c 69 74  ted by .** sqlit
eb70: 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73  e3DbMalloc(), us
eb80: 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ing the connecti
eb90: 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64  on handle stored
eba0: 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73   in VTable.db as
ebb0: 20 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61   .** the first a
ebc0: 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  rgument..*/.stru
ebd0: 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71  ct VTable {.  sq
ebe0: 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
ebf0: 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
ec00: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  ase connection a
ec10: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
ec20: 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d  his table */.  M
ec30: 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20  odule *pMod;    
ec40: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
ec50: 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d  ter to module im
ec60: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a  plementation */.
ec70: 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
ec80: 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50  pVtab;      /* P
ec90: 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69  ointer to vtab i
eca0: 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74  nstance */.  int
ecb0: 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
ecc0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
ecd0: 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
ece0: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 2a  this structure *
ecf0: 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69  /.  u8 bConstrai
ed00: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
ed10: 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61   True if constra
ed20: 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74  ints are support
ed30: 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76  ed */.  int iSav
ed40: 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20  epoint;         
ed50: 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68    /* Depth of th
ed60: 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63  e SAVEPOINT stac
ed70: 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70  k */.  VTable *p
ed80: 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
ed90: 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b   /* Next in link
eda0: 65 64 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f  ed list (see abo
edb0: 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ve) */.};../*.**
edc0: 20 45 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20   Each SQL table 
edd0: 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
ede0: 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 20 69  n memory by an i
edf0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 0a 2a  nstance of the.*
ee00: 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  * following stru
ee10: 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62  cture..**.** Tab
ee20: 6c 65 2e 7a 4e 61 6d 65 20 69 73 20 74 68 65 20  le.zName is the 
ee30: 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
ee40: 65 2e 20 20 54 68 65 20 63 61 73 65 20 6f 66 20  e.  The case of 
ee50: 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a 20  the original.** 
ee60: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
ee70: 74 65 6d 65 6e 74 20 69 73 20 73 74 6f 72 65 64  tement is stored
ee80: 2c 20 62 75 74 20 63 61 73 65 20 69 73 20 6e 6f  , but case is no
ee90: 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 66 6f  t significant fo
eea0: 72 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 73  r.** comparisons
eeb0: 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 6e 43  ..**.** Table.nC
eec0: 6f 6c 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  ol is the number
eed0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
eee0: 68 69 73 20 74 61 62 6c 65 2e 20 20 54 61 62 6c  his table.  Tabl
eef0: 65 2e 61 43 6f 6c 20 69 73 20 61 0a 2a 2a 20 70  e.aCol is a.** p
ef00: 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 61 72 72  ointer to an arr
ef10: 61 79 20 6f 66 20 43 6f 6c 75 6d 6e 20 73 74 72  ay of Column str
ef20: 75 63 74 75 72 65 73 2c 20 6f 6e 65 20 66 6f 72  uctures, one for
ef30: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a   each column..**
ef40: 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65  .** If the table
ef50: 20 68 61 73 20 61 6e 20 49 4e 54 45 47 45 52 20   has an INTEGER 
ef60: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65  PRIMARY KEY, the
ef70: 6e 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73  n Table.iPKey is
ef80: 20 74 68 65 20 69 6e 64 65 78 20 6f 66 0a 2a 2a   the index of.**
ef90: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 68 61 74   the column that
efa0: 20 69 73 20 74 68 61 74 20 6b 65 79 2e 20 20 20   is that key.   
efb0: 4f 74 68 65 72 77 69 73 65 20 54 61 62 6c 65 2e  Otherwise Table.
efc0: 69 50 4b 65 79 20 69 73 20 6e 65 67 61 74 69 76  iPKey is negativ
efd0: 65 2e 20 20 4e 6f 74 65 0a 2a 2a 20 74 68 61 74  e.  Note.** that
efe0: 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66   the datatype of
eff0: 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
f000: 20 6d 75 73 74 20 62 65 20 49 4e 54 45 47 45 52   must be INTEGER
f010: 20 66 6f 72 20 74 68 69 73 20 66 69 65 6c 64 20   for this field 
f020: 74 6f 0a 2a 2a 20 62 65 20 73 65 74 2e 20 20 41  to.** be set.  A
f030: 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  n INTEGER PRIMAR
f040: 59 20 4b 45 59 20 69 73 20 75 73 65 64 20 61 73  Y KEY is used as
f050: 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 65   the rowid for e
f060: 61 63 68 20 72 6f 77 20 6f 66 0a 2a 2a 20 74 68  ach row of.** th
f070: 65 20 74 61 62 6c 65 2e 20 20 49 66 20 61 20 74  e table.  If a t
f080: 61 62 6c 65 20 68 61 73 20 6e 6f 20 49 4e 54 45  able has no INTE
f090: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
f0a0: 20 74 68 65 6e 20 61 20 72 61 6e 64 6f 6d 20 72   then a random r
f0b0: 6f 77 69 64 0a 2a 2a 20 69 73 20 67 65 6e 65 72  owid.** is gener
f0c0: 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f  ated for each ro
f0d0: 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 20  w of the table. 
f0e0: 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65   TF_HasPrimaryKe
f0f0: 79 20 69 73 20 73 65 74 20 69 66 0a 2a 2a 20 74  y is set if.** t
f100: 68 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e 79  he table has any
f110: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 49 4e   PRIMARY KEY, IN
f120: 54 45 47 45 52 20 6f 72 20 6f 74 68 65 72 77 69  TEGER or otherwi
f130: 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e  se..**.** Table.
f140: 74 6e 75 6d 20 69 73 20 74 68 65 20 70 61 67 65  tnum is the page
f150: 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
f160: 72 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65 20  root BTree page 
f170: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 6e 20  of the table in 
f180: 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  the.** database 
f190: 66 69 6c 65 2e 20 20 49 66 20 54 61 62 6c 65 2e  file.  If Table.
f1a0: 69 44 62 20 69 73 20 74 68 65 20 69 6e 64 65 78  iDb is the index
f1b0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
f1c0: 20 74 61 62 6c 65 20 62 61 63 6b 65 6e 64 0a 2a   table backend.*
f1d0: 2a 20 69 6e 20 73 71 6c 69 74 65 2e 61 44 62 5b  * in sqlite.aDb[
f1e0: 5d 2e 20 20 30 20 69 73 20 66 6f 72 20 74 68 65  ].  0 is for the
f1f0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 61   main database a
f200: 6e 64 20 31 20 69 73 20 66 6f 72 20 74 68 65 20  nd 1 is for the 
f210: 66 69 6c 65 20 74 68 61 74 0a 2a 2a 20 68 6f 6c  file that.** hol
f220: 64 73 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ds temporary tab
f230: 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e  les and indices.
f240: 20 20 49 66 20 54 46 5f 45 70 68 65 6d 65 72 61    If TF_Ephemera
f250: 6c 20 69 73 20 73 65 74 0a 2a 2a 20 74 68 65 6e  l is set.** then
f260: 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 73 74   the table is st
f270: 6f 72 65 64 20 69 6e 20 61 20 66 69 6c 65 20 74  ored in a file t
f280: 68 61 74 20 69 73 20 61 75 74 6f 6d 61 74 69 63  hat is automatic
f290: 61 6c 6c 79 20 64 65 6c 65 74 65 64 0a 2a 2a 20  ally deleted.** 
f2a0: 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 63 75  when the VDBE cu
f2b0: 72 73 6f 72 20 74 6f 20 74 68 65 20 74 61 62 6c  rsor to the tabl
f2c0: 65 20 69 73 20 63 6c 6f 73 65 64 2e 20 20 49 6e  e is closed.  In
f2d0: 20 74 68 69 73 20 63 61 73 65 20 54 61 62 6c 65   this case Table
f2e0: 2e 74 6e 75 6d 20 0a 2a 2a 20 72 65 66 65 72 73  .tnum .** refers
f2f0: 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d   VDBE cursor num
f300: 62 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74  ber that holds t
f310: 68 65 20 74 61 62 6c 65 20 6f 70 65 6e 2c 20 6e  he table open, n
f320: 6f 74 20 74 6f 20 74 68 65 20 72 6f 6f 74 0a 2a  ot to the root.*
f330: 2a 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 20 20  * page number.  
f340: 54 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 73  Transient tables
f350: 20 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f 6c   are used to hol
f360: 64 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  d the results of
f370: 20 61 0a 2a 2a 20 73 75 62 2d 71 75 65 72 79 20   a.** sub-query 
f380: 74 68 61 74 20 61 70 70 65 61 72 73 20 69 6e 73  that appears ins
f390: 74 65 61 64 20 6f 66 20 61 20 72 65 61 6c 20 74  tead of a real t
f3a0: 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65  able name in the
f3b0: 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 0a 2a 2a   FROM clause .**
f3c0: 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
f3d0: 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  tement..*/.struc
f3e0: 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72  t Table {.  char
f3f0: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
f400: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
f410: 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f  table or view */
f420: 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b  .  Column *aCol;
f430: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72          /* Infor
f440: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
f450: 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e  h column */.  In
f460: 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20  dex *pIndex;    
f470: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51     /* List of SQ
f480: 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69  L indexes on thi
f490: 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65  s table. */.  Se
f4a0: 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
f4b0: 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74     /* NULL for t
f4c0: 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74  ables.  Points t
f4d0: 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20  o definition if 
f4e0: 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65  a view. */.  FKe
f4f0: 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20  y *pFKey;       
f500: 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74    /* Linked list
f510: 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20   of all foreign 
f520: 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74 61 62  keys in this tab
f530: 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43  le */.  char *zC
f540: 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20  olAff;       /* 
f550: 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20  String defining 
f560: 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  the affinity of 
f570: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23  each column */.#
f580: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
f590: 49 54 5f 43 48 45 43 4b 0a 20 20 45 78 70 72 4c  IT_CHECK.  ExprL
f5a0: 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20  ist *pCheck;    
f5b0: 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e  /* All CHECK con
f5c0: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 65 6e 64  straints */.#end
f5d0: 69 66 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77  if.  LogEst nRow
f5e0: 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74  LogEst;   /* Est
f5f0: 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74  imated rows in t
f600: 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69  able - from sqli
f610: 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a  te_stat1 table *
f620: 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20  /.  int tnum;   
f630: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74           /* Root
f640: 20 42 54 72 65 65 20 6e 6f 64 65 20 66 6f 72 20   BTree node for 
f650: 74 68 69 73 20 74 61 62 6c 65 20 28 73 65 65 20  this table (see 
f660: 6e 6f 74 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20  note above) */. 
f670: 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20   i16 iPKey;     
f680: 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20        /* If not 
f690: 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20 61 43  negative, use aC
f6a0: 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65  ol[iPKey] as the
f6b0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
f6c0: 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20    i16 nCol;     
f6d0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
f6e0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
f6f0: 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75  his table */.  u
f700: 31 36 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  16 nRef;        
f710: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
f720: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69   pointers to thi
f730: 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67  s Table */.  Log
f740: 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20 20  Est szTabRow;   
f750: 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73    /* Estimated s
f760: 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62 6c  ize of each tabl
f770: 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20 2a  e row in bytes *
f780: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
f790: 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a  ENABLE_COSTMULT.
f7a0: 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c    LogEst costMul
f7b0: 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d  t;     /* Cost m
f7c0: 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75 73  ultiplier for us
f7d0: 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ing this table *
f7e0: 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 74 61  /.#endif.  u8 ta
f7f0: 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  bFlags;         
f800: 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20  /* Mask of TF_* 
f810: 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 6b  values */.  u8 k
f820: 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  eyConf;         
f830: 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69   /* What to do i
f840: 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65  n case of unique
f850: 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e  ness conflict on
f860: 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65   iPKey */.#ifnde
f870: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c  f SQLITE_OMIT_AL
f880: 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61  TERTABLE.  int a
f890: 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20  ddColOffset;    
f8a0: 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45  /* Offset in CRE
f8b0: 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74  ATE TABLE stmt t
f8c0: 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75  o add a new colu
f8d0: 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  mn */.#endif.#if
f8e0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
f8f0: 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
f900: 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20  int nModuleArg; 
f910: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
f920: 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  f arguments to t
f930: 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63  he module */.  c
f940: 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72  har **azModuleAr
f950: 67 3b 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 61  g;  /* Text of a
f960: 6c 6c 20 6d 6f 64 75 6c 65 20 61 72 67 73 2e 20  ll module args. 
f970: 5b 30 5d 20 69 73 20 6d 6f 64 75 6c 65 20 6e 61  [0] is module na
f980: 6d 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  me */.  VTable *
f990: 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20  pVTable;     /* 
f9a0: 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f  List of VTable o
f9b0: 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69  bjects. */.#endi
f9c0: 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  f.  Trigger *pTr
f9d0: 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74  igger;   /* List
f9e0: 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74 6f   of triggers sto
f9f0: 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a  red in pSchema *
fa00: 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
fa10: 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65  ema;     /* Sche
fa20: 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ma that contains
fa30: 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
fa40: 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d   Table *pNextZom
fa50: 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e  bie;  /* Next on
fa60: 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62   the Parse.pZomb
fa70: 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b  ieTab list */.};
fa80: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
fa90: 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65  values for Table
faa0: 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2f 0a 23 64  .tabFlags..*/.#d
fab0: 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c  efine TF_Readonl
fac0: 79 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20  y        0x01   
fad0: 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79   /* Read-only sy
fae0: 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64  stem table */.#d
faf0: 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72  efine TF_Ephemer
fb00: 61 6c 20 20 20 20 20 20 20 30 78 30 32 20 20 20  al       0x02   
fb10: 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c   /* An ephemeral
fb20: 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
fb30: 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b  e TF_HasPrimaryK
fb40: 65 79 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20  ey   0x04    /* 
fb50: 54 61 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d  Table has a prim
fb60: 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  ary key */.#defi
fb70: 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d  ne TF_Autoincrem
fb80: 65 6e 74 20 20 20 30 78 30 38 20 20 20 20 2f 2a  ent   0x08    /*
fb90: 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   Integer primary
fba0: 20 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63 72   key is autoincr
fbb0: 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  ement */.#define
fbc0: 20 54 46 5f 56 69 72 74 75 61 6c 20 20 20 20 20   TF_Virtual     
fbd0: 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 49      0x10    /* I
fbe0: 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  s a virtual tabl
fbf0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
fc00: 57 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20 20  WithoutRowid    
fc10: 30 78 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f  0x20    /* No ro
fc20: 77 69 64 20 75 73 65 64 2e 20 50 52 49 4d 41 52  wid used. PRIMAR
fc30: 59 20 4b 45 59 20 69 73 20 74 68 65 20 6b 65 79  Y KEY is the key
fc40: 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74   */.../*.** Test
fc50: 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20   to see whether 
fc60: 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69  or not a table i
fc70: 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  s a virtual tabl
fc80: 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64  e.  This is.** d
fc90: 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73  one as a macro s
fca0: 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62  o that it will b
fcb0: 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20  e optimized out 
fcc0: 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20  when virtual.** 
fcd0: 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73  table support is
fce0: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68   omitted from th
fcf0: 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e  e build..*/.#ifn
fd00: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
fd10: 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20  VIRTUALTABLE.#  
fd20: 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c  define IsVirtual
fd30: 28 58 29 20 20 20 20 20 20 28 28 28 58 29 2d 3e  (X)      (((X)->
fd40: 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 56 69  tabFlags & TF_Vi
fd50: 72 74 75 61 6c 29 21 3d 30 29 0a 23 20 20 64 65  rtual)!=0).#  de
fd60: 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
fd70: 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f  umn(X) (((X)->co
fd80: 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47  lFlags & COLFLAG
fd90: 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c  _HIDDEN)!=0).#el
fda0: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  se.#  define IsV
fdb0: 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30  irtual(X)      0
fdc0: 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64  .#  define IsHid
fdd0: 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23  denColumn(X) 0.#
fde0: 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 65 73 20 74  endif../* Does t
fdf0: 68 65 20 74 61 62 6c 65 20 68 61 76 65 20 61 20  he table have a 
fe00: 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
fe10: 20 48 61 73 52 6f 77 69 64 28 58 29 20 20 20 20   HasRowid(X)    
fe20: 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
fe30: 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77   & TF_WithoutRow
fe40: 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45  id)==0)../*.** E
fe50: 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ach foreign key 
fe60: 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e  constraint is an
fe70: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
fe80: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
fe90: 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f  ture..**.** A fo
fea0: 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73  reign key is ass
feb0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77 6f  ociated with two
fec0: 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66   tables.  The "f
fed0: 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a  rom" table is.**
fee0: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
fef0: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46  contains the REF
ff00: 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74  ERENCES clause t
ff10: 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65 20  hat creates the 
ff20: 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20  foreign.** key. 
ff30: 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20   The "to" table 
ff40: 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  is the table tha
ff50: 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68  t is named in th
ff60: 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
ff70: 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72  use..** Consider
ff80: 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a   this example:.*
ff90: 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
ffa0: 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20  TABLE ex1(.**   
ffb0: 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50 52      a INTEGER PR
ffc0: 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20  IMARY KEY,.**   
ffd0: 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f      b INTEGER CO
ffe0: 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46  NSTRAINT fk1 REF
fff0: 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a  ERENCES ex2(x).*
10000 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46  *     );.**.** F
10010 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22  or foreign key "
10020 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74  fk1", the from-t
10030 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e  able is "ex1" an
10040 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69  d the to-table i
10050 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69  s "ex2"..** Equi
10060 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a  valent names:.**
10070 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62  .**     from-tab
10080 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c  le == child-tabl
10090 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61  e.**       to-ta
100a0 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61  ble == parent-ta
100b0 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52  ble.**.** Each R
100c0 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
100d0 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e   generates an in
100e0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
100f0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
10100 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74  e.** which is at
10110 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 66 72  tached to the fr
10120 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74  om-table.  The t
10130 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74  o-table need not
10140 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74   exist when.** t
10150 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73  he from-table is
10160 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20 65   created.  The e
10170 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20  xistence of the 
10180 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20  to-table is not 
10190 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  checked..**.** T
101a0 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70  he list of all p
101b0 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64  arents for child
101c0 20 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64   Table X is held
101d0 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a   at X.pFKey..**.
101e0 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c  ** A list of all
101f0 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20   children for a 
10200 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77  table named Z (w
10210 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65  hich might not e
10220 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73  ven exist).** is
10230 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e   held in Schema.
10240 66 6b 65 79 48 61 73 68 20 77 69 74 68 20 61 20  fkeyHash with a 
10250 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a  hash key of Z..*
10260 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a  /.struct FKey {.
10270 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20    Table *pFrom; 
10280 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e      /* Table con
10290 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45  taining the REFE
102a0 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61  RENCES clause (a
102b0 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20  ka: Child) */.  
102c0 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b  FKey *pNextFrom;
102d0 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77    /* Next FKey w
102e0 69 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20  ith the same in 
102f0 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65  pFrom. Next pare
10300 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20  nt of pFrom */. 
10310 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20   char *zTo;     
10320 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61     /* Name of ta
10330 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65 79  ble that the key
10340 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a   points to (aka:
10350 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b   Parent) */.  FK
10360 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20  ey *pNextTo;    
10370 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68 65  /* Next with the
10380 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20   same zTo. Next 
10390 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f  child of zTo. */
103a0 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f  .  FKey *pPrevTo
103b0 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73  ;    /* Previous
103c0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a   with the same z
103d0 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c  To */.  int nCol
103e0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
103f0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
10400 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20  n this key */.  
10410 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32  /* EV: R-30323-2
10420 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44  1917 */.  u8 isD
10430 65 66 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f  eferred;       /
10440 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
10450 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73  aint checking is
10460 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43   deferred till C
10470 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41  OMMIT */.  u8 aA
10480 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20  ction[2];       
10490 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e   /* ON DELETE an
104a0 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69  d ON UPDATE acti
104b0 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ons, respectivel
104c0 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  y */.  Trigger *
104d0 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20  apTrigger[2];/* 
104e0 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41 63  Triggers for aAc
104f0 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a  tion[] actions *
10500 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d  /.  struct sColM
10510 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70  ap {      /* Map
10520 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  ping of columns 
10530 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75  in pFrom to colu
10540 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20  mns in zTo */.  
10550 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20    int iFrom;    
10560 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
10570 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46   of column in pF
10580 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  rom */.    char 
10590 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  *zCol;          
105a0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75   /* Name of colu
105b0 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e  mn in zTo.  If N
105c0 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20  ULL use PRIMARY 
105d0 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b  KEY */.  } aCol[
105e0 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  1];            /
105f0 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
10600 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c  each of nCol col
10610 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  umns */.};../*.*
10620 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74  * SQLite support
10630 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74  s many different
10640 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65   ways to resolve
10650 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a   a constraint.**
10660 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43   error.  ROLLBAC
10670 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  K processing mea
10680 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72  ns that a constr
10690 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a  aint violation.*
106a0 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70 65  * causes the ope
106b0 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
106c0 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f  s to fail and fo
106d0 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  r the current tr
106e0 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20  ansaction.** to 
106f0 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  be rolled back. 
10700 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e   ABORT processin
10710 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72  g means the oper
10720 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73  ation in process
10730 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e  .** fails and an
10740 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20  y prior changes 
10750 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70  from that one op
10760 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b  eration are back
10770 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74  ed out,.** but t
10780 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
10790 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63  s not rolled bac
107a0 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73  k.  FAIL process
107b0 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a  ing means that.*
107c0 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  * the operation 
107d0 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70  in progress stop
107e0 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e  s and returns an
107f0 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75   error code.  Bu
10800 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67  t prior.** chang
10810 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73 61  es due to the sa
10820 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  me operation are
10830 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20   not backed out 
10840 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a  and no rollback.
10850 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f  ** occurs.  IGNO
10860 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  RE means that th
10870 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77  e particular row
10880 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65   that caused the
10890 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
108a0 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65  rror is not inse
108b0 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e  rted or updated.
108c0 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
108d0 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
108e0 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e  ror.** is return
108f0 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61  ed.  REPLACE mea
10900 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73 74  ns that preexist
10910 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f 77  ing database row
10920 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a  s that caused.**
10930 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
10940 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61  aint violation a
10950 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68  re removed so th
10960 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72  at the new inser
10970 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63  t or.** update c
10980 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f  an proceed.  Pro
10990 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65  cessing continue
109a0 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69  s and no error i
109b0 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a  s reported..**.*
109c0 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e  * RESTRICT, SETN
109d0 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45  ULL, and CASCADE
109e0 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f   actions apply o
109f0 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b  nly to foreign k
10a00 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54  eys..** RESTRICT
10a10 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
10a20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49  ABORT for IMMEDI
10a30 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ATE foreign keys
10a40 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65   and the.** same
10a50 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72   as ROLLBACK for
10a60 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20   DEFERRED keys. 
10a70 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74   SETNULL means t
10a80 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a  hat the foreign.
10a90 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f  ** key is set to
10aa0 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20   NULL.  CASCADE 
10ab0 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c  means that a DEL
10ac0 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66  ETE or UPDATE of
10ad0 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63   the.** referenc
10ae0 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20  ed table row is 
10af0 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20  propagated into 
10b00 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c  the row that hol
10b10 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67  ds the.** foreig
10b20 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68  n key..** .** Th
10b30 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62  e following symb
10b40 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20  olic values are 
10b50 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77  used to record w
10b60 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20  hich type.** of 
10b70 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a  action to take..
10b80 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f  */.#define OE_No
10b90 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68  ne     0   /* Th
10ba0 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72  ere is no constr
10bb0 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f  aint to check */
10bc0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c  .#define OE_Roll
10bd0 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c  back 1   /* Fail
10be0 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61   the operation a
10bf0 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  nd rollback the 
10c00 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23  transaction */.#
10c10 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20  define OE_Abort 
10c20 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f     2   /* Back o
10c30 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64  ut changes but d
10c40 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72  o no rollback tr
10c50 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
10c60 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20  fine OE_Fail    
10c70 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65   3   /* Stop the
10c80 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c   operation but l
10c90 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63  eave all prior c
10ca0 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
10cb0 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20  e OE_Ignore   4 
10cc0 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20    /* Ignore the 
10cd0 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f  error. Do not do
10ce0 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55   the INSERT or U
10cf0 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
10d00 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20   OE_Replace  5  
10d10 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74   /* Delete exist
10d20 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ing record, then
10d30 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50   do INSERT or UP
10d40 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65  DATE */..#define
10d50 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20 20   OE_Restrict 6  
10d60 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72   /* OE_Abort for
10d70 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52   IMMEDIATE, OE_R
10d80 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45  ollback for DEFE
10d90 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20  RRED */.#define 
10da0 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20  OE_SetNull  7   
10db0 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
10dc0 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
10dd0 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
10de0 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20  OE_SetDflt  8   
10df0 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
10e00 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
10e10 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23  its default */.#
10e20 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64  define OE_Cascad
10e30 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64  e  9   /* Cascad
10e40 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f  e the changes */
10e50 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66  ..#define OE_Def
10e60 61 75 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f 20  ault  10  /* Do 
10e70 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66  whatever the def
10e80 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a  ault action is *
10e90 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  /.../*.** An ins
10ea0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
10eb0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
10ec0 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68   is passed as th
10ed0 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d  e first.** argum
10ee0 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64  ent to sqlite3Vd
10ef0 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64  beKeyCompare and
10f00 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74   is used to cont
10f10 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70  rol the .** comp
10f20 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77  arison of the tw
10f30 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a  o index keys..**
10f40 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53  .** Note that aS
10f50 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61  ortOrder[] and a
10f60 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65  Coll[] have nFie
10f70 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65  ld+1 slots.  The
10f80 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64  re.** are nField
10f90 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63   slots for the c
10fa0 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64  olumns of an ind
10fb0 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72  ex then one extr
10fc0 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68  a slot.** for th
10fd0 65 20 72 6f 77 69 64 20 61 74 20 74 68 65 20 65  e rowid at the e
10fe0 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65  nd..*/.struct Ke
10ff0 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52  yInfo {.  u32 nR
11000 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ef;           /*
11010 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72   Number of refer
11020 65 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65  ences to this Ke
11030 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a  yInfo object */.
11040 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
11050 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
11060 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20  coding - one of 
11070 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20  the SQLITE_UTF* 
11080 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20  values */.  u16 
11090 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
110a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79  /* Number of key
110b0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
110c0 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e  index */.  u16 n
110d0 58 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f  XField;        /
110e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
110f0 6d 6e 73 20 62 65 79 6f 6e 64 20 74 68 65 20 6b  mns beyond the k
11100 65 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  ey columns */.  
11110 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
11120 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
11130 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a  ase connection *
11140 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64  /.  u8 *aSortOrd
11150 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20  er;     /* Sort 
11160 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68 20 63  order for each c
11170 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c  olumn. */.  Coll
11180 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20  Seq *aColl[1];  
11190 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
111a0 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74  uence for each t
111b0 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a  erm of the key *
111c0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
111d0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
111e0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
111f0 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61  re holds informa
11200 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a 2a 20  tion about a.** 
11210 73 69 6e 67 6c 65 20 69 6e 64 65 78 20 72 65 63  single index rec
11220 6f 72 64 20 74 68 61 74 20 68 61 73 20 61 6c 72  ord that has alr
11230 65 61 64 79 20 62 65 65 6e 20 70 61 72 73 65 64  eady been parsed
11240 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69   out into indivi
11250 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a  dual.** values..
11260 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69  **.** A record i
11270 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74  s an object that
11280 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   contains one or
11290 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20   more fields of 
112a0 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73  data..** Records
112b0 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f   are used to sto
112c0 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  re the content o
112d0 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e  f a table row an
112e0 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68  d to store.** th
112f0 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65  e key of an inde
11300 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64  x.  A blob encod
11310 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20  ing of a record 
11320 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a  is created by.**
11330 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f   the OP_MakeReco
11340 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65  rd opcode of the
11350 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73   VDBE and is dis
11360 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65  assembled by the
11370 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  .** OP_Column op
11380 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  code..**.** This
11390 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
113a0 20 61 20 72 65 63 6f 72 64 20 74 68 61 74 20 68   a record that h
113b0 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  as already been 
113c0 64 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a 2a 20  disassembled.** 
113d0 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74 69 74  into its constit
113e0 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a  uent fields..**.
113f0 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20 72 32  ** The r1 and r2
11400 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65   member variable
11410 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20  s are only used 
11420 62 79 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 64  by the optimized
11430 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 66   comparison.** f
11440 75 6e 63 74 69 6f 6e 73 20 76 64 62 65 52 65 63  unctions vdbeRec
11450 6f 72 64 43 6f 6d 70 61 72 65 49 6e 74 28 29 20  ordCompareInt() 
11460 61 6e 64 20 76 64 62 65 52 65 63 6f 72 64 43 6f  and vdbeRecordCo
11470 6d 70 61 72 65 53 74 72 69 6e 67 28 29 2e 0a 2a  mpareString()..*
11480 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65  /.struct Unpacke
11490 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49  dRecord {.  KeyI
114a0 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20  nfo *pKeyInfo;  
114b0 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64  /* Collation and
114c0 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f   sort-order info
114d0 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 31 36  rmation */.  u16
114e0 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
114f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
11500 74 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d  tries in apMem[]
11510 20 2a 2f 0a 20 20 69 38 20 64 65 66 61 75 6c 74   */.  i8 default
11520 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d  _rc;      /* Com
11530 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 69  parison result i
11540 66 20 6b 65 79 73 20 61 72 65 20 65 71 75 61 6c  f keys are equal
11550 20 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f 64 65   */.  u8 errCode
11560 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72  ;         /* Err
11570 6f 72 20 64 65 74 65 63 74 65 64 20 62 79 20 78  or detected by x
11580 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 20 28 43  RecordCompare (C
11590 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29  ORRUPT or NOMEM)
115a0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b   */.  Mem *aMem;
115b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
115c0 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 31 3b  ues */.  int r1;
115d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
115e0 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
115f0 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a  if (lhs > rhs) *
11600 2f 0a 20 20 69 6e 74 20 72 32 3b 20 20 20 20 20  /.  int r2;     
11610 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
11620 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 72   to return if (r
11630 68 73 20 3c 20 6c 68 73 29 20 2a 2f 0a 7d 3b 0a  hs < lhs) */.};.
11640 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
11650 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73   index is repres
11660 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
11670 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
11680 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
11690 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
116a0 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20  .** The columns 
116b0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
116c0 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65  t are to be inde
116d0 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65  xed are describe
116e0 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f  d.** by the aiCo
116f0 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20  lumn[] field of 
11700 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
11710 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75   For example, su
11720 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65  ppose.** we have
11730 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
11740 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a  able and index:.
11750 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
11760 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e   TABLE Ex1(c1 in
11770 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65  t, c2 int, c3 te
11780 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41  xt);.**     CREA
11790 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20  TE INDEX Ex2 ON 
117a0 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a  Ex1(c3,c1);.**.*
117b0 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73  * In the Table s
117c0 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
117d0 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33  ing Ex1, nCol==3
117e0 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61   because there a
117f0 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75  re.** three colu
11800 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
11810 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20  .  In the Index 
11820 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
11830 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f  bing.** Ex2, nCo
11840 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20  lumn==2 since 2 
11850 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73  of the 3 columns
11860 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65   of Ex1 are inde
11870 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75  xed..** The valu
11880 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73  e of aiColumn is
11890 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75   {2, 0}.  aiColu
118a0 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65  mn[0]==2 because
118b0 20 74 68 65 20 0a 2a 2a 20 66 69 72 73 74 20 63   the .** first c
118c0 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65  olumn to be inde
118d0 78 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20  xed (c3) has an 
118e0 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78  index of 2 in Ex
118f0 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65  1.aCol[]..** The
11900 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74   second column t
11910 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31  o be indexed (c1
11920 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  ) has an index o
11930 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43  f 0 in.** Ex1.aC
11940 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e  ol[], hence Ex2.
11950 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a  aiColumn[1]==0..
11960 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e  **.** The Index.
11970 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65  onError field de
11980 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72  termines whether
11990 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65   or not the inde
119a0 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d  xed columns.** m
119b0 75 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e  ust be unique an
119c0 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20  d what to do if 
119d0 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57  they are not.  W
119e0 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  hen Index.onErro
119f0 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74  r=OE_None,.** it
11a00 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e   means this is n
11a10 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  ot a unique inde
11a20 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74  x.  Otherwise it
11a30 20 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64   is a unique ind
11a40 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61  ex.** and the va
11a50 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45  lue of Index.onE
11a60 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68  rror indicate th
11a70 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74  e which conflict
11a80 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20   resolution .** 
11a90 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70  algorithm to emp
11aa0 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20  loy whenever an 
11ab0 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
11ac0 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d  to insert a non-
11ad0 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e  unique.** elemen
11ae0 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64  t..*/.struct Ind
11af0 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  ex {.  char *zNa
11b00 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
11b10 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
11b20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a  index */.  i16 *
11b30 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20  aiColumn;       
11b40 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c      /* Which col
11b50 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62 79  umns are used by
11b60 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73   this index.  1s
11b70 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45  t is 0 */.  LogE
11b80 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b  st *aiRowLogEst;
11b90 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41       /* From ANA
11ba0 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20  LYZE: Est. rows 
11bb0 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63 68  selected by each
11bc0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62   column */.  Tab
11bd0 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20  le *pTable;     
11be0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c        /* The SQL
11bf0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64   table being ind
11c00 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  exed */.  char *
11c10 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20  zColAff;        
11c20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
11c30 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
11c40 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
11c50 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e  n */.  Index *pN
11c60 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
11c70 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65  /* The next inde
11c80 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  x associated wit
11c90 68 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65  h the same table
11ca0 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
11cb0 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f  chema;         /
11cc0 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
11cd0 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a  ing this index *
11ce0 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64  /.  u8 *aSortOrd
11cf0 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
11d00 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a  for each column:
11d10 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c   True==DESC, Fal
11d20 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61  se==ASC */.  cha
11d30 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20  r **azColl;     
11d40 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f        /* Array o
11d50 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  f collation sequ
11d60 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69  ence names for i
11d70 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ndex */.  Expr *
11d80 70 50 61 72 74 49 64 78 57 68 65 72 65 3b 20 20  pPartIdxWhere;  
11d90 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75     /* WHERE clau
11da0 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69  se for partial i
11db0 6e 64 69 63 65 73 20 2a 2f 0a 20 20 4b 65 79 49  ndices */.  KeyI
11dc0 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20  nfo *pKeyInfo;  
11dd0 20 20 20 20 20 2f 2a 20 41 20 4b 65 79 49 6e 66       /* A KeyInf
11de0 6f 20 6f 62 6a 65 63 74 20 73 75 69 74 61 62 6c  o object suitabl
11df0 65 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78  e for this index
11e00 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
11e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11e20 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69  * DB Page contai
11e30 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69  ning root of thi
11e40 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67  s index */.  Log
11e50 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20  Est szIdxRow;   
11e60 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
11e70 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20 73  ed average row s
11e80 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ize in bytes */.
11e90 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20    u16 nKeyCol;  
11ea0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
11eb0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
11ec0 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20  forming the key 
11ed0 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e  */.  u16 nColumn
11ee0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
11ef0 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
11f00 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  ns stored in the
11f10 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f   index */.  u8 o
11f20 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20  nError;         
11f30 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74       /* OE_Abort
11f40 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f  , OE_Ignore, OE_
11f50 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e  Replace, or OE_N
11f60 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  one */.  unsigne
11f70 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20  d idxType:2;    
11f80 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20    /* 1==UNIQUE, 
11f90 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  2==PRIMARY KEY, 
11fa0 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20  0==CREATE INDEX 
11fb0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55  */.  unsigned bU
11fc0 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a  nordered:1;   /*
11fd0 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78 20   Use this index 
11fe0 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65  for == or IN que
11ff0 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75  ries only */.  u
12000 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e  nsigned uniqNotN
12010 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  ull:1;  /* True 
12020 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f  if UNIQUE and NO
12030 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63  T NULL for all c
12040 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69  olumns */.  unsi
12050 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31  gned isResized:1
12060 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
12070 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63  resizeIndexObjec
12080 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c  t() has been cal
12090 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  led */.  unsigne
120a0 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20  d isCovering:1; 
120b0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69    /* True if thi
120c0 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20  s is a covering 
120d0 69 6e 64 65 78 20 2a 2f 0a 23 69 66 64 65 66 20  index */.#ifdef 
120e0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
120f0 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69  AT3_OR_STAT4.  i
12100 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20  nt nSample;     
12110 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
12120 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
12130 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20   aSample[] */.  
12140 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20  int nSampleCol; 
12150 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
12160 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e   of IndexSample.
12170 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e  anEq[] and so on
12180 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
12190 41 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f  AvgEq;         /
121a0 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61  * Average nEq va
121b0 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f  lues for keys no
121c0 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a  t in aSample */.
121d0 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61    IndexSample *a
121e0 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61  Sample;    /* Sa
121f0 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66  mples of the lef
12200 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20  t-most key */.  
12210 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73  tRowcnt *aiRowEs
12220 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d  t;       /* Non-
12230 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61 74  logarithmic stat
12240 31 20 64 61 74 61 20 66 6f 72 20 74 68 69 73 20  1 data for this 
12250 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a  table */.#endif.
12260 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
12270 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49 6e 64  d values for Ind
12280 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64  ex.idxType.*/.#d
12290 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58  efine SQLITE_IDX
122a0 54 59 50 45 5f 41 50 50 44 45 46 20 20 20 20 20  TYPE_APPDEF     
122b0 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65 64 20   0   /* Created 
122c0 75 73 69 6e 67 20 43 52 45 41 54 45 20 49 4e 44  using CREATE IND
122d0 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  EX */.#define SQ
122e0 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55 4e 49  LITE_IDXTYPE_UNI
122f0 51 55 45 20 20 20 20 20 20 31 20 20 20 2f 2a 20  QUE      1   /* 
12300 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49  Implements a UNI
12310 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  QUE constraint *
12320 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
12330 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59  _IDXTYPE_PRIMARY
12340 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73 20 74  KEY  2   /* Is t
12350 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66  he PRIMARY KEY f
12360 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  or the table */.
12370 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  ./* Return true 
12380 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20  if index X is a 
12390 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64 65  PRIMARY KEY inde
123a0 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50  x */.#define IsP
123b0 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 58  rimaryKeyIndex(X
123c0 29 20 20 28 28 58 29 2d 3e 69 64 78 54 79 70 65  )  ((X)->idxType
123d0 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  ==SQLITE_IDXTYPE
123e0 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a  _PRIMARYKEY)../*
123f0 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
12400 69 6e 64 65 78 20 58 20 69 73 20 61 20 55 4e 49  index X is a UNI
12410 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  QUE index */.#de
12420 66 69 6e 65 20 49 73 55 6e 69 71 75 65 49 6e 64  fine IsUniqueInd
12430 65 78 28 58 29 20 20 20 20 20 20 28 28 58 29 2d  ex(X)      ((X)-
12440 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e  >onError!=OE_Non
12450 65 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73  e)../*.** Each s
12460 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20  ample stored in 
12470 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  the sqlite_stat3
12480 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73   table is repres
12490 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
124a0 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75  .** using a stru
124b0 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74 79  cture of this ty
124c0 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e  pe.  See documen
124d0 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f  tation at the to
124e0 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c  p of the.** anal
124f0 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c  yze.c source fil
12500 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
12510 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
12520 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d  .struct IndexSam
12530 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b  ple {.  void *p;
12540 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
12550 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20  nter to sampled 
12560 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
12570 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
12580 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20   Size of record 
12590 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52  in bytes */.  tR
125a0 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20  owcnt *anEq;    
125b0 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
125c0 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68 65  f rows where the
125d0 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69 73   key equals this
125e0 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f   sample */.  tRo
125f0 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f  wcnt *anLt;    /
12600 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66  * Est. number of
12610 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20   rows where key 
12620 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  is less than thi
12630 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
12640 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20  owcnt *anDLt;   
12650 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
12660 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20  f distinct keys 
12670 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73  less than this s
12680 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ample */.};../*.
12690 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f  ** Each token co
126a0 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65 20  ming out of the 
126b0 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73 74  lexer is an inst
126c0 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20  ance of.** this 
126d0 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b 65  structure.  Toke
126e0 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65 64  ns are also used
126f0 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 65   as part of an e
12700 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  xpression..**.**
12710 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a   Note if Token.z
12720 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64  ==0 then Token.d
12730 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61  yn and Token.n a
12740 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e 64  re undefined and
12750 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20  .** may contain 
12760 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20  random values.  
12770 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20  Do not make any 
12780 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75  assumptions abou
12790 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61  t Token.dyn.** a
127a0 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20  nd Token.n when 
127b0 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73  Token.z==0..*/.s
127c0 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20  truct Token {.  
127d0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20  const char *z;  
127e0 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68     /* Text of th
127f0 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55  e token.  Not NU
12800 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a  LL-terminated! *
12810 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  /.  unsigned int
12820 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72   n;    /* Number
12830 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69   of characters i
12840 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a  n this token */.
12850 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
12860 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
12870 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
12880 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65   information nee
12890 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a  ded to generate.
128a0 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45  ** code for a SE
128b0 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69  LECT that contai
128c0 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ns aggregate fun
128d0 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  ctions..**.** If
128e0 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47   Expr.op==TK_AGG
128f0 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47  _COLUMN or TK_AG
12900 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20  G_FUNCTION then 
12910 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73  Expr.pAggInfo is
12920 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f   a.** pointer to
12930 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
12940 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75    The Expr.iColu
12950 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65 20  mn field is the 
12960 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49  index in.** AggI
12970 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67  nfo.aCol[] or Ag
12980 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66  gInfo.aFunc[] of
12990 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65   information nee
129a0 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a  ded to generate.
129b0 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74  ** code for that
129c0 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67   node..**.** Agg
129d0 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e  Info.pGroupBy an
129e0 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e  d AggInfo.aFunc.
129f0 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66  pExpr point to f
12a00 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65  ields within the
12a10 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c  .** original Sel
12a20 65 63 74 20 73 74 72 75 63 74 75 72 65 20 74 68  ect structure th
12a30 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65  at describes the
12a40 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
12a50 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65  t.  These.** fie
12a60 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20  lds do not need 
12a70 74 6f 20 62 65 20 66 72 65 65 64 20 77 68 65 6e  to be freed when
12a80 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
12a90 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74  e AggInfo struct
12aa0 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ure..*/.struct A
12ab0 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69  ggInfo {.  u8 di
12ac0 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20  rectMode;       
12ad0 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e     /* Direct ren
12ae0 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e  dering mode mean
12af0 73 20 74 61 6b 65 20 64 61 74 61 20 64 69 72 65  s take data dire
12b00 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20  ctly.           
12b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
12b20 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61  * from source ta
12b30 62 6c 65 73 20 72 61 74 68 65 72 20 74 68 61 6e  bles rather than
12b40 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f   from accumulato
12b50 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f  rs */.  u8 useSo
12b60 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20  rtingIdx;       
12b70 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64  /* In direct mod
12b80 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68 65  e, reference the
12b90 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72   sorting index r
12ba0 61 74 68 65 72 0a 20 20 20 20 20 20 20 20 20 20  ather.          
12bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bc0 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72  ** than the sour
12bd0 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  ce table */.  in
12be0 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  t sortingIdx;   
12bf0 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
12c00 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f  number of the so
12c10 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
12c20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50   int sortingIdxP
12c30 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73  Tab;     /* Curs
12c40 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65  or number of pse
12c50 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69  udo-table */.  i
12c60 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d  nt nSortingColum
12c70 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  n;     /* Number
12c80 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
12c90 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
12ca0 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c   */.  int mnReg,
12cb0 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f 2a   mxReg;       /*
12cc0 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73 74   Range of regist
12cd0 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f  ers allocated fo
12ce0 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63  r aCol and aFunc
12cf0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
12d00 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a  pGroupBy;     /*
12d10 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c   The group by cl
12d20 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74  ause */.  struct
12d30 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20   AggInfo_col {  
12d40 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f    /* For each co
12d50 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75  lumn used in sou
12d60 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20  rce tables */.  
12d70 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
12d80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f             /* So
12d90 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
12da0 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
12db0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
12dc0 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
12dd0 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
12de0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75  */.    int iColu
12df0 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  mn;             
12e00 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* Column number
12e10 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72   within the sour
12e20 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
12e30 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d  int iSorterColum
12e40 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75  n;       /* Colu
12e50 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65  mn number in the
12e60 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
12e70 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20  /.    int iMem; 
12e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12e90 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  * Memory locatio
12ea0 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61  n that acts as a
12eb0 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20  ccumulator */.  
12ec0 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
12ed0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
12ee0 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65  e original expre
12ef0 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43  ssion */.  } *aC
12f00 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d  ol;.  int nColum
12f10 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
12f20 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20   Number of used 
12f30 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b  entries in aCol[
12f40 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75  ] */.  int nAccu
12f50 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f  mulator;       /
12f60 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
12f70 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74 68  mns that show th
12f80 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74  rough to the out
12f90 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20  put..           
12fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
12fb0 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c  * Additional col
12fc0 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e  umns are used on
12fd0 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65 72 73  ly as parameters
12fe0 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20   to.            
12ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
13000 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
13010 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  ions */.  struct
13020 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20   AggInfo_func { 
13030 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67    /* For each ag
13040 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
13050 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45   */.    Expr *pE
13060 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
13070 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65   /* Expression e
13080 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63  ncoding the func
13090 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63  tion */.    Func
130a0 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20  Def *pFunc;     
130b0 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72       /* The aggr
130c0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69  egate function i
130d0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
130e0 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20  .    int iMem;  
130f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13100 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   Memory location
13110 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63   that acts as ac
13120 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20  cumulator */.   
13130 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20   int iDistinct; 
13140 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68            /* Eph
13150 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65  emeral table use
13160 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53  d to enforce DIS
13170 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46  TINCT */.  } *aF
13180 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63  unc;.  int nFunc
13190 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
131a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
131b0 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a  ies in aFunc[] *
131c0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
131d0 64 61 74 61 74 79 70 65 20 79 6e 56 61 72 20 69  datatype ynVar i
131e0 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67  s a signed integ
131f0 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69  er, either 16-bi
13200 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20  t or 32-bit..** 
13210 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36  Usually it is 16
13220 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66 20 53  -bits.  But if S
13230 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
13240 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65  LE_NUMBER is gre
13250 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37  ater.** than 327
13260 36 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61  67 we have to ma
13270 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31  ke it 32-bit.  1
13280 36 2d 62 69 74 20 69 73 20 70 72 65 66 65 72 72  6-bit is preferr
13290 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74  ed because.** it
132a0 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72   uses less memor
132b0 79 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62  y in the Expr ob
132c0 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20 61  ject, which is a
132d0 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72   big memory user
132e0 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77  .** in systems w
132f0 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70  ith lots of prep
13300 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e  ared statements.
13310 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63    And few applic
13320 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d  ations.** need m
13330 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31  ore than about 1
13340 30 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65  0 or 20 variable
13350 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74  s.  But some ext
13360 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a  reme users want.
13370 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70 61  ** to have prepa
13380 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77  red statements w
13390 69 74 68 20 6f 76 65 72 20 33 32 37 36 37 20 76  ith over 32767 v
133a0 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f  ariables, and fo
133b0 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70  r them.** the op
133c0 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c  tion is availabl
133d0 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  e (at compile-ti
133e0 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  me)..*/.#if SQLI
133f0 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
13400 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79  NUMBER<=32767.ty
13410 70 65 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b  pedef i16 ynVar;
13420 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69  .#else.typedef i
13430 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66  nt ynVar;.#endif
13440 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64  ../*.** Each nod
13450 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69  e of an expressi
13460 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65 20  on in the parse 
13470 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61  tree is an insta
13480 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  nce.** of this s
13490 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
134a0 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f  Expr.op is the o
134b0 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67  pcode. The integ
134c0 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20  er parser token 
134d0 63 6f 64 65 73 20 61 72 65 20 72 65 75 73 65 64  codes are reused
134e0 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68  .** as opcodes h
134f0 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65  ere. For example
13500 2c 20 74 68 65 20 70 61 72 73 65 72 20 64 65 66  , the parser def
13510 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65  ines TK_GE to be
13520 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63   an integer.** c
13530 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67  ode representing
13540 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74   the ">=" operat
13550 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e  or. This same in
13560 74 65 67 65 72 20 63 6f 64 65 20 69 73 20 72 65  teger code is re
13570 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65  used.** to repre
13580 73 65 6e 74 20 74 68 65 20 67 72 65 61 74 65 72  sent the greater
13590 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74  -than-or-equal-t
135a0 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68  o operator in th
135b0 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20  e expression.** 
135c0 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tree..**.** If t
135d0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
135e0 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20   an SQL literal 
135f0 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f  (TK_INTEGER, TK_
13600 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20  FLOAT, TK_BLOB, 
13610 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47  .** or TK_STRING
13620 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
13630 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  en contains the 
13640 74 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20  text of the SQL 
13650 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74  literal. If.** t
13660 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
13670 20 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f   a variable (TK_
13680 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20  VARIABLE), then 
13690 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
136a0 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61 72 69  ins the .** vari
136b0 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c  able name. Final
136c0 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70 72 65  ly, if the expre
136d0 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
136e0 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e  function (TK_FUN
136f0 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20  CTION),.** then 
13700 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
13710 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ins the name of 
13720 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a  the function..**
13730 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20  .** Expr.pRight 
13740 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61  and Expr.pLeft a
13750 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20  re the left and 
13760 72 69 67 68 74 20 73 75 62 65 78 70 72 65 73 73  right subexpress
13770 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e  ions of a.** bin
13780 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69  ary operator. Ei
13790 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79  ther or both may
137a0 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   be NULL..**.** 
137b0 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20  Expr.x.pList is 
137c0 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65  a list of argume
137d0 6e 74 73 20 69 66 20 74 68 65 20 65 78 70 72 65  nts if the expre
137e0 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
137f0 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43  function,.** a C
13800 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f  ASE expression o
13810 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69  r an IN expressi
13820 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  on of the form "
13830 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c  <lhs> IN (<y>, <
13840 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72  z>...)"..** Expr
13850 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73  .x.pSelect is us
13860 65 64 20 69 66 20 74 68 65 20 65 78 70 72 65 73  ed if the expres
13870 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65  sion is a sub-se
13880 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65  lect or an expre
13890 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ssion of.** the 
138a0 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28  form "<lhs> IN (
138b0 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66  SELECT ...)". If
138c0 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63   the EP_xIsSelec
138d0 74 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20  t bit is set in 
138e0 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67  the.** Expr.flag
138f0 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70  s mask, then Exp
13900 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76  r.x.pSelect is v
13910 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  alid. Otherwise,
13920 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73   Expr.x.pList is
13930 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a   .** valid..**.*
13940 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  * An expression 
13950 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f  of the form ID o
13960 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20 74  r ID.ID refers t
13970 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20  o a column in a 
13980 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75  table..** For su
13990 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20  ch expressions, 
139a0 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74  Expr.op is set t
139b0 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  o TK_COLUMN and 
139c0 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a  Expr.iTable is.*
139d0 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63 75  * the integer cu
139e0 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61  rsor number of a
139f0 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69   VDBE cursor poi
13a00 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61  nting to that ta
13a10 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e  ble and.** Expr.
13a20 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63  iColumn is the c
13a30 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72  olumn number for
13a40 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63 6f   the specific co
13a50 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a  lumn.  If the.**
13a60 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75   expression is u
13a70 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  sed as a result 
13a80 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  in an aggregate 
13a90 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65  SELECT, then the
13aa0 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73  .** value is als
13ab0 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  o stored in the 
13ac0 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e  Expr.iAgg column
13ad0 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61 74   in the aggregat
13ae0 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20  e so that.** it 
13af0 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20  can be accessed 
13b00 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67  after all aggreg
13b10 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65  ates are compute
13b20 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
13b30 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
13b40 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c   unbound variabl
13b50 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73  e marker (a ques
13b60 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63 68  tion mark .** ch
13b70 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74  aracter '?' in t
13b80 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29  he original SQL)
13b90 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69   then the Expr.i
13ba0 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20  Table holds the 
13bb0 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62 65 72  index .** number
13bc0 20 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62   for that variab
13bd0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
13be0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
13bf0 20 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45   subquery then E
13c00 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64  xpr.iColumn hold
13c10 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  s an integer.** 
13c20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20  register number 
13c30 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72  containing the r
13c40 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62  esult of the sub
13c50 71 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a  query.  If the.*
13c60 2a 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73  * subquery gives
13c70 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75   a constant resu
13c80 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20  lt, then iTable 
13c90 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73  is -1.  If the s
13ca0 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73  ubquery.** gives
13cb0 20 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73   a different ans
13cc0 77 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74  wer at different
13cd0 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74   times during st
13ce0 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69  atement processi
13cf0 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c  ng.** then iTabl
13d00 65 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73  e is the address
13d10 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65   of a subroutine
13d20 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74   that computes t
13d30 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a  he subquery..**.
13d40 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69  ** If the Expr i
13d50 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c  s of type OP_Col
13d60 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62  umn, and the tab
13d70 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69  le it is selecti
13d80 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20  ng from.** is a 
13d90 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68  disk table or th
13da0 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f  e "old.*" pseudo
13db0 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61  -table, then pTa
13dc0 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a  b points to the.
13dd0 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ** corresponding
13de0 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f   table definitio
13df0 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54  n..**.** ALLOCAT
13e00 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a  ION NOTES:.**.**
13e10 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61   Expr objects ca
13e20 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d  n use a lot of m
13e30 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64  emory space in d
13e40 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
13e50 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75   To.** help redu
13e60 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  ce memory requir
13e70 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65  ements, sometime
13e80 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74  s an Expr object
13e90 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e   will be.** trun
13ea0 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72  cated.  And to r
13eb0 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72  educe the number
13ec0 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
13ed0 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65  ations, sometime
13ee0 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65  s.** two or more
13ef0 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69   Expr objects wi
13f00 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ll be stored in 
13f10 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20  a single memory 
13f20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74  allocation,.** t
13f30 6f 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70  ogether with Exp
13f40 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73  r.zToken strings
13f50 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45  ..**.** If the E
13f60 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50  P_Reduced and EP
13f70 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73  _TokenOnly flags
13f80 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a   are set when.**
13f90 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
13fa0 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57  is truncated.  W
13fb0 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69  hen EP_Reduced i
13fc0 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a  s set, then all.
13fd0 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70  ** the child Exp
13fe0 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65  r objects in the
13ff0 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20   Expr.pLeft and 
14000 45 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74  Expr.pRight subt
14010 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74  rees.** are cont
14020 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65  ained within the
14030 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c   same memory all
14040 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20  ocation.  Note, 
14050 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a  however, that.**
14060 20 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e   the subtrees in
14070 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72   Expr.x.pList or
14080 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
14090 61 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72  are always separ
140a0 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  ately.** allocat
140b0 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ed, regardless o
140c0 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  f whether or not
140d0 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73   EP_Reduced is s
140e0 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  et..*/.struct Ex
140f0 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20  pr {.  u8 op;   
14100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14110 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f   Operation perfo
14120 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64  rmed by this nod
14130 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  e */.  char affi
14140 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  nity;         /*
14150 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   The affinity of
14160 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30   the column or 0
14170 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e   if not a column
14180 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b   */.  u32 flags;
14190 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
141a0 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20  Various flags.  
141b0 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a  EP_* See below *
141c0 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
141d0 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20  char *zToken;   
141e0 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
141f0 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d  value. Zero term
14200 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f  inated and dequo
14210 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ted */.    int i
14220 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20  Value;          
14230 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76    /* Non-negativ
14240 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
14250 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a  if EP_IntValue *
14260 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49  /.  } u;..  /* I
14270 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  f the EP_TokenOn
14280 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ly flag is set i
14290 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
142a0 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
142b0 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
142c0 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
142d0 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
142e0 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
142f0 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
14300 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
14310 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
14320 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
14330 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   .  ************
14340 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14350 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14360 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14370 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78  *********/..  Ex
14380 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20  pr *pLeft;      
14390 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62       /* Left sub
143a0 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  node */.  Expr *
143b0 70 52 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  pRight;         
143c0 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64   /* Right subnod
143d0 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  e */.  union {. 
143e0 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69     ExprList *pLi
143f0 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20  st;     /* op = 
14400 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45  IN, EXISTS, SELE
14410 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49  CT, CASE, FUNCTI
14420 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20  ON, BETWEEN */. 
14430 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65     Select *pSele
14440 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49  ct;     /* EP_xI
14450 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d  sSelect and op =
14460 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c   IN, EXISTS, SEL
14470 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20  ECT */.  } x;.. 
14480 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65   /* If the EP_Re
14490 64 75 63 65 64 20 66 6c 61 67 20 69 73 20 73 65  duced flag is se
144a0 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
144b0 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
144c0 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
144d0 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
144e0 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
144f0 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
14500 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
14510 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
14520 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
14530 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
14540 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  on..  **********
14550 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14560 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14570 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14580 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69  ***********/..#i
14590 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  f SQLITE_MAX_EXP
145a0 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20  R_DEPTH>0.  int 
145b0 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20  nHeight;        
145c0 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20     /* Height of 
145d0 74 68 65 20 74 72 65 65 20 68 65 61 64 65 64 20  the tree headed 
145e0 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a  by this node */.
145f0 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61  #endif.  int iTa
14600 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
14610 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75  /* TK_COLUMN: cu
14620 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
14630 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c  able holding col
14640 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  umn.            
14650 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
14660 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67  TK_REGISTER: reg
14670 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20  ister number.   
14680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14690 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47        ** TK_TRIG
146a0 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30  GER: 1 -> new, 0
146b0 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20   -> old.        
146c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146d0 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a   ** EP_Unlikely:
146e0 20 20 31 30 30 30 20 74 69 6d 65 73 20 6c 69 6b    1000 times lik
146f0 65 6c 69 68 6f 6f 64 20 2a 2f 0a 20 20 79 6e 56  elihood */.  ynV
14700 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  ar iColumn;     
14710 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      /* TK_COLUMN
14720 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20  : column index. 
14730 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20   -1 for rowid.. 
14740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14750 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41          ** TK_VA
14760 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65  RIABLE: variable
14770 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20   number (always 
14780 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20  >= 1). */.  i16 
14790 69 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20  iAgg;           
147a0 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72     /* Which entr
147b0 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61  y in pAggInfo->a
147c0 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63  Col[] or ->aFunc
147d0 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67  [] */.  i16 iRig
147e0 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f  htJoinTable;   /
147f0 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e  * If EP_FromJoin
14800 2c 20 74 68 65 20 72 69 67 68 74 20 74 61 62 6c  , the right tabl
14810 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f  e of the join */
14820 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20  .  u8 op2;      
14830 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
14840 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69 6e  REGISTER: origin
14850 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72  al value of Expr
14860 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20 20  .op.            
14870 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
14880 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76  TK_COLUMN: the v
14890 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f  alue of p5 for O
148a0 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  P_Column.       
148b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148c0 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43    ** TK_AGG_FUNC
148d0 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65  TION: nesting de
148e0 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f  pth */.  AggInfo
148f0 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20   *pAggInfo;     
14900 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47  /* Used by TK_AG
14910 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f  G_COLUMN and TK_
14920 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a  AGG_FUNCTION */.
14930 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
14940 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
14950 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20  e for TK_COLUMN 
14960 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a  expressions. */.
14970 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
14980 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20  llowing are the 
14990 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73  meanings of bits
149a0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
149b0 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
149c0 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e  fine EP_FromJoin
149d0 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72    0x000001 /* Or
149e0 69 67 69 6e 61 74 65 64 20 69 6e 20 4f 4e 20 6f  iginated in ON o
149f0 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f  r USING clause o
14a00 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  f a join */.#def
14a10 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20  ine EP_Agg      
14a20 20 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e   0x000002 /* Con
14a30 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
14a40 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
14a50 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
14a60 20 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 30 78   EP_Resolved  0x
14a70 30 30 30 30 30 34 20 2f 2a 20 49 44 73 20 68 61  000004 /* IDs ha
14a80 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64  ve been resolved
14a90 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23   to COLUMNs */.#
14aa0 64 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72 20  define EP_Error 
14ab0 20 20 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20      0x000008 /* 
14ac0 45 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74 61  Expression conta
14ad0 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
14ae0 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e  errors */.#defin
14af0 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30  e EP_Distinct  0
14b00 78 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65  x000010 /* Aggre
14b10 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69  gate function wi
14b20 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  th DISTINCT keyw
14b30 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ord */.#define E
14b40 50 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30  P_VarSelect 0x00
14b50 30 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20  0020 /* pSelect 
14b60 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e  is correlated, n
14b70 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23  ot constant */.#
14b80 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f  define EP_DblQuo
14b90 74 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20  ted 0x000040 /* 
14ba0 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67  token.z was orig
14bb0 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20  inally in "..." 
14bc0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e  */.#define EP_In
14bd0 66 69 78 46 75 6e 63 20 30 78 30 30 30 30 38 30  fixFunc 0x000080
14be0 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20   /* True for an 
14bf0 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20  infix function: 
14c00 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20  LIKE, GLOB, etc 
14c10 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f  */.#define EP_Co
14c20 6c 6c 61 74 65 20 20 20 30 78 30 30 30 31 30 30  llate   0x000100
14c30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e   /* Tree contain
14c40 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f  s a TK_COLLATE o
14c50 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69  perator */.#defi
14c60 6e 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20  ne EP_Generic   
14c70 30 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f  0x000200 /* Igno
14c80 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66  re COLLATE or af
14c90 66 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74  finity on this t
14ca0 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ree */.#define E
14cb0 50 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30  P_IntValue  0x00
14cc0 30 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20  0400 /* Integer 
14cd0 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20  value contained 
14ce0 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23  in u.iValue */.#
14cf0 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c  define EP_xIsSel
14d00 65 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20  ect 0x000800 /* 
14d10 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c  x.pSelect is val
14d20 69 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e  id (otherwise x.
14d30 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65  pList is) */.#de
14d40 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20  fine EP_Skip    
14d50 20 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f    0x001000 /* CO
14d60 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e  LLATE, AS, or UN
14d70 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e  LIKELY */.#defin
14d80 65 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30  e EP_Reduced   0
14d90 78 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20  x002000 /* Expr 
14da0 73 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55  struct EXPR_REDU
14db0 43 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e  CEDSIZE bytes on
14dc0 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ly */.#define EP
14dd0 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34  _TokenOnly 0x004
14de0 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75  000 /* Expr stru
14df0 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c  ct EXPR_TOKENONL
14e00 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79  YSIZE bytes only
14e10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
14e20 74 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30  tatic    0x00800
14e30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d  0 /* Held in mem
14e40 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64  ory not obtained
14e50 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a   from malloc() *
14e60 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d  /.#define EP_Mem
14e70 54 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20  Token  0x010000 
14e80 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74  /* Need to sqlit
14e90 65 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e  e3DbFree() Expr.
14ea0 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  zToken */.#defin
14eb0 65 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30  e EP_NoReduce  0
14ec0 78 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f  x020000 /* Canno
14ed0 74 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  t EXPRDUP_REDUCE
14ee0 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64   this Expr */.#d
14ef0 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c  efine EP_Unlikel
14f00 79 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75  y  0x040000 /* u
14f10 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b  nlikely() or lik
14f20 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69  elihood() functi
14f30 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  on */.#define EP
14f40 5f 43 6f 6e 73 74 61 6e 74 20 20 30 78 30 38 30  _Constant  0x080
14f50 30 30 30 20 2f 2a 20 4e 6f 64 65 20 69 73 20 61  000 /* Node is a
14f60 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 0a 2f 2a   constant */../*
14f70 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
14f80 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
14f90 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
14fa0 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20  ear bits in the 
14fb0 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66  .** Expr.flags f
14fc0 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
14fd0 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79   ExprHasProperty
14fe0 28 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d  (E,P)     (((E)-
14ff0 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a  >flags&(P))!=0).
15000 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41  #define ExprHasA
15010 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  llProperty(E,P) 
15020 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50   (((E)->flags&(P
15030 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65  ))==(P)).#define
15040 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79   ExprSetProperty
15050 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66  (E,P)     (E)->f
15060 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e  lags|=(P).#defin
15070 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65  e ExprClearPrope
15080 72 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e  rty(E,P)   (E)->
15090 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20  flags&=~(P)../* 
150a0 54 68 65 20 45 78 70 72 53 65 74 56 56 41 50 72  The ExprSetVVAPr
150b0 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69  operty() macro i
150c0 73 20 75 73 65 64 20 66 6f 72 20 56 65 72 69 66  s used for Verif
150d0 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74  ication, Validat
150e0 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72  ion,.** and Accr
150f0 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20  editation only. 
15100 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45   It works like E
15110 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 29  xprSetProperty()
15120 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70   during VVA.** p
15130 72 6f 63 65 73 73 65 73 20 62 75 74 20 69 73 20  rocesses but is 
15140 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69  a no-op for deli
15150 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  very..*/.#ifdef 
15160 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64  SQLITE_DEBUG.# d
15170 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41  efine ExprSetVVA
15180 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28  Property(E,P)  (
15190 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23  E)->flags|=(P).#
151a0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78  else.# define Ex
151b0 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
151c0 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (E,P).#endif../*
151d0 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65  .** Macros to de
151e0 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62  termine the numb
151f0 65 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75  er of bytes requ
15200 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c  ired by a normal
15210 20 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63 74   Expr .** struct
15220 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74  , an Expr struct
15230 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64   with the EP_Red
15240 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e  uced flag set in
15250 20 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20   Expr.flags .** 
15260 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75  and an Expr stru
15270 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54  ct with the EP_T
15280 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65  okenOnly flag se
15290 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  t..*/.#define EX
152a0 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20  PR_FULLSIZE     
152b0 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70        sizeof(Exp
152c0 72 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r)           /* 
152d0 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65  Full size */.#de
152e0 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45  fine EXPR_REDUCE
152f0 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66  DSIZE        off
15300 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c  setof(Expr,iTabl
15310 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65  e)  /* Common fe
15320 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e  atures */.#defin
15330 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  e EXPR_TOKENONLY
15340 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74  SIZE      offset
15350 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20  of(Expr,pLeft)  
15360 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72   /* Fewer featur
15370 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  es */../*.** Fla
15380 67 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  gs passed to the
15390 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28   sqlite3ExprDup(
153a0 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20  ) function. See 
153b0 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65  the header comme
153c0 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c  nt .** above sql
153d0 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f  ite3ExprDup() fo
153e0 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64  r details..*/.#d
153f0 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45  efine EXPRDUP_RE
15400 44 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30  DUCE         0x0
15410 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64  001  /* Used red
15420 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e  uced-size Expr n
15430 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  odes */../*.** A
15440 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
15450 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72  ions.  Each expr
15460 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f  ession may optio
15470 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20  nally have a.** 
15480 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e  name.  An expr/n
15490 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  ame combination 
154a0 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73  can be used in s
154b0 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63  everal ways, suc
154c0 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74  h.** as the list
154d0 20 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22   of "expr AS ID"
154e0 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e   fields followin
154f0 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20  g a "SELECT" or 
15500 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f  in the.** list o
15510 66 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74  f "ID = expr" it
15520 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45  ems in an UPDATE
15530 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70  .  A list of exp
15540 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20  ressions can.** 
15550 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20  also be used as 
15560 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  the argument to 
15570 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77  a function, in w
15580 68 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e  hich case the a.
15590 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69  zName.** field i
155a0 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a  s not used..**.*
155b0 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65  * By default the
155c0 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c   Expr.zSpan fiel
155d0 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d  d holds a human-
155e0 72 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70  readable descrip
155f0 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65  tion of.** the e
15600 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
15610 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65  s used in the ge
15620 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f  neration of erro
15630 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a  r messages and.*
15640 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e  * column labels.
15650 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20    In this case, 
15660 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79  Expr.zSpan is ty
15670 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74  pically the text
15680 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20   of a.** column 
15690 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74  expression as it
156a0 20 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c   exists in a SEL
156b0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
156c0 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74  However, if.** t
156d0 68 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c  he bSpanIsTab fl
156e0 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ag is set, then 
156f0 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61  zSpan is overloa
15700 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20  ded to mean the 
15710 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72  name.** of the r
15720 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20  esult column in 
15730 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41  the form: DATABA
15740 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e  SE.TABLE.COLUMN.
15750 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20    This later.** 
15760 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72  form is used for
15770 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e   name resolution
15780 20 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f   with nested FRO
15790 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74  M clauses..*/.st
157a0 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a  ruct ExprList {.
157b0 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20    int nExpr;    
157c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
157d0 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  er of expression
157e0 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  s on the list */
157f0 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c 69  .  struct ExprLi
15800 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72  st_item { /* For
15810 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   each expression
15820 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   in the list */.
15830 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
15840 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
15850 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65  he list of expre
15860 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63 68  ssions */.    ch
15870 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
15880 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61        /* Token a
15890 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
158a0 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  his expression *
158b0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61  /.    char *zSpa
158c0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
158d0 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f   Original text o
158e0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
158f0 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f   */.    u8 sortO
15900 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  rder;           
15910 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72  /* 1 for DESC or
15920 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20   0 for ASC */.  
15930 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20    unsigned done 
15940 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 66  :1;       /* A f
15950 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20  lag to indicate 
15960 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20  when processing 
15970 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20  is finished */. 
15980 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70 61     unsigned bSpa
15990 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53  nIsTab :1; /* zS
159a0 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41 42  pan holds DB.TAB
159b0 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20  LE.COLUMN */.   
159c0 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61 62   unsigned reusab
159d0 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73  le :1;   /* Cons
159e0 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20  tant expression 
159f0 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20  is reusable */. 
15a00 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20     union {.     
15a10 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20   struct {.      
15a20 20 20 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f    u16 iOrderByCo
15a30 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f  l;      /* For O
15a40 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20  RDER BY, column 
15a50 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74  number in result
15a60 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20 20   set */.        
15a70 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20  u16 iAlias;     
15a80 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
15a90 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73  nto Parse.aAlias
15aa0 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a  [] for zName */.
15ab0 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20 20        } x;.     
15ac0 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72 52   int iConstExprR
15ad0 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67 69  eg;      /* Regi
15ae0 73 74 65 72 20 69 6e 20 77 68 69 63 68 20 45 78  ster in which Ex
15af0 70 72 20 76 61 6c 75 65 20 69 73 20 63 61 63 68  pr value is cach
15b00 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20  ed */.    } u;. 
15b10 20 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20 20   } *a;          
15b20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63          /* Alloc
15b30 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20   a power of two 
15b40 67 72 65 61 74 65 72 20 6f 72 20 65 71 75 61 6c  greater or equal
15b50 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a   to nExpr */.};.
15b60 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
15b70 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
15b80 74 75 72 65 20 69 73 20 75 73 65 64 20 62 79 20  ture is used by 
15b90 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 72 65  the parser to re
15ba0 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65  cord both.** the
15bb0 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20   parse tree for 
15bc0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e  an expression an
15bd0 64 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69 6e  d the span of in
15be0 70 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e 0a  put text for an.
15bf0 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a  ** expression..*
15c00 2f 0a 73 74 72 75 63 74 20 45 78 70 72 53 70 61  /.struct ExprSpa
15c10 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78 70  n {.  Expr *pExp
15c20 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  r;          /* T
15c30 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61  he expression pa
15c40 72 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f  rse tree */.  co
15c50 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72 74  nst char *zStart
15c60 3b 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68 61  ;   /* First cha
15c70 72 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74 20  racter of input 
15c80 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  text */.  const 
15c90 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20  char *zEnd;     
15ca0 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65 72  /* One character
15cb0 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66   past the end of
15cc0 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d   input text */.}
15cd0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
15ce0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
15cf0 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20  ucture can hold 
15d00 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66  a simple list of
15d10 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a   identifiers,.**
15d20 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69 73   such as the lis
15d30 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65  t "a,b,c" in the
15d40 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65   following state
15d50 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ments:.**.**    
15d60 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28    INSERT INTO t(
15d70 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e  a,b,c) VALUES ..
15d80 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54  .;.**      CREAT
15d90 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74  E INDEX idx ON t
15da0 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20  (a,b,c);.**     
15db0 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
15dc0 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44 41  trig BEFORE UPDA
15dd0 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e  TE ON t(a,b,c) .
15de0 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64  ..;.**.** The Id
15df0 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64  List.a.idx field
15e00 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74 68   is used when th
15e10 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73 65  e IdList represe
15e20 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a  nts the list of.
15e30 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ** column names 
15e40 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61  after a table na
15e50 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20  me in an INSERT 
15e60 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74  statement.  In t
15e70 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a  he statement.**.
15e80 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  **     INSERT IN
15e90 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a  TO t(a,b,c) ....
15ea0 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20  **.** If "a" is 
15eb0 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20  the k-th column 
15ec0 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68  of table "t", th
15ed0 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69  en IdList.a[0].i
15ee0 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74  dx==k..*/.struct
15ef0 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75   IdList {.  stru
15f00 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b  ct IdList_item {
15f10 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
15f20 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  ;      /* Name o
15f30 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65 72  f the identifier
15f40 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b   */.    int idx;
15f50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
15f60 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65  ex in some Table
15f70 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c  .aCol[] of a col
15f80 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20  umn named zName 
15f90 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74  */.  } *a;.  int
15fa0 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a   nId;         /*
15fb0 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74   Number of ident
15fc0 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69  ifiers on the li
15fd0 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
15fe0 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74 61  The bitmask data
15ff0 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c  type defined bel
16000 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20 76  ow is used for v
16010 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74  arious optimizat
16020 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e  ions..**.** Chan
16030 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20 61  ging this from a
16040 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32 2d   64-bit to a 32-
16050 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73 20  bit type limits 
16060 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a  the number of.**
16070 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69   tables in a joi
16080 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64 20  n to 32 instead 
16090 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74 20 61  of 64.  But it a
160a0 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68 65 20  lso reduces the 
160b0 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c  size.** of the l
160c0 69 62 72 61 72 79 20 62 79 20 37 33 38 20 62 79  ibrary by 738 by
160d0 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a  tes on ix86..*/.
160e0 74 79 70 65 64 65 66 20 75 36 34 20 42 69 74 6d  typedef u64 Bitm
160f0 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ask;../*.** The 
16100 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69  number of bits i
16110 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42  n a Bitmask.  "B
16120 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61  MS" means "BitMa
16130 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65  sk Size"..*/.#de
16140 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29  fine BMS  ((int)
16150 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29  (sizeof(Bitmask)
16160 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69  *8))../*.** A bi
16170 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a  t in a Bitmask.*
16180 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49  /.#define MASKBI
16190 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61 73  T(n)   (((Bitmas
161a0 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69  k)1)<<(n)).#defi
161b0 6e 65 20 4d 41 53 4b 42 49 54 33 32 28 6e 29 20  ne MASKBIT32(n) 
161c0 28 28 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29  (((unsigned int)
161d0 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20  1)<<(n))../*.** 
161e0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  The following st
161f0 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 65  ructure describe
16200 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  s the FROM claus
16210 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  e of a SELECT st
16220 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68  atement..** Each
16230 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65   table or subque
16240 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  ry in the FROM c
16250 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61 72  lause is a separ
16260 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a  ate element of.*
16270 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b  * the SrcList.a[
16280 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57  ] array..**.** W
16290 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e  ith the addition
162a0 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74   of multiple dat
162b0 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74  abase support, t
162c0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
162d0 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c  ucture.** can al
162e0 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64 65  so be used to de
162f0 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63 75  scribe a particu
16300 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20 61  lar table such a
16310 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  s the table that
16320 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20  .** is modified 
16330 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45  by an INSERT, DE
16340 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20  LETE, or UPDATE 
16350 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73  statement.  In s
16360 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20  tandard SQL,.** 
16370 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73  such a table mus
16380 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61  t be a simple na
16390 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20  me: ID.  But in 
163a0 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c  SQLite, the tabl
163b0 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20  e can.** now be 
163c0 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
163d0 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61  database name, a
163e0 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74   dot, then the t
163f0 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44  able name: ID.ID
16400 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e  ..**.** The join
16410 74 79 70 65 20 73 74 61 72 74 73 20 6f 75 74 20  type starts out 
16420 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e  showing the join
16430 20 74 79 70 65 20 62 65 74 77 65 65 6e 20 74 68   type between th
16440 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a  e current table.
16450 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20  ** and the next 
16460 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73  table on the lis
16470 74 2e 20 20 54 68 65 20 70 61 72 73 65 72 20 62  t.  The parser b
16480 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74  uilds the list t
16490 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20  his way..** But 
164a0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68  sqlite3SrcListSh
164b0 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61  iftJoinType() la
164c0 74 65 72 20 73 68 69 66 74 73 20 74 68 65 20 6a  ter shifts the j
164d0 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74  ointypes so that
164e0 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70   each.** jointyp
164f0 65 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20  e expresses the 
16500 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65  join between the
16510 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70   table and the p
16520 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a  revious table..*
16530 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55  *.** In the colU
16540 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68  sed field, the h
16550 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62  igh-order bit (b
16560 69 74 20 36 33 29 20 69 73 20 73 65 74 20 69 66  it 63) is set if
16570 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f   the table.** co
16580 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e  ntains more than
16590 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20   63 columns and 
165a0 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74  the 64-th or lat
165b0 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65  er column is use
165c0 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63  d..*/.struct Src
165d0 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72  List {.  int nSr
165e0 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  c;        /* Num
165f0 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72  ber of tables or
16600 20 73 75 62 71 75 65 72 69 65 73 20 69 6e 20 74   subqueries in t
16610 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
16620 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20  /.  u32 nAlloc; 
16630 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16640 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61  f entries alloca
16650 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77  ted in a[] below
16660 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63   */.  struct Src
16670 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20  List_item {.    
16680 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
16690 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77    /* Schema to w
166a0 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20 69  hich this item i
166b0 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63  s fixed */.    c
166c0 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20  har *zDatabase; 
166d0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61   /* Name of data
166e0 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69  base holding thi
166f0 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63  s table */.    c
16700 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
16710 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
16720 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61  table */.    cha
16730 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f  r *zAlias;     /
16740 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20 6f  * The "B" part o
16750 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68 72  f a "A AS B" phr
16760 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74  ase.  zName is t
16770 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61  he "A" */.    Ta
16780 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
16790 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20  /* An SQL table 
167a0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
167b0 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65   zName */.    Se
167c0 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
167d0 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61 74  /* A SELECT stat
167e0 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c  ement used in pl
167f0 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e  ace of a table n
16800 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61  ame */.    int a
16810 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20  ddrFillSub;  /* 
16820 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f  Address of subro
16830 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73  utine to manifes
16840 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a  t a subquery */.
16850 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75 72      int regRetur
16860 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  n;    /* Registe
16870 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e  r holding return
16880 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64 72   address of addr
16890 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69  FillSub */.    i
168a0 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20  nt regResult;   
168b0 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f   /* Registers ho
168c0 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66  lding results of
168d0 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f   a co-routine */
168e0 0a 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65  .    u8 jointype
168f0 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f  ;      /* Type o
16900 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74  f join between t
16910 68 69 73 20 61 62 6c 65 20 61 6e 64 20 74 68 65  his able and the
16920 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20   previous */.   
16930 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64   unsigned notInd
16940 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54  exed :1;    /* T
16950 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
16960 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c  a NOT INDEXED cl
16970 61 75 73 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69  ause */.    unsi
16980 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65  gned isCorrelate
16990 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69  d :1;  /* True i
169a0 66 20 73 75 62 2d 71 75 65 72 79 20 69 73 20 63  f sub-query is c
169b0 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20  orrelated */.   
169c0 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72   unsigned viaCor
169d0 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49  outine :1;  /* I
169e0 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20  mplemented as a 
169f0 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  co-routine */.  
16a00 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63    unsigned isRec
16a10 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20  ursive :1;   /* 
16a20 54 72 75 65 20 66 6f 72 20 72 65 63 75 72 73 69  True for recursi
16a30 76 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20  ve reference in 
16a40 57 49 54 48 20 2a 2f 0a 23 69 66 6e 64 65 66 20  WITH */.#ifndef 
16a50 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
16a60 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c 65  AIN.    u8 iSele
16a70 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66 20  ctId;     /* If 
16a80 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65 20  pSelect!=0, the 
16a90 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65  id of the sub-se
16aa0 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23  lect in EQP */.#
16ab0 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69 43  endif.    int iC
16ac0 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54  ursor;      /* T
16ad0 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e  he VDBE cursor n
16ae0 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61 63  umber used to ac
16af0 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65 20  cess this table 
16b00 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e  */.    Expr *pOn
16b10 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
16b20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  ON clause of a j
16b30 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73  oin */.    IdLis
16b40 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20  t *pUsing;   /* 
16b50 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65  The USING clause
16b60 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20   of a join */.  
16b70 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65    Bitmask colUse
16b80 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c  d;  /* Bit N (1<
16b90 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d  <N) set if colum
16ba0 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75  n N of pTab is u
16bb0 73 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  sed */.    char 
16bc0 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f 2a 20  *zIndex;     /* 
16bd0 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20  Identifier from 
16be0 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e  "INDEXED BY <zIn
16bf0 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a  dex>" clause */.
16c00 20 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65      Index *pInde
16c10 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 73  x;    /* Index s
16c20 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70  tructure corresp
16c30 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64 65 78  onding to zIndex
16c40 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 7d 20  , if any */.  } 
16c50 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20  a[1];           
16c60 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66    /* One entry f
16c70 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69  or each identifi
16c80 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  er on the list *
16c90 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d  /.};../*.** Perm
16ca0 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20  itted values of 
16cb0 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f  the SrcList.a.jo
16cc0 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a  intype field.*/.
16cd0 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52  #define JT_INNER
16ce0 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f       0x0001    /
16cf0 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e  * Any kind of in
16d00 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69  ner or cross joi
16d10 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
16d20 43 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32  CROSS     0x0002
16d30 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20      /* Explicit 
16d40 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53  use of the CROSS
16d50 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
16d60 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20  ine JT_NATURAL  
16d70 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72   0x0004    /* Tr
16d80 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61  ue for a "natura
16d90 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  l" join */.#defi
16da0 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20  ne JT_LEFT      
16db0 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66  0x0008    /* Lef
16dc0 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  t outer join */.
16dd0 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54  #define JT_RIGHT
16de0 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f       0x0010    /
16df0 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f  * Right outer jo
16e00 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
16e10 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32  _OUTER     0x002
16e20 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54  0    /* The "OUT
16e30 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70  ER" keyword is p
16e40 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  resent */.#defin
16e50 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30  e JT_ERROR     0
16e60 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e  x0040    /* unkn
16e70 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74  own or unsupport
16e80 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a  ed join type */.
16e90 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70  ../*.** Flags ap
16ea0 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68  propriate for th
16eb0 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72  e wctrlFlags par
16ec0 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65  ameter of sqlite
16ed0 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a  3WhereBegin().**
16ee0 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e   and the WhereIn
16ef0 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65  fo.wctrlFlags me
16f00 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  mber..*/.#define
16f10 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e   WHERE_ORDERBY_N
16f20 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f  ORMAL   0x0000 /
16f30 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69  * No-op */.#defi
16f40 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
16f50 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30 31  _MIN      0x0001
16f60 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f   /* ORDER BY pro
16f70 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28  cessing for min(
16f80 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  ) func */.#defin
16f90 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
16fa0 4d 41 58 20 20 20 20 20 20 30 78 30 30 30 32 20  MAX      0x0002 
16fb0 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63  /* ORDER BY proc
16fc0 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29  essing for max()
16fd0 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
16fe0 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44   WHERE_ONEPASS_D
16ff0 45 53 49 52 45 44 20 20 30 78 30 30 30 34 20 2f  ESIRED  0x0004 /
17000 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65  * Want to do one
17010 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c  -pass UPDATE/DEL
17020 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ETE */.#define W
17030 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f  HERE_DUPLICATES_
17040 4f 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20  OK    0x0008 /* 
17050 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72  Ok to return a r
17060 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63  ow more than onc
17070 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
17080 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f  RE_OMIT_OPEN_CLO
17090 53 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54 61  SE  0x0010 /* Ta
170a0 62 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65 20  ble cursors are 
170b0 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a  already open */.
170c0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46 4f  #define WHERE_FO
170d0 52 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20 30  RCE_TABLE      0
170e0 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20  x0020 /* Do not 
170f0 75 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c  use an index-onl
17100 79 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65 66  y search */.#def
17110 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41 42  ine WHERE_ONETAB
17120 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30 34  LE_ONLY    0x004
17130 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74  0 /* Only code t
17140 68 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e 20  he 1st table in 
17150 70 54 61 62 4c 69 73 74 20 2a 2f 0a 20 20 20 20  pTabList */.    
17160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17170 20 20 20 20 20 20 2f 2a 20 20 20 30 78 30 30 38        /*   0x008
17180 30 20 2f 2f 20 6e 6f 74 20 63 75 72 72 65 6e 74  0 // not current
17190 6c 79 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  ly used */.#defi
171a0 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59  ne WHERE_GROUPBY
171b0 20 20 20 20 20 20 20 20 20 20 30 78 30 31 30 30            0x0100
171c0 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20   /* pOrderBy is 
171d0 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42  really a GROUP B
171e0 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  Y */.#define WHE
171f0 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20  RE_DISTINCTBY   
17200 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20 70 4f      0x0200 /* pO
17210 72 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79  rderby is really
17220 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75   a DISTINCT clau
17230 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  se */.#define WH
17240 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43  ERE_WANT_DISTINC
17250 54 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20 41  T    0x0400 /* A
17260 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20  ll output needs 
17270 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a  to be distinct *
17280 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
17290 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20 20  SORTBYGROUP     
172a0 20 30 78 30 38 30 30 20 2f 2a 20 53 75 70 70 6f   0x0800 /* Suppo
172b0 72 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  rt sqlite3WhereI
172c0 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65  sSorted() */.#de
172d0 66 69 6e 65 20 57 48 45 52 45 5f 52 45 4f 50 45  fine WHERE_REOPE
172e0 4e 5f 49 44 58 20 20 20 20 20 20 20 30 78 31 30  N_IDX       0x10
172f0 30 30 20 2f 2a 20 54 72 79 20 74 6f 20 75 73 65  00 /* Try to use
17300 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 20 2a 2f   OP_ReopenIdx */
17310 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74  ../* Allowed ret
17320 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  urn values from 
17330 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69  sqlite3WhereIsDi
17340 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66  stinct().*/.#def
17350 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
17360 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20  CT_NOOP      0  
17370 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  /* DISTINCT keyw
17380 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a  ord not used */.
17390 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
173a0 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20  STINCT_UNIQUE   
173b0 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63   1  /* No duplic
173c0 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ates */.#define 
173d0 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f  WHERE_DISTINCT_O
173e0 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41  RDERED   2  /* A
173f0 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61 72  ll duplicates ar
17400 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64  e adjacent */.#d
17410 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
17420 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33  INCT_UNORDERED 3
17430 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20    /* Duplicates 
17440 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f  are scattered */
17450 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f  ../*.** A NameCo
17460 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61 20  ntext defines a 
17470 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68  context in which
17480 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c   to resolve tabl
17490 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  e and column.** 
174a0 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74  names.  The cont
174b0 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ext consists of 
174c0 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73  a list of tables
174d0 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29 20   (the pSrcList) 
174e0 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c  field and.** a l
174f0 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70  ist of named exp
17500 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29  ression (pEList)
17510 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70  .  The named exp
17520 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79  ression list may
17530 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68  .** be NULL.  Th
17540 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e  e pSrc correspon
17550 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63  ds to the FROM c
17560 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
17570 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74  T or.** to the t
17580 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61  able being opera
17590 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54  ted on by INSERT
175a0 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c  , UPDATE, or DEL
175b0 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c  ETE.  The.** pEL
175c0 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ist corresponds 
175d0 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  to the result se
175e0 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e  t of a SELECT an
175f0 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a  d is NULL for.**
17600 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74   other statement
17610 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  s..**.** NameCon
17620 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73  texts can be nes
17630 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c  ted.  When resol
17640 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20  ving names, the 
17650 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63  inner-most .** c
17660 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72 63 68  ontext is search
17670 65 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f  ed first.  If no
17680 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c   match is found,
17690 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a   the next outer.
176a0 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68  ** context is ch
176b0 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65  ecked.  If there
176c0 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74   is still no mat
176d0 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e  ch, the next con
176e0 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b  text.** is check
176f0 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73  ed.  This proces
17700 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69  s continues unti
17710 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74 63 68  l either a match
17720 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20   is found.** or 
17730 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65  all contexts are
17740 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20   check.  When a 
17750 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
17760 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20  the nRef member 
17770 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78  of.** the contex
17780 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  t containing the
17790 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d   match is increm
177a0 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61  ented. .**.** Ea
177b0 63 68 20 73 75 62 71 75 65 72 79 20 67 65 74 73  ch subquery gets
177c0 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65   a new NameConte
177d0 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66  xt.  The pNext f
177e0 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74  ield points to t
177f0 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  he.** NameContex
17800 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20  t in the parent 
17810 71 75 65 72 79 2e 20 20 54 68 75 73 20 74 68 65  query.  Thus the
17820 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e   process of scan
17830 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65  ning the.** Name
17840 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72  Context list cor
17850 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72  responds to sear
17860 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75  ching through su
17870 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72  ccessively outer
17880 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c  .** subqueries l
17890 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74  ooking for a mat
178a0 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61  ch..*/.struct Na
178b0 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61  meContext {.  Pa
178c0 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
178d0 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72     /* The parser
178e0 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
178f0 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e  SrcList;   /* On
17900 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  e or more tables
17910 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65   used to resolve
17920 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72   names */.  Expr
17930 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20  List *pEList;   
17940 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73   /* Optional lis
17950 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20  t of result-set 
17960 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67  columns */.  Agg
17970 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20  Info *pAggInfo; 
17980 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
17990 20 61 62 6f 75 74 20 61 67 67 72 65 67 61 74 65   about aggregate
179a0 73 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20  s at this level 
179b0 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74  */.  NameContext
179c0 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78   *pNext;  /* Nex
179d0 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e  t outer name con
179e0 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20  text.  NULL for 
179f0 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69  outermost */.  i
17a00 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
17a10 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17a20 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20   names resolved 
17a30 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20  by this context 
17a40 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
17a50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
17a60 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e  ber of errors en
17a70 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20  countered while 
17a80 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20  resolving names 
17a90 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61 67 73  */.  u16 ncFlags
17aa0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72  ;         /* Zer
17ab0 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66  o or more NC_* f
17ac0 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c  lags defined bel
17ad0 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ow */.};../*.** 
17ae0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
17af0 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65  or the NameConte
17b00 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65 6c  xt, ncFlags fiel
17b10 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 3a 20 20  d..**.** Note:  
17b20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 6d 75 73  NC_MinMaxAgg mus
17b30 74 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  t have the same 
17b40 76 61 6c 75 65 20 61 73 20 53 46 5f 4d 69 6e 4d  value as SF_MinM
17b50 61 78 41 67 67 20 61 6e 64 0a 2a 2a 20 53 51 4c  axAgg and.** SQL
17b60 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 2e  ITE_FUNC_MINMAX.
17b70 0a 2a 2a 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  .** .*/.#define 
17b80 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30  NC_AllowAgg  0x0
17b90 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74  001  /* Aggregat
17ba0 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
17bb0 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a  allowed here */.
17bc0 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67  #define NC_HasAg
17bd0 67 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20  g    0x0002  /* 
17be0 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  One or more aggr
17bf0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
17c00 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  seen */.#define 
17c10 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30  NC_IsCheck   0x0
17c20 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20  004  /* True if 
17c30 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20  resolving names 
17c40 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74  in a CHECK const
17c50 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  raint */.#define
17c60 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78   NC_InAggFunc 0x
17c70 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20 69 66  0008  /* True if
17c80 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d   analyzing argum
17c90 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66  ents to an agg f
17ca0 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  unc */.#define N
17cb0 43 5f 50 61 72 74 49 64 78 20 20 20 30 78 30 30  C_PartIdx   0x00
17cc0 31 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72  10  /* True if r
17cd0 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69  esolving a parti
17ce0 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a  al index WHERE *
17cf0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e  /.#define NC_Min
17d00 4d 61 78 41 67 67 20 30 78 31 30 30 30 20 20 2f  MaxAgg 0x1000  /
17d10 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67  * min/max aggreg
17d20 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20  ates seen.  See 
17d30 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f  note above */../
17d40 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
17d50 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
17d60 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  g structure cont
17d70 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61  ains all informa
17d80 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74  tion.** needed t
17d90 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20  o generate code 
17da0 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c  for a single SEL
17db0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
17dc0 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73  *.** nLimit is s
17dd0 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72  et to -1 if ther
17de0 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c  e is no LIMIT cl
17df0 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69  ause.  nOffset i
17e00 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49  s set to 0..** I
17e10 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d  f there is a LIM
17e20 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70  IT clause, the p
17e30 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69  arser sets nLimi
17e40 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
17e50 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61  f the.** limit a
17e60 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68  nd nOffset to th
17e70 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  e value of the o
17e80 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74  ffset (or 0 if t
17e90 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f  here is not.** o
17ea0 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74  ffset).  But lat
17eb0 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e  er on, nLimit an
17ec0 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65  d nOffset become
17ed0 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61   the memory loca
17ee0 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tions.** in the 
17ef0 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64  VDBE that record
17f00 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f   the limit and o
17f10 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a  ffset counters..
17f20 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70  **.** addrOpenEp
17f30 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e  hm[] entries con
17f40 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73  tain the address
17f50 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   of OP_OpenEphem
17f60 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a  eral opcodes..**
17f70 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73   These addresses
17f80 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20   must be stored 
17f90 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67  so that we can g
17fa0 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20  o back and fill 
17fb0 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59  in.** the P4_KEY
17fc0 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61  INFO and P2 para
17fd0 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e  meters later.  N
17fe0 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e  either the KeyIn
17ff0 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75  fo nor.** the nu
18000 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
18010 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d  in P2 can be com
18020 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d  puted at the sam
18030 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65  e time.** as the
18040 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73   OP_OpenEphm ins
18050 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65  truction is code
18060 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a  d because not.**
18070 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74   enough informat
18080 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f  ion about the co
18090 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20  mpound query is 
180a0 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f  known at that po
180b0 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49  int..** The KeyI
180c0 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
180d0 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20  Tran[0] and [1] 
180e0 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
180f0 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20  ng sequences.** 
18100 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73  for the result s
18110 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f  et.  The KeyInfo
18120 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68   for addrOpenEph
18130 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f  m[2] contains co
18140 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65  llating.** seque
18150 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44  nces for the ORD
18160 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f  ER BY clause..*/
18170 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b  .struct Select {
18180 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c  .  ExprList *pEL
18190 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  ist;      /* The
181a0 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72   fields of the r
181b0 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70  esult */.  u8 op
181c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
181d0 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f    /* One of: TK_
181e0 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f  UNION TK_ALL TK_
181f0 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43  INTERSECT TK_EXC
18200 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c  EPT */.  u16 sel
18210 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
18220 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20  /* Various SF_* 
18230 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20  values */.  int 
18240 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b  iLimit, iOffset;
18250 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67     /* Memory reg
18260 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c  isters holding L
18270 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f  IMIT & OFFSET co
18280 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20 53 45  unters */.#if SE
18290 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
182a0 44 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e 61 6d  D.  char zSelNam
182b0 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53 79  e[12];     /* Sy
182c0 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20 74  mbolic name of t
182d0 68 69 73 20 53 45 4c 45 43 54 20 75 73 65 20 66  his SELECT use f
182e0 6f 72 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a  or debugging */.
182f0 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 61 64 64  #endif.  int add
18300 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20  rOpenEphm[2];   
18310 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20  /* OP_OpenEphem 
18320 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20  opcodes related 
18330 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a  to this select *
18340 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65 63 74 52  /.  u64 nSelectR
18350 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73  ow;        /* Es
18360 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f  timated number o
18370 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f  f result rows */
18380 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63  .  SrcList *pSrc
18390 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
183a0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
183b0 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
183c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
183d0 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a  WHERE clause */.
183e0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
183f0 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20  upBy;    /* The 
18400 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
18410 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69  */.  Expr *pHavi
18420 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ng;         /* T
18430 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
18440 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
18450 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20  pOrderBy;    /* 
18460 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
18470 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  use */.  Select 
18480 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20  *pPrior;        
18490 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20  /* Prior select 
184a0 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65  in a compound se
184b0 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a  lect statement *
184c0 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78  /.  Select *pNex
184d0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
184e0 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65  xt select to the
184f0 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f   left in a compo
18500 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  und */.  Expr *p
18510 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  Limit;          
18520 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  /* LIMIT express
18530 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20  ion. NULL means 
18540 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45  not used. */.  E
18550 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20  xpr *pOffset;   
18560 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20        /* OFFSET 
18570 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c  expression. NULL
18580 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e   means not used.
18590 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74   */.  With *pWit
185a0 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  h;           /* 
185b0 57 49 54 48 20 63 6c 61 75 73 65 20 61 74 74 61  WITH clause atta
185c0 63 68 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c  ched to this sel
185d0 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f  ect. Or NULL. */
185e0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
185f0 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65  ed values for Se
18600 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20  lect.selFlags.  
18610 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20  The "SF" prefix 
18620 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53  stands for.** "S
18630 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a  elect Flag"..*/.
18640 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69  #define SF_Disti
18650 6e 63 74 20 20 20 20 20 20 20 20 30 78 30 30 30  nct        0x000
18660 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f  1  /* Output sho
18670 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54 20  uld be DISTINCT 
18680 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65  */.#define SF_Re
18690 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20 30 78  solved        0x
186a0 30 30 30 32 20 20 2f 2a 20 49 64 65 6e 74 69 66  0002  /* Identif
186b0 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 72  iers have been r
186c0 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69  esolved */.#defi
186d0 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65 20  ne SF_Aggregate 
186e0 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
186f0 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67   Contains aggreg
18700 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
18710 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73  .#define SF_Uses
18720 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78 30 30  Ephemeral   0x00
18730 30 38 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20  08  /* Uses the 
18740 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70  OpenEphemeral op
18750 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  code */.#define 
18760 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20  SF_Expanded     
18770 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 73 71     0x0010  /* sq
18780 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e  lite3SelectExpan
18790 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68  d() called on th
187a0 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  is */.#define SF
187b0 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20  _HasTypeInfo    
187c0 20 30 78 30 30 32 30 20 20 2f 2a 20 46 52 4f 4d   0x0020  /* FROM
187d0 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76 65   subqueries have
187e0 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20   Table metadata 
187f0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f  */.#define SF_Co
18800 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 20 30 78  mpound        0x
18810 30 30 34 30 20 20 2f 2a 20 50 61 72 74 20 6f 66  0040  /* Part of
18820 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72   a compound quer
18830 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  y */.#define SF_
18840 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 20  Values          
18850 30 78 30 30 38 30 20 20 2f 2a 20 53 79 6e 74 68  0x0080  /* Synth
18860 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55  esized from VALU
18870 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  ES clause */.   
18880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18890 20 2f 2a 20 20 20 20 20 30 78 30 31 30 30 20 20   /*     0x0100  
188a0 4e 4f 54 20 55 53 45 44 20 2a 2f 0a 23 64 65 66  NOT USED */.#def
188b0 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f  ine SF_NestedFro
188c0 6d 20 20 20 20 20 20 30 78 30 32 30 30 20 20 2f  m      0x0200  /
188d0 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61 72 65  * Part of a pare
188e0 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63  nthesized FROM c
188f0 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
18900 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74   SF_MaybeConvert
18910 20 20 20 20 30 78 30 34 30 30 20 20 2f 2a 20 4e      0x0400  /* N
18920 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  eed convertCompo
18930 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
18940 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ery() */.#define
18950 20 53 46 5f 52 65 63 75 72 73 69 76 65 20 20 20   SF_Recursive   
18960 20 20 20 20 30 78 30 38 30 30 20 20 2f 2a 20 54      0x0800  /* T
18970 68 65 20 72 65 63 75 72 73 69 76 65 20 70 61 72  he recursive par
18980 74 20 6f 66 20 61 20 72 65 63 75 72 73 69 76 65  t of a recursive
18990 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20   CTE */.#define 
189a0 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20  SF_MinMaxAgg    
189b0 20 20 20 30 78 31 30 30 30 20 20 2f 2a 20 41 67     0x1000  /* Ag
189c0 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e 69  gregate containi
189d0 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28  ng min() or max(
189e0 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ) */.../*.** The
189f0 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45   results of a SE
18a00 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69 73 74  LECT can be dist
18a10 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72  ributed in sever
18a20 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66 69  al ways, as defi
18a30 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66  ned.** by one of
18a40 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
18a50 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54  acros.  The "SRT
18a60 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22  " prefix means "
18a70 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a  SELECT Result.**
18a80 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   Type"..**.**   
18a90 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20    SRT_Union     
18aa0 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
18ab0 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65  as a key in a te
18ac0 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 0a 2a  mporary index .*
18ad0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
18ae0 20 20 20 20 20 20 69 64 65 6e 74 69 66 69 65 64        identified
18af0 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61   by pDest->iSDPa
18b00 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  rm..**.**     SR
18b10 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 52 65  T_Except      Re
18b20 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f  move results fro
18b30 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  m the temporary 
18b40 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44  index pDest->iSD
18b50 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Parm..**.**     
18b60 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20  SRT_Exists      
18b70 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d  Store a 1 in mem
18b80 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e  ory cell pDest->
18b90 69 53 44 50 61 72 6d 20 69 66 20 74 68 65 20 72  iSDParm if the r
18ba0 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20  esult.**        
18bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
18bc0 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a   is not empty..*
18bd0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
18be0 63 61 72 64 20 20 20 20 20 54 68 72 6f 77 20 74  card     Throw t
18bf0 68 65 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e  he results away.
18c00 20 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62    This is used b
18c10 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20  y SELECT.**     
18c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c30 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
18c40 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f 73 65  n triggers whose
18c50 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73   only purpose is
18c60 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18c70 20 20 20 20 20 20 20 20 74 68 65 20 73 69 64 65          the side
18c80 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63  -effects of func
18c90 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  tions..**.** All
18ca0 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72   of the above ar
18cb0 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65  e free to ignore
18cc0 20 74 68 65 69 72 20 4f 52 44 45 52 20 42 59 20   their ORDER BY 
18cd0 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68  clause. Those th
18ce0 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73  at.** follow mus
18cf0 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45  t honor the ORDE
18d00 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a  R BY clause..**.
18d10 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75  **     SRT_Outpu
18d20 74 20 20 20 20 20 20 47 65 6e 65 72 61 74 65 20  t      Generate 
18d30 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20  a row of output 
18d40 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65  (using the OP_Re
18d50 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20  sultRow.**      
18d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
18d70 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20  pcode) for each 
18d80 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c  row in the resul
18d90 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  t set..**.**    
18da0 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20   SRT_Mem        
18db0 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74   Only valid if t
18dc0 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 20 73  he result is a s
18dd0 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a  ingle column..**
18de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18df0 20 20 20 20 20 53 74 6f 72 65 20 74 68 65 20 66       Store the f
18e00 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  irst column of t
18e10 68 65 20 66 69 72 73 74 20 72 65 73 75 6c 74 20  he first result 
18e20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  row.**          
18e30 20 20 20 20 20 20 20 20 20 20 20 69 6e 20 72 65             in re
18e40 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53  gister pDest->iS
18e50 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64  DParm then aband
18e60 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20  on the rest.**  
18e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e80 20 20 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e     of the query.
18e90 20 20 54 68 69 73 20 64 65 73 74 69 6e 61 74 69    This destinati
18ea0 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49  on implies "LIMI
18eb0 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  T 1"..**.**     
18ec0 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20  SRT_Set         
18ed0 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20  The result must 
18ee0 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  be a single colu
18ef0 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a  mn.  Store each.
18f00 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18f10 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65         row of re
18f20 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20  sult as the key 
18f30 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  in table pDest->
18f40 69 53 44 50 61 72 6d 2e 20 0a 2a 2a 20 20 20 20  iSDParm. .**    
18f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f60 20 41 70 70 6c 79 20 74 68 65 20 61 66 66 69 6e   Apply the affin
18f70 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53 64  ity pDest->affSd
18f80 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69 6e  st before storin
18f90 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  g.**            
18fa0 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73           results
18fb0 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c 65  .  Used to imple
18fc0 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43 54  ment "IN (SELECT
18fd0 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   ...)"..**.**   
18fe0 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20    SRT_EphemTab  
18ff0 20 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d 70    Create an temp
19000 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
19010 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20 73  t->iSDParm and s
19020 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  tore.**         
19030 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
19040 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54 68  result there. Th
19050 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74  e cursor is left
19060 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20   open after.**  
19070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19080 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20 54     returning.  T
19090 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f  his is like SRT_
190a0 54 61 62 6c 65 20 65 78 63 65 70 74 20 74 68 61  Table except tha
190b0 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
190c0 20 20 20 20 20 20 20 20 20 74 68 69 73 20 64 65           this de
190d0 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f  stination uses O
190e0 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
190f0 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20 20  to create.**    
19100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19110 20 74 68 65 20 74 61 62 6c 65 20 66 69 72 73 74   the table first
19120 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
19130 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e 65  Coroutine   Gene
19140 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e  rate a co-routin
19150 65 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 61  e that returns a
19160 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20   new row of.**  
19170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19180 20 20 20 72 65 73 75 6c 74 73 20 65 61 63 68 20     results each 
19190 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f 6b  time it is invok
191a0 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20 70  ed.  The entry p
191b0 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  oint.**         
191c0 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74              of t
191d0 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73  he co-routine is
191e0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
191f0 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ter pDest->iSDPa
19200 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  rm.**           
19210 20 20 20 20 20 20 20 20 20 20 61 6e 64 20 74 68            and th
19220 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20  e result row is 
19230 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74 2d  stored in pDest-
19240 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65 72 73  >nDest registers
19250 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19260 20 20 20 20 20 20 20 20 73 74 61 72 74 69 6e 67          starting
19270 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53 64   with pDest->iSd
19280 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  st..**.**     SR
19290 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53 74  T_Table       St
192a0 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 74  ore results in t
192b0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
192c0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
192d0 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20 20  *     SRT_Fifo  
192e0 20 20 20 20 20 20 54 68 69 73 20 69 73 20 6c 69        This is li
192f0 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20  ke SRT_EphemTab 
19300 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
19310 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20  table.**        
19320 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73 20               is 
19330 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65 61  assumed to alrea
19340 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52 54  dy be open.  SRT
19350 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20  _Fifo has.**    
19360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19370 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20   the additional 
19380 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69 6e  property of bein
19390 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65  g able to ignore
193a0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
193b0 20 20 20 20 20 20 20 20 74 68 65 20 4f 52 44 45          the ORDE
193c0 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a  R BY clause..**.
193d0 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 46  **     SRT_DistF
193e0 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65 73  ifo    Store res
193f0 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f 72  ults in a tempor
19400 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
19410 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20  >iSDParm..**    
19420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19430 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74 65   But also use te
19440 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
19450 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61  est->iSDParm+1 a
19460 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
19470 20 20 20 20 20 20 20 20 20 61 20 72 65 63 6f 72           a recor
19480 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20 72  d of all prior r
19490 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72  esults and ignor
194a0 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65 0a  e any duplicate.
194b0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
194c0 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e 61         rows.  Na
194d0 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73 74  me means:  "Dist
194e0 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a  inct Fifo"..**.*
194f0 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75 65 20  *     SRT_Queue 
19500 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
19510 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20  lts in priority 
19520 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44  queue pDest->iSD
19530 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20  Parm (really.** 
19540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19550 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20 20      an index).  
19560 41 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e 63  Append a sequenc
19570 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61 74  e number so that
19580 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20   all entries.** 
19590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195a0 20 20 20 20 61 72 65 20 64 69 73 74 69 6e 63 74      are distinct
195b0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
195c0 44 69 73 74 51 75 65 75 65 20 20 20 53 74 6f 72  DistQueue   Stor
195d0 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69  e results in pri
195e0 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73  ority queue pDes
195f0 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20  t->iSDParm only 
19600 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  if.**           
19610 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73 61            the sa
19620 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e 65  me record has ne
19630 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64 20  ver been stored 
19640 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20  before.  The.** 
19650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19660 20 20 20 20 69 6e 64 65 78 20 61 74 20 70 44 65      index at pDe
19670 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f  st->iSDParm+1 ho
19680 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f  ld all prior sto
19690 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  res..*/.#define 
196a0 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20  SRT_Union       
196b0 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   1  /* Store res
196c0 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61  ult as keys in a
196d0 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  n index */.#defi
196e0 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20 20  ne SRT_Except   
196f0 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65      2  /* Remove
19700 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55   result from a U
19710 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  NION index */.#d
19720 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73  efine SRT_Exists
19730 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f         3  /* Sto
19740 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73 75  re 1 if the resu
19750 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20  lt is not empty 
19760 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44  */.#define SRT_D
19770 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20 2f  iscard      4  /
19780 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68  * Do not save th
19790 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65  e results anywhe
197a0 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  re */.#define SR
197b0 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20 35  T_Fifo         5
197c0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
197d0 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61  t as data with a
197e0 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69  n automatic rowi
197f0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  d */.#define SRT
19800 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20 36 20  _DistFifo     6 
19810 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69 66   /* Like SRT_Fif
19820 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65  o, but unique re
19830 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  sults only */.#d
19840 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65 20  efine SRT_Queue 
19850 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f         7  /* Sto
19860 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20  re result in an 
19870 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65  queue */.#define
19880 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20   SRT_DistQueue  
19890 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54    8  /* Like SRT
198a0 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69 71  _Queue, but uniq
198b0 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20  ue results only 
198c0 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52  */../* The ORDER
198d0 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69 67   BY clause is ig
198e0 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66  nored for all of
198f0 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64   the above */.#d
19900 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f  efine IgnorableO
19910 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65  rderby(X) ((X->e
19920 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74 51  Dest)<=SRT_DistQ
19930 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20 53  ueue)..#define S
19940 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20  RT_Output       
19950 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63  9  /* Output eac
19960 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20  h row of result 
19970 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d  */.#define SRT_M
19980 65 6d 20 20 20 20 20 20 20 20 20 31 30 20 20 2f  em         10  /
19990 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
199a0 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  n a memory cell 
199b0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53  */.#define SRT_S
199c0 65 74 20 20 20 20 20 20 20 20 20 31 31 20 20 2f  et         11  /
199d0 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20  * Store results 
199e0 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  as keys in an in
199f0 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
19a00 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 31  RT_EphemTab    1
19a10 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61  2  /* Create tra
19a20 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73  nsient tab and s
19a30 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61  tore like SRT_Ta
19a40 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ble */.#define S
19a50 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31  RT_Coroutine   1
19a60 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61  3  /* Generate a
19a70 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72   single row of r
19a80 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esult */.#define
19a90 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
19aa0 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72 65   14  /* Store re
19ab0 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
19ac0 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
19ad0 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  owid */../*.** A
19ae0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
19af0 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69  is object descri
19b00 62 65 73 20 77 68 65 72 65 20 74 6f 20 70 75 74  bes where to put
19b10 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20   of the results 
19b20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73  of.** a SELECT s
19b30 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  tatement..*/.str
19b40 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b  uct SelectDest {
19b50 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20 20 20  .  u8 eDest;    
19b60 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74          /* How t
19b70 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65  o dispose of the
19b80 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66   results.  On of
19b90 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f   SRT_* above. */
19ba0 0a 20 20 63 68 61 72 20 61 66 66 53 64 73 74 3b  .  char affSdst;
19bb0 20 20 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e          /* Affin
19bc0 69 74 79 20 75 73 65 64 20 77 68 65 6e 20 65 44  ity used when eD
19bd0 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a  est==SRT_Set */.
19be0 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20    int iSDParm;  
19bf0 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61         /* A para
19c00 6d 65 74 65 72 20 75 73 65 64 20 62 79 20 74 68  meter used by th
19c10 65 20 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c  e eDest disposal
19c20 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74   method */.  int
19c30 20 69 53 64 73 74 3b 20 20 20 20 20 20 20 20 20   iSdst;         
19c40 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74    /* Base regist
19c50 65 72 20 77 68 65 72 65 20 72 65 73 75 6c 74 73  er where results
19c60 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a   are written */.
19c70 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20    int nSdst;    
19c80 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
19c90 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c   of registers al
19ca0 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 45 78 70  located */.  Exp
19cb0 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b  rList *pOrderBy;
19cc0 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73    /* Key columns
19cd0 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20 61   for SRT_Queue a
19ce0 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65 75 65  nd SRT_DistQueue
19cf0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75   */.};../*.** Du
19d00 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61  ring code genera
19d10 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e  tion of statemen
19d20 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72  ts that do inser
19d30 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52  ts into AUTOINCR
19d40 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c 65 73  EMENT .** tables
19d50 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
19d60 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61  information is a
19d70 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 54  ttached to the T
19d80 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70  able.u.autoInc.p
19d90 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65  .** pointer of e
19da0 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e  ach autoincremen
19db0 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72  t table to recor
19dc0 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f  d some side info
19dd0 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20  rmation that.** 
19de0 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
19df0 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61  or needs.  We ha
19e00 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74  ve to keep per-t
19e10 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65  able autoincreme
19e20 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  nt.** informatio
19e30 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74  n in case insert
19e40 73 20 61 72 65 20 64 6f 77 6e 20 77 69 74 68 69  s are down withi
19e50 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72 69  n triggers.  Tri
19e60 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20  ggers do not.** 
19e70 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e  normally coordin
19e80 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76 69  ate their activi
19e90 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20  ties, but we do 
19ea0 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61  need to coordina
19eb0 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e  te the.** loadin
19ec0 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20  g and saving of 
19ed0 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e  autoincrement in
19ee0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
19ef0 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f  ruct AutoincInfo
19f00 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f   {.  AutoincInfo
19f10 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65   *pNext;   /* Ne
19f20 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e  xt info block in
19f30 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20   a list of them 
19f40 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  all */.  Table *
19f50 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f  pTab;          /
19f60 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66  * Table this inf
19f70 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74  o block refers t
19f80 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  o */.  int iDb; 
19f90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19fa0 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33  Index in sqlite3
19fb0 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61  .aDb[] of databa
19fc0 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20  se holding pTab 
19fd0 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b  */.  int regCtr;
19fe0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
19ff0 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68 6f  mory register ho
1a000 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20  lding the rowid 
1a010 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  counter */.};../
1a020 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68 65  *.** Size of the
1a030 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f   column cache.*/
1a040 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1a050 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65 66  N_COLCACHE.# def
1a060 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  ine SQLITE_N_COL
1a070 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66 0a  CACHE 10.#endif.
1a080 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20  ./*.** At least 
1a090 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  one instance of 
1a0a0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1a0b0 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61 74  ructure is creat
1a0c0 65 64 20 66 6f 72 20 65 61 63 68 20 0a 2a 2a 20  ed for each .** 
1a0d0 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61 79  trigger that may
1a0e0 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65 20   be fired while 
1a0f0 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52  parsing an INSER
1a100 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c  T, UPDATE or DEL
1a110 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ETE.** statement
1a120 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63  . All such objec
1a130 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
1a140 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
1a150 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61   headed at.** Pa
1a160 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1a170 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65  and deleted once
1a180 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69   statement compi
1a190 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a  lation has been.
1a1a0 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a  ** completed..**
1a1b0 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70  .** A Vdbe sub-p
1a1c0 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c  rogram that impl
1a1d0 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20  ements the body 
1a1e0 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20  and WHEN clause 
1a1f0 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72  of trigger.** Tr
1a200 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67 65  iggerPrg.pTrigge
1a210 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65  r, assuming a de
1a220 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1a230 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54  T clause of.** T
1a240 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66  riggerPrg.orconf
1a250 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  , is stored in t
1a260 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70 50  he TriggerPrg.pP
1a270 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e  rogram variable.
1a280 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54  .** The Parse.pT
1a290 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e  riggerPrg list n
1a2a0 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77  ever contains tw
1a2b0 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20 74  o entries with t
1a2c0 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65  he same.** value
1a2d0 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67  s for both pTrig
1a2e0 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a  ger and orconf..
1a2f0 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65  **.** The Trigge
1a300 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d  rPrg.aColmask[0]
1a310 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
1a320 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c   to a mask of ol
1a330 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61  d.* columns.** a
1a340 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74 20  ccessed (or set 
1a350 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65 72  to 0 for trigger
1a360 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65 73  s fired as a res
1a370 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 20 0a 2a  ult of INSERT .*
1a380 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53  * statements). S
1a390 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72  imilarly, the Tr
1a3a0 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
1a3b0 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[1] variable is
1a3c0 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73   set to.** a mas
1a3d0 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
1a3e0 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70  ns used by the p
1a3f0 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63  rogram..*/.struc
1a400 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20  t TriggerPrg {. 
1a410 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
1a420 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67  er;      /* Trig
1a430 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d  ger this program
1a440 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20   was coded from 
1a450 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20  */.  TriggerPrg 
1a460 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20  *pNext;      /* 
1a470 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61  Next entry in Pa
1a480 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1a490 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f  list */.  SubPro
1a4a0 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20  gram *pProgram; 
1a4b0 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70    /* Program imp
1a4c0 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67  lementing pTrigg
1a4d0 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69  er/orconf */.  i
1a4e0 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  nt orconf;      
1a4f0 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1a500 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
1a510 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43  licy */.  u32 aC
1a520 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20  olmask[2];      
1a530 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c    /* Masks of ol
1a540 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  d.*, new.* colum
1a550 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d  ns accessed */.}
1a560 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62  ;../*.** The yDb
1a570 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f  Mask datatype fo
1a580 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66  r the bitmask of
1a590 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
1a5a0 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20  tabases..*/.#if 
1a5b0 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
1a5c0 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66  HED>30.  typedef
1a5d0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79   unsigned char y
1a5e0 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d  DbMask[(SQLITE_M
1a5f0 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38  AX_ATTACHED+9)/8
1a600 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  ];.# define DbMa
1a610 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28  skTest(M,I)    (
1a620 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c  ((M)[(I)/8]&(1<<
1a630 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20  ((I)&7)))!=0).# 
1a640 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72  define DbMaskZer
1a650 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74  o(M)      memset
1a660 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29  ((M),0,sizeof(M)
1a670 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1a680 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d  kSet(M,I)     (M
1a690 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28  )[(I)/8]|=(1<<((
1a6a0 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20  I)&7)).# define 
1a6b0 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1a6c0 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b     sqlite3DbMask
1a6d0 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66  AllZero(M).# def
1a6e0 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72  ine DbMaskNonZer
1a6f0 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44  o(M)   (sqlite3D
1a700 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d  bMaskAllZero(M)=
1a710 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  =0).#else.  type
1a720 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  def unsigned int
1a730 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69   yDbMask;.# defi
1a740 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c  ne DbMaskTest(M,
1a750 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28 79  I)    (((M)&(((y
1a760 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29  DbMask)1)<<(I)))
1a770 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62  !=0).# define Db
1a780 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20  MaskZero(M)     
1a790 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20   (M)=0.# define 
1a7a0 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
1a7b0 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61     (M)|=(((yDbMa
1a7c0 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65  sk)1)<<(I)).# de
1a7d0 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
1a7e0 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23  ro(M)   (M)==0.#
1a7f0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f   define DbMaskNo
1a800 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d  nZero(M)   (M)!=
1a810 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
1a820 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f  An SQL parser co
1a830 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f  ntext.  A copy o
1a840 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
1a850 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75   is passed throu
1a860 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72  gh.** the parser
1a870 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61   and down into a
1a880 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63  ll the parser ac
1a890 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20  tion routine in 
1a8a0 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72  order to.** carr
1a8b0 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61  y around informa
1a8c0 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f  tion that is glo
1a8d0 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72  bal to the entir
1a8e0 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  e parse..**.** T
1a8f0 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20  he structure is 
1a900 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f  divided into two
1a910 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68   parts.  When th
1a920 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64  e parser and cod
1a930 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61  e.** generate ca
1a940 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65  ll themselves re
1a950 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66  cursively, the f
1a960 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65  irst part of the
1a970 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73   structure.** is
1a980 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68   constant but th
1a990 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73  e second part is
1a9a0 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65   reset at the be
1a9b0 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20  ginning and end 
1a9c0 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72  of.** each recur
1a9d0 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sion..**.** The 
1a9e0 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61  nTableLock and a
1a9f0 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62  TableLock variab
1aa00 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65  les are only use
1aa10 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d  d if the shared-
1aa20 63 61 63 68 65 20 0a 2a 2a 20 66 65 61 74 75 72  cache .** featur
1aa30 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66  e is enabled (if
1aa40 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75   sqlite3Tsd()->u
1aa50 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20  seSharedData is 
1aa60 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a  true). They are.
1aa70 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
1aa80 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c   the set of tabl
1aa90 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64  e-locks required
1aaa0 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e   by the statemen
1aab0 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69  t being.** compi
1aac0 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71  led. Function sq
1aad0 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29  lite3TableLock()
1aae0 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20   is used to add 
1aaf0 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a  entries to the.*
1ab00 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63  * list..*/.struc
1ab10 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69  t Parse {.  sqli
1ab20 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
1ab30 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74   /* The main dat
1ab40 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20  abase structure 
1ab50 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  */.  char *zErrM
1ab60 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  sg;       /* An 
1ab70 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f  error message */
1ab80 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20  .  Vdbe *pVdbe; 
1ab90 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e          /* An en
1aba0 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69  gine for executi
1abb0 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65  ng database byte
1abc0 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63  code */.  int rc
1abd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1abe0 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72  * Return code fr
1abf0 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  om execution */.
1ac00 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74    u8 colNamesSet
1ac10 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61  ;      /* TRUE a
1ac20 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61  fter OP_ColumnNa
1ac30 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75  me has been issu
1ac40 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20  ed to pVdbe */. 
1ac50 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b   u8 checkSchema;
1ac60 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20        /* Causes 
1ac70 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68  schema cookie ch
1ac80 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72  eck after an err
1ac90 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65  or */.  u8 neste
1aca0 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
1acb0 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
1acc0 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61   calls to the pa
1acd0 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61  rser/code genera
1ace0 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d  tor */.  u8 nTem
1acf0 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
1ad00 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f   Number of tempo
1ad10 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69  rary registers i
1ad20 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a  n aTempReg[] */.
1ad30 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74    u8 isMultiWrit
1ad40 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  e;     /* True i
1ad50 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
1ad60 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75  modify/insert mu
1ad70 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20  ltiple rows */. 
1ad80 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20   u8 mayAbort;   
1ad90 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1ada0 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74   statement may t
1adb0 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
1adc0 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  ception */.  u8 
1add0 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20  hasCompound;    
1ade0 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76    /* Need to inv
1adf0 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  oke convertCompo
1ae00 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
1ae10 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b  ery() */.  u8 ok
1ae20 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20  ConstFactor;    
1ae30 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20  /* OK to factor 
1ae40 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f  out constants */
1ae50 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b  .  int aTempReg[
1ae60 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69  8];     /* Holdi
1ae70 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70  ng area for temp
1ae80 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
1ae90 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52  */.  int nRangeR
1aea0 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a  eg;       /* Siz
1aeb0 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  e of the tempora
1aec0 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63  ry register bloc
1aed0 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67  k */.  int iRang
1aee0 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46  eReg;       /* F
1aef0 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e  irst register in
1af00 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
1af10 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69  ter block */.  i
1af20 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
1af30 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1af40 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a   errors seen */.
1af50 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20    int nTab;     
1af60 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1af70 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61   of previously a
1af80 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75  llocated VDBE cu
1af90 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  rsors */.  int n
1afa0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
1afb0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  /* Number of mem
1afc0 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73  ory cells used s
1afd0 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
1afe0 53 65 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Set;            
1aff0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65 74  /* Number of set
1b000 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
1b010 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20 20  .  int nOnce;   
1b020 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1b030 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e 73  r of OP_Once ins
1b040 74 72 75 63 74 69 6f 6e 73 20 73 6f 20 66 61 72  tructions so far
1b050 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c   */.  int nOpAll
1b060 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  oc;        /* Nu
1b070 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c  mber of slots al
1b080 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65  located for Vdbe
1b090 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  .aOp[] */.  int 
1b0a0 69 46 69 78 65 64 4f 70 3b 20 20 20 20 20 20 20  iFixedOp;       
1b0b0 20 2f 2a 20 4e 65 76 65 72 20 62 61 63 6b 20 6f   /* Never back o
1b0c0 75 74 20 6f 70 63 6f 64 65 73 20 69 46 69 78 65  ut opcodes iFixe
1b0d0 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c 69 65 72  dOp-1 or earlier
1b0e0 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73 65   */.  int ckBase
1b0f0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61  ;          /* Ba
1b100 73 65 20 72 65 67 69 73 74 65 72 20 6f 66 20 64  se register of d
1b110 61 74 61 20 64 75 72 69 6e 67 20 63 68 65 63 6b  ata during check
1b120 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
1b130 20 20 69 6e 74 20 69 50 61 72 74 49 64 78 54 61    int iPartIdxTa
1b140 62 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  b;     /* Table 
1b150 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
1b160 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78   a partial index
1b170 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65   */.  int iCache
1b180 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  Level;     /* Co
1b190 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68 65  lCache valid whe
1b1a0 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c  n aColCache[].iL
1b1b0 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65  evel<=iCacheLeve
1b1c0 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  l */.  int iCach
1b1d0 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43  eCnt;       /* C
1b1e0 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67  ounter used to g
1b1f0 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68  enerate aColCach
1b200 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a  e[].lru values *
1b210 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20  /.  int nLabel; 
1b220 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1b230 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65  er of labels use
1b240 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62  d */.  int *aLab
1b250 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  el;         /* S
1b260 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65  pace to hold the
1b270 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74 72   labels */.  str
1b280 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a  uct yColCache {.
1b290 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
1b2a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
1b2b0 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  le cursor number
1b2c0 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c   */.    i16 iCol
1b2d0 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  umn;          /*
1b2e0 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75   Table column nu
1b2f0 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74  mber */.    u8 t
1b300 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
1b310 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74    /* iReg is a t
1b320 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61  emp register tha
1b330 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72  t needs to be fr
1b340 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  eed */.    int i
1b350 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
1b360 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65   /* Nesting leve
1b370 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65  l */.    int iRe
1b380 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
1b390 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65  * Reg with value
1b3a0 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e   of this column.
1b3b0 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a   0 means none. *
1b3c0 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20  /.    int lru;  
1b3d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
1b3e0 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73  east recently us
1b3f0 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65  ed entry has the
1b400 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20   smallest value 
1b410 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65  */.  } aColCache
1b420 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43  [SQLITE_N_COLCAC
1b430 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72  HE];  /* One for
1b440 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63   each column cac
1b450 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45 78  he entry */.  Ex
1b460 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78  prList *pConstEx
1b470 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65  pr;/* Constant e
1b480 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
1b490 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74  Token constraint
1b4a0 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20  Name;/* Name of 
1b4b0 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63  the constraint c
1b4c0 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70  urrently being p
1b4d0 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61  arsed */.  yDbMa
1b4e0 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20  sk writeMask;   
1b4f0 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65  /* Start a write
1b500 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
1b510 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20  these databases 
1b520 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f  */.  yDbMask coo
1b530 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74  kieMask;  /* Bit
1b540 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76  mask of schema v
1b550 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65  erified database
1b560 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69  s */.  int cooki
1b570 65 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41  eValue[SQLITE_MA
1b580 58 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20  X_ATTACHED+2];  
1b590 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f  /* Values of coo
1b5a0 6b 69 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a  kies to verify *
1b5b0 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64  /.  int regRowid
1b5c0 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69  ;        /* Regi
1b5d0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77  ster holding row
1b5e0 69 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42  id of CREATE TAB
1b5f0 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e  LE entry */.  in
1b600 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20  t regRoot;      
1b610 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
1b620 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65  olding root page
1b630 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20   number for new 
1b640 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74  objects */.  int
1b650 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20   nMaxArg;       
1b660 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61    /* Max args pa
1b670 73 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e  ssed to user fun
1b680 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f  ction by sub-pro
1b690 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45  gram */.#if SELE
1b6a0 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a  CTTRACE_ENABLED.
1b6b0 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20    int nSelect;  
1b6c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b6d0 20 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74 65   of SELECT state
1b6e0 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20  ments seen */.  
1b6f0 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e  int nSelectInden
1b700 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61 72 20  t;   /* How far 
1b710 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45 43 54  to indent SELECT
1b720 54 52 41 43 45 28 29 20 6f 75 74 70 75 74 20 2a  TRACE() output *
1b730 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
1b740 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
1b750 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20  RED_CACHE.  int 
1b760 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20  nTableLock;     
1b770 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1b780 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c  locks in aTableL
1b790 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f  ock */.  TableLo
1b7a0 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20  ck *aTableLock; 
1b7b0 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c  /* Required tabl
1b7c0 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72  e locks for shar
1b7d0 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f  ed-cache mode */
1b7e0 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e  .#endif.  Autoin
1b7f0 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f  cInfo *pAinc;  /
1b800 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
1b810 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  out AUTOINCREMEN
1b820 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20  T counters */.. 
1b830 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
1b840 75 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69 6e  used while codin
1b850 67 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  g trigger progra
1b860 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a  ms. */.  Parse *
1b870 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a  pToplevel;    /*
1b880 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
1b890 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61   for main progra
1b8a0 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20  m (or NULL) */. 
1b8b0 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72   Table *pTrigger
1b8c0 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74  Tab;  /* Table t
1b8d0 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e  riggers are bein
1b8e0 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20  g coded for */. 
1b8f0 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20   int addrCrTab; 
1b900 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73        /* Address
1b910 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61 62   of OP_CreateTab
1b920 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45  le opcode on CRE
1b930 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 69  ATE TABLE */.  i
1b940 6e 74 20 61 64 64 72 53 6b 69 70 50 4b 3b 20 20  nt addrSkipPK;  
1b950 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f      /* Address o
1b960 66 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f  f instruction to
1b970 20 73 6b 69 70 20 50 52 49 4d 41 52 59 20 4b 45   skip PRIMARY KE
1b980 59 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 33 32  Y index */.  u32
1b990 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20   nQueryLoop;    
1b9a0 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20    /* Est number 
1b9b0 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66  of iterations of
1b9c0 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67   a query (10*log
1b9d0 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f  2(N)) */.  u32 o
1b9e0 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ldmask;         
1b9f0 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a  /* Mask of old.*
1ba00 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
1ba10 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77  ced */.  u32 new
1ba20 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a  mask;         /*
1ba30 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63   Mask of new.* c
1ba40 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65  olumns reference
1ba50 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67  d */.  u8 eTrigg
1ba60 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54  erOp;       /* T
1ba70 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
1ba80 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45  ERT or TK_DELETE
1ba90 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66   */.  u8 eOrconf
1baa0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65  ;          /* De
1bab0 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1bac0 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69  T policy for tri
1bad0 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20  gger steps */.  
1bae0 75 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65  u8 disableTrigge
1baf0 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  rs;  /* True to 
1bb00 64 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73  disable triggers
1bb10 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a   */..  /********
1bb20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bb30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bb40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bb50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bb60 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63  .  ** Above is c
1bb70 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20  onstant between 
1bb80 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c  recursions.  Bel
1bb90 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f  ow is reset befo
1bba0 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a  re and after.  *
1bbb0 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e  * each recursion
1bbc0 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20  .  The boundary 
1bbd0 62 65 74 77 65 65 6e 20 74 68 65 73 65 20 74 77  between these tw
1bbe0 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74  o regions is det
1bbf0 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69  ermined.  ** usi
1bc00 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  ng offsetof(Pars
1bc10 65 2c 6e 56 61 72 29 20 73 6f 20 74 68 65 20 6e  e,nVar) so the n
1bc20 56 61 72 20 66 69 65 6c 64 20 6d 75 73 74 20 62  Var field must b
1bc30 65 20 74 68 65 20 66 69 72 73 74 20 66 69 65 6c  e the first fiel
1bc40 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 72 65  d.  ** in the re
1bc50 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a  cursive region..
1bc60 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
1bc70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bc80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bc90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bca0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69  **********/..  i
1bcb0 6e 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20  nt nVar;        
1bcc0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1bcd0 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62  er of '?' variab
1bce0 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20  les seen in the 
1bcf0 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  SQL so far */.  
1bd00 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20  int nzVar;      
1bd10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1bd20 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  ber of available
1bd30 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b   slots in azVar[
1bd40 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72  ] */.  u8 iPkSor
1bd50 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
1bd60 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20   /* ASC or DESC 
1bd70 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d  for INTEGER PRIM
1bd80 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20  ARY KEY */.  u8 
1bd90 62 46 72 65 65 57 69 74 68 3b 20 20 20 20 20 20  bFreeWith;      
1bda0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1bdb0 66 20 70 57 69 74 68 20 73 68 6f 75 6c 64 20 62  f pWith should b
1bdc0 65 20 66 72 65 65 64 20 77 69 74 68 20 70 61 72  e freed with par
1bdd0 73 65 72 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c  ser */.  u8 expl
1bde0 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ain;            
1bdf0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
1be00 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69  e EXPLAIN flag i
1be10 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71  s found on the q
1be20 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20  uery */.#ifndef 
1be30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1be40 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65  UALTABLE.  u8 de
1be50 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20  clareVtab;      
1be60 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1be70 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64  inside sqlite3_d
1be80 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f  eclare_vtab() */
1be90 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b  .  int nVtabLock
1bea0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1beb0 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61  Number of virtua
1bec0 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b  l tables to lock
1bed0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
1bee0 20 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20   nAlias;        
1bef0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1bf00 20 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73 75   of aliased resu
1bf10 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a  lt set columns *
1bf20 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b  /.  int nHeight;
1bf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1bf40 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65   Expression tree
1bf50 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65   height of curre
1bf60 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f  nt sub-select */
1bf70 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1bf80 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69  OMIT_EXPLAIN.  i
1bf90 6e 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20  nt iSelectId;   
1bfa0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f           /* ID o
1bfb0 66 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74  f current select
1bfc0 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74   for EXPLAIN out
1bfd0 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65  put */.  int iNe
1bfe0 78 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20  xtSelectId;     
1bff0 20 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c     /* Next avail
1c000 61 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66  able select ID f
1c010 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75  or EXPLAIN outpu
1c020 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68  t */.#endif.  ch
1c030 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20  ar **azVar;     
1c040 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
1c050 65 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20  ers to names of 
1c060 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20  parameters */.  
1c070 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65  Vdbe *pReprepare
1c080 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20  ;         /* VM 
1c090 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64  being reprepared
1c0a0 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61   (sqlite3Reprepa
1c0b0 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74  re()) */.  const
1c0c0 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20   char *zTail;   
1c0d0 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20       /* All SQL 
1c0e0 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61  text past the la
1c0f0 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72  st semicolon par
1c100 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  sed */.  Table *
1c110 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20  pNewTable;      
1c120 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65     /* A table be
1c130 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20  ing constructed 
1c140 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  by CREATE TABLE 
1c150 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e  */.  Trigger *pN
1c160 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f  ewTrigger;     /
1c170 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20  * Trigger under 
1c180 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43  construct by a C
1c190 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f  REATE TRIGGER */
1c1a0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1c1b0 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20  AuthContext; /* 
1c1c0 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65  The 6th paramete
1c1d0 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63  r to db->xAuth c
1c1e0 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f  allbacks */.  To
1c1f0 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20  ken sNameToken; 
1c200 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
1c210 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65   with unqualifie
1c220 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  d schema object 
1c230 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  name */.  Token 
1c240 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20  sLastToken;     
1c250 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20      /* The last 
1c260 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a  token parsed */.
1c270 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1c280 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
1c290 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20  .  Token sArg;  
1c2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c2b0 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  Complete text of
1c2c0 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65   a module argume
1c2d0 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a  nt */.  Table **
1c2e0 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20  apVtabLock;     
1c2f0 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
1c300 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e  virtual tables n
1c310 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a  eeding locking *
1c320 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65  /.#endif.  Table
1c330 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20   *pZombieTab;   
1c340 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
1c350 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f  Table objects to
1c360 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f   delete after co
1c370 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67  de gen */.  Trig
1c380 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72  gerPrg *pTrigger
1c390 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20  Prg;  /* Linked 
1c3a0 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72  list of coded tr
1c3b0 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68  iggers */.  With
1c3c0 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20   *pWith;        
1c3d0 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
1c3e0 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
1c3f0 20 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   NULL */.};../*.
1c400 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
1c410 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69  f currently insi
1c420 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65  de an sqlite3_de
1c430 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c  clare_vtab() cal
1c440 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  l..*/.#ifdef SQL
1c450 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1c460 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20  TABLE.  #define 
1c470 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20  IN_DECLARE_VTAB 
1c480 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  0.#else.  #defin
1c490 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41  e IN_DECLARE_VTA
1c4a0 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61  B (pParse->decla
1c4b0 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a  reVtab).#endif..
1c4c0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1c4d0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1c4e0 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e  ng structure can
1c4f0 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20   be declared on 
1c500 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64  a stack and used
1c510 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20  .** to save the 
1c520 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
1c530 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74  xt value so that
1c540 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f   it can be resto
1c550 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74  red later..*/.st
1c560 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74  ruct AuthContext
1c570 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
1c580 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20  *zAuthContext;  
1c590 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61   /* Put saved Pa
1c5a0 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74  rse.zAuthContext
1c5b0 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65   here */.  Parse
1c5c0 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
1c5d0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61         /* The Pa
1c5e0 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f  rse structure */
1c5f0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69  .};../*.** Bitfi
1c600 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35  eld flags for P5
1c610 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75   value in variou
1c620 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 23 64  s opcodes..*/.#d
1c630 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48  efine OPFLAG_NCH
1c640 41 4e 47 45 20 20 20 20 20 20 20 30 78 30 31 20  ANGE       0x01 
1c650 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64     /* Set to upd
1c660 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20  ate db->nChange 
1c670 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1c680 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20 20  G_EPHEM         
1c690 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x01    /* OP_Co
1c6a0 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c 20  lumn: Ephemeral 
1c6b0 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f 0a  output is ok */.
1c6c0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c  #define OPFLAG_L
1c6d0 41 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 30  ASTROWID     0x0
1c6e0 32 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75  2    /* Set to u
1c6f0 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f  pdate db->lastRo
1c700 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  wid */.#define O
1c710 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20  PFLAG_ISUPDATE  
1c720 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54      0x04    /* T
1c730 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73  his OP_Insert is
1c740 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a   an sql UPDATE *
1c750 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1c760 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30  _APPEND        0
1c770 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69  x08    /* This i
1c780 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61  s likely to be a
1c790 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66  n append */.#def
1c7a0 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  ine OPFLAG_USESE
1c7b0 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20  EKRESULT 0x10   
1c7c0 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64   /* Try to avoid
1c7d0 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65   a seek in Btree
1c7e0 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66  Insert() */.#def
1c7f0 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54  ine OPFLAG_LENGT
1c800 48 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20  HARG     0x40   
1c810 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
1c820 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67  ly used for leng
1c830 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  th() */.#define 
1c840 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
1c850 20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20       0x80    /* 
1c860 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75  OP_Column only u
1c870 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29  sed for typeof()
1c880 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1c890 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20  AG_BULKCSR      
1c8a0 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x01    /* OP_O
1c8b0 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70  pen** used to op
1c8c0 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a  en bulk cursor *
1c8d0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1c8e0 5f 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30  _P2ISREG       0
1c8f0 78 30 32 20 20 20 20 2f 2a 20 50 32 20 74 6f 20  x02    /* P2 to 
1c900 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72  OP_Open** is a r
1c910 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a  egister number *
1c920 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1c930 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30  _PERMUTE       0
1c940 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d  x01    /* OP_Com
1c950 70 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65  pare: use the pe
1c960 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a  rmutation */../*
1c970 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72  . * Each trigger
1c980 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
1c990 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
1c9a0 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20  is stored as an 
1c9b0 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73  instance of. * s
1c9c0 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 0a  truct Trigger. .
1c9d0 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74   *. * Pointers t
1c9e0 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  o instances of s
1c9f0 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72  truct Trigger ar
1ca00 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20  e stored in two 
1ca10 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74  ways.. * 1. In t
1ca20 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61  he "trigHash" ha
1ca30 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f  sh table (part o
1ca40 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74  f the sqlite3* t
1ca50 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74  hat represents t
1ca60 68 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62 61  he . *    databa
1ca70 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73  se). This allows
1ca80 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75   Trigger structu
1ca90 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65  res to be retrie
1caa0 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20  ved by name.. * 
1cab0 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  2. All triggers 
1cac0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1cad0 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66  a single table f
1cae0 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73  orm a linked lis
1caf0 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20  t, using the. * 
1cb00 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20     pNext member 
1cb10 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
1cb20 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  r. A pointer to 
1cb30 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
1cb40 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c  t of the. *    l
1cb50 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74  inked list is st
1cb60 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72  ored as the "pTr
1cb70 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66  igger" member of
1cb80 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a   the associated.
1cb90 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62   *    struct Tab
1cba0 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73  le.. *. * The "s
1cbb0 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
1cbc0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
1cbd0 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
1cbe0 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a  a linked list. *
1cbf0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1cc00 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73  SQL statements s
1cc10 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20  pecified as the 
1cc20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
1cc30 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
1cc40 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  ger {.  char *zN
1cc50 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
1cc60 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  /* The name of t
1cc70 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20  he trigger      
1cc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc90 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62    */.  char *tab
1cca0 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
1ccb0 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76  * The table or v
1ccc0 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65  iew to which the
1ccd0 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73   trigger applies
1cce0 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
1ccf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1cd00 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
1cd10 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
1cd20 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20  _INSERT         
1cd30 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20  */.  u8 tr_tm;  
1cd40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1cd50 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42  One of TRIGGER_B
1cd60 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41  EFORE, TRIGGER_A
1cd70 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a  FTER */.  Expr *
1cd80 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20  pWhen;          
1cd90 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c    /* The WHEN cl
1cda0 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72  ause of the expr
1cdb0 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e  ession (may be N
1cdc0 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74  ULL) */.  IdList
1cdd0 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20   *pColumns;     
1cde0 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20    /* If this is 
1cdf0 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f  an UPDATE OF <co
1ce00 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67  lumn-list> trigg
1ce10 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  er,.            
1ce20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce30 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73   the <column-lis
1ce40 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72  t> is stored her
1ce50 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
1ce60 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f  Schema;        /
1ce70 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
1ce80 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
1ce90 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61  */.  Schema *pTa
1cea0 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  bSchema;     /* 
1ceb0 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
1cec0 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  g the table */. 
1ced0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74   TriggerStep *st
1cee0 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b  ep_list; /* Link
1cef0 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   list of trigger
1cf00 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20   program steps  
1cf10 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
1cf20 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20  Trigger *pNext; 
1cf30 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
1cf40 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74  trigger associat
1cf50 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c  ed with the tabl
1cf60 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  e */.};../*.** A
1cf70 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68   trigger is eith
1cf80 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61  er a BEFORE or a
1cf90 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e  n AFTER trigger.
1cfa0 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
1cfb0 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74  constants.** det
1cfc0 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a  ermine which. .*
1cfd0 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72  *.** If there ar
1cfe0 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67  e multiple trigg
1cff0 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f  ers, you might o
1d000 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e  f some BEFORE an
1d010 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a  d some AFTER..**
1d020 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20   In that cases, 
1d030 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65  the constants be
1d040 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20  low can be ORed 
1d050 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65  together..*/.#de
1d060 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46  fine TRIGGER_BEF
1d070 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54  ORE  1.#define T
1d080 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32  RIGGER_AFTER   2
1d090 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61  ../*. * An insta
1d0a0 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72  nce of struct Tr
1d0b0 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65  iggerStep is use
1d0c0 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e  d to store a sin
1d0d0 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  gle SQL statemen
1d0e0 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70  t. * that is a p
1d0f0 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72  art of a trigger
1d100 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a  -program. . *. *
1d110 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   Instances of st
1d120 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
1d130 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
1d140 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c   singly linked l
1d150 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75  ist (linked. * u
1d160 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22  sing the "pNext"
1d170 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e   member) referen
1d180 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70  ced by the "step
1d190 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66  _list" member of
1d1a0 20 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69 61   the . * associa
1d1b0 74 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67  ted struct Trigg
1d1c0 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65  er instance. The
1d1d0 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
1d1e0 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  f the linked lis
1d1f0 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73  t is. * the firs
1d200 74 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72  t step of the tr
1d210 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20  igger-program.. 
1d220 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d  * . * The "op" m
1d230 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20  ember indicates 
1d240 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20  whether this is 
1d250 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53  a "DELETE", "INS
1d260 45 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f  ERT", "UPDATE" o
1d270 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74  r. * "SELECT" st
1d280 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61  atement. The mea
1d290 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68  nings of the oth
1d2a0 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65  er members is de
1d2b0 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
1d2c0 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70  . * value of "op
1d2d0 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a  " as follows:. *
1d2e0 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e  . * (op == TK_IN
1d2f0 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20  SERT). * orconf 
1d300 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65     -> stores the
1d310 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
1d320 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63  orithm. * pSelec
1d330 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
1d340 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
1d350 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20   ... SELECT ... 
1d360 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a  statement, then.
1d370 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1d380 74 68 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f  this stores a po
1d390 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c  inter to the SEL
1d3a0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f  ECT statement. O
1d3b0 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
1d3c0 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41  * target    -> A
1d3d0 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74   token holding t
1d3e0 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f  he quoted name o
1d3f0 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69  f the table to i
1d400 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70  nsert into.. * p
1d410 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74  ExprList -> If t
1d420 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
1d430 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53   INTO ... VALUES
1d440 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20   ... statement, 
1d450 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20  then. *         
1d460 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73       this stores
1d470 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e   values to be in
1d480 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73  serted. Otherwis
1d490 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69  e NULL.. * pIdLi
1d4a0 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  st   -> If this 
1d4b0 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
1d4c0 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e  O ... (<column-n
1d4d0 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e  ames>) VALUES ..
1d4e0 2e 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  . . *           
1d4f0 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68     statement, th
1d500 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74  en this stores t
1d510 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20  he column-names 
1d520 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20  to be. *        
1d530 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69        inserted i
1d540 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  nto.. *. * (op =
1d550 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20  = TK_DELETE). * 
1d560 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74  target    -> A t
1d570 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65  oken holding the
1d580 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20   quoted name of 
1d590 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c  the table to del
1d5a0 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68  ete from.. * pWh
1d5b0 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
1d5c0 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
1d5d0 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  e DELETE stateme
1d5e0 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
1d5f0 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
1d600 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
1d610 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28  e NULL.. * . * (
1d620 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29  op == TK_UPDATE)
1d630 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e  . * target    ->
1d640 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67   A token holding
1d650 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65   the quoted name
1d660 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
1d670 20 75 70 64 61 74 65 20 72 6f 77 73 20 6f 66 2e   update rows of.
1d680 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e  . * pWhere    ->
1d690 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
1d6a0 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  e of the UPDATE 
1d6b0 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65  statement if one
1d6c0 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20   is specified.. 
1d6d0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f  *              O
1d6e0 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
1d6f0 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41  * pExprList -> A
1d700 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c   list of the col
1d710 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61  umns to update a
1d720 6e 64 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  nd the expressio
1d730 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20  ns to update. * 
1d740 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1d750 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65  m to. See sqlite
1d760 33 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65  3Update() docume
1d770 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61  ntation of "pCha
1d780 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20  nges". *        
1d790 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a        argument..
1d7a0 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54   * . */.struct T
1d7b0 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75  riggerStep {.  u
1d7c0 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
1d7d0 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
1d7e0 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
1d7f0 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54  TE, TK_INSERT, T
1d800 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38  K_SELECT */.  u8
1d810 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20   orconf;        
1d820 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63     /* OE_Rollbac
1d830 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67  k etc. */.  Trig
1d840 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20  ger *pTrig;     
1d850 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20   /* The trigger 
1d860 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69  that this step i
1d870 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20  s a part of */. 
1d880 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
1d890 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20  ;     /* SELECT 
1d8a0 73 74 61 74 6d 65 6e 74 20 6f 72 20 52 48 53 20  statment or RHS 
1d8b0 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  of INSERT INTO .
1d8c0 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a  . SELECT ... */.
1d8d0 20 20 54 6f 6b 65 6e 20 74 61 72 67 65 74 3b 20    Token target; 
1d8e0 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74         /* Target
1d8f0 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54   table for DELET
1d900 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52  E, UPDATE, INSER
1d910 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  T */.  Expr *pWh
1d920 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  ere;        /* T
1d930 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
1d940 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50  for DELETE or UP
1d950 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20  DATE steps */.  
1d960 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c  ExprList *pExprL
1d970 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75  ist; /* SET clau
1d980 73 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a  se for UPDATE. *
1d990 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c  /.  IdList *pIdL
1d9a0 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75  ist;     /* Colu
1d9b0 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53  mn names for INS
1d9c0 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ERT */.  Trigger
1d9d0 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a  Step *pNext;  /*
1d9e0 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e   Next in the lin
1d9f0 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67  k-list */.  Trig
1da00 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20  gerStep *pLast; 
1da10 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74   /* Last element
1da20 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56   in link-list. V
1da30 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65  alid for 1st ele
1da40 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  m only */.};../*
1da50 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
1da60 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  g structure cont
1da70 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ains information
1da80 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c   used by the sql
1da90 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75  iteFix....** rou
1daa0 74 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61  tines as they wa
1dab0 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65  lk the parse tre
1dac0 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61  e to make databa
1dad0 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a  se references.**
1dae0 20 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a   explicit.  .*/.
1daf0 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44  typedef struct D
1db00 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a  bFixer DbFixer;.
1db10 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b  struct DbFixer {
1db20 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
1db30 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61  ;      /* The pa
1db40 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20  rsing context.  
1db50 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77  Error messages w
1db60 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20  ritten here */. 
1db70 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
1db80 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d  ;    /* Fix item
1db90 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61  s to this schema
1dba0 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e   */.  int bVarOn
1dbb0 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65  ly;       /* Che
1dbc0 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20  ck for variable 
1dbd0 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20  references only 
1dbe0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1dbf0 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65  *zDb;    /* Make
1dc00 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74   sure all object
1dc10 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  s are contained 
1dc20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65  in this database
1dc30 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1dc40 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70   *zType;  /* Typ
1dc50 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
1dc60 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
1dc70 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
1dc80 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70    const Token *p
1dc90 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66  Name; /* Name of
1dca0 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
1dcb0 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
1dcc0 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a  messages */.};..
1dcd0 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65  /*.** An objecte
1dce0 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75  d used to accumu
1dcf0 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66  late the text of
1dd00 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20   a string where 
1dd10 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63  we.** do not nec
1dd20 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f  essarily know ho
1dd30 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67  w big the string
1dd40 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20   will be in the 
1dd50 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  end..*/.struct S
1dd60 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69  trAccum {.  sqli
1dd70 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
1dd80 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74   /* Optional dat
1dd90 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73  abase for lookas
1dda0 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c  ide.  Can be NUL
1ddb0 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61  L */.  char *zBa
1ddc0 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  se;         /* A
1ddd0 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e   base allocation
1dde0 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c  .  Not from mall
1ddf0 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  oc. */.  char *z
1de00 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Text;         /*
1de10 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c   The string coll
1de20 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a  ected so far */.
1de30 20 20 69 6e 74 20 20 6e 43 68 61 72 3b 20 20 20    int  nChar;   
1de40 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68         /* Length
1de50 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73   of the string s
1de60 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20  o far */.  int  
1de70 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20  nAlloc;         
1de80 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61  /* Amount of spa
1de90 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20  ce allocated in 
1dea0 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 20  zText */.  int  
1deb0 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20  mxAlloc;        
1dec0 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77  /* Maximum allow
1ded0 65 64 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  ed string length
1dee0 20 2a 2f 0a 20 20 75 38 20 20 20 75 73 65 4d 61   */.  u8   useMa
1def0 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 30 3a  lloc;      /* 0:
1df00 20 6e 6f 6e 65 2c 20 20 31 3a 20 73 71 6c 69 74   none,  1: sqlit
1df10 65 33 44 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20  e3DbMalloc,  2: 
1df20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a  sqlite3_malloc *
1df30 2f 0a 20 20 75 38 20 20 20 61 63 63 45 72 72 6f  /.  u8   accErro
1df40 72 3b 20 20 20 20 20 20 20 2f 2a 20 53 54 52 41  r;       /* STRA
1df50 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54  CCUM_NOMEM or ST
1df60 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f  RACCUM_TOOBIG */
1df70 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41  .};.#define STRA
1df80 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23  CCUM_NOMEM   1.#
1df90 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f  define STRACCUM_
1dfa0 54 4f 4f 42 49 47 20 20 32 0a 0a 2f 2a 0a 2a 2a  TOOBIG  2../*.**
1dfb0 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
1dfc0 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
1dfd0 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63  used to communic
1dfe0 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ate information.
1dff0 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49  ** from sqlite3I
1e000 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65  nit and OP_Parse
1e010 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20  Schema into the 
1e020 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
1e030 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ack..*/.typedef 
1e040 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74  struct {.  sqlit
1e050 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
1e060 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62  * The database b
1e070 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
1e080 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45   */.  char **pzE
1e090 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72  rrMsg;    /* Err
1e0a0 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65  or message store
1e0b0 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20  d here */.  int 
1e0c0 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
1e0d0 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61  /* 0 for main da
1e0e0 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54  tabase.  1 for T
1e0f0 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54  EMP, 2.. for ATT
1e100 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72  ACHed */.  int r
1e110 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
1e120 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74  * Result code st
1e130 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49  ored here */.} I
1e140 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20  nitData;../*.** 
1e150 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  Structure contai
1e160 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66  ning global conf
1e170 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66  iguration data f
1e180 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69  or the SQLite li
1e190 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  brary..**.** Thi
1e1a0 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f  s structure also
1e1b0 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73   contains some s
1e1c0 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tate information
1e1d0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69  ..*/.struct Sqli
1e1e0 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e  te3Config {.  in
1e1f0 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20  t bMemstat;     
1e200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e210 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
1e220 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20  e memory status 
1e230 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75  */.  int bCoreMu
1e240 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
1e250 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1e260 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75  o enable core mu
1e270 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  texing */.  int 
1e280 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20  bFullMutex;     
1e290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e2a0 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
1e2b0 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f  full mutexing */
1e2c0 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b  .  int bOpenUri;
1e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2e0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1e2f0 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61  interpret filena
1e300 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20  mes as URIs */. 
1e310 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20   int bUseCis;   
1e320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e330 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69     /* Use coveri
1e340 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66  ng indices for f
1e350 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69  ull-scans */.  i
1e360 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20  nt mxStrlen;    
1e370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e380 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69   /* Maximum stri
1e390 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69  ng length */.  i
1e3a0 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b  nt neverCorrupt;
1e3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3c0 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20   /* Database is 
1e3d0 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d  always well-form
1e3e0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f  ed */.  int szLo
1e3f0 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
1e400 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1e410 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62  ault lookaside b
1e420 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20  uffer size */.  
1e430 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20  int nLookaside; 
1e440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e450 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f    /* Default loo
1e460 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 63 6f  kaside buffer co
1e470 75 6e 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  unt */.  sqlite3
1e480 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20  _mem_methods m; 
1e490 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
1e4a0 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61  w-level memory a
1e4b0 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66  llocation interf
1e4c0 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ace */.  sqlite3
1e4d0 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d  _mutex_methods m
1e4e0 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f  utex;      /* Lo
1e4f0 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e  w-level mutex in
1e500 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c  terface */.  sql
1e510 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68  ite3_pcache_meth
1e520 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f  ods2 pcache2;  /
1e530 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65  * Low-level page
1e540 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61 63 65  -cache interface
1e550 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61   */.  void *pHea
1e560 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
1e570 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20          /* Heap 
1e580 73 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f  storage space */
1e590 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20  .  int nHeap;   
1e5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5b0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
1e5c0 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pHeap[] */.  int
1e5d0 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20   mnReq, mxReq;  
1e5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e5f0 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65  * Min and max he
1e600 61 70 20 72 65 71 75 65 73 74 73 20 73 69 7a 65  ap requests size
1e610 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69  s */.  sqlite3_i
1e620 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20  nt64 szMmap;    
1e630 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70           /* mmap
1e640 28 29 20 73 70 61 63 65 20 70 65 72 20 6f 70 65  () space per ope
1e650 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69  n file */.  sqli
1e660 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70  te3_int64 mxMmap
1e670 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1e680 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66   Maximum value f
1e690 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76  or szMmap */.  v
1e6a0 6f 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20  oid *pScratch;  
1e6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6c0 20 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f   /* Scratch memo
1e6d0 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63  ry */.  int szSc
1e6e0 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
1e6f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
1e700 65 20 6f 66 20 65 61 63 68 20 73 63 72 61 74 63  e of each scratc
1e710 68 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e  h buffer */.  in
1e720 74 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20  t nScratch;     
1e730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e740 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72  /* Number of scr
1e750 61 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a  atch buffers */.
1e760 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20    void *pPage;  
1e770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e780 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68      /* Page cach
1e790 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e  e memory */.  in
1e7a0 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20  t szPage;       
1e7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7c0 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
1e7d0 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20  page in pPage[] 
1e7e0 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20  */.  int nPage; 
1e7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e800 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1e810 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61   of pages in pPa
1e820 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78  ge[] */.  int mx
1e830 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20  ParserStack;    
1e840 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d              /* m
1e850 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20  aximum depth of 
1e860 74 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b  the parser stack
1e870 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64   */.  int shared
1e880 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20  CacheEnabled;   
1e890 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20          /* true 
1e8a0 69 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  if shared-cache 
1e8b0 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a  mode enabled */.
1e8c0 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d    /* The above m
1e8d0 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69  ight be initiali
1e8e0 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e  zed to non-zero.
1e8f0 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
1e900 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20  need to always. 
1e910 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65   ** initially be
1e920 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20   zero, however. 
1e930 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b  */.  int isInit;
1e940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e950 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
1e960 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74  fter initializat
1e970 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64  ion has finished
1e980 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67   */.  int inProg
1e990 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20  ress;           
1e9a0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1e9b0 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61  while initializa
1e9c0 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
1e9d0 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65   */.  int isMute
1e9e0 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  xInit;          
1e9f0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1ea00 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72  after mutexes ar
1ea10 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  e initialized */
1ea20 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49  .  int isMallocI
1ea30 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
1ea40 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
1ea50 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
1ea60 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
1ea70 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20  t isPCacheInit; 
1ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea90 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
1eaa0 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
1eab0 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  zed */.  int nRe
1eac0 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  fInitMutex;     
1ead0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1eae0 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66  mber of users of
1eaf0 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20   pInitMutex */. 
1eb00 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
1eb10 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  pInitMutex;     
1eb20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64     /* Mutex used
1eb30 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74   by sqlite3_init
1eb40 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f  ialize() */.  vo
1eb50 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a  id (*xLog)(void*
1eb60 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
1eb70 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66  ); /* Function f
1eb80 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20  or logging */.  
1eb90 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20  void *pLogArg;  
1eba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebb0 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
1ebc0 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29  gument to xLog()
1ebd0 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
1ebe0 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a  E_ENABLE_SQLLOG.
1ebf0 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29    void(*xSqllog)
1ec00 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
1ec10 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
1ec20 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c  );.  void *pSqll
1ec30 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69  ogArg;.#endif.#i
1ec40 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45  fdef SQLITE_VDBE
1ec50 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54  _COVERAGE.  /* T
1ec60 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
1ec70 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55  lback (if not NU
1ec80 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f  LL) is invoked o
1ec90 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61  n every VDBE bra
1eca0 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69  nch.  ** operati
1ecb0 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c  on.  Set the cal
1ecc0 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49  lback using SQLI
1ecd0 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45  TE_TESTCTRL_VDBE
1ece0 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a  _COVERAGE..  */.
1ecf0 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72    void (*xVdbeBr
1ed00 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20  anch)(void*,int 
1ed10 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69  iSrcLine,u8 eThi
1ed20 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43  s,u8 eMx);  /* C
1ed30 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
1ed40 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72  d *pVdbeBranchAr
1ed50 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
1ed60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed70 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72         /* 1st ar
1ed80 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66  gument */.#endif
1ed90 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1eda0 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
1edb0 54 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43  T.  int (*xTestC
1edc0 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20  allback)(int);  
1edd0 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64        /* Invoked
1ede0 20 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74   by sqlite3Fault
1edf0 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  Sim() */.#endif.
1ee00 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65    int bLocaltime
1ee10 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20  Fault;          
1ee20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66      /* True to f
1ee30 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20  ail localtime() 
1ee40 63 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  calls */.};../*.
1ee50 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73  ** This macro is
1ee60 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20   used inside of 
1ee70 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
1ee80 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20  nts to indicate 
1ee90 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73 65  that.** the asse
1eea0 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  rt is only valid
1eeb0 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65   on a well-forme
1eec0 64 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e 73  d database.  Ins
1eed0 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20  tead of:.**.**  
1eee0 20 20 20 61 73 73 65 72 74 28 20 58 20 29 3b 0a     assert( X );.
1eef0 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73  **.** One writes
1ef00 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
1ef10 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50 54  rt( X || CORRUPT
1ef20 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52  _DB );.**.** COR
1ef30 52 55 50 54 5f 44 42 20 69 73 20 74 72 75 65 20  RUPT_DB is true 
1ef40 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70  during normal op
1ef50 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50  eration.  CORRUP
1ef60 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e  T_DB does not in
1ef70 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20 74  dicate.** that t
1ef80 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 64  he database is d
1ef90 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75 70  efinitely corrup
1efa0 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74 20  t, only that it 
1efb0 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75 70 74  might be corrupt
1efc0 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65  ..** For most te
1efd0 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55 50  st cases, CORRUP
1efe0 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20 66  T_DB is set to f
1eff0 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70 65  alse using a spe
1f000 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  cial.** sqlite3_
1f010 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20  test_control(). 
1f020 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61 73   This enables as
1f030 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
1f040 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68  s to prove.** th
1f050 69 6e 67 73 20 74 68 61 74 20 61 72 65 20 61 6c  ings that are al
1f060 77 61 79 73 20 74 72 75 65 20 66 6f 72 20 77 65  ways true for we
1f070 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61  ll-formed databa
1f080 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ses..*/.#define 
1f090 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71 6c  CORRUPT_DB  (sql
1f0a0 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72  ite3Config.never
1f0b0 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a  Corrupt==0)../*.
1f0c0 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74  ** Context point
1f0d0 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74  er passed down t
1f0e0 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d  hrough the tree-
1f0f0 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  walk..*/.struct 
1f100 57 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28  Walker {.  int (
1f110 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28  *xExprCallback)(
1f120 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
1f130 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
1f140 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73   for expressions
1f150 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c   */.  int (*xSel
1f160 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  ectCallback)(Wal
1f170 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20  ker*,Select*);  
1f180 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20  /* Callback for 
1f190 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69  SELECTs */.  voi
1f1a0 64 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62  d (*xSelectCallb
1f1b0 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65  ack2)(Walker*,Se
1f1c0 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64  lect*);/* Second
1f1d0 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45   callback for SE
1f1e0 4c 45 43 54 73 20 2a 2f 0a 20 20 50 61 72 73 65  LECTs */.  Parse
1f1f0 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
1f200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f210 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63       /* Parser c
1f220 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e  ontext.  */.  in
1f230 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20  t walkerDepth;  
1f240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f250 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1f260 72 20 6f 66 20 73 75 62 71 75 65 72 69 65 73 20  r of subqueries 
1f270 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20  */.  union {    
1f280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f2a0 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72  * Extra data for
1f2b0 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20   callback */.   
1f2c0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
1f2d0 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  C;              
1f2e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1f2f0 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f  aming context */
1f300 0a 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20 20  .    int i;     
1f310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f330 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
1f340 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20   */.    SrcList 
1f350 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20  *pSrcList;      
1f360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f370 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73     /* FROM claus
1f380 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  e */.    struct 
1f390 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f  SrcCount *pSrcCo
1f3a0 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  unt;            
1f3b0 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20      /* Counting 
1f3c0 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65  column reference
1f3d0 73 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a  s */.  } u;.};..
1f3e0 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61  /* Forward decla
1f3f0 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73  rations */.int s
1f400 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57  qlite3WalkExpr(W
1f410 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  alker*, Expr*);.
1f420 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
1f430 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c  xprList(Walker*,
1f440 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
1f450 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
1f460 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  ct(Walker*, Sele
1f470 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
1f480 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28  3WalkSelectExpr(
1f490 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
1f4a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
1f4b0 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c  lkSelectFrom(Wal
1f4c0 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
1f4d0 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f  ./*.** Return co
1f4e0 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73  de from the pars
1f4f0 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70  e-tree walking p
1f500 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68  rimitives and th
1f510 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73  eir.** callbacks
1f520 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  ..*/.#define WRC
1f530 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20  _Continue    0  
1f540 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77   /* Continue dow
1f550 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20  n into children 
1f560 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50  */.#define WRC_P
1f570 72 75 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f  rune       1   /
1f580 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20  * Omit children 
1f590 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c  but continue wal
1f5a0 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f  king siblings */
1f5b0 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f  .#define WRC_Abo
1f5c0 72 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20  rt       2   /* 
1f5d0 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65  Abandon the tree
1f5e0 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   walk */../*.** 
1f5f0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1f600 68 69 73 20 73 74 72 75 63 74 75 72 65 20 72 65  his structure re
1f610 70 72 65 73 65 6e 74 73 20 61 20 73 65 74 20 6f  presents a set o
1f620 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54  f one or more CT
1f630 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61  Es.** (common ta
1f640 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 29  ble expressions)
1f650 20 63 72 65 61 74 65 64 20 62 79 20 61 20 73 69   created by a si
1f660 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65  ngle WITH clause
1f670 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 74 68  ..*/.struct With
1f680 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20 20   {.  int nCte;  
1f690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6a0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1f6b0 66 20 43 54 45 73 20 69 6e 20 74 68 65 20 57 49  f CTEs in the WI
1f6c0 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57  TH clause */.  W
1f6d0 69 74 68 20 2a 70 4f 75 74 65 72 3b 20 20 20 20  ith *pOuter;    
1f6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f6f0 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54  * Containing WIT
1f700 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c  H clause, or NUL
1f710 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43 74  L */.  struct Ct
1f720 65 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  e {             
1f730 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 65 61         /* For ea
1f740 63 68 20 43 54 45 20 69 6e 20 74 68 65 20 57 49  ch CTE in the WI
1f750 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f  TH clause.... */
1f760 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
1f770 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f780 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
1f790 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20  this CTE */.    
1f7a0 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b  ExprList *pCols;
1f7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7c0 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78 70 6c 69  /* List of expli
1f7d0 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  cit column names
1f7e0 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20  , or NULL */.   
1f7f0 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
1f800 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f810 20 2f 2a 20 54 68 65 20 64 65 66 69 6e 69 74 69   /* The definiti
1f820 6f 6e 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a  on of this CTE *
1f830 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  /.    const char
1f840 20 2a 7a 45 72 72 3b 20 20 20 20 20 20 20 20 20   *zErr;         
1f850 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d        /* Error m
1f860 65 73 73 61 67 65 20 66 6f 72 20 63 69 72 63 75  essage for circu
1f870 6c 61 72 20 72 65 66 65 72 65 6e 63 65 73 20 2a  lar references *
1f880 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a  /.  } a[1];.};..
1f890 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1f8a0 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  BUG./*.** An ins
1f8b0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 54 72 65  tance of the Tre
1f8c0 65 56 69 65 77 20 6f 62 6a 65 63 74 20 69 73 20  eView object is 
1f8d0 75 73 65 64 20 66 6f 72 20 70 72 69 6e 74 69 6e  used for printin
1f8e0 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  g the content of
1f8f0 0a 2a 2a 20 64 61 74 61 20 73 74 72 75 63 74 75  .** data structu
1f900 72 65 73 20 6f 6e 20 73 71 6c 69 74 65 33 44 65  res on sqlite3De
1f910 62 75 67 50 72 69 6e 74 66 28 29 20 75 73 69 6e  bugPrintf() usin
1f920 67 20 61 20 74 72 65 65 2d 6c 69 6b 65 20 76 69  g a tree-like vi
1f930 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72  ew..*/.struct Tr
1f940 65 65 56 69 65 77 20 7b 0a 20 20 69 6e 74 20 69  eeView {.  int i
1f950 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
1f960 20 20 20 2f 2a 20 57 68 69 63 68 20 6c 65 76 65     /* Which leve
1f970 6c 20 6f 66 20 74 68 65 20 74 72 65 65 20 77 65  l of the tree we
1f980 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38 20   are on */.  u8 
1f990 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20 20   bLine[100];    
1f9a0 20 20 20 20 20 2f 2a 20 44 72 61 77 20 76 65 72       /* Draw ver
1f9b0 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20  tical in column 
1f9c0 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69 73  i if bLine[i] is
1f9d0 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64   true */.};.#end
1f9e0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  if /* SQLITE_DEB
1f9f0 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73  UG */../*.** Ass
1fa00 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73  uming zIn points
1fa10 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79   to the first by
1fa20 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68  te of a UTF-8 ch
1fa30 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61  aracter,.** adva
1fa40 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74  nce zIn to point
1fa50 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79   to the first by
1fa60 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55  te of the next U
1fa70 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a  TF-8 character..
1fa80 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
1fa90 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29  E_SKIP_UTF8(zIn)
1faa0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
1fab0 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66            \.  if
1fac0 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78  ( (*(zIn++))>=0x
1fad0 63 30 20 29 7b 20 20 20 20 20 20 20 20 20 20 20  c0 ){           
1fae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1faf0 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20     \.    while( 
1fb00 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30  (*zIn & 0xc0)==0
1fb10 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20  x80 ){ zIn++; } 
1fb20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
1fb30 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
1fb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb60 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20       \.}../*.** 
1fb70 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50  The SQLITE_*_BKP
1fb80 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62  T macros are sub
1fb90 73 74 69 74 75 74 65 73 20 66 6f 72 20 74 68 65  stitutes for the
1fba0 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74   error codes wit
1fbb0 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61  h.** the same na
1fbc0 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74 20 74  me but without t
1fbd0 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e  he _BKPT suffix.
1fbe0 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69    These macros i
1fbf0 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65  nvoke.** routine
1fc00 73 20 74 68 61 74 20 72 65 70 6f 72 74 20 74 68  s that report th
1fc10 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e  e line-number on
1fc20 20 77 68 69 63 68 20 74 68 65 20 65 72 72 6f 72   which the error
1fc30 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75   originated.** u
1fc40 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67  sing sqlite3_log
1fc50 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65  ().  The routine
1fc60 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61  s also provide a
1fc70 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63   convenient plac
1fc80 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65  e.** to set a de
1fc90 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e  bugger breakpoin
1fca0 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
1fcb0 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e  3CorruptError(in
1fcc0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  t);.int sqlite3M
1fcd0 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b  isuseError(int);
1fce0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74  .int sqlite3Cant
1fcf0 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a  openError(int);.
1fd00 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
1fd10 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69  ORRUPT_BKPT sqli
1fd20 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
1fd30 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e  __LINE__).#defin
1fd40 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f  e SQLITE_MISUSE_
1fd50 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75  BKPT sqlite3Misu
1fd60 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  seError(__LINE__
1fd70 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ).#define SQLITE
1fd80 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73  _CANTOPEN_BKPT s
1fd90 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
1fda0 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a  ror(__LINE__)...
1fdb0 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65  /*.** FTS4 is re
1fdc0 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f  ally an extensio
1fdd0 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20  n for FTS3.  It 
1fde0 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67  is enabled using
1fdf0 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45   the.** SQLITE_E
1fe00 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f  NABLE_FTS3 macro
1fe10 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20  .  But to avoid 
1fe20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73  confusion we als
1fe30 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51  o call.** the SQ
1fe40 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
1fe50 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20   macro to serve 
1fe60 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  as an alias for 
1fe70 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1fe80 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  S3..*/.#if defin
1fe90 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1fea0 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e  _FTS4) && !defin
1feb0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1fec0 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20  _FTS3).# define 
1fed0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1fee0 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  S3.#endif../*.**
1fef0 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61   The ctype.h hea
1ff00 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f  der is needed fo
1ff10 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74  r non-ASCII syst
1ff20 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f  ems.  It is also
1ff30 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54  .** needed by FT
1ff40 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20  S3 when FTS3 is 
1ff50 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20  included in the 
1ff60 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f  amalgamation..*/
1ff70 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1ff80 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c  LITE_ASCII) || \
1ff90 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51  .    (defined(SQ
1ffa0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
1ffb0 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
1ffc0 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
1ffd0 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74  )).# include <ct
1ffe0 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  ype.h>.#endif../
1fff0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
20000 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20  ng macros mimic 
20010 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62  the standard lib
20020 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74  rary functions t
20030 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73  oupper(),.** iss
20040 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28  pace(), isalnum(
20050 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64  ), isdigit() and
20060 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73   isxdigit(), res
20070 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a  pectively. The.*
20080 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e  * sqlite version
20090 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20  s only work for 
200a0 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
200b0 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
200c0 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  locale..*/.#ifde
200d0 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23  f SQLITE_ASCII.#
200e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
200f0 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26  oupper(x)  ((x)&
20100 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  ~(sqlite3CtypeMa
20110 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
20120 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64  )(x)]&0x20)).# d
20130 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
20140 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74  pace(x)   (sqlit
20150 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
20160 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
20170 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x01).# define sq
20180 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
20190 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
201a0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
201b0 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64  r)(x)]&0x06).# d
201c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
201d0 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74  lpha(x)   (sqlit
201e0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
201f0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
20200 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x02).# define sq
20210 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20  lite3Isdigit(x) 
20220 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
20230 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
20240 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64  r)(x)]&0x04).# d
20250 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78  efine sqlite3Isx
20260 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74  digit(x)  (sqlit
20270 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
20280 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
20290 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x08).# define sq
202a0 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20  lite3Tolower(x) 
202b0 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54    (sqlite3UpperT
202c0 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64  oLower[(unsigned
202d0 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65 6c 73   char)(x)]).#els
202e0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
202f0 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20 74  e3Toupper(x)   t
20300 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64  oupper((unsigned
20310 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
20320 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61  ine sqlite3Isspa
20330 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65 28  ce(x)   isspace(
20340 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
20350 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
20360 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
20370 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e   isalnum((unsign
20380 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
20390 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
203a0 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70 68  lpha(x)   isalph
203b0 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  a((unsigned char
203c0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
203d0 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
203e0 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73 69     isdigit((unsi
203f0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
20400 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
20410 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78 64  sxdigit(x)  isxd
20420 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
20430 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
20440 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  e sqlite3Tolower
20450 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75  (x)   tolower((u
20460 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
20470 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ).#endif.int sql
20480 69 74 65 33 49 73 49 64 43 68 61 72 28 75 38 29  ite3IsIdChar(u8)
20490 3b 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61  ;../*.** Interna
204a0 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f  l function proto
204b0 74 79 70 65 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  types.*/.#define
204c0 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 20   sqlite3StrICmp 
204d0 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 0a  sqlite3_stricmp.
204e0 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65  int sqlite3Strle
204f0 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  n30(const char*)
20500 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ;.#define sqlite
20510 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65  3StrNICmp sqlite
20520 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20  3_strnicmp..int 
20530 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69  sqlite3MallocIni
20540 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  t(void);.void sq
20550 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76  lite3MallocEnd(v
20560 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  oid);.void *sqli
20570 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a  te3Malloc(u64);.
20580 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
20590 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f  locZero(u64);.vo
205a0 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
205b0 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a  locZero(sqlite3*
205c0 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
205d0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
205e0 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b  (sqlite3*, u64);
205f0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62  .char *sqlite3Db
20600 53 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  StrDup(sqlite3*,
20610 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
20620 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72  ar *sqlite3DbStr
20630 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f  NDup(sqlite3*,co
20640 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34 29 3b  nst char*, u64);
20650 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65  .void *sqlite3Re
20660 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34  alloc(void*, u64
20670 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
20680 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28  DbReallocOrFree(
20690 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20  sqlite3 *, void 
206a0 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
206b0 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28  qlite3DbRealloc(
206c0 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20  sqlite3 *, void 
206d0 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 73 71  *, u64);.void sq
206e0 6c 69 74 65 33 44 62 46 72 65 65 28 73 71 6c 69  lite3DbFree(sqli
206f0 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e  te3*, void*);.in
20700 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53  t sqlite3MallocS
20710 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  ize(void*);.int 
20720 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53  sqlite3DbMallocS
20730 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ize(sqlite3*, vo
20740 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  id*);.void *sqli
20750 74 65 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63  te3ScratchMalloc
20760 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
20770 74 65 33 53 63 72 61 74 63 68 46 72 65 65 28 76  te3ScratchFree(v
20780 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  oid*);.void *sql
20790 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69  ite3PageMalloc(i
207a0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
207b0 33 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29  3PageFree(void*)
207c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65  ;.void sqlite3Me
207d0 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64  mSetDefault(void
207e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
207f0 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73  enignMallocHooks
20800 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c  (void (*)(void),
20810 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29   void (*)(void))
20820 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61  ;.int sqlite3Hea
20830 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64  pNearlyFull(void
20840 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73  );../*.** On sys
20850 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20  tems with ample 
20860 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20  stack space and 
20870 74 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c  that support all
20880 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75  oca(), make.** u
20890 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74  se of alloca() t
208a0 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66  o obtain space f
208b0 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74  or large automat
208c0 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20  ic objects.  By 
208d0 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61  default,.** obta
208e0 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61  in space from ma
208f0 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68  lloc()..**.** Th
20900 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69  e alloca() routi
20910 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73  ne never returns
20920 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c   NULL.  This wil
20930 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70 61 74  l cause code pat
20940 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20  hs.** that deal 
20950 77 69 74 68 20 73 71 6c 69 74 65 33 53 74 61 63  with sqlite3Stac
20960 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65  kAlloc() failure
20970 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61  s to be unreacha
20980 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ble..*/.#ifdef S
20990 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41  QLITE_USE_ALLOCA
209a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
209b0 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44  3StackAllocRaw(D
209c0 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a  ,N)   alloca(N).
209d0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
209e0 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
209f0 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f  ,N)  memset(allo
20a00 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64  ca(N), 0, N).# d
20a10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
20a20 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20  ckFree(D,P)     
20a30 20 20 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e    .#else.# defin
20a40 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
20a50 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71  locRaw(D,N)   sq
20a60 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
20a70 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  (D,N).# define s
20a80 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
20a90 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74  Zero(D,N)  sqlit
20aa0 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44  e3DbMallocZero(D
20ab0 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,N).# define sql
20ac0 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
20ad0 50 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  P)       sqlite3
20ae0 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64  DbFree(D,P).#end
20af0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
20b00 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33  E_ENABLE_MEMSYS3
20b10 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
20b20 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
20b30 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33  te3MemGetMemsys3
20b40 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23  (void);.#endif.#
20b50 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
20b60 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73  BLE_MEMSYS5.cons
20b70 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  t sqlite3_mem_me
20b80 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65  thods *sqlite3Me
20b90 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64  mGetMemsys5(void
20ba0 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e  );.#endif...#ifn
20bb0 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58  def SQLITE_MUTEX
20bc0 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f  _OMIT.  sqlite3_
20bd0 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f  mutex_methods co
20be0 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61  nst *sqlite3Defa
20bf0 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  ultMutex(void);.
20c00 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
20c10 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73  methods const *s
20c20 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28  qlite3NoopMutex(
20c30 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
20c40 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d  _mutex *sqlite3M
20c50 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a  utexAlloc(int);.
20c60 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74    int sqlite3Mut
20c70 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20  exInit(void);.  
20c80 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78  int sqlite3Mutex
20c90 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  End(void);.#endi
20ca0 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  f..int sqlite3St
20cb0 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a  atusValue(int);.
20cc0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
20cd0 75 73 41 64 64 28 69 6e 74 2c 20 69 6e 74 29 3b  usAdd(int, int);
20ce0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
20cf0 74 75 73 53 65 74 28 69 6e 74 2c 20 69 6e 74 29  tusSet(int, int)
20d00 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
20d10 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
20d20 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69  POINT.  int sqli
20d30 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29  te3IsNaN(double)
20d40 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
20d50 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29   sqlite3IsNaN(X)
20d60 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a    0.#endif../*.*
20d70 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
20d80 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
20d90 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69  tructure holds i
20da0 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
20db0 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   SQL.** function
20dc0 73 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74  s arguments that
20dd0 20 61 72 65 20 74 68 65 20 70 61 72 61 6d 65 74   are the paramet
20de0 65 72 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74  ers to the print
20df0 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f  f() function..*/
20e00 0a 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72  .struct PrintfAr
20e10 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20  guments {.  int 
20e20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  nArg;           
20e30 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75       /* Total nu
20e40 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
20e50 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64  s */.  int nUsed
20e60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20e70 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
20e80 75 6d 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66  uments used so f
20e90 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ar */.  sqlite3_
20ea0 76 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20  value **apArg;  
20eb0 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74   /* The argument
20ec0 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 23   values */.};..#
20ed0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
20ee0 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78  INTF_INTERNAL 0x
20ef0 30 31 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  01.#define SQLIT
20f00 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43  E_PRINTF_SQLFUNC
20f10 20 20 30 78 30 32 0a 76 6f 69 64 20 73 71 6c 69    0x02.void sqli
20f20 74 65 33 56 58 50 72 69 6e 74 66 28 53 74 72 41  te3VXPrintf(StrA
20f30 63 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73  ccum*, u32, cons
20f40 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74  t char*, va_list
20f50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58  );.void sqlite3X
20f60 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a  Printf(StrAccum*
20f70 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61  , u32, const cha
20f80 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a  r*, ...);.char *
20f90 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73  sqlite3MPrintf(s
20fa0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
20fb0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20  ar*, ...);.char 
20fc0 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66  *sqlite3VMPrintf
20fd0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
20fe0 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
20ff0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 41  .char *sqlite3MA
21000 70 70 65 6e 64 66 28 73 71 6c 69 74 65 33 2a 2c  ppendf(sqlite3*,
21010 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
21020 2a 2c 2e 2e 2e 29 3b 0a 23 69 66 20 64 65 66 69  *,...);.#if defi
21030 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
21040 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
21050 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64  TE_DEBUG).  void
21060 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
21070 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ntf(const char*,
21080 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69   ...);.#endif.#i
21090 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
210a0 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73  _TEST).  void *s
210b0 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f  qlite3TestTextTo
210c0 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  Ptr(const char*)
210d0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ;.#endif..#if de
210e0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
210f0 55 47 29 0a 20 20 54 72 65 65 56 69 65 77 20 2a  UG).  TreeView *
21100 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 50  sqlite3TreeViewP
21110 75 73 68 28 54 72 65 65 56 69 65 77 2a 2c 75 38  ush(TreeView*,u8
21120 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
21130 33 54 72 65 65 56 69 65 77 50 6f 70 28 54 72 65  3TreeViewPop(Tre
21140 65 56 69 65 77 2a 29 3b 0a 20 20 76 6f 69 64 20  eView*);.  void 
21150 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 4c  sqlite3TreeViewL
21160 69 6e 65 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ine(TreeView*, c
21170 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
21180 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
21190 54 72 65 65 56 69 65 77 49 74 65 6d 28 54 72 65  TreeViewItem(Tre
211a0 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 63 68  eView*, const ch
211b0 61 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64  ar*, u8);.  void
211c0 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
211d0 45 78 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20  Expr(TreeView*, 
211e0 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29  const Expr*, u8)
211f0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
21200 54 72 65 65 56 69 65 77 45 78 70 72 4c 69 73 74  TreeViewExprList
21210 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
21220 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c  t ExprList*, u8,
21230 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
21240 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
21250 65 56 69 65 77 53 65 6c 65 63 74 28 54 72 65 65  eViewSelect(Tree
21260 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c  View*, const Sel
21270 65 63 74 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69  ect*, u8);.#endi
21280 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  f...void sqlite3
21290 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a  SetString(char *
212a0 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  *, sqlite3*, con
212b0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
212c0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
212d0 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e  rMsg(Parse*, con
212e0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
212f0 69 6e 74 20 73 71 6c 69 74 65 33 44 65 71 75 6f  int sqlite3Dequo
21300 74 65 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  te(char*);.int s
21310 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64  qlite3KeywordCod
21320 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  e(const unsigned
21330 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   char*, int);.in
21340 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73  t sqlite3RunPars
21350 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  er(Parse*, const
21360 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29   char*, char **)
21370 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  ;.void sqlite3Fi
21380 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65  nishCoding(Parse
21390 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
213a0 65 74 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a  etTempReg(Parse*
213b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
213c0 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50 61  eleaseTempReg(Pa
213d0 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  rse*,int);.int s
213e0 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e  qlite3GetTempRan
213f0 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  ge(Parse*,int);.
21400 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
21410 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72  aseTempRange(Par
21420 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f  se*,int,int);.vo
21430 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54  id sqlite3ClearT
21440 65 6d 70 52 65 67 43 61 63 68 65 28 50 61 72 73  empRegCache(Pars
21450 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  e*);.Expr *sqlit
21460 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69  e3ExprAlloc(sqli
21470 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54  te3*,int,const T
21480 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72  oken*,int);.Expr
21490 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73 71   *sqlite3Expr(sq
214a0 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
214b0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
214c0 6c 69 74 65 33 45 78 70 72 41 74 74 61 63 68 53  lite3ExprAttachS
214d0 75 62 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a  ubtrees(sqlite3*
214e0 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70  ,Expr*,Expr*,Exp
214f0 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
21500 65 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20  e3PExpr(Parse*, 
21510 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  int, Expr*, Expr
21520 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29  *, const Token*)
21530 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
21540 78 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c  xprAnd(sqlite3*,
21550 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45  Expr*, Expr*);.E
21560 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
21570 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  Function(Parse*,
21580 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  ExprList*, Token
21590 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
215a0 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d  ExprAssignVarNum
215b0 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ber(Parse*, Expr
215c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
215d0 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74  ExprDelete(sqlit
215e0 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  e3*, Expr*);.Exp
215f0 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
21600 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72  prListAppend(Par
21610 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  se*,ExprList*,Ex
21620 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
21630 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d  e3ExprListSetNam
21640 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  e(Parse*,ExprLis
21650 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  t*,Token*,int);.
21660 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
21670 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61 72 73  ListSetSpan(Pars
21680 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  e*,ExprList*,Exp
21690 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  rSpan*);.void sq
216a0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c  lite3ExprListDel
216b0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78  ete(sqlite3*, Ex
216c0 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
216d0 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65  lite3Init(sqlite
216e0 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74  3*, char**);.int
216f0 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
21700 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  back(void*, int,
21710 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29   char**, char**)
21720 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
21730 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65  agma(Parse*,Toke
21740 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  n*,Token*,Token*
21750 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
21760 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
21770 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73  asOfConnection(s
21780 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
21790 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63  qlite3ResetOneSc
217a0 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e  hema(sqlite3*,in
217b0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
217c0 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65  CollapseDatabase
217d0 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b  Array(sqlite3*);
217e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
217f0 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69  inParse(Parse*,i
21800 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21810 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43  3CommitInternalC
21820 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29  hanges(sqlite3*)
21830 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
21840 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63  ResultSetOfSelec
21850 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a  t(Parse*,Select*
21860 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
21870 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50  penMasterTable(P
21880 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e  arse *, int);.In
21890 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d  dex *sqlite3Prim
218a0 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c  aryKeyIndex(Tabl
218b0 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33  e*);.i16 sqlite3
218c0 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e  ColumnOfIndex(In
218d0 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64  dex*, i16);.void
218e0 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61 62   sqlite3StartTab
218f0 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  le(Parse*,Token*
21900 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Token*,int,int,
21910 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
21920 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28  qlite3AddColumn(
21930 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a  Parse*,Token*);.
21940 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e  void sqlite3AddN
21950 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69  otNull(Parse*, i
21960 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21970 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50  3AddPrimaryKey(P
21980 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
21990 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
219a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
219b0 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74  dCheckConstraint
219c0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
219d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
219e0 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65  ColumnType(Parse
219f0 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  *,Token*);.void 
21a00 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c  sqlite3AddDefaul
21a10 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78  tValue(Parse*,Ex
21a20 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73  prSpan*);.void s
21a30 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65  qlite3AddCollate
21a40 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
21a50 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
21a60 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65  e3EndTable(Parse
21a70 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
21a80 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  u8,Select*);.int
21a90 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69   sqlite3ParseUri
21aa0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  (const char*,con
21ab0 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65  st char*,unsigne
21ac0 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20  d int*,.        
21ad0 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
21ae0 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a  te3_vfs**,char**
21af0 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65  ,char **);.Btree
21b00 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54   *sqlite3DbNameT
21b10 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c  oBtree(sqlite3*,
21b20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
21b30 74 20 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63  t sqlite3CodeOnc
21b40 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 23 69 66  e(Parse *);..#if
21b50 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
21b60 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 20 64  BUILTIN_TEST.# d
21b70 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75  efine sqlite3Fau
21b80 6c 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f  ltSim(X) SQLITE_
21b90 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73  OK.#else.  int s
21ba0 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69  qlite3FaultSim(i
21bb0 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74  nt);.#endif..Bit
21bc0 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76  vec *sqlite3Bitv
21bd0 65 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69  ecCreate(u32);.i
21be0 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
21bf0 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33  Test(Bitvec*, u3
21c00 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
21c10 69 74 76 65 63 53 65 74 28 42 69 74 76 65 63 2a  itvecSet(Bitvec*
21c20 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c  , u32);.void sql
21c30 69 74 65 33 42 69 74 76 65 63 43 6c 65 61 72 28  ite3BitvecClear(
21c40 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f  Bitvec*, u32, vo
21c50 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
21c60 65 33 42 69 74 76 65 63 44 65 73 74 72 6f 79 28  e3BitvecDestroy(
21c70 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71  Bitvec*);.u32 sq
21c80 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a 65 28  lite3BitvecSize(
21c90 42 69 74 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71  Bitvec*);.int sq
21ca0 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74  lite3BitvecBuilt
21cb0 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29  inTest(int,int*)
21cc0 3b 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74  ;..RowSet *sqlit
21cd0 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c  e3RowSetInit(sql
21ce0 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e  ite3*, void*, un
21cf0 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69  signed int);.voi
21d00 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43  d sqlite3RowSetC
21d10 6c 65 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76  lear(RowSet*);.v
21d20 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65  oid sqlite3RowSe
21d30 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c  tInsert(RowSet*,
21d40 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74   i64);.int sqlit
21d50 65 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77  e3RowSetTest(Row
21d60 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74 63 68  Set*, int iBatch
21d70 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  , i64);.int sqli
21d80 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f  te3RowSetNext(Ro
21d90 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76  wSet*, i64*);..v
21da0 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
21db0 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b  eView(Parse*,Tok
21dc0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  en*,Token*,Token
21dd0 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e  *,Select*,int,in
21de0 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
21df0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
21e00 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28  EW) || !defined(
21e10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
21e20 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20  UALTABLE).  int 
21e30 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
21e40 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a  lumnNames(Parse*
21e50 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a  ,Table*);.#else.
21e60 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
21e70 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d  ViewGetColumnNam
21e80 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66  es(A,B) 0.#endif
21e90 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
21ea0 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69  _ATTACHED>30.  i
21eb0 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b  nt sqlite3DbMask
21ec0 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29  AllZero(yDbMask)
21ed0 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
21ee0 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50  lite3DropTable(P
21ef0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
21f00 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
21f10 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70   sqlite3CodeDrop
21f20 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61  Table(Parse*, Ta
21f30 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ble*, int, int);
21f40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
21f50 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33  eteTable(sqlite3
21f60 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e  *, Table*);.#ifn
21f70 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
21f80 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
21f90 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
21fa0 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50  incrementBegin(P
21fb0 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20  arse *pParse);. 
21fc0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
21fd0 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61  oincrementEnd(Pa
21fe0 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65  rse *pParse);.#e
21ff0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
22000 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
22010 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69  tBegin(X).# defi
22020 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
22030 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65  crementEnd(X).#e
22040 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
22050 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20  3Insert(Parse*, 
22060 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74  SrcList*, Select
22070 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29  *, IdList*, int)
22080 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41  ;.void *sqlite3A
22090 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c  rrayAllocate(sql
220a0 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c  ite3*,void*,int,
220b0 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69  int*,int*);.IdLi
220c0 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
220d0 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a  tAppend(sqlite3*
220e0 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  , IdList*, Token
220f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
22100 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73  dListIndex(IdLis
22110 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  t*,const char*);
22120 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
22130 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28  3SrcListEnlarge(
22140 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
22150 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53  t*, int, int);.S
22160 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
22170 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c  rcListAppend(sql
22180 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  ite3*, SrcList*,
22190 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
221a0 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
221b0 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46  e3SrcListAppendF
221c0 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20  romTerm(Parse*, 
221d0 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
221e0 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20  , Token*,.      
221f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22210 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c  Token*, Select*,
22220 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29   Expr*, IdList*)
22230 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
22240 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28 50  cListIndexedBy(P
22250 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20  arse *, SrcList 
22260 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e 74  *, Token *);.int
22270 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42   sqlite3IndexedB
22280 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c  yLookup(Parse *,
22290 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
222a0 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71  item *);.void sq
222b0 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66  lite3SrcListShif
222c0 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73  tJoinType(SrcLis
222d0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
222e0 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75  3SrcListAssignCu
222f0 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72  rsors(Parse*, Sr
22300 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
22310 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74  lite3IdListDelet
22320 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69  e(sqlite3*, IdLi
22330 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
22340 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28  e3SrcListDelete(
22350 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
22360 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  t*);.Index *sqli
22370 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78  te3AllocateIndex
22380 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c  Object(sqlite3*,
22390 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b  i16,int,char**);
223a0 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 43  .Index *sqlite3C
223b0 72 65 61 74 65 49 6e 64 65 78 28 50 61 72 73 65  reateIndex(Parse
223c0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
223d0 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73  SrcList*,ExprLis
223e0 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20  t*,int,Token*,. 
223f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22400 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20           Expr*, 
22410 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
22420 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78  sqlite3DropIndex
22430 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
22440 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
22450 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73 65  ite3Select(Parse
22460 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65  *, Select*, Sele
22470 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74  ctDest*);.Select
22480 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e   *sqlite3SelectN
22490 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  ew(Parse*,ExprLi
224a0 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  st*,SrcList*,Exp
224b0 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20  r*,ExprList*,.  
224c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224d0 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70         Expr*,Exp
224e0 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78 70 72 2a  rList*,u16,Expr*
224f0 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,Expr*);.void sq
22500 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74  lite3SelectDelet
22510 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65  e(sqlite3*, Sele
22520 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ct*);.Table *sql
22530 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75  ite3SrcListLooku
22540 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  p(Parse*, SrcLis
22550 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
22560 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65  IsReadOnly(Parse
22570 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  *, Table*, int);
22580 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
22590 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69  nTable(Parse*, i
225a0 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62  nt iCur, int iDb
225b0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
225c0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
225d0 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45  TE_ENABLE_UPDATE
225e0 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26  _DELETE_LIMIT) &
225f0 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
22600 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29  E_OMIT_SUBQUERY)
22610 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69  .Expr *sqlite3Li
22620 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c  mitWhere(Parse*,
22630 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
22640 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  xprList*,Expr*,E
22650 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e  xpr*,char*);.#en
22660 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
22670 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65  DeleteFrom(Parse
22680 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
22690 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
226a0 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20  3Update(Parse*, 
226b0 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
226c0 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  st*, Expr*, int)
226d0 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c  ;.WhereInfo *sql
226e0 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50  ite3WhereBegin(P
226f0 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  arse*,SrcList*,E
22700 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  xpr*,ExprList*,E
22710 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74  xprList*,u16,int
22720 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
22730 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66  hereEnd(WhereInf
22740 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69 74 65 33  o*);.u64 sqlite3
22750 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f  WhereOutputRowCo
22760 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  unt(WhereInfo*);
22770 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
22780 65 49 73 44 69 73 74 69 6e 63 74 28 57 68 65 72  eIsDistinct(Wher
22790 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
227a0 69 74 65 33 57 68 65 72 65 49 73 4f 72 64 65 72  ite3WhereIsOrder
227b0 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  ed(WhereInfo*);.
227c0 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
227d0 49 73 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e  IsSorted(WhereIn
227e0 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
227f0 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61  3WhereContinueLa
22800 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  bel(WhereInfo*);
22810 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
22820 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72  eBreakLabel(Wher
22830 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
22840 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61  ite3WhereOkOnePa
22850 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69  ss(WhereInfo*, i
22860 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
22870 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
22880 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  mn(Parse*, Table
22890 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
228a0 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
228b0 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
228c0 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65  lumnOfTable(Vdbe
228d0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
228e0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
228f0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d  sqlite3ExprCodeM
22900 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ove(Parse*, int,
22910 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
22920 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
22930 65 53 74 6f 72 65 28 50 61 72 73 65 2a 2c 20 69  eStore(Parse*, i
22940 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
22950 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
22960 61 63 68 65 50 75 73 68 28 50 61 72 73 65 2a 29  achePush(Parse*)
22970 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
22980 70 72 43 61 63 68 65 50 6f 70 28 50 61 72 73 65  prCachePop(Parse
22990 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
229a0 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28  ExprCacheRemove(
229b0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
229c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
229d0 78 70 72 43 61 63 68 65 43 6c 65 61 72 28 50 61  xprCacheClear(Pa
229e0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
229f0 74 65 33 45 78 70 72 43 61 63 68 65 41 66 66 69  te3ExprCacheAffi
22a00 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72 73 65  nityChange(Parse
22a10 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
22a20 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
22a30 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  de(Parse*, Expr*
22a40 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
22a50 69 74 65 33 45 78 70 72 43 6f 64 65 46 61 63 74  ite3ExprCodeFact
22a60 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 45  orable(Parse*, E
22a70 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
22a80 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
22a90 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45  AtInit(Parse*, E
22aa0 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  xpr*, int, u8);.
22ab0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
22ac0 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20  odeTemp(Parse*, 
22ad0 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  Expr*, int*);.in
22ae0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
22af0 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20  eTarget(Parse*, 
22b00 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
22b10 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
22b20 65 41 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a  eAndCache(Parse*
22b30 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
22b40 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
22b50 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73 65  deExprList(Parse
22b60 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
22b70 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20  t, u8);.#define 
22b80 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50 20  SQLITE_ECEL_DUP 
22b90 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44 65       0x01  /* De
22ba0 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20  ep, not shallow 
22bb0 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e  copies */.#defin
22bc0 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41  e SQLITE_ECEL_FA
22bd0 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a 20  CTOR   0x02  /* 
22be0 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74  Factor out const
22bf0 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 76 6f 69  ant terms */.voi
22c00 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 54  d sqlite3ExprIfT
22c10 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  rue(Parse*, Expr
22c20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
22c30 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
22c40 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78  False(Parse*, Ex
22c50 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
22c60 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69  Table *sqlite3Fi
22c70 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  ndTable(sqlite3*
22c80 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
22c90 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c  nst char*);.Tabl
22ca0 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
22cb0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74  Table(Parse*,int
22cc0 20 69 73 56 69 65 77 2c 63 6f 6e 73 74 20 63 68   isView,const ch
22cd0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
22ce0 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
22cf0 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d  3LocateTableItem
22d00 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69  (Parse*,int isVi
22d10 65 77 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73  ew,struct SrcLis
22d20 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78  t_item *);.Index
22d30 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64   *sqlite3FindInd
22d40 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ex(sqlite3*,cons
22d50 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
22d60 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
22d70 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
22d80 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
22d90 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
22da0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
22db0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
22dc0 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  dex(sqlite3*,int
22dd0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
22de0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75  oid sqlite3Vacuu
22df0 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73  m(Parse*);.int s
22e00 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
22e10 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a  char**, sqlite3*
22e20 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
22e30 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71  NameFromToken(sq
22e40 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
22e50 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
22e60 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45  Compare(Expr*, E
22e70 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
22e80 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43  sqlite3ExprListC
22e90 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a  ompare(ExprList*
22ea0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
22eb0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
22ec0 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28 45 78  prImpliesExpr(Ex
22ed0 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
22ee0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
22ef0 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61  prAnalyzeAggrega
22f00 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  tes(NameContext*
22f10 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
22f20 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
22f30 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e  eAggList(NameCon
22f40 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29  text*,ExprList*)
22f50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e  ;.int sqlite3Fun
22f60 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63  ctionUsesThisSrc
22f70 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a  (Expr*, SrcList*
22f80 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33  );.Vdbe *sqlite3
22f90 47 65 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b  GetVdbe(Parse*);
22fa0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
22fb0 67 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29  gSaveState(void)
22fc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
22fd0 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76  ngRestoreState(v
22fe0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
22ff0 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71  e3RollbackAll(sq
23000 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
23010 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
23020 69 66 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a  ifySchema(Parse*
23030 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
23040 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61  ite3CodeVerifyNa
23050 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a  medSchema(Parse*
23060 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44  , const char *zD
23070 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  b);.void sqlite3
23080 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e  BeginTransaction
23090 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
230a0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69  oid sqlite3Commi
230b0 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  tTransaction(Par
230c0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
230d0 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61  e3RollbackTransa
230e0 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76  ction(Parse*);.v
230f0 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70  oid sqlite3Savep
23100 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  oint(Parse*, int
23110 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
23120 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65  sqlite3CloseSave
23130 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a  points(sqlite3 *
23140 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c  );.void sqlite3L
23150 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73  eaveMutexAndClos
23160 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a  eZombie(sqlite3*
23170 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
23180 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70  prIsConstant(Exp
23190 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
231a0 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f  ExprIsConstantNo
231b0 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  tJoin(Expr*);.in
231c0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
231d0 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f  onstantOrFunctio
231e0 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e  n(Expr*, u8);.in
231f0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 49  t sqlite3ExprIsI
23200 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e  nteger(Expr*, in
23210 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
23220 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f  ExprCanBeNull(co
23230 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  nst Expr*);.int 
23240 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73  sqlite3ExprNeeds
23250 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65  NoAffinityChange
23260 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68  (const Expr*, ch
23270 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ar);.int sqlite3
23280 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68  IsRowid(const ch
23290 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
232a0 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c  e3GenerateRowDel
232b0 65 74 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ete(Parse*,Table
232c0 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69  *,Trigger*,int,i
232d0 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38  nt,int,i16,u8,u8
232e0 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ,u8);.void sqlit
232f0 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64  e3GenerateRowInd
23300 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c  exDelete(Parse*,
23310 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
23320 74 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  t, int*);.int sq
23330 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64  lite3GenerateInd
23340 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e  exKey(Parse*, In
23350 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  dex*, int, int, 
23360 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a  int, int*,Index*
23370 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
23380 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64  te3ResolvePartId
23390 78 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e  xLabel(Parse*,in
233a0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
233b0 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69  GenerateConstrai
233c0 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c  ntChecks(Parse*,
233d0 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c  Table*,int*,int,
233e0 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20  int,int,int,.   
233f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23410 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a    u8,u8,int,int*
23420 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
23430 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e  ompleteInsertion
23440 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69  (Parse*,Table*,i
23450 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c  nt,int,int,int*,
23460 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e  int,int,int);.in
23470 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62  t sqlite3OpenTab
23480 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72  leAndIndices(Par
23490 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
234a0 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a  , int, u8*, int*
234b0 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71  , int*);.void sq
234c0 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f  lite3BeginWriteO
234d0 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c  peration(Parse*,
234e0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
234f0 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69   sqlite3MultiWri
23500 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  te(Parse*);.void
23510 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74   sqlite3MayAbort
23520 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
23530 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72  qlite3HaltConstr
23540 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
23550 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38  , int, char*, i8
23560 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
23570 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61  te3UniqueConstra
23580 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
23590 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73   Index*);.void s
235a0 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74  qlite3RowidConst
235b0 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
235c0 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72  t, Table*);.Expr
235d0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75 70   *sqlite3ExprDup
235e0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
235f0 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  int);.ExprList *
23600 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44  sqlite3ExprListD
23610 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  up(sqlite3*,Expr
23620 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c  List*,int);.SrcL
23630 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
23640 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
23650 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49  SrcList*,int);.I
23660 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64  dList *sqlite3Id
23670 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
23680 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63  ,IdList*);.Selec
23690 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
236a0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c  Dup(sqlite3*,Sel
236b0 65 63 74 2a 2c 69 6e 74 29 3b 0a 23 69 66 20 53  ect*,int);.#if S
236c0 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
236d0 45 44 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ED.void sqlite3S
236e0 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 53 65 6c  electSetName(Sel
236f0 65 63 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ect*,const char*
23700 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
23710 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53  e sqlite3SelectS
23720 65 74 4e 61 6d 65 28 41 2c 42 29 0a 23 65 6e 64  etName(A,B).#end
23730 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  if.void sqlite3F
23740 75 6e 63 44 65 66 49 6e 73 65 72 74 28 46 75 6e  uncDefInsert(Fun
23750 63 44 65 66 48 61 73 68 2a 2c 20 46 75 6e 63 44  cDefHash*, FuncD
23760 65 66 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73  ef*);.FuncDef *s
23770 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69  qlite3FindFuncti
23780 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  on(sqlite3*,cons
23790 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c  t char*,int,int,
237a0 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  u8,u8);.void sql
237b0 69 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c  ite3RegisterBuil
237c0 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c  tinFunctions(sql
237d0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
237e0 69 74 65 33 52 65 67 69 73 74 65 72 44 61 74 65  ite3RegisterDate
237f0 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f  TimeFunctions(vo
23800 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
23810 33 52 65 67 69 73 74 65 72 47 6c 6f 62 61 6c 46  3RegisterGlobalF
23820 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
23830 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
23840 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33  yCheckOk(sqlite3
23850 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
23860 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72  afetyCheckSickOr
23870 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  Ok(sqlite3*);.vo
23880 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65  id sqlite3Change
23890 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69  Cookie(Parse*, i
238a0 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e  nt);..#if !defin
238b0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
238c0 49 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64  IEW) && !defined
238d0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
238e0 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74  GGER).void sqlit
238f0 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65  e3MaterializeVie
23900 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  w(Parse*, Table*
23910 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23  , Expr*, int);.#
23920 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
23930 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
23940 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ER.  void sqlite
23950 33 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61  3BeginTrigger(Pa
23960 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b  rse*, Token*,Tok
23970 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69  en*,int,int,IdLi
23980 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20  st*,SrcList*,.  
23990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239a0 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69           Expr*,i
239b0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
239c0 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72   sqlite3FinishTr
239d0 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
239e0 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65  iggerStep*, Toke
239f0 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  n*);.  void sqli
23a00 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50  te3DropTrigger(P
23a10 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
23a20 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
23a30 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
23a40 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  Ptr(Parse*, Trig
23a50 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  ger*);.  Trigger
23a60 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
23a70 73 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20  sExist(Parse *, 
23a80 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Table*, int, Exp
23a90 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61  rList*, int *pMa
23aa0 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  sk);.  Trigger *
23ab0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
23ac0 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
23ad0 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  e *);.  void sql
23ae0 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
23af0 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
23b00 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  er *, int, ExprL
23b10 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  ist*, int, Table
23b20 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   *,.            
23b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b40 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
23b50 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
23b60 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
23b70 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67  ct(Parse *, Trig
23b80 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  ger *, Table *, 
23b90 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
23ba0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65    void sqliteVie
23bb0 77 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a  wTriggers(Parse*
23bc0 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c  , Table*, Expr*,
23bd0 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29   int, ExprList*)
23be0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
23bf0 44 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65  DeleteTriggerSte
23c00 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  p(sqlite3*, Trig
23c10 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69  gerStep*);.  Tri
23c20 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
23c30 33 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74  3TriggerSelectSt
23c40 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  ep(sqlite3*,Sele
23c50 63 74 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ct*);.  TriggerS
23c60 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
23c70 67 65 72 49 6e 73 65 72 74 53 74 65 70 28 73 71  gerInsertStep(sq
23c80 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49  lite3*,Token*, I
23c90 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  dList*,.        
23ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cc0 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54  Select*,u8);.  T
23cd0 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
23ce0 74 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65  te3TriggerUpdate
23cf0 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
23d00 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  ken*,ExprList*, 
23d10 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72  Expr*, u8);.  Tr
23d20 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
23d30 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53  e3TriggerDeleteS
23d40 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
23d50 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76  en*, Expr*);.  v
23d60 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
23d70 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
23d80 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
23d90 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
23da0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
23db0 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  er(sqlite3*,int,
23dc0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
23dd0 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67  u32 sqlite3Trigg
23de0 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a  erColmask(Parse*
23df0 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69  ,Trigger*,ExprLi
23e00 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c  st*,int,int,Tabl
23e10 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e  e*,int);.# defin
23e20 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
23e30 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e  plevel(p) ((p)->
23e40 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d  pToplevel ? (p)-
23e50 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29  >pToplevel : (p)
23e60 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
23e70 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73   sqlite3Triggers
23e80 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29  Exist(B,C,D,E,F)
23e90 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   0.# define sqli
23ea0 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
23eb0 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
23ec0 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
23ed0 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69  rPtr(A,B).# defi
23ee0 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  ne sqlite3Unlink
23ef0 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
23f00 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65  (A,B,C).# define
23f10 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
23f20 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45  rigger(A,B,C,D,E
23f30 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69  ,F,G,H,I).# defi
23f40 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  ne sqlite3CodeRo
23f50 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28 41  wTriggerDirect(A
23f60 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65  ,B,C,D,E,F).# de
23f70 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
23f80 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a  gerList(X, Y) 0.
23f90 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23fa0 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29  ParseToplevel(p)
23fb0 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   p.# define sqli
23fc0 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73  te3TriggerColmas
23fd0 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29  k(A,B,C,D,E,F,G)
23fe0 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73   0.#endif..int s
23ff0 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50  qlite3JoinType(P
24000 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
24010 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
24020 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
24030 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72  teForeignKey(Par
24040 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
24050 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74  Token*, ExprList
24060 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
24070 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65 69 67  lite3DeferForeig
24080 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74  nKey(Parse*, int
24090 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
240a0 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
240b0 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69  TION.  void sqli
240c0 74 65 33 41 75 74 68 52 65 61 64 28 50 61 72 73  te3AuthRead(Pars
240d0 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a  e*,Expr*,Schema*
240e0 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e  ,SrcList*);.  in
240f0 74 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  t sqlite3AuthChe
24100 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63  ck(Parse*,int, c
24110 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
24120 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
24130 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
24140 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
24150 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74  Push(Parse*, Aut
24160 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74  hContext*, const
24170 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
24180 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
24190 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78  xtPop(AuthContex
241a0 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
241b0 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61  e3AuthReadCol(Pa
241c0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
241d0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
241e0 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20  , int);.#else.# 
241f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
24200 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a  thRead(a,b,c,d).
24210 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24220 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c  AuthCheck(a,b,c,
24230 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f  d,e)    SQLITE_O
24240 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  K.# define sqlit
24250 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73  e3AuthContextPus
24260 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e  h(a,b,c).# defin
24270 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  e sqlite3AuthCon
24280 74 65 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f  textPop(a)  ((vo
24290 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76  id)(a)).#endif.v
242a0 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74 61 63  oid sqlite3Attac
242b0 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  h(Parse*, Expr*,
242c0 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a   Expr*, Expr*);.
242d0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74 61  void sqlite3Deta
242e0 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
242f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
24300 69 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c  ixInit(DbFixer*,
24310 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f   Parse*, int, co
24320 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
24330 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
24340 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73 74 28  lite3FixSrcList(
24350 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73  DbFixer*, SrcLis
24360 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
24370 46 69 78 53 65 6c 65 63 74 28 44 62 46 69 78 65  FixSelect(DbFixe
24380 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
24390 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72  t sqlite3FixExpr
243a0 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a  (DbFixer*, Expr*
243b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
243c0 78 45 78 70 72 4c 69 73 74 28 44 62 46 69 78 65  xExprList(DbFixe
243d0 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  r*, ExprList*);.
243e0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54 72  int sqlite3FixTr
243f0 69 67 67 65 72 53 74 65 70 28 44 62 46 69 78 65  iggerStep(DbFixe
24400 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  r*, TriggerStep*
24410 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
24420 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  oF(const char *z
24430 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20  , double*, int, 
24440 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
24450 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63  GetInt32(const c
24460 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  har *, int*);.in
24470 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f  t sqlite3Atoi(co
24480 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
24490 73 71 6c 69 74 65 33 55 74 66 31 36 42 79 74 65  sqlite3Utf16Byte
244a0 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a  Len(const void *
244b0 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72  pData, int nChar
244c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74  );.int sqlite3Ut
244d0 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20  f8CharLen(const 
244e0 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74  char *pData, int
244f0 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c   nByte);.u32 sql
24500 69 74 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e  ite3Utf8Read(con
24510 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74  st u8**);.LogEst
24520 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 75   sqlite3LogEst(u
24530 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69  64);.LogEst sqli
24540 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67  te3LogEstAdd(Log
24550 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66  Est,LogEst);.#if
24560 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
24570 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f  _VIRTUALTABLE.Lo
24580 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
24590 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75  stFromDouble(dou
245a0 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 75 36 34  ble);.#endif.u64
245b0 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f   sqlite3LogEstTo
245c0 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 0a 2f 2a  Int(LogEst);../*
245d0 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20  .** Routines to 
245e0 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 76  read and write v
245f0 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
24600 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65 20  ntegers.  These 
24610 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65  used to.** be de
24620 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62  fined locally, b
24630 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68  ut now we use th
24640 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65  e varint routine
24650 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a  s in the util.c.
24660 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20  ** file..*/.int 
24670 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
24680 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c  (unsigned char*,
24690 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69 74 65   u64);.u8 sqlite
246a0 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74  3GetVarint(const
246b0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
246c0 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c  , u64 *);.u8 sql
246d0 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
246e0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
246f0 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69  har *, u32 *);.i
24700 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt sqlite3Varint
24710 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a  Len(u64 v);../*.
24720 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  ** The common ca
24730 73 65 20 69 73 20 66 6f 72 20 61 20 76 61 72 69  se is for a vari
24740 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e 67 6c  nt to be a singl
24750 65 20 62 79 74 65 2e 20 20 54 68 65 79 20 66 6f  e byte.  They fo
24760 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f  llowing.** macro
24770 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d  s handle the com
24780 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f 75 74  mon case without
24790 20 61 20 70 72 6f 63 65 64 75 72 65 20 63 61 6c   a procedure cal
247a0 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61 6c 6c  l, but then call
247b0 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64 75 72  .** the procedur
247c0 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76 61 72  e for larger var
247d0 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ints..*/.#define
247e0 20 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42   getVarint32(A,B
247f0 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41  )  \.  (u8)((*(A
24800 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42 29  )<(u8)0x80)?((B)
24810 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71  =(u32)*(A)),1:sq
24820 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
24830 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29  ((A),(u32 *)&(B)
24840 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  )).#define putVa
24850 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20  rint32(A,B)  \. 
24860 20 28 75 38 29 28 28 28 75 33 32 29 28 42 29 3c   (u8)(((u32)(B)<
24870 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29  (u32)0x80)?(*(A)
24880 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  =(unsigned char)
24890 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74  (B)),1:\.  sqlit
248a0 65 33 50 75 74 56 61 72 69 6e 74 28 28 41 29 2c  e3PutVarint((A),
248b0 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65  (B))).#define ge
248c0 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74  tVarint    sqlit
248d0 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66  e3GetVarint.#def
248e0 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20 20  ine putVarint   
248f0 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
24900 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  t...const char *
24910 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
24920 6e 69 74 79 53 74 72 28 56 64 62 65 20 2a 2c 20  nityStr(Vdbe *, 
24930 49 6e 64 65 78 20 2a 29 3b 0a 76 6f 69 64 20 73  Index *);.void s
24940 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e  qlite3TableAffin
24950 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62 6c 65  ity(Vdbe*, Table
24960 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 73 71  *, int);.char sq
24970 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69  lite3CompareAffi
24980 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72  nity(Expr *pExpr
24990 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e  , char aff2);.in
249a0 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66  t sqlite3IndexAf
249b0 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70  finityOk(Expr *p
249c0 45 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61  Expr, char idx_a
249d0 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73  ffinity);.char s
249e0 71 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e 69  qlite3ExprAffini
249f0 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b  ty(Expr *pExpr);
24a00 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69  .int sqlite3Atoi
24a10 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  64(const char*, 
24a20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  i64*, int, u8);.
24a30 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72  int sqlite3DecOr
24a40 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63  HexToI64(const c
24a50 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69  har*, i64*);.voi
24a60 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69  d sqlite3ErrorWi
24a70 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c 20  thMsg(sqlite3*, 
24a80 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
24a90 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,...);.void sqli
24aa0 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33  te3Error(sqlite3
24ab0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  *,int);.void *sq
24ac0 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73  lite3HexToBlob(s
24ad0 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63  qlite3*, const c
24ae0 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a  har *z, int n);.
24af0 75 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49  u8 sqlite3HexToI
24b00 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73  nt(int h);.int s
24b10 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d  qlite3TwoPartNam
24b20 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e  e(Parse *, Token
24b30 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b   *, Token *, Tok
24b40 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66  en **);..#if def
24b50 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
24b60 29 20 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  ) .const char *s
24b70 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e  qlite3ErrName(in
24b80 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73  t);.#endif..cons
24b90 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45  t char *sqlite3E
24ba0 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20  rrStr(int);.int 
24bb0 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d  sqlite3ReadSchem
24bc0 61 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  a(Parse *pParse)
24bd0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
24be0 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71  e3FindCollSeq(sq
24bf0 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63  lite3*,u8 enc, c
24c00 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
24c10 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
24c20 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50  3LocateCollSeq(P
24c30 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f  arse *pParse, co
24c40 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b  nst char*zName);
24c50 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
24c60 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72  3ExprCollSeq(Par
24c70 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
24c80 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a   *pExpr);.Expr *
24c90 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f  sqlite3ExprAddCo
24ca0 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65  llateToken(Parse
24cb0 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c   *pParse, Expr*,
24cc0 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
24cd0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
24ce0 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e  rAddCollateStrin
24cf0 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63  g(Parse*,Expr*,c
24d00 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70  onst char*);.Exp
24d10 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b  r *sqlite3ExprSk
24d20 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29  ipCollate(Expr*)
24d30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
24d40 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  ckCollSeq(Parse 
24d50 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69  *, CollSeq *);.i
24d60 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f  nt sqlite3CheckO
24d70 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20  bjectName(Parse 
24d80 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
24d90 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  ;.void sqlite3Vd
24da0 62 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c  beSetChanges(sql
24db0 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e  ite3 *, int);.in
24dc0 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  t sqlite3AddInt6
24dd0 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
24de0 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34   sqlite3SubInt64
24df0 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
24e00 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28  sqlite3MulInt64(
24e10 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
24e20 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69  qlite3AbsInt32(i
24e30 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nt);.#ifdef SQLI
24e40 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41  TE_ENABLE_8_3_NA
24e50 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  MES.void sqlite3
24e60 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73  FileSuffix3(cons
24e70 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b  t char*, char*);
24e80 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
24e90 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
24ea0 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75  x3(X,Y).#endif.u
24eb0 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  8 sqlite3GetBool
24ec0 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ean(const char *
24ed0 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f  z,u8);..const vo
24ee0 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  id *sqlite3Value
24ef0 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c  Text(sqlite3_val
24f00 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  ue*, u8);.int sq
24f10 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28  lite3ValueBytes(
24f20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
24f30 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
24f40 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c  3ValueSetStr(sql
24f50 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74  ite3_value*, int
24f60 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75  , const void *,u
24f70 38 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  8, .            
24f80 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64              void
24f90 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
24fa0 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65  d sqlite3ValueSe
24fb0 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61  tNull(sqlite3_va
24fc0 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  lue*);.void sqli
24fd0 74 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c  te3ValueFree(sql
24fe0 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71  ite3_value*);.sq
24ff0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c  lite3_value *sql
25000 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c  ite3ValueNew(sql
25010 69 74 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a 73  ite3 *);.char *s
25020 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73  qlite3Utf16to8(s
25030 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
25040 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  void*, int, u8);
25050 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75  .int sqlite3Valu
25060 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65  eFromExpr(sqlite
25070 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c  3 *, Expr *, u8,
25080 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c   u8, sqlite3_val
25090 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ue **);.void sql
250a0 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66  ite3ValueApplyAf
250b0 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76  finity(sqlite3_v
250c0 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b  alue *, u8, u8);
250d0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
250e0 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74  AMALGAMATION.ext
250f0 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
25100 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f  ed char sqlite3O
25110 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b  pcodeProperty[];
25120 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
25130 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
25140 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
25150 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
25160 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
25170 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b  lite3CtypeMap[];
25180 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f  .extern const To
25190 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f  ken sqlite3IntTo
251a0 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53  kens[];.extern S
251b0 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63 74  QLITE_WSD struct
251c0 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73   Sqlite3Config s
251d0 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78  qlite3Config;.ex
251e0 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20  tern SQLITE_WSD 
251f0 46 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69  FuncDefHash sqli
25200 74 65 33 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f  te3GlobalFunctio
25210 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ns;.#ifndef SQLI
25220 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65  TE_OMIT_WSD.exte
25230 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65  rn int sqlite3Pe
25240 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69  ndingByte;.#endi
25250 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  f.#endif.void sq
25260 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76  lite3RootPageMov
25270 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ed(sqlite3*, int
25280 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
25290 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78  d sqlite3Reindex
252a0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
252b0 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
252c0 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74  qlite3AlterFunct
252d0 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
252e0 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e   sqlite3AlterRen
252f0 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ameTable(Parse*,
25300 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
25310 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
25320 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e  etToken(const un
25330 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69  signed char *, i
25340 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  nt *);.void sqli
25350 74 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50  te3NestedParse(P
25360 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
25370 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  r*, ...);.void s
25380 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
25390 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73  aredStatements(s
253a0 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
253b0 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65  lite3CodeSubsele
253c0 63 74 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  ct(Parse *, Expr
253d0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
253e0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
253f0 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65  tPrep(Parse*, Se
25400 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65  lect*, NameConte
25410 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xt*);.int sqlite
25420 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63  3MatchSpanName(c
25430 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
25440 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
25450 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
25460 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
25470 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28  esolveExprNames(
25480 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
25490 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
254a0 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e  e3ResolveSelectN
254b0 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c  ames(Parse*, Sel
254c0 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
254d0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
254e0 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65  3ResolveSelfRefe
254f0 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62  rence(Parse*,Tab
25500 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78  le*,int,Expr*,Ex
25510 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
25520 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65  lite3ResolveOrde
25530 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c  rGroupBy(Parse*,
25540 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69   Select*, ExprLi
25550 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
25560 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
25570 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62  olumnDefault(Vdb
25580 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  e *, Table *, in
25590 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
255a0 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68  lite3AlterFinish
255b0 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
255c0 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69  *, Token *);.voi
255d0 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65  d sqlite3AlterBe
255e0 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ginAddColumn(Par
255f0 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29  se *, SrcList *)
25600 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
25610 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72  e3GetCollSeq(Par
25620 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71  se*, u8, CollSeq
25630 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29   *, const char*)
25640 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41 66  ;.char sqlite3Af
25650 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74  finityType(const
25660 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f   char*, u8*);.vo
25670 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
25680 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
25690 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
256a0 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79  qlite3InvokeBusy
256b0 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64  Handler(BusyHand
256c0 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ler*);.int sqlit
256d0 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33  e3FindDb(sqlite3
256e0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
256f0 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d  sqlite3FindDbNam
25700 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  e(sqlite3 *, con
25710 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20  st char *);.int 
25720 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c  sqlite3AnalysisL
25730 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  oad(sqlite3*,int
25740 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69   iDB);.void sqli
25750 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61  te3DeleteIndexSa
25760 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49  mples(sqlite3*,I
25770 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
25780 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73  ite3DefaultRowEs
25790 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  t(Index*);.void 
257a0 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c  sqlite3RegisterL
257b0 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c  ikeFunctions(sql
257c0 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  ite3*, int);.int
257d0 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75   sqlite3IsLikeFu
257e0 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c  nction(sqlite3*,
257f0 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a  Expr*,int*,char*
25800 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
25810 69 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d 61 74  inimumFileFormat
25820 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
25830 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25840 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64  SchemaClear(void
25850 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c   *);.Schema *sql
25860 69 74 65 33 53 63 68 65 6d 61 47 65 74 28 73 71  ite3SchemaGet(sq
25870 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a  lite3 *, Btree *
25880 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63  );.int sqlite3Sc
25890 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69  hemaToIndex(sqli
258a0 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20  te3 *db, Schema 
258b0 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
258c0 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63  ite3KeyInfoAlloc
258d0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e  (sqlite3*,int,in
258e0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
258f0 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79  KeyInfoUnref(Key
25900 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  Info*);.KeyInfo 
25910 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52  *sqlite3KeyInfoR
25920 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65  ef(KeyInfo*);.Ke
25930 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
25940 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72  yInfoOfIndex(Par
25950 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69  se*, Index*);.#i
25960 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
25970 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79  G.int sqlite3Key
25980 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28  InfoIsWriteable(
25990 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69  KeyInfo*);.#endi
259a0 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65  f.int sqlite3Cre
259b0 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20  ateFunc(sqlite3 
259c0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
259d0 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20   int, int, void 
259e0 2a 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  *, .  void (*)(s
259f0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
25a00 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
25a10 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
25a20 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
25a30 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
25a40 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28  alue **), void (
25a50 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
25a60 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74  xt*),.  FuncDest
25a70 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63  ructor *pDestruc
25a80 74 6f 72 0a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  tor.);.int sqlit
25a90 65 33 41 70 69 45 78 69 74 28 73 71 6c 69 74 65  e3ApiExit(sqlite
25aa0 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74  3 *db, int);.int
25ab0 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70   sqlite3OpenTemp
25ac0 44 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a  Database(Parse *
25ad0 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
25ae0 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72  StrAccumInit(Str
25af0 41 63 63 75 6d 2a 2c 20 63 68 61 72 2a 2c 20 69  Accum*, char*, i
25b00 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
25b10 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
25b20 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63  pend(StrAccum*,c
25b30 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
25b40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
25b50 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 53  AccumAppendAll(S
25b60 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63  trAccum*,const c
25b70 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
25b80 74 65 33 41 70 70 65 6e 64 43 68 61 72 28 53 74  te3AppendChar(St
25b90 72 41 63 63 75 6d 2a 2c 69 6e 74 2c 63 68 61 72  rAccum*,int,char
25ba0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
25bb0 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53  StrAccumFinish(S
25bc0 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20  trAccum*);.void 
25bd0 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52  sqlite3StrAccumR
25be0 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29 3b  eset(StrAccum*);
25bf0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
25c00 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65  ectDestInit(Sele
25c10 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29  ctDest*,int,int)
25c20 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43  ;.Expr *sqlite3C
25c30 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28  reateColumnExpr(
25c40 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69  sqlite3 *, SrcLi
25c50 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  st *, int, int);
25c60 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ..void sqlite3Ba
25c70 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c 69  ckupRestart(sqli
25c80 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76  te3_backup *);.v
25c90 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75  oid sqlite3Backu
25ca0 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f  pUpdate(sqlite3_
25cb0 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20  backup *, Pgno, 
25cc0 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69  const u8 *);..#i
25cd0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
25ce0 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
25cf0 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e  4.void sqlite3An
25d00 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76  alyzeFunctions(v
25d10 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
25d20 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56 61  3Stat4ProbeSetVa
25d30 6c 75 65 28 50 61 72 73 65 2a 2c 49 6e 64 65 78  lue(Parse*,Index
25d40 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  *,UnpackedRecord
25d50 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c 69 6e 74 2c  **,Expr*,u8,int,
25d60 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
25d70 65 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d  e3Stat4ValueFrom
25d80 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70  Expr(Parse*, Exp
25d90 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f  r*, u8, sqlite3_
25da0 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73  value**);.void s
25db0 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65  qlite3Stat4Probe
25dc0 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63  Free(UnpackedRec
25dd0 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ord*);.int sqlit
25de0 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71  e3Stat4Column(sq
25df0 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f  lite3*, const vo
25e00 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73  id*, int, int, s
25e10 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
25e20 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
25e30 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  he interface to 
25e40 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61  the LEMON-genera
25e50 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76 6f  ted parser.*/.vo
25e60 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65  id *sqlite3Parse
25e70 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28  rAlloc(void*(*)(
25e80 75 36 34 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  u64));.void sqli
25e90 74 65 33 50 61 72 73 65 72 46 72 65 65 28 76 6f  te3ParserFree(vo
25ea0 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69  id*, void(*)(voi
25eb0 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  d*));.void sqlit
25ec0 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20  e3Parser(void*, 
25ed0 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73  int, Token, Pars
25ee0 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52  e*);.#ifdef YYTR
25ef0 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48  ACKMAXSTACKDEPTH
25f00 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61  .  int sqlite3Pa
25f10 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f  rserStackPeak(vo
25f20 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f  id*);.#endif..vo
25f30 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f  id sqlite3AutoLo
25f40 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c  adExtensions(sql
25f50 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20  ite3*);.#ifndef 
25f60 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44  SQLITE_OMIT_LOAD
25f70 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69  _EXTENSION.  voi
25f80 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78  d sqlite3CloseEx
25f90 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33  tensions(sqlite3
25fa0 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
25fb0 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45  ne sqlite3CloseE
25fc0 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e  xtensions(X).#en
25fd0 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
25fe0 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
25ff0 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c  CACHE.  void sql
26000 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61  ite3TableLock(Pa
26010 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  rse *, int, int,
26020 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20   u8, const char 
26030 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
26040 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65  ine sqlite3Table
26050 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a  Lock(v,w,x,y,z).
26060 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
26070 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74  QLITE_TEST.  int
26080 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28   sqlite3Utf8To8(
26090 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b  unsigned char*);
260a0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
260b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
260c0 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69  UALTABLE.#  defi
260d0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c  ne sqlite3VtabCl
260e0 65 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65  ear(Y).#  define
260f0 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63   sqlite3VtabSync
26100 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  (X,Y) SQLITE_OK.
26110 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
26120 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29  3VtabRollback(X)
26130 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
26140 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a  e3VtabCommit(X).
26150 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
26160 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20  3VtabInSync(db) 
26170 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  0.#  define sqli
26180 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 20 0a  te3VtabLock(X) .
26190 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
261a0 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23  3VtabUnlock(X).#
261b0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
261c0 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58  VtabUnlockList(X
261d0 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
261e0 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
261f0 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45  (X, Y, Z) SQLITE
26200 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  _OK.#  define sq
26210 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 58  lite3GetVTable(X
26220 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30  ,Y)  ((VTable*)0
26230 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20  ).#else.   void 
26240 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72  sqlite3VtabClear
26250 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61  (sqlite3 *db, Ta
26260 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  ble*);.   void s
26270 71 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e  qlite3VtabDiscon
26280 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62  nect(sqlite3 *db
26290 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20  , Table *p);.   
262a0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53  int sqlite3VtabS
262b0 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ync(sqlite3 *db,
262c0 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20   Vdbe*);.   int 
262d0 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62  sqlite3VtabRollb
262e0 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ack(sqlite3 *db)
262f0 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
26300 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74  VtabCommit(sqlit
26310 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64  e3 *db);.   void
26320 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
26330 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76  (VTable *);.   v
26340 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55  oid sqlite3VtabU
26350 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b  nlock(VTable *);
26360 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
26370 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73  VtabUnlockList(s
26380 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74  qlite3*);.   int
26390 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
263a0 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c  point(sqlite3 *,
263b0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76   int, int);.   v
263c0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 49  oid sqlite3VtabI
263d0 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64 62 65  mportErrmsg(Vdbe
263e0 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  *, sqlite3_vtab*
263f0 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71  );.   VTable *sq
26400 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 73  lite3GetVTable(s
26410 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29  qlite3*, Table*)
26420 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ;.#  define sqli
26430 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62  te3VtabInSync(db
26440 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73  ) ((db)->nVTrans
26450 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72  >0 && (db)->aVTr
26460 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 76  ans==0).#endif.v
26470 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d  oid sqlite3VtabM
26480 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72 73  akeWritable(Pars
26490 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64  e*,Table*);.void
264a0 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
264b0 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  nParse(Parse*, T
264c0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  oken*, Token*, T
264d0 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oken*, int);.voi
264e0 64 20 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e  d sqlite3VtabFin
264f0 69 73 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ishParse(Parse*,
26500 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
26510 71 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e 69  qlite3VtabArgIni
26520 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  t(Parse*);.void 
26530 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 45 78  sqlite3VtabArgEx
26540 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b  tend(Parse*, Tok
26550 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
26560 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28  3VtabCallCreate(
26570 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
26580 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61  onst char *, cha
26590 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  r **);.int sqlit
265a0 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63  e3VtabCallConnec
265b0 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  t(Parse*, Table*
265c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
265d0 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71  abCallDestroy(sq
265e0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
265f0 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20  st char *);.int 
26600 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
26610 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62  (sqlite3 *, VTab
26620 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a  le *);.FuncDef *
26630 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c  sqlite3VtabOverl
26640 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  oadFunction(sqli
26650 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20  te3 *,FuncDef*, 
26660 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29  int nArg, Expr*)
26670 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  ;.void sqlite3In
26680 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71  validFunction(sq
26690 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
266a0 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
266b0 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74  **);.sqlite3_int
266c0 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75  64 sqlite3StmtCu
266d0 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65  rrentTime(sqlite
266e0 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74  3_context*);.int
266f0 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72 61   sqlite3VdbePara
26700 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a  meterIndex(Vdbe*
26710 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  , const char*, i
26720 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
26730 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73  TransferBindings
26740 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c  (sqlite3_stmt *,
26750 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29   sqlite3_stmt *)
26760 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
26770 72 73 65 72 52 65 73 65 74 28 50 61 72 73 65 2a  rserReset(Parse*
26780 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
26790 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a  prepare(Vdbe*);.
267a0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
267b0 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28  ListCheckLength(
267c0 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
267d0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
267e0 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
267f0 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f  3BinaryCompareCo
26800 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45  llSeq(Parse *, E
26810 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a  xpr *, Expr *);.
26820 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49  int sqlite3TempI
26830 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71  nMemory(const sq
26840 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63  lite3*);.const c
26850 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72  har *sqlite3Jour
26860 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29  nalModename(int)
26870 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
26880 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20  _OMIT_WAL.  int 
26890 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e  sqlite3Checkpoin
268a0 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  t(sqlite3*, int,
268b0 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   int, int*, int*
268c0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
268d0 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76  WalDefaultHook(v
268e0 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f  oid*,sqlite3*,co
268f0 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
26900 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
26910 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20  QLITE_OMIT_CTE. 
26920 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69   With *sqlite3Wi
26930 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74  thAdd(Parse*,Wit
26940 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  h*,Token*,ExprLi
26950 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20  st*,Select*);.  
26960 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68  void sqlite3With
26970 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
26980 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73  With*);.  void s
26990 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 50  qlite3WithPush(P
269a0 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38  arse*, With*, u8
269b0 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65  );.#else.#define
269c0 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68   sqlite3WithPush
269d0 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20  (x,y,z).#define 
269e0 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74  sqlite3WithDelet
269f0 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f  e(x,y).#endif../
26a00 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66  * Declarations f
26a10 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20  or functions in 
26a20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74  fkey.c. All of t
26a30 68 65 73 65 20 61 72 65 20 72 65 70 6c 61 63 65  hese are replace
26a40 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61  d by.** no-op ma
26a50 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52  cros if OMIT_FOR
26a60 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69  EIGN_KEY is defi
26a70 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ned. In this cas
26a80 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20  e no foreign.** 
26a90 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  key functionalit
26aa0 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20  y is available. 
26ab0 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20  If OMIT_TRIGGER 
26ac0 69 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a  is defined but.*
26ad0 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  * OMIT_FOREIGN_K
26ae0 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20  EY is not, only 
26af0 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  some of the func
26b00 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65  tions are no-ope
26b10 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61  d. In.** this ca
26b20 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  se foreign keys 
26b30 61 72 65 20 70 61 72 73 65 64 2c 20 62 75 74 20  are parsed, but 
26b40 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f  no other functio
26b50 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a 20 70 72  nality is .** pr
26b60 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d  ovided (enforcem
26b70 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72  ent of FK constr
26b80 61 69 6e 74 73 20 72 65 71 75 69 72 65 73 20 74  aints requires t
26b90 68 65 20 74 72 69 67 67 65 72 73 20 73 75 62 2d  he triggers sub-
26ba0 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20  system)..*/.#if 
26bb0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
26bc0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
26bd0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
26be0 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
26bf0 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  R).  void sqlite
26c00 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c  3FkCheck(Parse*,
26c10 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
26c20 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  t, int*, int);. 
26c30 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
26c40 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
26c50 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c   SrcList *, Tabl
26c60 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
26c70 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72  te3FkActions(Par
26c80 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
26c90 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
26ca0 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  *, int);.  int s
26cb0 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64  qlite3FkRequired
26cc0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
26cd0 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75   int*, int);.  u
26ce0 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  32 sqlite3FkOldm
26cf0 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ask(Parse*, Tabl
26d00 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c  e*);.  FKey *sql
26d10 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73  ite3FkReferences
26d20 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65  (Table *);.#else
26d30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
26d40 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c  e3FkActions(a,b,
26d50 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69  c,d,e,f).  #defi
26d60 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63  ne sqlite3FkChec
26d70 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20  k(a,b,c,d,e,f). 
26d80 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
26d90 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c  FkDropTable(a,b,
26da0 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  c).  #define sql
26db0 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c  ite3FkOldmask(a,
26dc0 62 29 20 20 20 20 20 20 20 20 20 30 0a 20 20 23  b)         0.  #
26dd0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
26de0 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64  Required(a,b,c,d
26df0 29 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69  )    0.#endif.#i
26e00 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
26e10 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20  T_FOREIGN_KEY.  
26e20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65  void sqlite3FkDe
26e30 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  lete(sqlite3 *, 
26e40 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73  Table*);.  int s
26e50 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e  qlite3FkLocateIn
26e60 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  dex(Parse*,Table
26e70 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c  *,FKey*,Index**,
26e80 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  int**);.#else.  
26e90 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
26ea0 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23  kDelete(a,b).  #
26eb0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
26ec0 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c  LocateIndex(a,b,
26ed0 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a  c,d,e).#endif...
26ee0 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20  /*.** Available 
26ef0 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e  fault injectors.
26f00 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62    Should be numb
26f10 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77  ered beginning w
26f20 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ith 0..*/.#defin
26f30 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
26f40 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20  JECTOR_MALLOC   
26f50 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49    0.#define SQLI
26f60 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52  TE_FAULTINJECTOR
26f70 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f  _COUNT      1../
26f80 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
26f90 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69  ce to the code i
26fa0 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66  n fault.c used f
26fb0 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22  or identifying "
26fc0 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f  benign".** mallo
26fd0 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73  c failures. This
26fe0 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74   is only present
26ff0 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   if SQLITE_OMIT_
27000 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20  BUILTIN_TEST.** 
27010 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a  is not defined..
27020 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
27030 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
27040 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  EST.  void sqlit
27050 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
27060 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69  loc(void);.  voi
27070 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69  d sqlite3EndBeni
27080 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
27090 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
270a0 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
270b0 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65  gnMalloc().  #de
270c0 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42  fine sqlite3EndB
270d0 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65  enignMalloc().#e
270e0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ndif../*.** Allo
270f0 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
27100 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69  s from sqlite3Fi
27110 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23  ndInIndex().*/.#
27120 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
27130 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20 20  ROWID        1  
27140 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 72   /* Search the r
27150 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c  owid of the tabl
27160 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  e */.#define IN_
27170 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20  INDEX_EPH       
27180 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68     2   /* Search
27190 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d   an ephemeral b-
271a0 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tree */.#define 
271b0 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41  IN_INDEX_INDEX_A
271c0 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69  SC    3   /* Exi
271d0 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45  sting index ASCE
271e0 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65  NDING */.#define
271f0 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
27200 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78  DESC   4   /* Ex
27210 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53  isting index DES
27220 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69  CENDING */.#defi
27230 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  ne IN_INDEX_NOOP
27240 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20           5   /* 
27250 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62  No table availab
27260 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73  le. Use comparis
27270 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c  ons */./*.** All
27280 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74  owed flags for t
27290 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65 72  he 3rd parameter
272a0 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49   to sqlite3FindI
272b0 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65  nIndex()..*/.#de
272c0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  fine IN_INDEX_NO
272d0 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31  OP_OK     0x0001
272e0 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72    /* OK to retur
272f0 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20  n IN_INDEX_NOOP 
27300 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
27310 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20  DEX_MEMBERSHIP  
27320 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70  0x0002  /* IN op
27330 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20  erator used for 
27340 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74 20  membership test 
27350 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
27360 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20  DEX_LOOP        
27370 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70  0x0004  /* IN op
27380 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20 61  erator used as a
27390 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c   loop */.int sql
273a0 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
273b0 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
273c0 20 75 33 32 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69   u32, int*);..#i
273d0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
273e0 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a  LE_ATOMIC_WRITE.
273f0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
27400 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
27410 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68  _vfs *, const ch
27420 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69  ar *, sqlite3_fi
27430 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  le *, int, int);
27440 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
27450 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65  urnalSize(sqlite
27460 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74 20  3_vfs *);.  int 
27470 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72  sqlite3JournalCr
27480 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c  eate(sqlite3_fil
27490 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  e *);.  int sqli
274a0 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73  te3JournalExists
274b0 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70  (sqlite3_file *p
274c0 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
274d0 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  ne sqlite3Journa
274e0 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28 70 56  lSize(pVfs) ((pV
274f0 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a 20  fs)->szOsFile). 
27500 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
27510 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 70 29  JournalExists(p)
27520 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20   1.#endif..void 
27530 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61  sqlite3MemJourna
27540 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69  lOpen(sqlite3_fi
27550 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  le *);.int sqlit
27560 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65  e3MemJournalSize
27570 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69  (void);.int sqli
27580 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28  te3IsMemJournal(
27590 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b  sqlite3_file *);
275a0 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
275b0 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20  _EXPR_DEPTH>0.  
275c0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
275d0 53 65 74 48 65 69 67 68 74 28 50 61 72 73 65 20  SetHeight(Parse 
275e0 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
275f0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
27600 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
27610 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e  (Select *);.  in
27620 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  t sqlite3ExprChe
27630 63 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c  ckHeight(Parse*,
27640 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23   int);.#else.  #
27650 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
27660 70 72 53 65 74 48 65 69 67 68 74 28 78 2c 79 29  prSetHeight(x,y)
27670 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
27680 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
27690 68 74 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e  ht(x) 0.  #defin
276a0 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  e sqlite3ExprChe
276b0 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65  ckHeight(x,y).#e
276c0 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65  ndif..u32 sqlite
276d0 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20  3Get4byte(const 
276e0 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
276f0 65 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20  e3Put4byte(u8*, 
27700 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  u32);..#ifdef SQ
27710 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f  LITE_ENABLE_UNLO
27720 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64  CK_NOTIFY.  void
27730 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
27740 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65  onBlocked(sqlite
27750 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b  3 *, sqlite3 *);
27760 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
27770 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
27780 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
27790 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
277a0 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73  nnectionClosed(s
277b0 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c  qlite3 *db);.#el
277c0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
277d0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c  ite3ConnectionBl
277e0 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65  ocked(x,y).  #de
277f0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
27800 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78  ectionUnlocked(x
27810 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
27820 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f  te3ConnectionClo
27830 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23  sed(x).#endif..#
27840 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
27850 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  UG.  void sqlite
27860 33 50 61 72 73 65 72 54 72 61 63 65 28 46 49 4c  3ParserTrace(FIL
27870 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e  E*, char *);.#en
27880 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68  dif../*.** If th
27890 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20  e SQLITE_ENABLE 
278a0 49 4f 54 52 41 43 45 20 65 78 69 73 74 73 20 74  IOTRACE exists t
278b0 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hen the global v
278c0 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74  ariable.** sqlit
278d0 65 33 49 6f 54 72 61 63 65 20 69 73 20 61 20 70  e3IoTrace is a p
278e0 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e  ointer to a prin
278f0 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20  tf-like routine 
27900 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74  used to.** print
27910 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73   I/O tracing mes
27920 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65  sages. .*/.#ifde
27930 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
27940 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65  IOTRACE.# define
27950 20 49 4f 54 52 41 43 45 28 41 29 20 20 69 66 28   IOTRACE(A)  if(
27960 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
27970 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  ){ sqlite3IoTrac
27980 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71  e A; }.  void sq
27990 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65  lite3VdbeIOTrace
279a0 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49  Sql(Vdbe*);.SQLI
279b0 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28  TE_EXTERN void (
279c0 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29  *sqlite3IoTrace)
279d0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e  (const char*,...
279e0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
279f0 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64  e IOTRACE(A).# d
27a00 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62  efine sqlite3Vdb
27a10 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23  eIOTraceSql(X).#
27a20 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
27a30 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20  se routines are 
27a40 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68  available for th
27a50 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69  e mem2.c debuggi
27a60 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ng memory alloca
27a70 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68  tor.** only.  Th
27a80 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20 76  ey are used to v
27a90 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66 65  erify that diffe
27aa0 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20  rent "types" of 
27ab0 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61  memory.** alloca
27ac0 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72  tions are proper
27ad0 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74 68  ly tracked by th
27ae0 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20  e system..**.** 
27af0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
27b00 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74 68  etType() sets th
27b10 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61  e "type" of an a
27b20 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65  llocation to one
27b30 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59   of.** the MEMTY
27b40 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  PE_* macros defi
27b50 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20  ned below.  The 
27b60 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20 62  type must be a b
27b70 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61  itmask with.** a
27b80 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e   single bit set.
27b90 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
27ba0 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20  mdebugHasType() 
27bb0 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20  returns true if 
27bc0 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73 20  any of the bits 
27bd0 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
27be0 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
27bf0 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
27c00 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
27c10 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
27c20 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65  ype()..** sqlite
27c30 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
27c40 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66  () is intended f
27c50 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61 73  or use inside as
27c60 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
27c70 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  s..**.** sqlite3
27c80 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29  MemdebugNoType()
27c90 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
27ca0 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74   none of the bit
27cb0 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
27cc0 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
27cd0 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
27ce0 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
27cf0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
27d00 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50  tType()..**.** P
27d10 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20  erhaps the most 
27d20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20  important point 
27d30 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e 63  is the differenc
27d40 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50  e between MEMTYP
27d50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45  E_HEAP.** and ME
27d60 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e  MTYPE_LOOKASIDE.
27d70 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69    If an allocati
27d80 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f  on is MEMTYPE_LO
27d90 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65  OKASIDE, that me
27da0 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20  ans.** it might 
27db0 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61  have been alloca
27dc0 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ted by lookaside
27dd0 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c  , except the all
27de0 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74  ocation was.** t
27df0 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b  oo large or look
27e00 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61 64  aside was alread
27e10 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69  y full.  It is i
27e20 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69  mportant to veri
27e30 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63  fy.** that alloc
27e40 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68  ations that migh
27e50 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74 69  t have been sati
27e60 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  sfied by lookasi
27e70 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61  de are not.** pa
27e80 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e  ssed back to non
27e90 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
27ea0 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73  ) routines.  Ass
27eb0 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68 65  erts such as the
27ec0 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76  .** example abov
27ed0 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20  e are placed on 
27ee0 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64  the non-lookasid
27ef0 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65  e free() routine
27f00 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  s to verify.** t
27f10 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  his constraint. 
27f20 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68  .**.** All of th
27f30 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20  is is no-op for 
27f40 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69  a production bui
27f50 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d  ld.  It only com
27f60 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20  es into.** play 
27f70 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  when the SQLITE_
27f80 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65  MEMDEBUG compile
27f90 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
27fa0 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  used..*/.#ifdef 
27fb0 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a  SQLITE_MEMDEBUG.
27fc0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65    void sqlite3Me
27fd0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f  mdebugSetType(vo
27fe0 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73  id*,u8);.  int s
27ff0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
28000 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  sType(void*,u8);
28010 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  .  int sqlite3Me
28020 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69  mdebugNoType(voi
28030 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20  d*,u8);.#else.# 
28040 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
28050 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c  mdebugSetType(X,
28060 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a  Y)  /* no-op */.
28070 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28080 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
28090 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65  X,Y)  1.# define
280a0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
280b0 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a  NoType(X,Y)   1.
280c0 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d  #endif.#define M
280d0 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20  EMTYPE_HEAP     
280e0 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72    0x01  /* Gener
280f0 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69  al heap allocati
28100 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
28110 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
28120 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70 20    0x02  /* Heap 
28130 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
28140 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a  been lookaside *
28150 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
28160 45 5f 53 43 52 41 54 43 48 20 20 20 20 30 78 30  E_SCRATCH    0x0
28170 34 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c  4  /* Scratch al
28180 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
28190 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41  fine MEMTYPE_PCA
281a0 43 48 45 20 20 20 20 20 30 78 30 38 20 20 2f 2a  CHE     0x08  /*
281b0 20 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f   Page cache allo
281c0 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a  cations */../*.*
281d0 2a 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65  * Threading inte
281e0 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c  rface.*/.#if SQL
281f0 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
28200 48 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c  HREADS>0.int sql
28210 69 74 65 33 54 68 72 65 61 64 43 72 65 61 74 65  ite3ThreadCreate
28220 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c  (SQLiteThread**,
28230 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c  void*(*)(void*),
28240 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
28250 74 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51  te3ThreadJoin(SQ
28260 4c 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69  LiteThread*, voi
28270 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 65  d**);.#endif..#e
28280 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49 54 45 49  ndif /* _SQLITEI
28290 4e 54 5f 48 5f 20 2a 2f 0a                       NT_H_ */.