/ Hex Artifact Content
Login

Artifact 0c5e6587059c00943708321fb72d4224806fb393:


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 2f  ude "mutex.h"../
7460: 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 61 20 64  * When using a d
7470: 65 66 61 75 6c 74 20 77 61 6c 20 73 61 66 65 74  efault wal safet
7480: 79 20 6c 65 76 65 6c 2c 20 74 68 65 20 73 61 66  y level, the saf
7490: 65 74 79 20 6c 65 76 65 6c 20 73 68 6f 75 6c 64  ety level should
74a0: 20 6f 6e 6c 79 20 0a 2a 2a 20 63 68 61 6e 67 65   only .** change
74b0: 20 77 69 74 68 20 74 68 65 20 6a 6f 75 72 6e 61   with the journa
74c0: 6c 20 6d 6f 64 65 20 69 66 20 74 68 65 20 75 73  l mode if the us
74d0: 65 72 20 68 61 73 6e 27 74 20 6d 61 6e 75 61 6c  er hasn't manual
74e0: 6c 79 20 73 70 65 63 69 66 69 65 64 20 0a 2a 2a  ly specified .**
74f0: 20 70 72 61 67 6d 61 20 73 79 6e 63 68 72 6f 6e   pragma synchron
7500: 6f 75 73 2c 20 69 66 20 74 68 65 79 20 68 61 76  ous, if they hav
7510: 65 20 74 68 65 20 64 65 66 61 75 6c 74 73 20 73  e the defaults s
7520: 68 6f 75 6c 64 6e 27 74 20 62 65 20 61 70 70 6c  houldn't be appl
7530: 69 65 64 2e 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ied..** The SQLI
7540: 54 45 5f 53 41 46 45 54 59 4c 45 56 45 4c 5f 46  TE_SAFETYLEVEL_F
7550: 49 58 45 44 20 76 61 6c 75 65 20 69 73 20 4f 52  IXED value is OR
7560: 65 64 20 69 6e 74 6f 20 74 68 65 20 44 62 2d 3e  ed into the Db->
7570: 73 61 66 65 74 79 5f 6c 65 76 65 6c 0a 2a 2a 20  safety_level.** 
7580: 66 69 65 6c 64 20 77 68 65 6e 20 74 68 65 20 75  field when the u
7590: 73 65 72 20 68 61 73 20 73 70 65 63 69 66 69 65  ser has specifie
75a0: 64 20 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20  d a synchronous 
75b0: 73 65 74 74 69 6e 67 20 76 69 61 20 70 72 61 67  setting via prag
75c0: 6d 61 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ma..*/.#define S
75d0: 51 4c 49 54 45 5f 53 41 46 45 54 59 4c 45 56 45  QLITE_SAFETYLEVE
75e0: 4c 5f 46 49 58 45 44 20 30 78 31 30 0a 23 64 65  L_FIXED 0x10.#de
75f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 41 46 45  fine SQLITE_SAFE
7600: 54 59 4c 45 56 45 4c 5f 56 41 4c 55 45 5f 4d 41  TYLEVEL_VALUE_MA
7610: 53 4b 20 30 78 30 33 0a 23 64 65 66 69 6e 65 20  SK 0x03.#define 
7620: 53 51 4c 49 54 45 5f 44 62 53 61 66 65 74 79 4c  SQLITE_DbSafetyL
7630: 65 76 65 6c 56 61 6c 75 65 28 6c 65 76 65 6c 29  evelValue(level)
7640: 20 28 6c 65 76 65 6c 26 53 51 4c 49 54 45 5f 53   (level&SQLITE_S
7650: 41 46 45 54 59 4c 45 56 45 4c 5f 56 41 4c 55 45  AFETYLEVEL_VALUE
7660: 5f 4d 41 53 4b 29 0a 23 64 65 66 69 6e 65 20 53  _MASK).#define S
7670: 51 4c 49 54 45 5f 44 62 53 61 66 65 74 79 4c 65  QLITE_DbSafetyLe
7680: 76 65 6c 49 73 46 69 78 65 64 28 6c 65 76 65 6c  velIsFixed(level
7690: 29 20 28 6c 65 76 65 6c 26 53 51 4c 49 54 45 5f  ) (level&SQLITE_
76a0: 53 41 46 45 54 59 4c 45 56 45 4c 5f 46 49 58 45  SAFETYLEVEL_FIXE
76b0: 44 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  D)../*.** Each d
76c0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20  atabase file to 
76d0: 62 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74  be accessed by t
76e0: 68 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20  he system is an 
76f0: 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
7700: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
7710: 75 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61  ucture.  There a
7720: 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20  re normally two 
7730: 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75  of these structu
7740: 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71  res.** in the sq
7750: 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79  lite.aDb[] array
7760: 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65  .  aDb[0] is the
7770: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
7780: 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31  ile and.** aDb[1
7790: 5d 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  ] is the databas
77a0: 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68  e file used to h
77b0: 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61  old temporary ta
77c0: 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61  bles.  Additiona
77d0: 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d  l.** databases m
77e0: 61 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a  ay be attached..
77f0: 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20  */.struct Db {. 
7800: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
7810: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
7820: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
7830: 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20  /.  Btree *pBt; 
7840: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
7850: 42 2a 54 72 65 65 20 73 74 72 75 63 74 75 72 65  B*Tree structure
7860: 20 66 6f 72 20 74 68 69 73 20 64 61 74 61 62 61   for this databa
7870: 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20  se file */.  u8 
7880: 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20  safety_level;   
7890: 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73    /* How aggress
78a0: 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64  ive at syncing d
78b0: 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20  ata to disk */. 
78c0: 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
78d0: 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72  ;     /* Pointer
78e0: 20 74 6f 20 64 61 74 61 62 61 73 65 20 73 63 68   to database sch
78f0: 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68  ema (possibly sh
7900: 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ared) */.};../*.
7910: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
7920: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
7930: 73 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73  structure stores
7940: 20 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65   a database sche
7950: 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53  ma..**.** Most S
7960: 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72  chema objects ar
7970: 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  e associated wit
7980: 68 20 61 20 42 74 72 65 65 2e 20 20 54 68 65 20  h a Btree.  The 
7990: 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20  exception is.** 
79a0: 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74  the Schema for t
79b0: 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 65 73  he TEMP databaes
79c0: 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d   (sqlite3.aDb[1]
79d0: 29 20 77 68 69 63 68 20 69 73 20 66 72 65 65 2d  ) which is free-
79e0: 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20  standing..** In 
79f0: 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64  shared cache mod
7a00: 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65  e, a single Sche
7a10: 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65  ma object can be
7a20: 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69   shared by multi
7a30: 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68  ple.** Btrees th
7a40: 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  at refer to the 
7a50: 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20  same underlying 
7a60: 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e  BtShared object.
7a70: 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f  .** .** Schema o
7a80: 62 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d  bjects are autom
7a90: 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63  atically dealloc
7aa0: 61 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61  ated when the la
7ab0: 73 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a  st Btree that.**
7ac0: 20 72 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d   references them
7ad0: 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20   is destroyed.  
7ae0: 20 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61   The TEMP Schema
7af0: 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65   is manually fre
7b00: 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33  ed by.** sqlite3
7b10: 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41  _close()..*.** A
7b20: 20 74 68 72 65 61 64 20 6d 75 73 74 20 62 65 20   thread must be 
7b30: 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20  holding a mutex 
7b40: 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  on the correspon
7b50: 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72  ding Btree in or
7b60: 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73  der.** to access
7b70: 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e   Schema content.
7b80: 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74    This implies t
7b90: 68 61 74 20 74 68 65 20 74 68 72 65 61 64 20 6d  hat the thread m
7ba0: 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68  ust also be.** h
7bb0: 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f  olding a mutex o
7bc0: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f  n the sqlite3 co
7bd0: 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  nnection pointer
7be0: 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42   that owns the B
7bf0: 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54  tree..** For a T
7c00: 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79  EMP Schema, only
7c10: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
7c20: 6d 75 74 65 78 20 69 73 20 72 65 71 75 69 72 65  mutex is require
7c30: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68  d..*/.struct Sch
7c40: 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65  ema {.  int sche
7c50: 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20  ma_cookie;   /* 
7c60: 44 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  Database schema 
7c70: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66  version number f
7c80: 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a  or this file */.
7c90: 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f    int iGeneratio
7ca0: 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61  n;     /* Genera
7cb0: 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49  tion counter.  I
7cc0: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
7cd0: 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20  each change */. 
7ce0: 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20   Hash tblHash;  
7cf0: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62        /* All tab
7d00: 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  les indexed by n
7d10: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64  ame */.  Hash id
7d20: 78 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a  xHash;        /*
7d30: 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64   All (named) ind
7d40: 69 63 65 73 20 69 6e 64 65 78 65 64 20 62 79 20  ices indexed by 
7d50: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74  name */.  Hash t
7d60: 72 69 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f  rigHash;       /
7d70: 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69  * All triggers i
7d80: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
7d90: 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61 73  /.  Hash fkeyHas
7da0: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
7db0: 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20  foreign keys by 
7dc0: 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65  referenced table
7dd0: 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65   name */.  Table
7de0: 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20 20   *pSeqTab;      
7df0: 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65  /* The sqlite_se
7e00: 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65  quence table use
7e10: 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45  d by AUTOINCREME
7e20: 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f  NT */.  u8 file_
7e30: 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20  format;      /* 
7e40: 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65  Schema format ve
7e50: 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66  rsion for this f
7e60: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ile */.  u8 enc;
7e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7e80: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75   Text encoding u
7e90: 73 65 64 20 62 79 20 74 68 69 73 20 64 61 74 61  sed by this data
7ea0: 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63  base */.  u16 sc
7eb0: 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f  hemaFlags;     /
7ec0: 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74  * Flags associat
7ed0: 65 64 20 77 69 74 68 20 74 68 69 73 20 73 63 68  ed with this sch
7ee0: 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63  ema */.  int cac
7ef0: 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a  he_size;      /*
7f00: 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   Number of pages
7f10: 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63   to use in the c
7f20: 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ache */.};../*.*
7f30: 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63  * These macros c
7f40: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65  an be used to te
7f50: 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61  st, set, or clea
7f60: 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a  r bits in the .*
7f70: 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  * Db.pSchema->fl
7f80: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
7f90: 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65  efine DbHasPrope
7fa0: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
7fb0: 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63  ((D)->aDb[I].pSc
7fc0: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
7fd0: 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65  s&(P))==(P)).#de
7fe0: 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f  fine DbHasAnyPro
7ff0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28  perty(D,I,P)  ((
8000: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
8010: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
8020: 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
8030: 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28  e DbSetProperty(
8040: 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e  D,I,P)     (D)->
8050: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
8060: 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29  schemaFlags|=(P)
8070: 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72  .#define DbClear
8080: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
8090: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53    (D)->aDb[I].pS
80a0: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
80b0: 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20  gs&=~(P)../*.** 
80c0: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
80d0: 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d  or the DB.pSchem
80e0: 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  a->flags field..
80f0: 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68  **.** The DB_Sch
8100: 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69  emaLoaded flag i
8110: 73 20 73 65 74 20 61 66 74 65 72 20 74 68 65 20  s set after the 
8120: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
8130: 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64  has been.** read
8140: 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68   into internal h
8150: 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ash tables..**.*
8160: 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77  * DB_UnresetView
8170: 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65  s means that one
8180: 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68   or more views h
8190: 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ave column names
81a0: 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65   that.** have be
81b0: 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20  en filled out.  
81c0: 49 66 20 74 68 65 20 73 63 68 65 6d 61 20 63 68  If the schema ch
81d0: 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c  anges, these col
81e0: 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a  umn names might.
81f0: 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73  ** changes and s
8200: 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20  o the view will 
8210: 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73 65 74  need to be reset
8220: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  ..*/.#define DB_
8230: 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20  SchemaLoaded    
8240: 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73  0x0001  /* The s
8250: 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c  chema has been l
8260: 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  oaded */.#define
8270: 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73   DB_UnresetViews
8280: 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53      0x0002  /* S
8290: 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65 20 64  ome views have d
82a0: 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61  efined column na
82b0: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  mes */.#define D
82c0: 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20 20  B_Empty         
82d0: 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65    0x0004  /* The
82e0: 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28   file is empty (
82f0: 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73 29 20  length 0 bytes) 
8300: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75  */../*.** The nu
8310: 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e  mber of differen
8320: 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67  t kinds of thing
8330: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69  s that can be li
8340: 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74  mited.** using t
8350: 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  he sqlite3_limit
8360: 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f  () interface..*/
8370: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
8380: 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f  N_LIMIT (SQLITE_
8390: 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52  LIMIT_WORKER_THR
83a0: 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c  EADS+1)../*.** L
83b0: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
83c0: 69 73 20 61 20 73 65 74 20 6f 66 20 66 69 78 65  is a set of fixe
83d0: 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20 74  d-size buffers t
83e0: 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a  hat can be used.
83f0: 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d  ** to satisfy sm
8400: 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65  all transient me
8410: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
8420: 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a  requests for obj
8430: 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74  ects.** associat
8440: 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ed with a partic
8450: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
8460: 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75  nnection.  The u
8470: 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69  se of.** lookasi
8480: 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64  de malloc provid
8490: 65 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74  es a significant
84a0: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68   performance enh
84b0: 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70  ancement.** (app
84c0: 72 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f 69  rox 10%) by avoi
84d0: 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61  ding numerous ma
84e0: 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73  lloc/free reques
84f0: 74 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ts while parsing
8500: 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  .** SQL statemen
8510: 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f  ts..**.** The Lo
8520: 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74 75 72  okaside structur
8530: 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72  e holds configur
8540: 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  ation informatio
8550: 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c  n about the.** l
8560: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
8570: 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68  subsystem.  Each
8580: 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72   available memor
8590: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a  y allocation in.
85a0: 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65  ** the lookaside
85b0: 20 73 75 62 73 79 73 74 65 6d 20 69 73 20 73 74   subsystem is st
85c0: 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64  ored on a linked
85d0: 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69   list of Lookasi
85e0: 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74  deSlot.** object
85f0: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69  s..**.** Lookasi
8600: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
8610: 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20  re only allowed 
8620: 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74  for objects that
8630: 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a   are associated.
8640: 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ** with a partic
8650: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
8660: 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65  nnection.  Hence
8670: 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  , schema informa
8680: 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62  tion cannot.** b
8690: 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b  e stored in look
86a0: 61 73 69 64 65 20 62 65 63 61 75 73 65 20 69 6e  aside because in
86b0: 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f   shared cache mo
86c0: 64 65 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e  de the schema in
86d0: 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20  formation.** is 
86e0: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
86f0: 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  le database conn
8700: 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66  ections.  Theref
8710: 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69  ore, while parsi
8720: 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66  ng.** schema inf
8730: 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f  ormation, the Lo
8740: 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64  okaside.bEnabled
8750: 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64   flag is cleared
8760: 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b   so that.** look
8770: 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  aside allocation
8780: 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74  s are not used t
8790: 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  o construct the 
87a0: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a  schema objects..
87b0: 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  */.struct Lookas
87c0: 69 64 65 20 7b 0a 20 20 75 31 36 20 73 7a 3b 20  ide {.  u16 sz; 
87d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
87e0: 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
87f0: 62 75 66 66 65 72 20 69 6e 20 62 79 74 65 73 20  buffer in bytes 
8800: 2a 2f 0a 20 20 75 38 20 62 45 6e 61 62 6c 65 64  */.  u8 bEnabled
8810: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
8820: 46 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65  False to disable
8830: 20 6e 65 77 20 6c 6f 6f 6b 61 73 69 64 65 20 61   new lookaside a
8840: 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  llocations */.  
8850: 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20  u8 bMalloced;   
8860: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
8870: 69 66 20 70 53 74 61 72 74 20 6f 62 74 61 69 6e  if pStart obtain
8880: 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ed from sqlite3_
8890: 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 69 6e  malloc() */.  in
88a0: 74 20 6e 4f 75 74 3b 20 20 20 20 20 20 20 20 20  t nOut;         
88b0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
88c0: 6f 66 20 62 75 66 66 65 72 73 20 63 75 72 72 65  of buffers curre
88d0: 6e 74 6c 79 20 63 68 65 63 6b 65 64 20 6f 75 74  ntly checked out
88e0: 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f 75 74 3b   */.  int mxOut;
88f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8900: 20 48 69 67 68 77 61 74 65 72 20 6d 61 72 6b 20   Highwater mark 
8910: 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e  for nOut */.  in
8920: 74 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20  t anStat[3];    
8930: 20 20 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73        /* 0: hits
8940: 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65  .  1: size misse
8950: 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73  s.  2: full miss
8960: 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64  es */.  Lookasid
8970: 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20  eSlot *pFree;   
8980: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c  /* List of avail
8990: 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a  able buffers */.
89a0: 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20    void *pStart; 
89b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
89c0: 73 74 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c  st byte of avail
89d0: 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63  able memory spac
89e0: 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e  e */.  void *pEn
89f0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  d;             /
8a00: 2a 20 46 69 72 73 74 20 62 79 74 65 20 70 61 73  * First byte pas
8a10: 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62  t end of availab
8a20: 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73  le space */.};.s
8a30: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53  truct LookasideS
8a40: 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64  lot {.  Lookasid
8a50: 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20  eSlot *pNext;   
8a60: 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20   /* Next buffer 
8a70: 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66  in the list of f
8a80: 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d  ree buffers */.}
8a90: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20  ;../*.** A hash 
8aa0: 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69  table for functi
8ab0: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 0a  on definitions..
8ac0: 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20  **.** Hash each 
8ad0: 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72  FuncDef structur
8ae0: 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68  e into one of th
8af0: 65 20 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b  e FuncDefHash.a[
8b00: 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c  ] slots..** Coll
8b10: 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68  isions are on th
8b20: 65 20 46 75 6e 63 44 65 66 2e 70 48 61 73 68 20  e FuncDef.pHash 
8b30: 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  chain..*/.struct
8b40: 20 46 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20   FuncDefHash {. 
8b50: 20 46 75 6e 63 44 65 66 20 2a 61 5b 32 33 5d 3b   FuncDef *a[23];
8b60: 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74         /* Hash t
8b70: 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f  able for functio
8b80: 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66  ns */.};..#ifdef
8b90: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
8ba0: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a  HENTICATION./*.*
8bb0: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65  * Information he
8bc0: 6c 64 20 69 6e 20 74 68 65 20 22 73 71 6c 69 74  ld in the "sqlit
8bd0: 65 33 22 20 64 61 74 61 62 61 73 65 20 63 6f 6e  e3" database con
8be0: 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61  nection object a
8bf0: 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61  nd used.** to ma
8c00: 6e 61 67 65 20 75 73 65 72 20 61 75 74 68 65 6e  nage user authen
8c10: 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70  tication..*/.typ
8c20: 65 64 65 66 20 73 74 72 75 63 74 20 73 71 6c 69  edef struct sqli
8c30: 74 65 33 5f 75 73 65 72 61 75 74 68 20 73 71 6c  te3_userauth sql
8c40: 69 74 65 33 5f 75 73 65 72 61 75 74 68 3b 0a 73  ite3_userauth;.s
8c50: 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73  truct sqlite3_us
8c60: 65 72 61 75 74 68 20 7b 0a 20 20 75 38 20 61 75  erauth {.  u8 au
8c70: 74 68 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20  thLevel;        
8c80: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
8c90: 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61 74 69  ent authenticati
8ca0: 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e  on level */.  in
8cb0: 74 20 6e 41 75 74 68 50 57 3b 20 20 20 20 20 20  t nAuthPW;      
8cc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
8cd0: 69 7a 65 20 6f 66 20 74 68 65 20 7a 41 75 74 68  ize of the zAuth
8ce0: 50 57 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  PW in bytes */. 
8cf0: 20 63 68 61 72 20 2a 7a 41 75 74 68 50 57 3b 20   char *zAuthPW; 
8d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8d10: 2a 20 50 61 73 73 77 6f 72 64 20 75 73 65 64 20  * Password used 
8d20: 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20  to authenticate 
8d30: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68  */.  char *zAuth
8d40: 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  User;           
8d50: 20 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20     /* User name 
8d60: 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69  used to authenti
8d70: 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41  cate */.};../* A
8d80: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
8d90: 72 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  r sqlite3_userau
8da0: 74 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a  th.authLevel */.
8db0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 6e  #define UAUTH_Un
8dc0: 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20 20 20 20  known     0     
8dd0: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f  /* Authenticatio
8de0: 6e 20 6e 6f 74 20 79 65 74 20 63 68 65 63 6b 65  n not yet checke
8df0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  d */.#define UAU
8e00: 54 48 5f 46 61 69 6c 20 20 20 20 20 20 20 20 31  TH_Fail        1
8e10: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74       /* User aut
8e20: 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61 69 6c  hentication fail
8e30: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  ed */.#define UA
8e40: 55 54 48 5f 55 73 65 72 20 20 20 20 20 20 20 20  UTH_User        
8e50: 32 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  2     /* Authent
8e60: 69 63 61 74 65 64 20 61 73 20 61 20 6e 6f 72 6d  icated as a norm
8e70: 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65 66 69  al user */.#defi
8e80: 6e 65 20 55 41 55 54 48 5f 41 64 6d 69 6e 20 20  ne UAUTH_Admin  
8e90: 20 20 20 20 20 33 20 20 20 20 20 2f 2a 20 41 75       3     /* Au
8ea0: 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61  thenticated as a
8eb0: 6e 20 61 64 6d 69 6e 69 73 74 72 61 74 6f 72 20  n administrator 
8ec0: 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73  */../* Functions
8ed0: 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20 75 73   used only by us
8ee0: 65 72 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  er authorization
8ef0: 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71   logic */.int sq
8f00: 6c 69 74 65 33 55 73 65 72 41 75 74 68 54 61 62  lite3UserAuthTab
8f10: 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  le(const char*);
8f20: 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72  .int sqlite3User
8f30: 41 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73  AuthCheckLogin(s
8f40: 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
8f50: 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73  ar*,u8*);.void s
8f60: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 49 6e  qlite3UserAuthIn
8f70: 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  it(sqlite3*);.vo
8f80: 69 64 20 73 71 6c 69 74 65 33 43 72 79 70 74 46  id sqlite3CryptF
8f90: 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  unc(sqlite3_cont
8fa0: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
8fb0: 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64  _value**);..#end
8fc0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45  if /* SQLITE_USE
8fd0: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
8fe0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64   */../*.** typed
8ff0: 65 66 20 66 6f 72 20 74 68 65 20 61 75 74 68 6f  ef for the autho
9000: 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63  rization callbac
9010: 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  k function..*/.#
9020: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
9030: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
9040: 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28  .  typedef int (
9050: 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28  *sqlite3_xauth)(
9060: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
9070: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
9080: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20  *,const char*,. 
9090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
90b0: 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
90c0: 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20   char*);.#else. 
90d0: 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73   typedef int (*s
90e0: 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f  qlite3_xauth)(vo
90f0: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
9100: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
9110: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20  const char*,.   
9120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9130: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
9140: 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  t char*);.#endif
9150: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  .../*.** Each da
9160: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
9170: 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  n is an instance
9180: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
9190: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  g structure..*/.
91a0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b  struct sqlite3 {
91b0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  .  sqlite3_vfs *
91c0: 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20  pVfs;           
91d0: 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65   /* OS Interface
91e0: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62   */.  struct Vdb
91f0: 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20  e *pVdbe;       
9200: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
9210: 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61  ctive virtual ma
9220: 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c  chines */.  Coll
9230: 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20  Seq *pDfltColl; 
9240: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
9250: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
9260: 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e  ng sequence (BIN
9270: 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65  ARY) */.  sqlite
9280: 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20  3_mutex *mutex; 
9290: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65          /* Conne
92a0: 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20  ction mutex */. 
92b0: 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20   Db *aDb;       
92c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
92d0: 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a  * All backends *
92e0: 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20  /.  int nDb;    
92f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9300: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
9310: 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c  ackends currentl
9320: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e  y in use */.  in
9330: 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  t flags;        
9340: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
9350: 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61  iscellaneous fla
9360: 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  gs. See below */
9370: 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64  .  i64 lastRowid
9380: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9390: 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73   /* ROWID of mos
93a0: 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20  t recent insert 
93b0: 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20  (see above) */. 
93c0: 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20   i64 szMmap;    
93d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
93e0: 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73  * Default mmap_s
93f0: 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20  ize setting */. 
9400: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70   unsigned int op
9410: 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f  enFlags;       /
9420: 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74  * Flags passed t
9430: 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f  o sqlite3_vfs.xO
9440: 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65  pen() */.  int e
9450: 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20  rrCode;         
9460: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
9470: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f   recent error co
9480: 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f  de (SQLITE_*) */
9490: 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20  .  int errMask; 
94a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94b0: 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64   /* & result cod
94c0: 65 73 20 77 69 74 68 20 74 68 69 73 20 62 65 66  es with this bef
94d0: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f  ore returning */
94e0: 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67  .  u16 dbOptFlag
94f0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
9500: 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61   /* Flags to ena
9510: 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69  ble/disable opti
9520: 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75  mizations */.  u
9530: 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20  8 autoCommit;   
9540: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9550: 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  The auto-commit 
9560: 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65  flag. */.  u8 te
9570: 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20  mp_store;       
9580: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66           /* 1: f
9590: 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a  ile 2: memory 0:
95a0: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38   default */.  u8
95b0: 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20   mallocFailed;  
95c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
95d0: 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20 73  rue if we have s
95e0: 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69  een a malloc fai
95f0: 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c  lure */.  u8 dfl
9600: 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20  tLockMode;      
9610: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
9620: 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20  lt locking-mode 
9630: 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62 73  for attached dbs
9640: 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61   */.  signed cha
9650: 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20  r nextAutovac;  
9660: 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73      /* Autovac s
9670: 65 74 74 69 6e 67 20 61 66 74 65 72 20 56 41 43  etting after VAC
9680: 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20  UUM if >=0 */.  
9690: 75 38 20 73 75 70 70 72 65 73 73 45 72 72 3b 20  u8 suppressErr; 
96a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
96b0: 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72   Do not issue er
96c0: 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66 20  ror messages if 
96d0: 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61  true */.  u8 vta
96e0: 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20  bOnConflict;    
96f0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
9700: 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73   to return for s
9710: 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69  3_vtab_on_confli
9720: 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54  ct() */.  u8 isT
9730: 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
9740: 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  int;    /* True 
9750: 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74  if the outermost
9760: 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20   savepoint is a 
9770: 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74  TS */.  int next
9780: 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20  Pagesize;       
9790: 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a        /* Pagesiz
97a0: 65 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69  e after VACUUM i
97b0: 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61  f >0 */.  u32 ma
97c0: 67 69 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  gic;            
97d0: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63          /* Magic
97e0: 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65   number for dete
97f0: 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73  ct library misus
9800: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e  e */.  int nChan
9810: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
9820: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65       /* Value re
9830: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
9840: 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  3_changes() */. 
9850: 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67   int nTotalChang
9860: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
9870: 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64  * Value returned
9880: 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61   by sqlite3_tota
9890: 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  l_changes() */. 
98a0: 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49   int aLimit[SQLI
98b0: 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f  TE_N_LIMIT];   /
98c0: 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e  * Limits */.  in
98d0: 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70  t nMaxSorterMmap
98e0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
98f0: 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72  aximum size of r
9900: 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79  egions mapped by
9910: 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72   sorter */.  str
9920: 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49  uct sqlite3InitI
9930: 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e  nfo {      /* In
9940: 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64  formation used d
9950: 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61  uring initializa
9960: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  tion */.    int 
9970: 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20  newTnum;        
9980: 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70          /* Rootp
9990: 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69  age of table bei
99a0: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
99b0: 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20 20  /.    u8 iDb;   
99c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99d0: 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69    /* Which db fi
99e0: 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74  le is being init
99f0: 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75  ialized */.    u
9a00: 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20 20  8 busy;         
9a10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52             /* TR
9a20: 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20  UE if currently 
9a30: 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a  initializing */.
9a40: 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69      u8 orphanTri
9a50: 67 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  gger;           
9a60: 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e  /* Last statemen
9a70: 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45  t is orphaned TE
9a80: 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20  MP trigger */.  
9a90: 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56  } init;.  int nV
9aa0: 64 62 65 41 63 74 69 76 65 3b 20 20 20 20 20 20  dbeActive;      
9ab0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
9ac0: 72 20 6f 66 20 56 44 42 45 73 20 63 75 72 72 65  r of VDBEs curre
9ad0: 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a  ntly running */.
9ae0: 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b    int nVdbeRead;
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b00: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
9b10: 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72  ive VDBEs that r
9b20: 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a  ead or write */.
9b30: 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65    int nVdbeWrite
9b40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9b50: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
9b60: 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72  ive VDBEs that r
9b70: 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f  ead and write */
9b80: 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63  .  int nVdbeExec
9b90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9ba0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
9bb0: 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64  sted calls to Vd
9bc0: 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e  beExec() */.  in
9bd0: 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20  t nExtension;   
9be0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
9bf0: 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20  umber of loaded 
9c00: 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20  extensions */.  
9c10: 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f  void **aExtensio
9c20: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
9c30: 20 41 72 72 61 79 20 6f 66 20 73 68 61 72 65 64   Array of shared
9c40: 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73   library handles
9c50: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72   */.  void (*xTr
9c60: 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ace)(void*,const
9c70: 20 63 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20   char*);        
9c80: 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f  /* Trace functio
9c90: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72  n */.  void *pTr
9ca0: 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20 20  aceArg;         
9cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9cc0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
9cd0: 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74 69  the trace functi
9ce0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  on */.  void (*x
9cf0: 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63  Profile)(void*,c
9d00: 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b  onst char*,u64);
9d10: 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66    /* Profiling f
9d20: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
9d30: 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20  d *pProfileArg; 
9d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d50: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
9d60: 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75  nt to profile fu
9d70: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
9d80: 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20   *pCommitArg;   
9d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9da0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f   Argument to xCo
9db0: 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a  mmitCallback() *
9dc0: 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f  /   .  int (*xCo
9dd0: 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f  mmitCallback)(vo
9de0: 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f  id*);    /* Invo
9df0: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
9e00: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
9e10: 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20  pRollbackArg;   
9e20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
9e30: 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c  rgument to xRoll
9e40: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a  backCallback() *
9e50: 2f 20 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52  /   .  void (*xR
9e60: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29  ollbackCallback)
9e70: 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f  (void*); /* Invo
9e80: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
9e90: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
9ea0: 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f  pUpdateArg;.  vo
9eb0: 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c  id (*xUpdateCall
9ec0: 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  back)(void*,int,
9ed0: 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e   const char*,con
9ee0: 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f  st char*,sqlite_
9ef0: 69 6e 74 36 34 29 3b 0a 23 69 66 6e 64 65 66 20  int64);.#ifndef 
9f00: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
9f10: 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c    int (*xWalCall
9f20: 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71  back)(void *, sq
9f30: 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
9f40: 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  har *, int);.  v
9f50: 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65  oid *pWalArg;.#e
9f60: 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f  ndif.  void(*xCo
9f70: 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c  llNeeded)(void*,
9f80: 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65  sqlite3*,int eTe
9f90: 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72  xtRep,const char
9fa0: 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c  *);.  void(*xCol
9fb0: 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a  lNeeded16)(void*
9fc0: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54  ,sqlite3*,int eT
9fd0: 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69  extRep,const voi
9fe0: 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f  d*);.  void *pCo
9ff0: 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73  llNeededArg;.  s
a000: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45  qlite3_value *pE
a010: 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  rr;          /* 
a020: 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  Most recent erro
a030: 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75  r message */.  u
a040: 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74  nion {.    volat
a050: 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72  ile int isInterr
a060: 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69  upted; /* True i
a070: 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  f sqlite3_interr
a080: 75 70 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c  upt has been cal
a090: 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c  led */.    doubl
a0a0: 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20  e notUsed1;     
a0b0: 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72         /* Spacer
a0c0: 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f   */.  } u1;.  Lo
a0d0: 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64  okaside lookasid
a0e0: 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  e;          /* L
a0f0: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
a100: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f  configuration */
a110: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
a120: 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49  OMIT_AUTHORIZATI
a130: 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75  ON.  sqlite3_xau
a140: 74 68 20 78 41 75 74 68 3b 20 20 20 20 20 20 20  th xAuth;       
a150: 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74     /* Access aut
a160: 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74  horization funct
a170: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
a180: 41 75 74 68 41 72 67 3b 20 20 20 20 20 20 20 20  AuthArg;        
a190: 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72         /* 1st ar
a1a0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63  gument to the ac
a1b0: 63 65 73 73 20 61 75 74 68 20 66 75 6e 63 74 69  cess auth functi
a1c0: 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  on */.#endif.#if
a1d0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
a1e0: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
a1f0: 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67  CK.  int (*xProg
a200: 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20  ress)(void *);  
a210: 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65     /* The progre
a220: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ss callback */. 
a230: 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73   void *pProgress
a240: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Arg;           /
a250: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
a260: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
a270: 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ack */.  unsigne
a280: 64 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20  d nProgressOps; 
a290: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
a2a0: 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20   of opcodes for 
a2b0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
a2c0: 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  k */.#endif.#ifn
a2d0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
a2e0: 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69  VIRTUALTABLE.  i
a2f0: 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20  nt nVTrans;     
a300: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a310: 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f  Allocated size o
a320: 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48  f aVTrans */.  H
a330: 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20  ash aModule;    
a340: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a350: 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c  populated by sql
a360: 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
a370: 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74  le() */.  VtabCt
a380: 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20  x *pVtabCtx;    
a390: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65          /* Conte
a3a0: 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 76 74  xt for active vt
a3b0: 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74  ab connect/creat
a3c0: 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a  e */.  VTable **
a3d0: 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  aVTrans;        
a3e0: 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20       /* Virtual 
a3f0: 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e  tables with open
a400: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f   transactions */
a410: 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63  .  VTable *pDisc
a420: 6f 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69  onnect;    /* Di
a430: 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69  sconnect these i
a440: 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70  n next sqlite3_p
a450: 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64  repare() */.#end
a460: 69 66 0a 20 20 46 75 6e 63 44 65 66 48 61 73 68  if.  FuncDefHash
a470: 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20   aFunc;         
a480: 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65     /* Hash table
a490: 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66   of connection f
a4a0: 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61  unctions */.  Ha
a4b0: 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20  sh aCollSeq;    
a4c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
a4d0: 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ll collating seq
a4e0: 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79  uences */.  Busy
a4f0: 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64  Handler busyHand
a500: 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73  ler;      /* Bus
a510: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
a520: 44 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b  Db aDbStatic[2];
a530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a540: 20 53 74 61 74 69 63 20 73 70 61 63 65 20 66 6f   Static space fo
a550: 72 20 74 68 65 20 32 20 64 65 66 61 75 6c 74 20  r the 2 default 
a560: 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61  backends */.  Sa
a570: 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f  vepoint *pSavepo
a580: 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  int;        /* L
a590: 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 73 61  ist of active sa
a5a0: 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  vepoints */.  in
a5b0: 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20  t busyTimeout;  
a5c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
a5d0: 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65  usy handler time
a5e0: 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a  out, in msec */.
a5f0: 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74    int nSavepoint
a600: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a610: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e  /* Number of non
a620: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76  -transaction sav
a630: 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  epoints */.  int
a640: 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20   nStatement;    
a650: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
a660: 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73  mber of nested s
a670: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
a680: 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20  tions  */.  i64 
a690: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
a6a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74            /* Net
a6b0: 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
a6c0: 61 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73  aints this trans
a6d0: 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34  action. */.  i64
a6e0: 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e   nDeferredImmCon
a6f0: 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  s;         /* Ne
a700: 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64  t deferred immed
a710: 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  iate constraints
a720: 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74   */.  int *pnByt
a730: 65 73 46 72 65 65 64 3b 20 20 20 20 20 20 20 20  esFreed;        
a740: 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55      /* If not NU
a750: 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68  LL, increment th
a760: 69 73 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a  is in DbFree() *
a770: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
a780: 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
a790: 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f  TIFY.  /* The fo
a7a0: 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65  llowing variable
a7b0: 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63  s are all protec
a7c0: 74 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49  ted by the STATI
a7d0: 43 5f 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d  C_MASTER .  ** m
a7e0: 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c  utex, not by sql
a7f0: 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79  ite3.mutex. They
a800: 20 61 72 65 20 75 73 65 64 20 62 79 20 63 6f 64   are used by cod
a810: 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a  e in notify.c. .
a820: 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58    **.  ** When X
a830: 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69  .pUnlockConnecti
a840: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
a850: 73 20 74 68 61 74 20 58 20 69 73 20 77 61 69 74  s that X is wait
a860: 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a  ing for Y to.  *
a870: 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74  * unlock so that
a880: 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e   it can proceed.
a890: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20  .  **.  ** When 
a8a0: 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65  X.pBlockingConne
a8b0: 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d  ction==Y, that m
a8c0: 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68  eans that someth
a8d0: 69 6e 67 20 74 68 61 74 20 58 20 74 72 69 65 64  ing that X tried
a8e0: 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64  .  ** tried to d
a8f0: 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65  o recently faile
a900: 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  d with an SQLITE
a910: 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75  _LOCKED error du
a920: 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20  e to locks.  ** 
a930: 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a  held by Y..  */.
a940: 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63    sqlite3 *pBloc
a950: 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20  kingConnection; 
a960: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68  /* Connection th
a970: 61 74 20 63 61 75 73 65 64 20 53 51 4c 49 54 45  at caused SQLITE
a980: 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c  _LOCKED */.  sql
a990: 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e  ite3 *pUnlockCon
a9a0: 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20  nection;        
a9b0: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
a9c0: 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e   to watch for un
a9d0: 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  lock */.  void *
a9e0: 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20  pUnlockArg;     
a9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa00: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
aa10: 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a  UnlockNotify */.
aa20: 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b    void (*xUnlock
aa30: 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c  Notify)(void **,
aa40: 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63   int);  /* Unloc
aa50: 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63  k notify callbac
aa60: 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  k */.  sqlite3 *
aa70: 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20  pNextBlocked;   
aa80: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20       /* Next in 
aa90: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63  list of all bloc
aaa0: 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  ked connections 
aab0: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  */.#endif.#ifdef
aac0: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
aad0: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71  HENTICATION.  sq
aae0: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 61  lite3_userauth a
aaf0: 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55  uth;        /* U
ab00: 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69  ser authenticati
ab10: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a  on information *
ab20: 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  /.#endif.};../*.
ab30: 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69  ** A macro to di
ab40: 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64  scover the encod
ab50: 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73  ing of a databas
ab60: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 4e  e..*/.#define EN
ab70: 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62  C(db) ((db)->aDb
ab80: 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63  [0].pSchema->enc
ab90: 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  )../*.** Possibl
aba0: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  e values for the
abb0: 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a   sqlite3.flags..
abc0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
abd0: 45 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20  E_VdbeTrace     
abe0: 20 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20   0x00000001  /* 
abf0: 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44  True to trace VD
ac00: 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  BE execution */.
ac10: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
ac20: 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78  nternChanges  0x
ac30: 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63  00000002  /* Unc
ac40: 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61  ommitted Hash ta
ac50: 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ble changes */.#
ac60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
ac70: 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30  llFSync      0x0
ac80: 30 30 30 30 30 30 34 20 20 2f 2a 20 55 73 65 20  0000004  /* Use 
ac90: 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68  full fsync on th
aca0: 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65  e backend */.#de
acb0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74  fine SQLITE_Ckpt
acc0: 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30  FullFSync  0x000
acd0: 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75  00008  /* Use fu
ace0: 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65  ll fsync for che
acf0: 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69  ckpoint */.#defi
ad00: 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53  ne SQLITE_CacheS
ad10: 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30  pill     0x00000
ad20: 30 31 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70  010  /* OK to sp
ad30: 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65 20  ill pager cache 
ad40: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ad50: 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20  E_FullColNames  
ad60: 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20   0x00000020  /* 
ad70: 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e  Show full column
ad80: 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54   names on SELECT
ad90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ada0: 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73  TE_ShortColNames
adb0: 20 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a    0x00000040  /*
adc0: 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75   Show short colu
add0: 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65  mns names */.#de
ade0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e  fine SQLITE_Coun
adf0: 74 52 6f 77 73 20 20 20 20 20 20 30 78 30 30 30  tRows      0x000
ae00: 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20  00080  /* Count 
ae10: 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20  rows changed by 
ae20: 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20  INSERT, */.     
ae30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae50: 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45       /*   DELETE
ae60: 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20  , or UPDATE and 
ae70: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20  return */.      
ae80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aea0: 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75      /*   the cou
aeb0: 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62  nt using a callb
aec0: 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ack. */.#define 
aed0: 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62  SQLITE_NullCallb
aee0: 61 63 6b 20 20 20 30 78 30 30 30 30 30 31 30 30  ack   0x00000100
aef0: 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
af00: 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66  callback once if
af10: 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20   the */.        
af20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af40: 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65    /*   result se
af50: 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64  t is empty */.#d
af60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c  efine SQLITE_Sql
af70: 54 72 61 63 65 20 20 20 20 20 20 20 30 78 30 30  Trace       0x00
af80: 30 30 30 32 30 30 20 20 2f 2a 20 44 65 62 75 67  000200  /* Debug
af90: 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74   print SQL as it
afa0: 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65   executes */.#de
afb0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
afc0: 4c 69 73 74 69 6e 67 20 20 20 20 30 78 30 30 30  Listing    0x000
afd0: 30 30 34 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00400  /* Debug 
afe0: 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45  listings of VDBE
aff0: 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65   programs */.#de
b000: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74  fine SQLITE_Writ
b010: 65 53 63 68 65 6d 61 20 20 20 20 30 78 30 30 30  eSchema    0x000
b020: 30 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20  00800  /* OK to 
b030: 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41  update SQLITE_MA
b040: 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20  STER */.#define 
b050: 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70  SQLITE_VdbeAddop
b060: 54 72 61 63 65 20 30 78 30 30 30 30 31 30 30 30  Trace 0x00001000
b070: 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74    /* Trace sqlit
b080: 65 33 56 64 62 65 41 64 64 4f 70 28 29 20 63 61  e3VdbeAddOp() ca
b090: 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  lls */.#define S
b0a0: 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63  QLITE_IgnoreChec
b0b0: 6b 73 20 20 20 30 78 30 30 30 30 32 30 30 30 20  ks   0x00002000 
b0c0: 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72   /* Do not enfor
b0d0: 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61  ce check constra
b0e0: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
b0f0: 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d  SQLITE_ReadUncom
b100: 6d 69 74 74 65 64 20 30 78 30 30 30 34 30 30 30  mitted 0x0004000
b110: 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65 64 2d    /* For shared-
b120: 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64  cache mode */.#d
b130: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67  efine SQLITE_Leg
b140: 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30  acyFileFmt  0x00
b150: 30 30 38 30 30 30 20 20 2f 2a 20 43 72 65 61 74  008000  /* Creat
b160: 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  e new databases 
b170: 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23  in format 1 */.#
b180: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
b190: 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30 78 30  coveryMode   0x0
b1a0: 30 30 31 30 30 30 30 20 20 2f 2a 20 49 67 6e 6f  0010000  /* Igno
b1b0: 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f 72 73  re schema errors
b1c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b1d0: 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20  TE_ReverseOrder 
b1e0: 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a    0x00020000  /*
b1f0: 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72   Reverse unorder
b200: 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64  ed SELECTs */.#d
b210: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63  efine SQLITE_Rec
b220: 54 72 69 67 67 65 72 73 20 20 20 20 30 78 30 30  Triggers    0x00
b230: 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  040000  /* Enabl
b240: 65 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67  e recursive trig
b250: 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gers */.#define 
b260: 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65  SQLITE_ForeignKe
b270: 79 73 20 20 20 20 30 78 30 30 30 38 30 30 30 30  ys    0x00080000
b280: 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72    /* Enforce for
b290: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
b2a0: 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65  ints  */.#define
b2b0: 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65   SQLITE_AutoInde
b2c0: 78 20 20 20 20 20 20 30 78 30 30 31 30 30 30 30  x      0x0010000
b2d0: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74  0  /* Enable aut
b2e0: 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a  omatic indexes *
b2f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b300: 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20  _PreferBuiltin  
b310: 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20 50  0x00200000  /* P
b320: 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69  reference to bui
b330: 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23  lt-in funcs */.#
b340: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f  define SQLITE_Lo
b350: 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30  adExtension  0x0
b360: 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0400000  /* Enab
b370: 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  le load_extensio
b380: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
b390: 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65  ITE_EnableTrigge
b3a0: 72 20 20 30 78 30 30 38 30 30 30 30 30 20 20 2f  r  0x00800000  /
b3b0: 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
b3c0: 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65   triggers */.#de
b3d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65  fine SQLITE_Defe
b3e0: 72 46 4b 73 20 20 20 20 20 20 20 30 78 30 31 30  rFKs       0x010
b3f0: 30 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20  00000  /* Defer 
b400: 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e  all FK constrain
b410: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
b420: 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20  LITE_QueryOnly  
b430: 20 20 20 20 30 78 30 32 30 30 30 30 30 30 20 20      0x02000000  
b440: 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61 62  /* Disable datab
b450: 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ase changes */.#
b460: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
b470: 62 65 45 51 50 20 20 20 20 20 20 20 20 30 78 30  beEQP        0x0
b480: 34 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75  4000000  /* Debu
b490: 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  g EXPLAIN QUERY 
b4a0: 50 4c 41 4e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  PLAN */.../*.** 
b4b0: 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69  Bits of the sqli
b4c0: 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66  te3.dbOptFlags f
b4d0: 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75 73  ield that are us
b4e0: 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c  ed by the.** sql
b4f0: 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
b500: 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  l(SQLITE_TESTCTR
b510: 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c  L_OPTIMIZATIONS,
b520: 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74  ...) interface t
b530: 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79  o.** selectively
b540: 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73   disable various
b550: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
b560: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b570: 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72  E_QueryFlattener
b580: 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65   0x0001   /* Que
b590: 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f  ry flattening */
b5a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b5b0: 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30  ColumnCache    0
b5c0: 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d  x0002   /* Colum
b5d0: 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  n cache */.#defi
b5e0: 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42  ne SQLITE_GroupB
b5f0: 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20  yOrder   0x0004 
b600: 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76    /* GROUPBY cov
b610: 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f  er of ORDERBY */
b620: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b630: 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30  FactorOutConst 0
b640: 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74  x0008   /* Const
b650: 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f  ant factoring */
b660: 0a 2f 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  ./*             
b670: 20 20 20 6e 6f 74 20 75 73 65 64 20 20 20 20 30     not used    0
b680: 78 30 30 31 30 20 20 20 2f 2f 20 57 61 73 3a 20  x0010   // Was: 
b690: 53 51 4c 49 54 45 5f 49 64 78 52 65 61 6c 41 73  SQLITE_IdxRealAs
b6a0: 49 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  Int */.#define S
b6b0: 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70  QLITE_DistinctOp
b6c0: 74 20 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a  t    0x0020   /*
b6d0: 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20   DISTINCT using 
b6e0: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
b6f0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49  ne SQLITE_CoverI
b700: 64 78 53 63 61 6e 20 20 20 30 78 30 30 34 30 20  dxScan   0x0040 
b710: 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e    /* Covering in
b720: 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65  dex scans */.#de
b730: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65  fine SQLITE_Orde
b740: 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38  rByIdxJoin 0x008
b750: 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  0   /* ORDER BY 
b760: 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64  of joins via ind
b770: 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ex */.#define SQ
b780: 4c 49 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69  LITE_SubqCorouti
b790: 6e 65 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20  ne  0x0100   /* 
b7a0: 45 76 61 6c 75 61 74 65 20 73 75 62 71 75 65 72  Evaluate subquer
b7b0: 69 65 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65  ies as coroutine
b7c0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b7d0: 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20  ITE_Transitive  
b7e0: 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54     0x0200   /* T
b7f0: 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72  ransitive constr
b800: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
b810: 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70   SQLITE_OmitNoop
b820: 4a 6f 69 6e 20 20 20 30 78 30 34 30 30 20 20 20  Join   0x0400   
b830: 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74  /* Omit unused t
b840: 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a  ables in joins *
b850: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b860: 5f 53 74 61 74 33 20 20 20 20 20 20 20 20 20 20  _Stat3          
b870: 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20  0x0800   /* Use 
b880: 74 68 65 20 53 51 4c 49 54 45 5f 53 54 41 54 33  the SQLITE_STAT3
b890: 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
b8a0: 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73  e SQLITE_AllOpts
b8b0: 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20 20          0xffff  
b8c0: 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61   /* All optimiza
b8d0: 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tions */../*.** 
b8e0: 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69  Macros for testi
b8f0: 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
b900: 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  t optimizations 
b910: 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64  are enabled or d
b920: 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e  isabled..*/.#ifn
b930: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
b940: 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65  BUILTIN_TEST.#de
b950: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
b960: 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61  nDisabled(db, ma
b970: 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f  sk)  (((db)->dbO
b980: 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21  ptFlags&(mask))!
b990: 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  =0).#define Opti
b9a0: 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28  mizationEnabled(
b9b0: 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64  db, mask)   (((d
b9c0: 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28  b)->dbOptFlags&(
b9d0: 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65  mask))==0).#else
b9e0: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
b9f0: 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62  ationDisabled(db
ba00: 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65 66 69  , mask)  0.#defi
ba10: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45  ne OptimizationE
ba20: 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  nabled(db, mask)
ba30: 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a     1.#endif../*.
ba40: 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
ba50: 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f  f it OK to facto
ba60: 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  r constant expre
ba70: 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20  ssions into the 
ba80: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a  initialization.*
ba90: 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67 75  * code. The argu
baa0: 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73 65 20  ment is a Parse 
bab0: 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20 63  object for the c
bac0: 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a  ode generator..*
bad0: 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74 46  /.#define ConstF
bae0: 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d  actorOk(P) ((P)-
baf0: 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a  >okConstFactor).
bb00: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
bb10: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73  values for the s
bb20: 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65 6c  qlite.magic fiel
bb30: 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  d..** The number
bb40: 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61  s are obtained a
bb50: 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76  t random and hav
bb60: 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65 61  e no special mea
bb70: 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74  ning, other.** t
bb80: 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69 6e  han being distin
bb90: 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74  ct from one anot
bba0: 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  her..*/.#define 
bbb0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45  SQLITE_MAGIC_OPE
bbc0: 4e 20 20 20 20 20 30 78 61 30 32 39 61 36 39 37  N     0xa029a697
bbd0: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
bbe0: 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   open */.#define
bbf0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c   SQLITE_MAGIC_CL
bc00: 4f 53 45 44 20 20 20 30 78 39 66 33 63 32 64 33  OSED   0x9f3c2d3
bc10: 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69  3  /* Database i
bc20: 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66  s closed */.#def
bc30: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
bc40: 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62 37 37  _SICK     0x4b77
bc50: 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20 61  1290  /* Error a
bc60: 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f 73  nd awaiting clos
bc70: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
bc80: 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 20  ITE_MAGIC_BUSY  
bc90: 20 20 20 30 78 66 30 33 62 37 39 30 36 20 20 2f     0xf03b7906  /
bca0: 2a 20 44 61 74 61 62 61 73 65 20 63 75 72 72 65  * Database curre
bcb0: 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23  ntly in use */.#
bcc0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
bcd0: 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78 62  GIC_ERROR    0xb
bce0: 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20 53  5357930  /* An S
bcf0: 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72  QLITE_MISUSE err
bd00: 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23  or occurred */.#
bd10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
bd20: 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36  GIC_ZOMBIE   0x6
bd30: 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73  4cffc7f  /* Clos
bd40: 65 20 77 69 74 68 20 6c 61 73 74 20 73 74 61 74  e with last stat
bd50: 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a  ement close */..
bd60: 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 66  /*.** Each SQL f
bd70: 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e  unction is defin
bd80: 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ed by an instanc
bd90: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
bda0: 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e  ng.** structure.
bdb0: 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74    A pointer to t
bdc0: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
bdd0: 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73   stored in the s
bde0: 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a 20 68  qlite.aFunc.** h
bdf0: 61 73 68 20 74 61 62 6c 65 2e 20 20 57 68 65 6e  ash table.  When
be00: 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63 74 69   multiple functi
be10: 6f 6e 73 20 68 61 76 65 20 74 68 65 20 73 61 6d  ons have the sam
be20: 65 20 6e 61 6d 65 2c 20 74 68 65 20 68 61 73 68  e name, the hash
be30: 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73   table.** points
be40: 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   to a linked lis
be50: 74 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63  t of these struc
be60: 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  tures..*/.struct
be70: 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 31 36   FuncDef {.  i16
be80: 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20   nArg;          
be90: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
bea0: 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65  rguments.  -1 me
beb0: 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f  ans unlimited */
bec0: 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61 67 73  .  u16 funcFlags
bed0: 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20  ;       /* Some 
bee0: 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53  combination of S
bef0: 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a  QLITE_FUNC_* */.
bf00: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74    void *pUserDat
bf10: 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64  a;     /* User d
bf20: 61 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f  ata parameter */
bf30: 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78  .  FuncDef *pNex
bf40: 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  t;      /* Next 
bf50: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61  function with sa
bf60: 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69  me name */.  voi
bf70: 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74  d (*xFunc)(sqlit
bf80: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
bf90: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
bfa0: 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20 66 75 6e  ; /* Regular fun
bfb0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
bfc0: 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65 33  (*xStep)(sqlite3
bfd0: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
bfe0: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20  lite3_value**); 
bff0: 2f 2a 20 41 67 67 72 65 67 61 74 65 20 73 74 65  /* Aggregate ste
c000: 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46  p */.  void (*xF
c010: 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33  inalize)(sqlite3
c020: 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20  _context*);     
c030: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67             /* Ag
c040: 67 72 65 67 61 74 65 20 66 69 6e 61 6c 69 7a 65  gregate finalize
c050: 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61  r */.  char *zNa
c060: 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  me;         /* S
c070: 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  QL name of the f
c080: 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75  unction. */.  Fu
c090: 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20 20  ncDef *pHash;   
c0a0: 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20     /* Next with 
c0b0: 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65  a different name
c0c0: 20 62 75 74 20 74 68 65 20 73 61 6d 65 20 68 61   but the same ha
c0d0: 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65 73 74  sh */.  FuncDest
c0e0: 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63  ructor *pDestruc
c0f0: 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72 65  tor;   /* Refere
c100: 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73 74  nce counted dest
c110: 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ructor function 
c120: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  */.};../*.** Thi
c130: 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63 61  s structure enca
c140: 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d  psulates a user-
c150: 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63  function destruc
c160: 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73  tor callback (as
c170: 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75  .** configured u
c180: 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63  sing create_func
c190: 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61  tion_v2()) and a
c1a0: 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74   reference count
c1b0: 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61  er. When.** crea
c1c0: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29  te_function_v2()
c1d0: 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72   is called to cr
c1e0: 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20  eate a function 
c1f0: 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74 6f  with a destructo
c200: 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f  r,.** a single o
c210: 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79  bject of this ty
c220: 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e  pe is allocated.
c230: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e   FuncDestructor.
c240: 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 20 0a  nRef is set to .
c250: 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
c260: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
c270: 20 63 72 65 61 74 65 64 20 28 65 69 74 68 65 72   created (either
c280: 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69   1 or 3, dependi
c290: 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a  ng on whether.**
c2a0: 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63   or not the spec
c2b0: 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69  ified encoding i
c2c0: 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54  s SQLITE_ANY). T
c2d0: 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74  he FuncDef.pDest
c2e0: 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72  ructor.** member
c2f0: 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65 20   of each of the 
c300: 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65  new FuncDef obje
c310: 63 74 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f  cts is set to po
c320: 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63  int to the alloc
c330: 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74  ated.** FuncDest
c340: 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  ructor..**.** Th
c350: 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f  ereafter, when o
c360: 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65  ne of the FuncDe
c370: 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c  f objects is del
c380: 65 74 65 64 2c 20 74 68 65 20 72 65 66 65 72 65  eted, the refere
c390: 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20  nce.** count on 
c3a0: 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64  this object is d
c3b0: 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e  ecremented. When
c3c0: 20 69 74 20 72 65 61 63 68 65 73 20 30 2c 20 74   it reaches 0, t
c3d0: 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a  he destructor.**
c3e0: 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20   is invoked and 
c3f0: 74 68 65 20 46 75 6e 63 44 65 73 74 72 75 63 74  the FuncDestruct
c400: 6f 72 20 73 74 72 75 63 74 75 72 65 20 66 72 65  or structure fre
c410: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  ed..*/.struct Fu
c420: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20  ncDestructor {. 
c430: 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69   int nRef;.  voi
c440: 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f  d (*xDestroy)(vo
c450: 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70  id *);.  void *p
c460: 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a  UserData;.};../*
c470: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
c480: 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e  ues for FuncDef.
c490: 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61  flags.  Note tha
c4a0: 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e  t the _LENGTH an
c4b0: 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c  d _TYPEOF.** val
c4c0: 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70  ues must corresp
c4d0: 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45  ond to OPFLAG_LE
c4e0: 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c  NGTHARG and OPFL
c4f0: 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 54  AG_TYPEOFARG.  T
c500: 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73 65  here.** are asse
c510: 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
c520: 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20 76  in the code to v
c530: 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2f 0a 23  erify this..*/.#
c540: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
c550: 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30 30  NC_ENCMASK  0x00
c560: 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 38  3 /* SQLITE_UTF8
c570: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  , SQLITE_UTF16BE
c580: 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23   or UTF16LE */.#
c590: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
c5a0: 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30 30  NC_LIKE     0x00
c5b0: 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66  4 /* Candidate f
c5c0: 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69  or the LIKE opti
c5d0: 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  mization */.#def
c5e0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
c5f0: 43 41 53 45 20 20 20 20 20 30 78 30 30 38 20 2f  CASE     0x008 /
c600: 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65  * Case-sensitive
c610: 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74   LIKE-type funct
c620: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
c630: 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d  QLITE_FUNC_EPHEM
c640: 20 20 20 20 30 78 30 31 30 20 2f 2a 20 45 70 68      0x010 /* Eph
c650: 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20  emeral.  Delete 
c660: 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65  with VDBE */.#de
c670: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
c680: 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 32 30 20  _NEEDCOLL 0x020 
c690: 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  /* sqlite3GetFun
c6a0: 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74  cCollSeq() might
c6b0: 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f 0a 23 64   be called */.#d
c6c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
c6d0: 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 34 30  C_LENGTH   0x040
c6e0: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e   /* Built-in len
c6f0: 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  gth() function *
c700: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c710: 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30  _FUNC_TYPEOF   0
c720: 78 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  x080 /* Built-in
c730: 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
c740: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
c750: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20  LITE_FUNC_COUNT 
c760: 20 20 20 30 78 31 30 30 20 2f 2a 20 42 75 69 6c     0x100 /* Buil
c770: 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67  t-in count(*) ag
c780: 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69  gregate */.#defi
c790: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
c7a0: 4f 41 4c 45 53 43 45 20 30 78 32 30 30 20 2f 2a  OALESCE 0x200 /*
c7b0: 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73   Built-in coales
c7c0: 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29  ce() or ifnull()
c7d0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c7e0: 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59  TE_FUNC_UNLIKELY
c7f0: 20 30 78 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d   0x400 /* Built-
c800: 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75  in unlikely() fu
c810: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
c820: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
c830: 4e 53 54 41 4e 54 20 30 78 38 30 30 20 2f 2a 20  NSTANT 0x800 /* 
c840: 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73 20  Constant inputs 
c850: 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74 20  give a constant 
c860: 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e  output */.#defin
c870: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49  e SQLITE_FUNC_MI
c880: 4e 4d 41 58 20 20 30 78 31 30 30 30 20 2f 2a 20  NMAX  0x1000 /* 
c890: 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29 20 61  True for min() a
c8a0: 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65 67 61  nd max() aggrega
c8b0: 74 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  tes */../*.** Th
c8c0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65  e following thre
c8d0: 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49  e macros, FUNCTI
c8e0: 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29  ON(), LIKEFUNC()
c8f0: 20 61 6e 64 20 41 47 47 52 45 47 41 54 45 28 29   and AGGREGATE()
c900: 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20   are.** used to 
c910: 63 72 65 61 74 65 20 74 68 65 20 69 6e 69 74 69  create the initi
c920: 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20  alizers for the 
c930: 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72  FuncDef structur
c940: 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43  es..**.**   FUNC
c950: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
c960: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
c970: 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  nc).**     Used 
c980: 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c  to create a scal
c990: 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  ar function defi
c9a0: 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63  nition of a func
c9b0: 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20  tion zName .**  
c9c0: 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62     implemented b
c9d0: 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75  y C function xFu
c9e0: 6e 63 20 74 68 61 74 20 61 63 63 65 70 74 73 20  nc that accepts 
c9f0: 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20  nArg arguments. 
ca00: 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65  The.**     value
ca10: 20 70 61 73 73 65 64 20 61 73 20 69 41 72 67 20   passed as iArg 
ca20: 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f  is cast to a (vo
ca30: 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76  id*) and made av
ca40: 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61  ailable.**     a
ca50: 73 20 74 68 65 20 75 73 65 72 2d 64 61 74 61 20  s the user-data 
ca60: 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  (sqlite3_user_da
ca70: 74 61 28 29 29 20 66 6f 72 20 74 68 65 20 66 75  ta()) for the fu
ca80: 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a 2a 20 20  nction. If .**  
ca90: 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43 20     argument bNC 
caa0: 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68  is true, then th
cab0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  e SQLITE_FUNC_NE
cac0: 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73  EDCOLL flag is s
cad0: 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e  et..**.**   VFUN
cae0: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
caf0: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
cb00: 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65  unc).**     Like
cb10: 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74   FUNCTION except
cb20: 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51   it omits the SQ
cb30: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
cb40: 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20  NT flag..**.**  
cb50: 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65   AGGREGATE(zName
cb60: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
cb70: 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  C, xStep, xFinal
cb80: 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
cb90: 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65   create an aggre
cba0: 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65  gate function de
cbb0: 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  finition impleme
cbc0: 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74  nted by.**     t
cbd0: 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78  he C functions x
cbe0: 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e  Step and xFinal.
cbf0: 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20   The first four 
cc00: 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20  parameters.**   
cc10: 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65    are interprete
cc20: 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61  d in the same wa
cc30: 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34  y as the first 4
cc40: 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a   parameters to.*
cc50: 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29  *     FUNCTION()
cc60: 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55  ..**.**   LIKEFU
cc70: 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  NC(zName, nArg, 
cc80: 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20  pArg, flags).** 
cc90: 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
cca0: 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63  te a scalar func
ccb0: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
ccc0: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e  of a function zN
ccd0: 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68 61 74  ame .**     that
cce0: 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72   accepts nArg ar
ccf0: 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69  guments and is i
cd00: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20  mplemented by a 
cd10: 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20 20  call to C .**   
cd20: 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46    function likeF
cd30: 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70 41  unc. Argument pA
cd40: 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20  rg is cast to a 
cd50: 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61 64  (void *) and mad
cd60: 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61 62  e.**     availab
cd70: 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74 69  le as the functi
cd80: 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73 71  on user-data (sq
cd90: 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28  lite3_user_data(
cda0: 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 46  )). The.**     F
cdb0: 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61 72  uncDef.flags var
cdc0: 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20  iable is set to 
cdd0: 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65 64  the value passed
cde0: 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a   as the flags.**
cdf0: 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e 0a       parameter..
ce00: 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54  */.#define FUNCT
ce10: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
ce20: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
ce30: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
ce40: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
ce50: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  NT|SQLITE_UTF8|(
ce60: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
ce70: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
ce80: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
ce90: 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
cea0: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
ceb0: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 56   0, 0}.#define V
cec0: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
ced0: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
cee0: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
cef0: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
cf00: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
cf10: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
cf20: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
cf30: 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
cf40: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
cf50: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 46   0, 0}.#define F
cf60: 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20  UNCTION2(zName, 
cf70: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
cf80: 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61   xFunc, extraFla
cf90: 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51  gs) \.  {nArg,SQ
cfa0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
cfb0: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  NT|SQLITE_UTF8|(
cfc0: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
cfd0: 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46  NEEDCOLL)|extraF
cfe0: 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45  lags,\.   SQLITE
cff0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
d000: 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
d010: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
d020: 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e  .#define STR_FUN
d030: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
d040: 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, pArg, bNC, xF
d050: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
d060: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
d070: 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
d080: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
d090: 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
d0a0: 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63    pArg, 0, xFunc
d0b0: 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
d0c0: 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 4c 49  0, 0}.#define LI
d0d0: 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41  KEFUNC(zName, nA
d0e0: 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29 20  rg, arg, flags) 
d0f0: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
d100: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
d110: 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61 67  SQLITE_UTF8|flag
d120: 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29  s, \.   (void *)
d130: 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63  arg, 0, likeFunc
d140: 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
d150: 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 41 47  0, 0}.#define AG
d160: 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
d170: 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
d180: 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20  tep, xFinal) \. 
d190: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
d1a0: 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8|(nc*SQLITE_F
d1b0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
d1c0: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
d1d0: 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30  O_PTR(arg), 0, 0
d1e0: 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23  , xStep,xFinal,#
d1f0: 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 23 64 65 66 69  zName,0,0}.#defi
d200: 6e 65 20 41 47 47 52 45 47 41 54 45 32 28 7a 4e  ne AGGREGATE2(zN
d210: 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20  ame, nArg, arg, 
d220: 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
d230: 6c 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c  l, extraFlags) \
d240: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
d250: 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45  _UTF8|(nc*SQLITE
d260: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c  _FUNC_NEEDCOLL)|
d270: 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20  extraFlags, \.  
d280: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
d290: 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c 20 78  TR(arg), 0, 0, x
d2a0: 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61  Step,xFinal,#zNa
d2b0: 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41  me,0,0}../*.** A
d2c0: 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65 70  ll current savep
d2d0: 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64  oints are stored
d2e0: 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   in a linked lis
d2f0: 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a  t starting at.**
d300: 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f   sqlite3.pSavepo
d310: 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20 65  int. The first e
d320: 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69  lement in the li
d330: 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72  st is the most r
d340: 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65  ecently.** opene
d350: 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76  d savepoint. Sav
d360: 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65  epoints are adde
d370: 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79  d to the list by
d380: 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f   the vdbe.** OP_
d390: 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75  Savepoint instru
d3a0: 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ction..*/.struct
d3b0: 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63   Savepoint {.  c
d3c0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
d3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3e0: 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20     /* Savepoint 
d3f0: 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e  name (nul-termin
d400: 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e  ated) */.  i64 n
d410: 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20  DeferredCons;   
d420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d430: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65  * Number of defe
d440: 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f  rred fk violatio
d450: 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  ns */.  i64 nDef
d460: 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20  erredImmCons;   
d470: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d480: 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65  umber of deferre
d490: 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53  d imm fk. */.  S
d4a0: 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b  avepoint *pNext;
d4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4c0: 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61 76     /* Parent sav
d4d0: 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29 20  epoint (if any) 
d4e0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
d4f0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75   following are u
d500: 73 65 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e  sed as the secon
d510: 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73  d parameter to s
d520: 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28  qlite3Savepoint(
d530: 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68 65  ),.** and as the
d540: 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
d550: 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74  the OP_Savepoint
d560: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
d570: 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
d580: 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30 0a  NT_BEGIN      0.
d590: 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
d5a0: 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a 23  T_RELEASE    1.#
d5b0: 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54  define SAVEPOINT
d5c0: 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a  _ROLLBACK   2...
d5d0: 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74  /*.** Each SQLit
d5e0: 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61  e module (virtua
d5f0: 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69  l table definiti
d600: 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20 62  on) is defined b
d610: 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  y an.** instance
d620: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
d630: 67 20 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f  g structure, sto
d640: 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74  red in the sqlit
d650: 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61  e3.aModule.** ha
d660: 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72  sh table..*/.str
d670: 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63  uct Module {.  c
d680: 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
d690: 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20  ule *pModule;   
d6a0: 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20      /* Callback 
d6b0: 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f  pointers */.  co
d6c0: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  nst char *zName;
d6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6e0: 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65     /* Name passe
d6f0: 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75  d to create_modu
d700: 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  le() */.  void *
d710: 70 41 75 78 3b 20 20 20 20 20 20 20 20 20 20 20  pAux;           
d720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d730: 2a 20 70 41 75 78 20 70 61 73 73 65 64 20 74 6f  * pAux passed to
d740: 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29   create_module()
d750: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65   */.  void (*xDe
d760: 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20  stroy)(void *); 
d770: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
d780: 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20  dule destructor 
d790: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a  function */.};..
d7a0: 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  /*.** informatio
d7b0: 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c  n about each col
d7c0: 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61  umn of an SQL ta
d7d0: 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61  ble is held in a
d7e0: 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
d7f0: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
d800: 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d  .*/.struct Colum
d810: 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  n {.  char *zNam
d820: 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  e;     /* Name o
d830: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  f this column */
d840: 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20  .  Expr *pDflt; 
d850: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76      /* Default v
d860: 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  alue of this col
d870: 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  umn */.  char *z
d880: 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 4f 72 69  Dflt;     /* Ori
d890: 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68  ginal text of th
d8a0: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
d8b0: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 79 70 65  */.  char *zType
d8c0: 3b 20 20 20 20 20 2f 2a 20 44 61 74 61 20 74 79  ;     /* Data ty
d8d0: 70 65 20 66 6f 72 20 74 68 69 73 20 63 6f 6c 75  pe for this colu
d8e0: 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43  mn */.  char *zC
d8f0: 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c  oll;     /* Coll
d900: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20  ating sequence. 
d910: 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68   If NULL, use th
d920: 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75  e default */.  u
d930: 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20  8 notNull;      
d940: 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66  /* An OE_ code f
d950: 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f  or handling a NO
d960: 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
d970: 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  t */.  char affi
d980: 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f  nity;   /* One o
d990: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  f the SQLITE_AFF
d9a0: 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20  _... values */. 
d9b0: 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20 20   u8 szEst;      
d9c0: 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73    /* Estimated s
d9d0: 69 7a 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  ize of this colu
d9e0: 6d 6e 2e 20 20 49 4e 54 3d 3d 31 20 2a 2f 0a 20  mn.  INT==1 */. 
d9f0: 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20   u8 colFlags;   
da00: 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f    /* Boolean pro
da10: 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f  perties.  See CO
da20: 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62  LFLAG_ defines b
da30: 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41  elow */.};../* A
da40: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
da50: 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67  r Column.colFlag
da60: 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  s:.*/.#define CO
da70: 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30  LFLAG_PRIMKEY  0
da80: 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75  x0001    /* Colu
da90: 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74 68  mn is part of th
daa0: 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  e primary key */
dab0: 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
dac0: 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30 30 32  _HIDDEN   0x0002
dad0: 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20      /* A hidden 
dae0: 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74  column in a virt
daf0: 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a  ual table */../*
db00: 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67  .** A "Collating
db10: 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64 65   Sequence" is de
db20: 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
db30: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
db40: 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
db50: 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79  re. Conceptually
db60: 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  , a collating se
db70: 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20  quence consists 
db80: 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a  of a name and.**
db90: 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f   a comparison ro
dba0: 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e  utine that defin
dbb0: 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20  es the order of 
dbc0: 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a  that sequence..*
dbd0: 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e  *.** If CollSeq.
dbe0: 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74  xCmp is NULL, it
dbf0: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a   means that the.
dc00: 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ** collating seq
dc10: 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e  uence is undefin
dc20: 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69  ed.  Indices bui
dc30: 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e  lt on an undefin
dc40: 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20  ed.** collating 
dc50: 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74  sequence may not
dc60: 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69 74   be read or writ
dc70: 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43  ten..*/.struct C
dc80: 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20  ollSeq {.  char 
dc90: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
dca0: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
dcb0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
dcc0: 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  ce, UTF-8 encode
dcd0: 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  d */.  u8 enc;  
dce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
dcf0: 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61  Text encoding ha
dd00: 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20  ndled by xCmp() 
dd10: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  */.  void *pUser
dd20: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69  ;          /* Fi
dd30: 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
dd40: 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20  xCmp() */.  int 
dd50: 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e  (*xCmp)(void*,in
dd60: 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  t, const void*, 
dd70: 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  int, const void*
dd80: 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  );.  void (*xDel
dd90: 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65  )(void*);  /* De
dda0: 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73  structor for pUs
ddb0: 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
ddc0: 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e  A sort order can
ddd0: 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20 6f   be either ASC o
dde0: 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69  r DESC..*/.#defi
ddf0: 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43  ne SQLITE_SO_ASC
de00: 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72         0  /* Sor
de10: 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f  t in ascending o
de20: 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rder */.#define 
de30: 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20  SQLITE_SO_DESC  
de40: 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69      1  /* Sort i
de50: 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
de60: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75  r */../*.** Colu
de70: 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70 65  mn affinity type
de80: 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75  s..**.** These u
de90: 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d  sed to have mnem
dea0: 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27  onic name like '
deb0: 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46  i' for SQLITE_AF
dec0: 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a  F_INTEGER and.**
ded0: 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f   't' for SQLITE_
dee0: 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77  AFF_TEXT.  But w
def0: 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74  e can save a lit
df00: 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d  tle space and im
df10: 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65  prove.** the spe
df20: 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e  ed a little by n
df30: 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c  umbering the val
df40: 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c  ues consecutivel
df50: 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72  y.  .**.** But r
df60: 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72 74  ather than start
df70: 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65   with 0 or 1, we
df80: 20 62 65 67 69 6e 20 77 69 74 68 20 27 41 27 2e   begin with 'A'.
df90: 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77    That way,.** w
dfa0: 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66  hen multiple aff
dfb0: 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65 20  inity types are 
dfc0: 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74  concatenated int
dfd0: 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a  o a string and.*
dfe0: 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50 34  * used as the P4
dff0: 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77   operand, they w
e000: 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64  ill be more read
e010: 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  able..**.** Note
e020: 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e   also that the n
e030: 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72 65  umeric types are
e040: 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65   grouped togethe
e050: 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e  r so that testin
e060: 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72  g.** for a numer
e070: 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69 6e  ic type is a sin
e080: 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  gle comparison. 
e090: 20 41 6e 64 20 74 68 65 20 4e 4f 4e 45 20 74 79   And the NONE ty
e0a0: 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a  pe is first..*/.
e0b0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
e0c0: 46 46 5f 4e 4f 4e 45 20 20 20 20 20 27 41 27 0a  FF_NONE     'A'.
e0d0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
e0e0: 46 46 5f 54 45 58 54 20 20 20 20 20 27 42 27 0a  FF_TEXT     'B'.
e0f0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
e100: 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27 0a  FF_NUMERIC  'C'.
e110: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
e120: 46 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27 0a  FF_INTEGER  'D'.
e130: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
e140: 46 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27 0a  FF_REAL     'E'.
e150: 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
e160: 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  IsNumericAffinit
e170: 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49  y(X)  ((X)>=SQLI
e180: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a  TE_AFF_NUMERIC).
e190: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
e1a0: 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65  E_AFF_MASK value
e1b0: 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20  s masks off the 
e1c0: 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73  significant bits
e1d0: 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69   of an.** affini
e1e0: 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64  ty value. .*/.#d
e1f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
e200: 5f 4d 41 53 4b 20 20 20 20 20 30 78 34 37 0a 0a  _MASK     0x47..
e210: 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c  /*.** Additional
e220: 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61 74   bit values that
e230: 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74   can be ORed wit
e240: 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69  h an affinity wi
e250: 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e  thout.** changin
e260: 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a  g the affinity..
e270: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  **.** The SQLITE
e280: 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73  _NOTNULL flag is
e290: 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f   a combination o
e2a0: 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d  f NULLEQ and JUM
e2b0: 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63  PIFNULL..** It c
e2c0: 61 75 73 65 73 20 61 6e 20 61 73 73 65 72 74 28  auses an assert(
e2d0: 29 20 74 6f 20 66 69 72 65 20 69 66 20 65 69 74  ) to fire if eit
e2e0: 68 65 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61  her operand to a
e2f0: 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f   comparison.** o
e300: 70 65 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e  perator is NULL.
e310: 20 20 49 74 20 69 73 20 61 64 64 65 64 20 74 6f    It is added to
e320: 20 63 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69   certain compari
e330: 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f  son operators to
e340: 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74  .** prove that t
e350: 68 65 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  he operands are 
e360: 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e  always NOT NULL.
e370: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
e380: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20  TE_JUMPIFNULL   
e390: 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69  0x10  /* jumps i
e3a0: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
e3b0: 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   is NULL */.#def
e3c0: 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  ine SQLITE_STORE
e3d0: 50 32 20 20 20 20 20 20 30 78 32 30 20 20 2f 2a  P2      0x20  /*
e3e0: 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
e3f0: 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20   reg[P2] rather 
e400: 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65  than jump */.#de
e410: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  fine SQLITE_NULL
e420: 45 51 20 20 20 20 20 20 20 30 78 38 30 20 20 2f  EQ       0x80  /
e430: 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23  * NULL=NULL */.#
e440: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
e450: 54 4e 55 4c 4c 20 20 20 20 20 20 30 78 39 30 20  TNULL      0x90 
e460: 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
e470: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76  operands are nev
e480: 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a  er NULL */../*.*
e490: 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74  * An object of t
e4a0: 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65 61  his type is crea
e4b0: 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69 72  ted for each vir
e4c0: 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65  tual table prese
e4d0: 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74  nt in.** the dat
e4e0: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 0a 2a  abase schema. .*
e4f0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61  *.** If the data
e500: 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73  base schema is s
e510: 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72  hared, then ther
e520: 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63  e is one instanc
e530: 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72  e of this.** str
e540: 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68 20  ucture for each 
e550: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
e560: 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74  ion (sqlite3*) t
e570: 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68 61  hat uses the sha
e580: 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54  red.** schema. T
e590: 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20 65  his is because e
e5a0: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
e5b0: 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73  nection requires
e5c0: 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a   its own unique.
e5d0: 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
e5e0: 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  he sqlite3_vtab*
e5f0: 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20   handle used to 
e600: 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75  access the virtu
e610: 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20 69 6d 70  al table .** imp
e620: 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c  lementation. sql
e630: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
e640: 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68  es can not be sh
e650: 61 72 65 64 20 62 65 74 77 65 65 6e 20 0a 2a 2a  ared between .**
e660: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
e670: 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e  tions, even when
e680: 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65   the rest of the
e690: 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62   in-memory datab
e6a0: 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d 61 20 69  ase .** schema i
e6b0: 73 20 73 68 61 72 65 64 2c 20 61 73 20 74 68 65  s shared, as the
e6c0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
e6d0: 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65  often stores the
e6e0: 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
e6f0: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70  nection handle p
e700: 61 73 73 65 64 20 74 6f 20 69 74 20 76 69 61 20  assed to it via 
e710: 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f  the xConnect() o
e720: 72 20 78 43 72 65 61 74 65 28 29 20 6d 65 74 68  r xCreate() meth
e730: 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69  od.** during ini
e740: 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65  tialization inte
e750: 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74  rnally. This dat
e760: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
e770: 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74   handle may.** t
e780: 68 65 6e 20 62 65 20 75 73 65 64 20 62 79 20 74  hen be used by t
e790: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
e7a0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
e7b0: 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20 74  to access real t
e7c0: 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74 68 69 6e  ables .** within
e7d0: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 53   the database. S
e7e0: 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70 65  o that they appe
e7f0: 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ar as part of th
e800: 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a 20 74 72  e callers .** tr
e810: 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73 65  ansaction, these
e820: 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20 74   accesses need t
e830: 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74 68  o be made via th
e840: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
e850: 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  .** connection a
e860: 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20 65  s that used to e
e870: 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61  xecute SQL opera
e880: 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72  tions on the vir
e890: 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  tual table..**.*
e8a0: 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a  * All VTable obj
e8b0: 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65 73  ects that corres
e8c0: 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65  pond to a single
e8d0: 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72   table in a shar
e8e0: 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73  ed.** database s
e8f0: 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61  chema are initia
e900: 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20  lly stored in a 
e910: 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e  linked-list poin
e920: 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65  ted to by.** the
e930: 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d   Table.pVTable m
e940: 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f  ember variable o
e950: 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  f the correspond
e960: 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74  ing Table object
e970: 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c  ..** When an sql
e980: 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f  ite3_prepare() o
e990: 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75  peration is requ
e9a0: 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  ired to access t
e9b0: 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  he virtual.** ta
e9c0: 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65 73  ble, it searches
e9d0: 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68   the list for th
e9e0: 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f  e VTable that co
e9f0: 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
ea00: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
ea10: 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68  nection doing th
ea20: 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61  e preparing so a
ea30: 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72  s to use the cor
ea40: 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  rect.** sqlite3_
ea50: 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20  vtab* handle in 
ea60: 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65  the compiled que
ea70: 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61  ry..**.** When a
ea80: 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c  n in-memory Tabl
ea90: 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65  e object is dele
eaa0: 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65  ted (for example
eab0: 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68   when the.** sch
eac0: 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c  ema is being rel
ead0: 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72  oaded for some r
eae0: 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62  eason), the VTab
eaf0: 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e  le objects are n
eb00: 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61  ot .** deleted a
eb10: 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  nd the sqlite3_v
eb20: 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65  tab* handles are
eb30: 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74   not xDisconnect
eb40: 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65 64 69 61  ()ed .** immedia
eb50: 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74  tely. Instead, t
eb60: 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72  hey are moved fr
eb70: 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54  om the Table.pVT
eb80: 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20  able list to.** 
eb90: 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c  another linked l
eba0: 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74 68  ist headed by th
ebb0: 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f  e sqlite3.pDisco
ebc0: 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20  nnect member of 
ebd0: 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
ebe0: 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72  ding sqlite3 str
ebf0: 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72 65  ucture. They are
ec00: 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44   then deleted/xD
ec10: 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a 20  isconnected .** 
ec20: 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61 74  next time a stat
ec30: 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65  ement is prepare
ec40: 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c  d using said sql
ec50: 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64  ite3*. This is d
ec60: 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20  one.** to avoid 
ec70: 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20  deadlock issues 
ec80: 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70  involving multip
ec90: 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  le sqlite3.mutex
eca0: 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66   mutexes..** Ref
ecb0: 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61  er to comments a
ecc0: 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71  bove function sq
ecd0: 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
ece0: 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20  ist() for an.** 
ecf0: 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74  explanation as t
ed00: 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66 65  o why it is safe
ed10: 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79   to add an entry
ed20: 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70   to an sqlite3.p
ed30: 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69  Disconnect.** li
ed40: 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69  st without holdi
ed50: 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ng the correspon
ed60: 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74  ding sqlite3.mut
ed70: 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20  ex mutex..**.** 
ed80: 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f  The memory for o
ed90: 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20 74  bjects of this t
eda0: 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c  ype is always al
edb0: 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a 20 73  located by .** s
edc0: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29  qlite3DbMalloc()
edd0: 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e  , using the conn
ede0: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74  ection handle st
edf0: 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64  ored in VTable.d
ee00: 62 20 61 73 20 0a 2a 2a 20 74 68 65 20 66 69 72  b as .** the fir
ee10: 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  st argument..*/.
ee20: 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a  struct VTable {.
ee30: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
ee40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
ee50: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
ee60: 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  on associated wi
ee70: 74 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  th this table */
ee80: 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b  .  Module *pMod;
ee90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
eea0: 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c  Pointer to modul
eeb0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
eec0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   */.  sqlite3_vt
eed0: 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20  ab *pVtab;      
eee0: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74  /* Pointer to vt
eef0: 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20  ab instance */. 
ef00: 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
ef10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
ef20: 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73  mber of pointers
ef30: 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
ef40: 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73  re */.  u8 bCons
ef50: 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20  traint;         
ef60: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e    /* True if con
ef70: 73 74 72 61 69 6e 74 73 20 61 72 65 20 73 75 70  straints are sup
ef80: 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20  ported */.  int 
ef90: 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  iSavepoint;     
efa0: 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f        /* Depth o
efb0: 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20  f the SAVEPOINT 
efc0: 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c  stack */.  VTabl
efd0: 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  e *pNext;       
efe0: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20       /* Next in 
eff0: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65  linked list (see
f000: 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f   above) */.};../
f010: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 74 61  *.** Each SQL ta
f020: 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e 74  ble is represent
f030: 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
f040: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
f050: 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20  he.** following 
f060: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
f070: 20 54 61 62 6c 65 2e 7a 4e 61 6d 65 20 69 73 20   Table.zName is 
f080: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
f090: 74 61 62 6c 65 2e 20 20 54 68 65 20 63 61 73 65  table.  The case
f0a0: 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   of the original
f0b0: 0a 2a 2a 20 43 52 45 41 54 45 20 54 41 42 4c 45  .** CREATE TABLE
f0c0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 74   statement is st
f0d0: 6f 72 65 64 2c 20 62 75 74 20 63 61 73 65 20 69  ored, but case i
f0e0: 73 20 6e 6f 74 20 73 69 67 6e 69 66 69 63 61 6e  s not significan
f0f0: 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72 69  t for.** compari
f100: 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c  sons..**.** Tabl
f110: 65 2e 6e 43 6f 6c 20 69 73 20 74 68 65 20 6e 75  e.nCol is the nu
f120: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
f130: 69 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 20  in this table.  
f140: 54 61 62 6c 65 2e 61 43 6f 6c 20 69 73 20 61 0a  Table.aCol is a.
f150: 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e  ** pointer to an
f160: 20 61 72 72 61 79 20 6f 66 20 43 6f 6c 75 6d 6e   array of Column
f170: 20 73 74 72 75 63 74 75 72 65 73 2c 20 6f 6e 65   structures, one
f180: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
f190: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 74  ..**.** If the t
f1a0: 61 62 6c 65 20 68 61 73 20 61 6e 20 49 4e 54 45  able has an INTE
f1b0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
f1c0: 20 74 68 65 6e 20 54 61 62 6c 65 2e 69 50 4b 65   then Table.iPKe
f1d0: 79 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  y is the index o
f1e0: 66 0a 2a 2a 20 74 68 65 20 63 6f 6c 75 6d 6e 20  f.** the column 
f1f0: 74 68 61 74 20 69 73 20 74 68 61 74 20 6b 65 79  that is that key
f200: 2e 20 20 20 4f 74 68 65 72 77 69 73 65 20 54 61  .   Otherwise Ta
f210: 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 6e 65 67  ble.iPKey is neg
f220: 61 74 69 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a 20  ative.  Note.** 
f230: 74 68 61 74 20 74 68 65 20 64 61 74 61 74 79 70  that the datatyp
f240: 65 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59  e of the PRIMARY
f250: 20 4b 45 59 20 6d 75 73 74 20 62 65 20 49 4e 54   KEY must be INT
f260: 45 47 45 52 20 66 6f 72 20 74 68 69 73 20 66 69  EGER for this fi
f270: 65 6c 64 20 74 6f 0a 2a 2a 20 62 65 20 73 65 74  eld to.** be set
f280: 2e 20 20 41 6e 20 49 4e 54 45 47 45 52 20 50 52  .  An INTEGER PR
f290: 49 4d 41 52 59 20 4b 45 59 20 69 73 20 75 73 65  IMARY KEY is use
f2a0: 64 20 61 73 20 74 68 65 20 72 6f 77 69 64 20 66  d as the rowid f
f2b0: 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 0a 2a  or each row of.*
f2c0: 2a 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66  * the table.  If
f2d0: 20 61 20 74 61 62 6c 65 20 68 61 73 20 6e 6f 20   a table has no 
f2e0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
f2f0: 4b 45 59 2c 20 74 68 65 6e 20 61 20 72 61 6e 64  KEY, then a rand
f300: 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20 69 73 20 67  om rowid.** is g
f310: 65 6e 65 72 61 74 65 64 20 66 6f 72 20 65 61 63  enerated for eac
f320: 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74 61 62  h row of the tab
f330: 6c 65 2e 20 20 54 46 5f 48 61 73 50 72 69 6d 61  le.  TF_HasPrima
f340: 72 79 4b 65 79 20 69 73 20 73 65 74 20 69 66 0a  ryKey is set if.
f350: 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 68 61 73  ** the table has
f360: 20 61 6e 79 20 50 52 49 4d 41 52 59 20 4b 45 59   any PRIMARY KEY
f370: 2c 20 49 4e 54 45 47 45 52 20 6f 72 20 6f 74 68  , INTEGER or oth
f380: 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 61  erwise..**.** Ta
f390: 62 6c 65 2e 74 6e 75 6d 20 69 73 20 74 68 65 20  ble.tnum is the 
f3a0: 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
f3b0: 74 68 65 20 72 6f 6f 74 20 42 54 72 65 65 20 70  the root BTree p
f3c0: 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  age of the table
f3d0: 20 69 6e 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   in the.** datab
f3e0: 61 73 65 20 66 69 6c 65 2e 20 20 49 66 20 54 61  ase file.  If Ta
f3f0: 62 6c 65 2e 69 44 62 20 69 73 20 74 68 65 20 69  ble.iDb is the i
f400: 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
f410: 62 61 73 65 20 74 61 62 6c 65 20 62 61 63 6b 65  base table backe
f420: 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c 69 74 65 2e  nd.** in sqlite.
f430: 61 44 62 5b 5d 2e 20 20 30 20 69 73 20 66 6f 72  aDb[].  0 is for
f440: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
f450: 73 65 20 61 6e 64 20 31 20 69 73 20 66 6f 72 20  se and 1 is for 
f460: 74 68 65 20 66 69 6c 65 20 74 68 61 74 0a 2a 2a  the file that.**
f470: 20 68 6f 6c 64 73 20 74 65 6d 70 6f 72 61 72 79   holds temporary
f480: 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69   tables and indi
f490: 63 65 73 2e 20 20 49 66 20 54 46 5f 45 70 68 65  ces.  If TF_Ephe
f4a0: 6d 65 72 61 6c 20 69 73 20 73 65 74 0a 2a 2a 20  meral is set.** 
f4b0: 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69  then the table i
f4c0: 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 66 69  s stored in a fi
f4d0: 6c 65 20 74 68 61 74 20 69 73 20 61 75 74 6f 6d  le that is autom
f4e0: 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64  atically deleted
f4f0: 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20 56 44 42  .** when the VDB
f500: 45 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20  E cursor to the 
f510: 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64 2e  table is closed.
f520: 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 54    In this case T
f530: 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72 65  able.tnum .** re
f540: 66 65 72 73 20 56 44 42 45 20 63 75 72 73 6f 72  fers VDBE cursor
f550: 20 6e 75 6d 62 65 72 20 74 68 61 74 20 68 6f 6c   number that hol
f560: 64 73 20 74 68 65 20 74 61 62 6c 65 20 6f 70 65  ds the table ope
f570: 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65 20 72 6f  n, not to the ro
f580: 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75 6d 62 65  ot.** page numbe
f590: 72 2e 20 20 54 72 61 6e 73 69 65 6e 74 20 74 61  r.  Transient ta
f5a0: 62 6c 65 73 20 61 72 65 20 75 73 65 64 20 74 6f  bles are used to
f5b0: 20 68 6f 6c 64 20 74 68 65 20 72 65 73 75 6c 74   hold the result
f5c0: 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62 2d 71 75  s of a.** sub-qu
f5d0: 65 72 79 20 74 68 61 74 20 61 70 70 65 61 72 73  ery that appears
f5e0: 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 72 65   instead of a re
f5f0: 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e  al table name in
f600: 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
f610: 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c 45 43 54   .** of a SELECT
f620: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73   statement..*/.s
f630: 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20  truct Table {.  
f640: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
f650: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
f660: 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65  the table or vie
f670: 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61  w */.  Column *a
f680: 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49  Col;        /* I
f690: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
f6a0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
f6b0: 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b    Index *pIndex;
f6c0: 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
f6d0: 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e  f SQL indexes on
f6e0: 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a   this table. */.
f6f0: 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
f700: 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66  t;     /* NULL f
f710: 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e  or tables.  Poin
f720: 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e  ts to definition
f730: 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20   if a view. */. 
f740: 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20   FKey *pFKey;   
f750: 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20        /* Linked 
f760: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65  list of all fore
f770: 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73  ign keys in this
f780: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72   table */.  char
f790: 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20   *zColAff;      
f7a0: 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e   /* String defin
f7b0: 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79  ing the affinity
f7c0: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
f7d0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
f7e0: 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20 45  E_OMIT_CHECK.  E
f7f0: 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b  xprList *pCheck;
f800: 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b      /* All CHECK
f810: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
f820: 23 65 6e 64 69 66 0a 20 20 4c 6f 67 45 73 74 20  #endif.  LogEst 
f830: 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a  nRowLogEst;   /*
f840: 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20   Estimated rows 
f850: 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20  in table - from 
f860: 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
f870: 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d  le */.  int tnum
f880: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
f890: 52 6f 6f 74 20 42 54 72 65 65 20 6e 6f 64 65 20  Root BTree node 
f8a0: 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 28  for this table (
f8b0: 73 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 29 20  see note above) 
f8c0: 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20  */.  i16 iPKey; 
f8d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20            /* If 
f8e0: 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73  not negative, us
f8f0: 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73  e aCol[iPKey] as
f900: 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
f910: 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20   */.  i16 nCol; 
f920: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
f930: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
f940: 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
f950: 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20  .  u16 nRef;    
f960: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
f970: 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
f980: 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20   this Table */. 
f990: 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f 77   LogEst szTabRow
f9a0: 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74  ;     /* Estimat
f9b0: 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20  ed size of each 
f9c0: 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79 74  table row in byt
f9d0: 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  es */.#ifdef SQL
f9e0: 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d  ITE_ENABLE_COSTM
f9f0: 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73  ULT.  LogEst cos
fa00: 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f  tMult;     /* Co
fa10: 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f  st multiplier fo
fa20: 72 20 75 73 69 6e 67 20 74 68 69 73 20 74 61 62  r using this tab
fa30: 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75  le */.#endif.  u
fa40: 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20  8 tabFlags;     
fa50: 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54      /* Mask of T
fa60: 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  F_* values */.  
fa70: 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20  u8 keyConf;     
fa80: 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20       /* What to 
fa90: 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e  do in case of un
faa0: 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63  iqueness conflic
fab0: 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69  t on iPKey */.#i
fac0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
fad0: 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69  T_ALTERTABLE.  i
fae0: 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b  nt addColOffset;
faf0: 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e      /* Offset in
fb00: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
fb10: 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20  mt to add a new 
fb20: 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66  column */.#endif
fb30: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
fb40: 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
fb50: 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41  E.  int nModuleA
fb60: 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  rg;      /* Numb
fb70: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
fb80: 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f  to the module */
fb90: 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75  .  char **azModu
fba0: 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65 78 74 20  leArg;  /* Text 
fbb0: 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20 61 72  of all module ar
fbc0: 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64 75 6c  gs. [0] is modul
fbd0: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 56 54 61 62  e name */.  VTab
fbe0: 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20  le *pVTable;    
fbf0: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62   /* List of VTab
fc00: 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23  le objects. */.#
fc10: 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72 20  endif.  Trigger 
fc20: 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20  *pTrigger;   /* 
fc30: 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 73  List of triggers
fc40: 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65   stored in pSche
fc50: 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  ma */.  Schema *
fc60: 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  pSchema;     /* 
fc70: 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74  Schema that cont
fc80: 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20  ains this table 
fc90: 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78  */.  Table *pNex
fca0: 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78  tZombie;  /* Nex
fcb0: 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70  t on the Parse.p
fcc0: 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a  ZombieTab list *
fcd0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
fce0: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54  wed values for T
fcf0: 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a  able.tabFlags..*
fd00: 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61  /.#define TF_Rea
fd10: 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30  donly        0x0
fd20: 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c  1    /* Read-onl
fd30: 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a  y system table *
fd40: 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68  /.#define TF_Eph
fd50: 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78 30  emeral       0x0
fd60: 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d  2    /* An ephem
fd70: 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  eral table */.#d
fd80: 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d  efine TF_HasPrim
fd90: 61 72 79 4b 65 79 20 20 20 30 78 30 34 20 20 20  aryKey   0x04   
fda0: 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20   /* Table has a 
fdb0: 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23  primary key */.#
fdc0: 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e  define TF_Autoin
fdd0: 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38 20 20  crement   0x08  
fde0: 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72 69    /* Integer pri
fdf0: 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75 74 6f  mary key is auto
fe00: 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65  increment */.#de
fe10: 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61 6c 20  fine TF_Virtual 
fe20: 20 20 20 20 20 20 20 20 30 78 31 30 20 20 20 20          0x10    
fe30: 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61 6c 20  /* Is a virtual 
fe40: 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
fe50: 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64   TF_WithoutRowid
fe60: 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20 4e      0x20    /* N
fe70: 6f 20 72 6f 77 69 64 20 75 73 65 64 2e 20 50 52  o rowid used. PR
fe80: 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68 65  IMARY KEY is the
fe90: 20 6b 65 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20   key */.../*.** 
fea0: 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74  Test to see whet
feb0: 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62  her or not a tab
fec0: 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20  le is a virtual 
fed0: 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a  table.  This is.
fee0: 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63  ** done as a mac
fef0: 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  ro so that it wi
ff00: 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20  ll be optimized 
ff10: 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c  out when virtual
ff20: 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72  .** table suppor
ff30: 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  t is omitted fro
ff40: 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a  m the build..*/.
ff50: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
ff60: 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
ff70: 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72  .#  define IsVir
ff80: 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28 28  tual(X)      (((
ff90: 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
ffa0: 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29 0a 23  F_Virtual)!=0).#
ffb0: 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
ffc0: 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29  nColumn(X) (((X)
ffd0: 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
ffe0: 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29  FLAG_HIDDEN)!=0)
fff0: 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
10000 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20   IsVirtual(X)   
10010 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49     0.#  define I
10020 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
10030 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f   0.#endif../* Do
10040 65 73 20 74 68 65 20 74 61 62 6c 65 20 68 61 76  es the table hav
10050 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  e a rowid */.#de
10060 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29  fine HasRowid(X)
10070 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46       (((X)->tabF
10080 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75  lags & TF_Withou
10090 74 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a  tRowid)==0)../*.
100a0 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20  ** Each foreign 
100b0 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  key constraint i
100c0 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
100d0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
100e0 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
100f0 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73  A foreign key is
10100 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
10110 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68   two tables.  Th
10120 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69  e "from" table i
10130 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74  s.** the table t
10140 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
10150 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
10160 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73 20  se that creates 
10170 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b  the foreign.** k
10180 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61  ey.  The "to" ta
10190 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c 65  ble is the table
101a0 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69   that is named i
101b0 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  n the REFERENCES
101c0 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73   clause..** Cons
101d0 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c  ider this exampl
101e0 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  e:.**.**     CRE
101f0 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a  ATE TABLE ex1(.*
10200 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47 45  *       a INTEGE
10210 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a  R PRIMARY KEY,.*
10220 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47 45  *       b INTEGE
10230 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31  R CONSTRAINT fk1
10240 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32 28   REFERENCES ex2(
10250 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a  x).**     );.**.
10260 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b  ** For foreign k
10270 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72  ey "fk1", the fr
10280 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31  om-table is "ex1
10290 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62  " and the to-tab
102a0 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20  le is "ex2"..** 
102b0 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73  Equivalent names
102c0 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d  :.**.**     from
102d0 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d  -table == child-
102e0 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74  table.**       t
102f0 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e  o-table == paren
10300 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61  t-table.**.** Ea
10310 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  ch REFERENCES cl
10320 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20 61  ause generates a
10330 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
10340 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
10350 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69  cture.** which i
10360 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
10370 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54  e from-table.  T
10380 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64  he to-table need
10390 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a   not exist when.
103a0 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ** the from-tabl
103b0 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20 54  e is created.  T
103c0 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20  he existence of 
103d0 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20  the to-table is 
103e0 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a  not checked..**.
103f0 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61  ** The list of a
10400 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63  ll parents for c
10410 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20  hild Table X is 
10420 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e  held at X.pFKey.
10430 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66  .**.** A list of
10440 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f   all children fo
10450 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  r a table named 
10460 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e  Z (which might n
10470 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a  ot even exist).*
10480 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68  * is held in Sch
10490 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74  ema.fkeyHash wit
104a0 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20  h a hash key of 
104b0 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65  Z..*/.struct FKe
104c0 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72  y {.  Table *pFr
104d0 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  om;     /* Table
104e0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
104f0 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
10500 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a  e (aka: Child) *
10510 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46  /.  FKey *pNextF
10520 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b  rom;  /* Next FK
10530 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ey with the same
10540 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20   in pFrom. Next 
10550 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20  parent of pFrom 
10560 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20  */.  char *zTo; 
10570 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
10580 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  f table that the
10590 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28   key points to (
105a0 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a  aka: Parent) */.
105b0 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b    FKey *pNextTo;
105c0 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68      /* Next with
105d0 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e   the same zTo. N
105e0 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f  ext child of zTo
105f0 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72  . */.  FKey *pPr
10600 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76  evTo;    /* Prev
10610 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73 61  ious with the sa
10620 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20  me zTo */.  int 
10630 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  nCol;         /*
10640 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
10650 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a  ns in this key *
10660 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33  /.  /* EV: R-303
10670 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38  23-21917 */.  u8
10680 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20 20   isDeferred;    
10690 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f     /* True if co
106a0 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e  nstraint checkin
106b0 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74 69  g is deferred ti
106c0 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75  ll COMMIT */.  u
106d0 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20  8 aAction[2];   
106e0 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54       /* ON DELET
106f0 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20  E and ON UPDATE 
10700 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74  actions, respect
10710 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67  ively */.  Trigg
10720 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d  er *apTrigger[2]
10730 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72  ;/* Triggers for
10740 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f   aAction[] actio
10750 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73  ns */.  struct s
10760 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a  ColMap {      /*
10770 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75   Mapping of colu
10780 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20  mns in pFrom to 
10790 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a  columns in zTo *
107a0 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b  /.    int iFrom;
107b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
107c0 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  ndex of column i
107d0 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63  n pFrom */.    c
107e0 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20  har *zCol;      
107f0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
10800 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20  column in zTo.  
10810 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d  If NULL use PRIM
10820 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61  ARY KEY */.  } a
10830 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  Col[1];         
10840 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
10850 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c  for each of nCol
10860 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a   columns */.};..
10870 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70  /*.** SQLite sup
10880 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65  ports many diffe
10890 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73  rent ways to res
108a0 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e  olve a constrain
108b0 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c  t.** error.  ROL
108c0 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67  LBACK processing
108d0 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f   means that a co
108e0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
108f0 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65  on.** causes the
10900 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
10910 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e  ocess to fail an
10920 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  d for the curren
10930 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  t transaction.**
10940 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
10950 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65  ck.  ABORT proce
10960 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20  ssing means the 
10970 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
10980 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e  cess.** fails an
10990 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e  d any prior chan
109a0 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e  ges from that on
109b0 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20  e operation are 
109c0 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62  backed out,.** b
109d0 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ut the transacti
109e0 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64  on is not rolled
109f0 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f   back.  FAIL pro
10a00 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
10a10 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74  at.** the operat
10a20 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
10a30 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e  stops and return
10a40 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e  s an error code.
10a50 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63    But prior.** c
10a60 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68  hanges due to th
10a70 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
10a80 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20   are not backed 
10a90 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62  out and no rollb
10aa0 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20  ack.** occurs.  
10ab0 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61  IGNORE means tha
10ac0 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72  t the particular
10ad0 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65 64   row that caused
10ae0 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a   the constraint.
10af0 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20  ** error is not 
10b00 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61  inserted or upda
10b10 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67  ted.  Processing
10b20 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e   continues and n
10b30 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65  o error.** is re
10b40 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45  turned.  REPLACE
10b50 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65 65   means that pree
10b60 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
10b70 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73 65   rows that cause
10b80 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f  d.** a UNIQUE co
10b90 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
10ba0 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73  on are removed s
10bb0 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20 69  o that the new i
10bc0 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61  nsert or.** upda
10bd0 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20  te can proceed. 
10be0 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74   Processing cont
10bf0 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72  inues and no err
10c00 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a  or is reported..
10c10 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20  **.** RESTRICT, 
10c20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53  SETNULL, and CAS
10c30 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70  CADE actions app
10c40 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69  ly only to forei
10c50 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54  gn keys..** REST
10c60 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d 65  RICT is the same
10c70 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d   as ABORT for IM
10c80 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20  MEDIATE foreign 
10c90 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20  keys and the.** 
10ca0 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b  same as ROLLBACK
10cb0 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65   for DEFERRED ke
10cc0 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61  ys.  SETNULL mea
10cd0 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72 65  ns that the fore
10ce0 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65  ign.** key is se
10cf0 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43  t to NULL.  CASC
10d00 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ADE means that a
10d10 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
10d20 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65  E of the.** refe
10d30 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77  renced table row
10d40 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20 69   is propagated i
10d50 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74  nto the row that
10d60 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f   holds the.** fo
10d70 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a  reign key..** .*
10d80 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
10d90 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20  symbolic values 
10da0 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f  are used to reco
10db0 72 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a  rd which type.**
10dc0 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61   of action to ta
10dd0 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ke..*/.#define O
10de0 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f  E_None     0   /
10df0 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f  * There is no co
10e00 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63  nstraint to chec
10e10 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  k */.#define OE_
10e20 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20  Rollback 1   /* 
10e30 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69  Fail the operati
10e40 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20  on and rollback 
10e50 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
10e60 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62  */.#define OE_Ab
10e70 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61  ort    2   /* Ba
10e80 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62  ck out changes b
10e90 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63  ut do no rollbac
10ea0 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f  k transaction */
10eb0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c  .#define OE_Fail
10ec0 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70       3   /* Stop
10ed0 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62   the operation b
10ee0 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69  ut leave all pri
10ef0 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  or changes */.#d
10f00 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20  efine OE_Ignore 
10f10 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20    4   /* Ignore 
10f20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f  the error. Do no
10f30 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20  t do the INSERT 
10f40 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  or UPDATE */.#de
10f50 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20  fine OE_Replace 
10f60 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65   5   /* Delete e
10f70 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20  xisting record, 
10f80 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f  then do INSERT o
10f90 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65  r UPDATE */..#de
10fa0 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74  fine OE_Restrict
10fb0 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74   6   /* OE_Abort
10fc0 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20   for IMMEDIATE, 
10fd0 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20  OE_Rollback for 
10fe0 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66  DEFERRED */.#def
10ff0 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20  ine OE_SetNull  
11000 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66  7   /* Set the f
11010 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65  oreign key value
11020 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   to NULL */.#def
11030 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20  ine OE_SetDflt  
11040 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66  8   /* Set the f
11050 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65  oreign key value
11060 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20   to its default 
11070 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61  */.#define OE_Ca
11080 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43 61  scade  9   /* Ca
11090 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67 65  scade the change
110a0 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45  s */..#define OE
110b0 5f 44 65 66 61 75 6c 74 20 20 31 30 20 20 2f 2a  _Default  10  /*
110c0 20 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65   Do whatever the
110d0 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20   default action 
110e0 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e  is */.../*.** An
110f0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
11100 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
11110 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61  ture is passed a
11120 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61  s the first.** a
11130 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74  rgument to sqlit
11140 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65  e3VdbeKeyCompare
11150 20 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20   and is used to 
11160 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20  control the .** 
11170 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68  comparison of th
11180 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73  e two index keys
11190 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61  ..**.** Note tha
111a0 74 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61  t aSortOrder[] a
111b0 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20  nd aColl[] have 
111c0 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20  nField+1 slots. 
111d0 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46   There.** are nF
111e0 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74  ield slots for t
111f0 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e  he columns of an
11200 20 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20   index then one 
11210 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f  extra slot.** fo
11220 72 20 74 68 65 20 72 6f 77 69 64 20 61 74 20 74  r the rowid at t
11230 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63  he end..*/.struc
11240 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33  t KeyInfo {.  u3
11250 32 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  2 nRef;         
11260 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
11270 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69  eferences to thi
11280 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74  s KeyInfo object
11290 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
112a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
112b0 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65  t encoding - one
112c0 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55   of the SQLITE_U
112d0 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  TF* values */.  
112e0 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  u16 nField;     
112f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11300 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20   key columns in 
11310 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  the index */.  u
11320 31 36 20 6e 58 46 69 65 6c 64 3b 20 20 20 20 20  16 nXField;     
11330 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11340 63 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20 74  columns beyond t
11350 68 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 2a  he key columns *
11360 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  /.  sqlite3 *db;
11370 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
11380 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
11390 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72  on */.  u8 *aSor
113a0 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53  tOrder;     /* S
113b0 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61  ort order for ea
113c0 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20  ch column. */.  
113d0 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31  CollSeq *aColl[1
113e0 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67  ];  /* Collating
113f0 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61   sequence for ea
11400 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b  ch term of the k
11410 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ey */.};../*.** 
11420 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
11430 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
11440 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66  ucture holds inf
11450 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61  ormation about a
11460 0a 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65 78  .** single index
11470 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61 73   record that has
11480 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 70 61   already been pa
11490 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e  rsed out into in
114a0 64 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c 75  dividual.** valu
114b0 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f  es..**.** A reco
114c0 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20  rd is an object 
114d0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  that contains on
114e0 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73  e or more fields
114f0 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63   of data..** Rec
11500 6f 72 64 73 20 61 72 65 20 75 73 65 64 20 74 6f  ords are used to
11510 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65   store the conte
11520 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f  nt of a table ro
11530 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a  w and to store.*
11540 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20  * the key of an 
11550 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65  index.  A blob e
11560 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63  ncoding of a rec
11570 6f 72 64 20 69 73 20 63 72 65 61 74 65 64 20 62  ord is created b
11580 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65  y.** the OP_Make
11590 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66  Record opcode of
115a0 20 74 68 65 20 56 44 42 45 20 61 6e 64 20 69 73   the VDBE and is
115b0 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79   disassembled by
115c0 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d   the.** OP_Colum
115d0 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  n opcode..**.** 
115e0 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 68  This structure h
115f0 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20 74 68  olds a record th
11600 61 74 20 68 61 73 20 61 6c 72 65 61 64 79 20 62  at has already b
11610 65 65 6e 20 64 69 73 61 73 73 65 6d 62 6c 65 64  een disassembled
11620 0a 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f 6e  .** into its con
11630 73 74 69 74 75 65 6e 74 20 66 69 65 6c 64 73 2e  stituent fields.
11640 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e  .**.** The r1 an
11650 64 20 72 32 20 6d 65 6d 62 65 72 20 76 61 72 69  d r2 member vari
11660 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75  ables are only u
11670 73 65 64 20 62 79 20 74 68 65 20 6f 70 74 69 6d  sed by the optim
11680 69 7a 65 64 20 63 6f 6d 70 61 72 69 73 6f 6e 0a  ized comparison.
11690 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 76 64 62  ** functions vdb
116a0 65 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 49 6e  eRecordCompareIn
116b0 74 28 29 20 61 6e 64 20 76 64 62 65 52 65 63 6f  t() and vdbeReco
116c0 72 64 43 6f 6d 70 61 72 65 53 74 72 69 6e 67 28  rdCompareString(
116d0 29 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70  )..*/.struct Unp
116e0 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20  ackedRecord {.  
116f0 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
11700 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e  o;  /* Collation
11710 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20   and sort-order 
11720 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20  information */. 
11730 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20   u16 nField;    
11740 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
11750 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d  f entries in apM
11760 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66  em[] */.  i8 def
11770 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a  ault_rc;      /*
11780 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75   Comparison resu
11790 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65 20 65  lt if keys are e
117a0 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72 72  qual */.  u8 err
117b0 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Code;         /*
117c0 20 45 72 72 6f 72 20 64 65 74 65 63 74 65 64 20   Error detected 
117d0 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61 72  by xRecordCompar
117e0 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e 4f  e (CORRUPT or NO
117f0 4d 45 4d 29 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61  MEM) */.  Mem *a
11800 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Mem;          /*
11810 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74   Values */.  int
11820 20 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20   r1;            
11830 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
11840 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68  urn if (lhs > rh
11850 73 29 20 2a 2f 0a 20 20 69 6e 74 20 72 32 3b 20  s) */.  int r2; 
11860 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
11870 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69  alue to return i
11880 66 20 28 72 68 73 20 3c 20 6c 68 73 29 20 2a 2f  f (rhs < lhs) */
11890 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  .};.../*.** Each
118a0 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65   SQL index is re
118b0 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
118c0 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73  ory by an.** ins
118d0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
118e0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
118f0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75  ..**.** The colu
11900 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65  mns of the table
11910 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65 20   that are to be 
11920 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73 63  indexed are desc
11930 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20  ribed.** by the 
11940 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64  aiColumn[] field
11950 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
11960 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  re.  For example
11970 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20  , suppose.** we 
11980 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  have the followi
11990 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64  ng table and ind
119a0 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  ex:.**.**     CR
119b0 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28 63  EATE TABLE Ex1(c
119c0 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63  1 int, c2 int, c
119d0 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20  3 text);.**     
119e0 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78 32  CREATE INDEX Ex2
119f0 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a   ON Ex1(c3,c1);.
11a00 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62  **.** In the Tab
11a10 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65 73  le structure des
11a20 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f  cribing Ex1, nCo
11a30 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68 65  l==3 because the
11a40 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20  re are.** three 
11a50 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
11a60 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e  able.  In the In
11a70 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64 65  dex structure de
11a80 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c  scribing.** Ex2,
11a90 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63   nColumn==2 sinc
11aa0 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c  e 2 of the 3 col
11ab0 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20  umns of Ex1 are 
11ac0 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20  indexed..** The 
11ad0 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d  value of aiColum
11ae0 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69  n is {2, 0}.  ai
11af0 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63  Column[0]==2 bec
11b00 61 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69 72  ause the .** fir
11b10 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20  st column to be 
11b20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68 61 73  indexed (c3) has
11b30 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69   an index of 2 i
11b40 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a  n Ex1.aCol[]..**
11b50 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75   The second colu
11b60 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
11b70 20 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64   (c1) has an ind
11b80 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78  ex of 0 in.** Ex
11b90 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20  1.aCol[], hence 
11ba0 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d  Ex2.aiColumn[1]=
11bb0 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e  =0..**.** The In
11bc0 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c  dex.onError fiel
11bd0 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65  d determines whe
11be0 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
11bf0 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a  indexed columns.
11c00 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75  ** must be uniqu
11c10 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f  e and what to do
11c20 20 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74   if they are not
11c30 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e  .  When Index.on
11c40 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a  Error=OE_None,.*
11c50 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20  * it means this 
11c60 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20  is not a unique 
11c70 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73  index.  Otherwis
11c80 65 20 69 74 20 69 73 20 61 20 75 6e 69 71 75 65  e it is a unique
11c90 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68   index.** and th
11ca0 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78  e value of Index
11cb0 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74  .onError indicat
11cc0 65 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66  e the which conf
11cd0 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
11ce0 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f  .** algorithm to
11cf0 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72   employ whenever
11d00 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   an attempt is m
11d10 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20  ade to insert a 
11d20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c  non-unique.** el
11d30 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ement..*/.struct
11d40 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20   Index {.  char 
11d50 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
11d60 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
11d70 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  his index */.  i
11d80 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20  16 *aiColumn;   
11d90 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
11da0 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
11db0 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e  d by this index.
11dc0 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20    1st is 0 */.  
11dd0 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67  LogEst *aiRowLog
11de0 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d  Est;     /* From
11df0 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72   ANALYZE: Est. r
11e00 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20  ows selected by 
11e10 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
11e20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20   Table *pTable; 
11e30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
11e40 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67   SQL table being
11e50 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68   indexed */.  ch
11e60 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20  ar *zColAff;    
11e70 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67         /* String
11e80 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66   defining the af
11e90 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63  finity of each c
11ea0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78  olumn */.  Index
11eb0 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
11ec0 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
11ed0 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64  index associated
11ee0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74   with the same t
11ef0 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  able */.  Schema
11f00 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
11f10 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
11f20 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64  taining this ind
11f30 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72  ex */.  u8 *aSor
11f40 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
11f50 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c   /* for each col
11f60 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c  umn: True==DESC,
11f70 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20   False==ASC */. 
11f80 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20   char **azColl; 
11f90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72            /* Arr
11fa0 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20  ay of collation 
11fb0 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66  sequence names f
11fc0 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78  or index */.  Ex
11fd0 70 72 20 2a 70 50 61 72 74 49 64 78 57 68 65 72  pr *pPartIdxWher
11fe0 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20  e;     /* WHERE 
11ff0 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74 69  clause for parti
12000 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20  al indices */.  
12010 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
12020 6f 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 4b 65  o;       /* A Ke
12030 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 73 75 69  yInfo object sui
12040 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73 20 69  table for this i
12050 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 74 6e  ndex */.  int tn
12060 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  um;             
12070 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f     /* DB Page co
12080 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66  ntaining root of
12090 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
120a0 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52 6f 77   LogEst szIdxRow
120b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74  ;         /* Est
120c0 69 6d 61 74 65 64 20 61 76 65 72 61 67 65 20 72  imated average r
120d0 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73  ow size in bytes
120e0 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f   */.  u16 nKeyCo
120f0 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  l;             /
12100 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
12110 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68 65 20  mns forming the 
12120 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f  key */.  u16 nCo
12130 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
12140 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
12150 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e  olumns stored in
12160 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20   the index */.  
12170 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20  u8 onError;     
12180 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41           /* OE_A
12190 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c  bort, OE_Ignore,
121a0 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20   OE_Replace, or 
121b0 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73  OE_None */.  uns
121c0 69 67 6e 65 64 20 69 64 78 54 79 70 65 3a 32 3b  igned idxType:2;
121d0 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51        /* 1==UNIQ
121e0 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b  UE, 2==PRIMARY K
121f0 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49 4e  EY, 0==CREATE IN
12200 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  DEX */.  unsigne
12210 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20  d bUnordered:1; 
12220 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e    /* Use this in
12230 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e  dex for == or IN
12240 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f   queries only */
12250 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69 71  .  unsigned uniq
12260 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54  NotNull:1;  /* T
12270 72 75 65 20 69 66 20 55 4e 49 51 55 45 20 61 6e  rue if UNIQUE an
12280 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61  d NOT NULL for a
12290 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  ll columns */.  
122a0 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73 69 7a  unsigned isResiz
122b0 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65  ed:1;    /* True
122c0 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65 78 4f   if resizeIndexO
122d0 62 6a 65 63 74 28 29 20 68 61 73 20 62 65 65 6e  bject() has been
122e0 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73   called */.  uns
122f0 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69 6e 67  igned isCovering
12300 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66  :1;   /* True if
12310 20 74 68 69 73 20 69 73 20 61 20 63 6f 76 65 72   this is a cover
12320 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 23 69 66  ing index */.#if
12330 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
12340 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
12350 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20  .  int nSample; 
12360 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
12370 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74  umber of element
12380 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a  s in aSample[] *
12390 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43  /.  int nSampleC
123a0 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ol;          /* 
123b0 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61 6d  Size of IndexSam
123c0 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73  ple.anEq[] and s
123d0 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  o on */.  tRowcn
123e0 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20 20  t *aAvgEq;      
123f0 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e 45     /* Average nE
12400 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65 79  q values for key
12410 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65  s not in aSample
12420 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c   */.  IndexSampl
12430 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f  e *aSample;    /
12440 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65  * Samples of the
12450 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a   left-most key *
12460 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52  /.  tRowcnt *aiR
12470 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20  owEst;       /* 
12480 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20  Non-logarithmic 
12490 73 74 61 74 31 20 64 61 74 61 20 66 6f 72 20 74  stat1 data for t
124a0 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e  his table */.#en
124b0 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c  dif.};../*.** Al
124c0 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
124d0 20 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a   Index.idxType.*
124e0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
124f0 5f 49 44 58 54 59 50 45 5f 41 50 50 44 45 46 20  _IDXTYPE_APPDEF 
12500 20 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61       0   /* Crea
12510 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45  ted using CREATE
12520 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e   INDEX */.#defin
12530 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  e SQLITE_IDXTYPE
12540 5f 55 4e 49 51 55 45 20 20 20 20 20 20 31 20 20  _UNIQUE      1  
12550 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61   /* Implements a
12560 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
12570 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
12580 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49  LITE_IDXTYPE_PRI
12590 4d 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20  MARYKEY  2   /* 
125a0 49 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  Is the PRIMARY K
125b0 45 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65  EY for the table
125c0 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74   */../* Return t
125d0 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69  rue if index X i
125e0 73 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20  s a PRIMARY KEY 
125f0 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
12600 20 49 73 50 72 69 6d 61 72 79 4b 65 79 49 6e 64   IsPrimaryKeyInd
12610 65 78 28 58 29 20 20 28 28 58 29 2d 3e 69 64 78  ex(X)  ((X)->idx
12620 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58  Type==SQLITE_IDX
12630 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 29  TYPE_PRIMARYKEY)
12640 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65  ../* Return true
12650 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61   if index X is a
12660 20 55 4e 49 51 55 45 20 69 6e 64 65 78 20 2a 2f   UNIQUE index */
12670 0a 23 64 65 66 69 6e 65 20 49 73 55 6e 69 71 75  .#define IsUniqu
12680 65 49 6e 64 65 78 28 58 29 20 20 20 20 20 20 28  eIndex(X)      (
12690 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45  (X)->onError!=OE
126a0 5f 4e 6f 6e 65 29 0a 0a 2f 2a 0a 2a 2a 20 45 61  _None)../*.** Ea
126b0 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64  ch sample stored
126c0 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73   in the sqlite_s
126d0 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72 65  tat3 table is re
126e0 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
126f0 6f 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61 20  ory .** using a 
12700 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69  structure of thi
12710 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63  s type.  See doc
12720 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68  umentation at th
12730 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20  e top of the.** 
12740 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65  analyze.c source
12750 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69   file for additi
12760 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
12770 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
12780 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64  xSample {.  void
12790 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   *p;          /*
127a0 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70   Pointer to samp
127b0 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  led record */.  
127c0 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
127d0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63    /* Size of rec
127e0 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ord in bytes */.
127f0 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b    tRowcnt *anEq;
12800 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
12810 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
12820 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20   the key equals 
12830 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
12840 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20   tRowcnt *anLt; 
12850 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
12860 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
12870 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  key is less than
12880 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
12890 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74    tRowcnt *anDLt
128a0 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62  ;   /* Est. numb
128b0 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b  er of distinct k
128c0 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68  eys less than th
128d0 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a  is sample */.};.
128e0 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65  ./*.** Each toke
128f0 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20  n coming out of 
12900 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20  the lexer is an 
12910 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74  instance of.** t
12920 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
12930 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20  Tokens are also 
12940 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  used as part of 
12950 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a  an expression..*
12960 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b  *.** Note if Tok
12970 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b  en.z==0 then Tok
12980 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e  en.dyn and Token
12990 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64  .n are undefined
129a0 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74   and.** may cont
129b0 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65  ain random value
129c0 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20  s.  Do not make 
129d0 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20  any assumptions 
129e0 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a  about Token.dyn.
129f0 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77  ** and Token.n w
12a00 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a  hen Token.z==0..
12a10 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20  */.struct Token 
12a20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
12a30 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f  z;     /* Text o
12a40 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f  f the token.  No
12a50 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65  t NULL-terminate
12a60 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  d! */.  unsigned
12a70 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75   int n;    /* Nu
12a80 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
12a90 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e  rs in this token
12aa0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
12ab0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
12ac0 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  s structure cont
12ad0 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ains information
12ae0 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
12af0 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
12b00 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f  a SELECT that co
12b10 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65  ntains aggregate
12b20 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
12b30 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b  * If Expr.op==TK
12b40 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54  _AGG_COLUMN or T
12b50 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74  K_AGG_FUNCTION t
12b60 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66  hen Expr.pAggInf
12b70 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65  o is a.** pointe
12b80 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
12b90 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69  ure.  The Expr.i
12ba0 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20  Column field is 
12bb0 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20  the index in.** 
12bc0 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f  AggInfo.aCol[] o
12bd0 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b  r AggInfo.aFunc[
12be0 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ] of information
12bf0 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
12c00 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
12c10 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a  that node..**.**
12c20 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42   AggInfo.pGroupB
12c30 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46  y and AggInfo.aF
12c40 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20  unc.pExpr point 
12c50 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e  to fields within
12c60 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
12c70 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72   Select structur
12c80 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  e that describes
12c90 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
12ca0 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a  ement.  These.**
12cb0 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e   fields do not n
12cc0 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20  eed to be freed 
12cd0 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e  when deallocatin
12ce0 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74  g the AggInfo st
12cf0 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
12d00 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75  ct AggInfo {.  u
12d10 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20  8 directMode;   
12d20 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74         /* Direct
12d30 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20   rendering mode 
12d40 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20  means take data 
12d50 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20  directly.       
12d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d70 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63     ** from sourc
12d80 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20  e tables rather 
12d90 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75  than from accumu
12da0 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75  lators */.  u8 u
12db0 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  seSortingIdx;   
12dc0 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74      /* In direct
12dd0 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65   mode, reference
12de0 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
12df0 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20  ex rather.      
12e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e10 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20      ** than the 
12e20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
12e30 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
12e40 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  ;         /* Cur
12e50 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  sor number of th
12e60 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
12e70 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67  */.  int sorting
12e80 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20  IdxPTab;     /* 
12e90 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
12ea0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f   pseudo-table */
12eb0 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43  .  int nSortingC
12ec0 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75  olumn;     /* Nu
12ed0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
12ee0 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  in the sorting i
12ef0 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e  ndex */.  int mn
12f00 52 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20  Reg, mxReg;     
12f10 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65    /* Range of re
12f20 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65  gisters allocate
12f30 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61  d for aCol and a
12f40 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69  Func */.  ExprLi
12f50 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
12f60 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62    /* The group b
12f70 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74  y clause */.  st
12f80 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c  ruct AggInfo_col
12f90 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63   {    /* For eac
12fa0 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e  h column used in
12fb0 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a   source tables *
12fc0 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
12fd0 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  b;             /
12fe0 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  * Source table *
12ff0 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  /.    int iTable
13000 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
13010 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
13020 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  of the source ta
13030 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
13040 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
13050 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
13060 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20  mber within the 
13070 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
13080 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43      int iSorterC
13090 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20  olumn;       /* 
130a0 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  Column number in
130b0 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
130c0 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  ex */.    int iM
130d0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
130e0 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
130f0 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
13100 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
13110 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
13120 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
13130 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65  * The original e
13140 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d  xpression */.  }
13150 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43   *aCol;.  int nC
13160 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
13170 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
13180 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61  sed entries in a
13190 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  Col[] */.  int n
131a0 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20  Accumulator;    
131b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
131c0 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f  columns that sho
131d0 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  w through to the
131e0 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20   output..       
131f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13200 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c     ** Additional
13210 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
13220 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65  d only as parame
13230 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20  ters to.        
13240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13250 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66    ** aggregate f
13260 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74  unctions */.  st
13270 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e  ruct AggInfo_fun
13280 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63  c {   /* For eac
13290 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  h aggregate func
132a0 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72  tion */.    Expr
132b0 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
132c0 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
132d0 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20  on encoding the 
132e0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
132f0 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20  FuncDef *pFunc; 
13300 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
13310 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
13320 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  on implementatio
13330 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  n */.    int iMe
13340 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
13350 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
13360 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
13370 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
13380 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e  .    int iDistin
13390 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ct;           /*
133a0 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   Ephemeral table
133b0 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65   used to enforce
133c0 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d   DISTINCT */.  }
133d0 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e   *aFunc;.  int n
133e0 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
133f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13400 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63  entries in aFunc
13410 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  [] */.};../*.** 
13420 54 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56  The datatype ynV
13430 61 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69  ar is a signed i
13440 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31  nteger, either 1
13450 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e  6-bit or 32-bit.
13460 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69  .** Usually it i
13470 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20  s 16-bits.  But 
13480 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  if SQLITE_MAX_VA
13490 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73  RIABLE_NUMBER is
134a0 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e   greater.** than
134b0 20 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74   32767 we have t
134c0 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74  o make it 32-bit
134d0 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65  .  16-bit is pre
134e0 66 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a  ferred because.*
134f0 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d  * it uses less m
13500 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70  emory in the Exp
13510 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20  r object, which 
13520 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20  is a big memory 
13530 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65  user.** in syste
13540 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20  ms with lots of 
13550 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
13560 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70  nts.  And few ap
13570 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65  plications.** ne
13580 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f  ed more than abo
13590 75 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69  ut 10 or 20 vari
135a0 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65  ables.  But some
135b0 20 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77   extreme users w
135c0 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70  ant.** to have p
135d0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
135e0 74 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37  ts with over 327
135f0 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e  67 variables, an
13600 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68  d for them.** th
13610 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69  e option is avai
13620 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c  lable (at compil
13630 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20  e-time)..*/.#if 
13640 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
13650 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36  BLE_NUMBER<=3276
13660 37 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e  7.typedef i16 yn
13670 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64  Var;.#else.typed
13680 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65  ef int ynVar;.#e
13690 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ndif../*.** Each
136a0 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72   node of an expr
136b0 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61  ession in the pa
136c0 72 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69  rse tree is an i
136d0 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
136e0 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  is structure..**
136f0 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74  .** Expr.op is t
13700 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69  he opcode. The i
13710 6e 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f  nteger parser to
13720 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65  ken codes are re
13730 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64  used.** as opcod
13740 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61  es here. For exa
13750 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72  mple, the parser
13760 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74   defines TK_GE t
13770 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a  o be an integer.
13780 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e  ** code represen
13790 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70  ting the ">=" op
137a0 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d  erator. This sam
137b0 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69  e integer code i
137c0 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72  s reused.** to r
137d0 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65  epresent the gre
137e0 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75  ater-than-or-equ
137f0 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69  al-to operator i
13800 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  n the expression
13810 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20  .** tree..**.** 
13820 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
13830 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65  n is an SQL lite
13840 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c  ral (TK_INTEGER,
13850 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c   TK_FLOAT, TK_BL
13860 4f 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54  OB, .** or TK_ST
13870 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72  RING), then Expr
13880 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
13890 74 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20  the text of the 
138a0 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a  SQL literal. If.
138b0 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ** the expressio
138c0 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20  n is a variable 
138d0 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74  (TK_VARIABLE), t
138e0 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
138f0 6f 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20  ontains the .** 
13900 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46  variable name. F
13910 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65  inally, if the e
13920 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
13930 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b  SQL function (TK
13940 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74  _FUNCTION),.** t
13950 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
13960 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65  ontains the name
13970 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
13980 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69  ..**.** Expr.pRi
13990 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65  ght and Expr.pLe
139a0 66 74 20 61 72 65 20 74 68 65 20 6c 65 66 74 20  ft are the left 
139b0 61 6e 64 20 72 69 67 68 74 20 73 75 62 65 78 70  and right subexp
139c0 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a  ressions of a.**
139d0 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72   binary operator
139e0 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68  . Either or both
139f0 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a   may be NULL..**
13a00 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74  .** Expr.x.pList
13a10 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72   is a list of ar
13a20 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65  guments if the e
13a30 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
13a40 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a  SQL function,.**
13a50 20 61 20 43 41 53 45 20 65 78 70 72 65 73 73 69   a CASE expressi
13a60 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72  on or an IN expr
13a70 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f  ession of the fo
13a80 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79  rm "<lhs> IN (<y
13a90 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20  >, <z>...)"..** 
13aa0 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69  Expr.x.pSelect i
13ab0 73 20 75 73 65 64 20 69 66 20 74 68 65 20 65 78  s used if the ex
13ac0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75  pression is a su
13ad0 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65  b-select or an e
13ae0 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20  xpression of.** 
13af0 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20  the form "<lhs> 
13b00 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22  IN (SELECT ...)"
13b10 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49 73 53  . If the EP_xIsS
13b20 65 6c 65 63 74 20 62 69 74 20 69 73 20 73 65 74  elect bit is set
13b30 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e   in the.** Expr.
13b40 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
13b50 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
13b60 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77  is valid. Otherw
13b70 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73  ise, Expr.x.pLis
13b80 74 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a  t is .** valid..
13b90 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73  **.** An express
13ba0 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ion of the form 
13bb0 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65  ID or ID.ID refe
13bc0 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69  rs to a column i
13bd0 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f  n a table..** Fo
13be0 72 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f  r such expressio
13bf0 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73  ns, Expr.op is s
13c00 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20  et to TK_COLUMN 
13c10 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20  and Expr.iTable 
13c20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65  is.** the intege
13c30 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  r cursor number 
13c40 6f 66 20 61 20 56 44 42 45 20 63 75 72 73 6f 72  of a VDBE cursor
13c50 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61   pointing to tha
13c60 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45  t table and.** E
13c70 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74  xpr.iColumn is t
13c80 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  he column number
13c90 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69   for the specifi
13ca0 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68  c column.  If th
13cb0 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  e.** expression 
13cc0 69 73 20 75 73 65 64 20 61 73 20 61 20 72 65 73  is used as a res
13cd0 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67  ult in an aggreg
13ce0 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e  ate SELECT, then
13cf0 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73   the.** value is
13d00 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20   also stored in 
13d10 74 68 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f  the Expr.iAgg co
13d20 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72  lumn in the aggr
13d30 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a  egate so that.**
13d40 20 69 74 20 63 61 6e 20 62 65 20 61 63 63 65 73   it can be acces
13d50 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67  sed after all ag
13d60 67 72 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d  gregates are com
13d70 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  puted..**.** If 
13d80 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
13d90 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72  s an unbound var
13da0 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20  iable marker (a 
13db0 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a  question mark .*
13dc0 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f 27 20  * character '?' 
13dd0 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  in the original 
13de0 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78  SQL) then the Ex
13df0 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20  pr.iTable holds 
13e00 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75  the index .** nu
13e10 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61  mber for that va
13e20 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  riable..**.** If
13e30 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
13e40 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68  is a subquery th
13e50 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  en Expr.iColumn 
13e60 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
13e70 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d  .** register num
13e80 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ber containing t
13e90 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
13ea0 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74   subquery.  If t
13eb0 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67  he.** subquery g
13ec0 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20  ives a constant 
13ed0 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61  result, then iTa
13ee0 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74  ble is -1.  If t
13ef0 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67  he subquery.** g
13f00 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74  ives a different
13f10 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65   answer at diffe
13f20 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e  rent times durin
13f30 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63  g statement proc
13f40 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69  essing.** then i
13f50 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64  Table is the add
13f60 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75  ress of a subrou
13f70 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74  tine that comput
13f80 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e  es the subquery.
13f90 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78  .**.** If the Ex
13fa0 70 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50  pr is of type OP
13fb0 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65  _Column, and the
13fc0 20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c   table it is sel
13fd0 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69  ecting from.** i
13fe0 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f  s a disk table o
13ff0 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73  r the "old.*" ps
14000 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e  eudo-table, then
14010 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20   pTab points to 
14020 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
14030 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e  ding table defin
14040 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c  ition..**.** ALL
14050 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a  OCATION NOTES:.*
14060 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74  *.** Expr object
14070 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20  s can use a lot 
14080 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20  of memory space 
14090 69 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65  in database sche
140a0 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20  ma.  To.** help 
140b0 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65  reduce memory re
140c0 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65  quirements, some
140d0 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62  times an Expr ob
140e0 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20  ject will be.** 
140f0 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20  truncated.  And 
14100 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75  to reduce the nu
14110 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61  mber of memory a
14120 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65  llocations, some
14130 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20  times.** two or 
14140 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74  more Expr object
14150 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64  s will be stored
14160 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d   in a single mem
14170 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a  ory allocation,.
14180 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68  ** together with
14190 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72   Expr.zToken str
141a0 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ings..**.** If t
141b0 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e  he EP_Reduced an
141c0 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  d EP_TokenOnly f
141d0 6c 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65  lags are set whe
141e0 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a  n.** an Expr obj
141f0 65 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64  ect is truncated
14200 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63  .  When EP_Reduc
14210 65 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ed is set, then 
14220 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64  all.** the child
14230 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e   Expr objects in
14240 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20   the Expr.pLeft 
14250 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20  and Expr.pRight 
14260 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20  subtrees.** are 
14270 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e  contained within
14280 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79   the same memory
14290 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f   allocation.  No
142a0 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61  te, however, tha
142b0 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65  t.** the subtree
142c0 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73  s in Expr.x.pLis
142d0 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c  t or Expr.x.pSel
142e0 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73  ect are always s
142f0 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c  eparately.** all
14300 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65  ocated, regardle
14310 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
14320 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20   not EP_Reduced 
14330 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63  is set..*/.struc
14340 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70  t Expr {.  u8 op
14350 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
14360 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70    /* Operation p
14370 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73  erformed by this
14380 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20   node */.  char 
14390 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20  affinity;       
143a0 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
143b0 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  y of the column 
143c0 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f  or 0 if not a co
143d0 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c  lumn */.  u32 fl
143e0 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
143f0 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67   /* Various flag
14400 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c  s.  EP_* See bel
14410 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ow */.  union {.
14420 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e      char *zToken
14430 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f  ;          /* To
14440 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20  ken value. Zero 
14450 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64  terminated and d
14460 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69  equoted */.    i
14470 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20  nt iValue;      
14480 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67        /* Non-neg
14490 61 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61  ative integer va
144a0 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c  lue if EP_IntVal
144b0 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20  ue */.  } u;..  
144c0 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b  /* If the EP_Tok
144d0 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73  enOnly flag is s
144e0 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  et in the Expr.f
144f0 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
14500 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73  no.  ** space is
14510 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74   allocated for t
14520 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
14530 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61  this point. An a
14540 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61  ttempt to.  ** a
14550 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20  ccess them will 
14560 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66  result in a segf
14570 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74  ault or malfunct
14580 69 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  ion. .  ********
14590 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
145a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
145b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
145c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
145d0 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20    Expr *pLeft;  
145e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74           /* Left
145f0 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78   subnode */.  Ex
14600 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20  pr *pRight;     
14610 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75       /* Right su
14620 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e  bnode */.  union
14630 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20   {.    ExprList 
14640 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f  *pList;     /* o
14650 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20  p = IN, EXISTS, 
14660 53 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55  SELECT, CASE, FU
14670 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20  NCTION, BETWEEN 
14680 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
14690 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45  Select;     /* E
146a0 50 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20  P_xIsSelect and 
146b0 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c  op = IN, EXISTS,
146c0 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78   SELECT */.  } x
146d0 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45  ;..  /* If the E
146e0 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69  P_Reduced flag i
146f0 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70  s set in the Exp
14700 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
14710 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65  en no.  ** space
14720 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f   is allocated fo
14730 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c  r the fields bel
14740 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41  ow this point. A
14750 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a  n attempt to.  *
14760 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69  * access them wi
14770 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73  ll result in a s
14780 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75  egfault or malfu
14790 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a  nction..  ******
147a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
147b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
147c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
147d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
147e0 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
147f0 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20  _EXPR_DEPTH>0.  
14800 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20  int nHeight;    
14810 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74         /* Height
14820 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61   of the tree hea
14830 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  ded by this node
14840 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
14850 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
14860 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      /* TK_COLUMN
14870 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  : cursor number 
14880 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67  of table holding
14890 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20   column.        
148a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148b0 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a   ** TK_REGISTER:
148c0 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
148d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
148e0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
148f0 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65  TRIGGER: 1 -> ne
14900 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20  w, 0 -> old.    
14910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14920 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b       ** EP_Unlik
14930 65 6c 79 3a 20 20 31 30 30 30 20 74 69 6d 65 73  ely:  1000 times
14940 20 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f 0a 20   likelihood */. 
14950 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20   ynVar iColumn; 
14960 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f          /* TK_CO
14970 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64  LUMN: column ind
14980 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69  ex.  -1 for rowi
14990 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..             
149a0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
149b0 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69  K_VARIABLE: vari
149c0 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77  able number (alw
149d0 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20  ays >= 1). */.  
149e0 69 31 36 20 69 41 67 67 3b 20 20 20 20 20 20 20  i16 iAgg;       
149f0 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
14a00 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66  entry in pAggInf
14a10 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61  o->aCol[] or ->a
14a20 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20  Func[] */.  i16 
14a30 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b  iRightJoinTable;
14a40 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d     /* If EP_From
14a50 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20  Join, the right 
14a60 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69  table of the joi
14a70 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20  n */.  u8 op2;  
14a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14a90 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72   TK_REGISTER: or
14aa0 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20  iginal value of 
14ab0 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20  Expr.op.        
14ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ad0 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74   ** TK_COLUMN: t
14ae0 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66  he value of p5 f
14af0 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20  or OP_Column.   
14b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b10 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f        ** TK_AGG_
14b20 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e  FUNCTION: nestin
14b30 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67  g depth */.  Agg
14b40 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20  Info *pAggInfo; 
14b50 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54      /* Used by T
14b60 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64  K_AGG_COLUMN and
14b70 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e   TK_AGG_FUNCTION
14b80 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
14b90 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  b;           /* 
14ba0 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c  Table for TK_COL
14bb0 55 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e  UMN expressions.
14bc0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
14bd0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
14be0 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  the meanings of 
14bf0 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72  bits in the Expr
14c00 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  .flags field..*/
14c10 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d  .#define EP_From
14c20 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f  Join  0x000001 /
14c30 2a 20 4f 72 69 67 69 6e 61 74 65 64 20 69 6e 20  * Originated in 
14c40 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75  ON or USING clau
14c50 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a  se of a join */.
14c60 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20  #define EP_Agg  
14c70 20 20 20 20 20 30 78 30 30 30 30 30 32 20 2f 2a       0x000002 /*
14c80 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   Contains one or
14c90 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20   more aggregate 
14ca0 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  functions */.#de
14cb0 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65 64  fine EP_Resolved
14cc0 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20 49 44    0x000004 /* ID
14cd0 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f  s have been reso
14ce0 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20  lved to COLUMNs 
14cf0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 45 72  */.#define EP_Er
14d00 72 6f 72 20 20 20 20 20 30 78 30 30 30 30 30 38  ror     0x000008
14d10 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 63   /* Expression c
14d20 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
14d30 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64  ore errors */.#d
14d40 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63  efine EP_Distinc
14d50 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20 41  t  0x000010 /* A
14d60 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
14d70 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43 54 20  n with DISTINCT 
14d80 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
14d90 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20  ne EP_VarSelect 
14da0 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c  0x000020 /* pSel
14db0 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65  ect is correlate
14dc0 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20  d, not constant 
14dd0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62  */.#define EP_Db
14de0 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30 34 30  lQuoted 0x000040
14df0 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20   /* token.z was 
14e00 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e  originally in ".
14e10 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  .." */.#define E
14e20 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30  P_InfixFunc 0x00
14e30 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72  0080 /* True for
14e40 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69   an infix functi
14e50 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20  on: LIKE, GLOB, 
14e60 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  etc */.#define E
14e70 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30  P_Collate   0x00
14e80 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e  0100 /* Tree con
14e90 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41  tains a TK_COLLA
14ea0 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23  TE operator */.#
14eb0 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69  define EP_Generi
14ec0 63 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20  c   0x000200 /* 
14ed0 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f  Ignore COLLATE o
14ee0 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68  r affinity on th
14ef0 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69  is tree */.#defi
14f00 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20  ne EP_IntValue  
14f10 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65  0x000400 /* Inte
14f20 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69  ger value contai
14f30 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20  ned in u.iValue 
14f40 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49  */.#define EP_xI
14f50 73 53 65 6c 65 63 74 20 30 78 30 30 30 38 30 30  sSelect 0x000800
14f60 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73   /* x.pSelect is
14f70 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73   valid (otherwis
14f80 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f  e x.pList is) */
14f90 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70  .#define EP_Skip
14fa0 20 20 20 20 20 20 30 78 30 30 31 30 30 30 20 2f        0x001000 /
14fb0 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f  * COLLATE, AS, o
14fc0 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64  r UNLIKELY */.#d
14fd0 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64  efine EP_Reduced
14fe0 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45     0x002000 /* E
14ff0 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f  xpr struct EXPR_
15000 52 45 44 55 43 45 44 53 49 5a 45 20 62 79 74 65  REDUCEDSIZE byte
15010 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
15020 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30  e EP_TokenOnly 0
15030 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20  x004000 /* Expr 
15040 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45  struct EXPR_TOKE
15050 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20  NONLYSIZE bytes 
15060 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
15070 45 50 5f 53 74 61 74 69 63 20 20 20 20 30 78 30  EP_Static    0x0
15080 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e  08000 /* Held in
15090 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61   memory not obta
150a0 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  ined from malloc
150b0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  () */.#define EP
150c0 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30  _MemToken  0x010
150d0 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73  000 /* Need to s
150e0 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45  qlite3DbFree() E
150f0 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64  xpr.zToken */.#d
15100 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63  efine EP_NoReduc
15110 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43  e  0x020000 /* C
15120 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45  annot EXPRDUP_RE
15130 44 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a  DUCE this Expr *
15140 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c  /.#define EP_Unl
15150 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30 20  ikely  0x040000 
15160 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72  /* unlikely() or
15170 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75   likelihood() fu
15180 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
15190 65 20 45 50 5f 43 6f 6e 73 74 61 6e 74 20 20 30  e EP_Constant  0
151a0 78 30 38 30 30 30 30 20 2f 2a 20 4e 6f 64 65 20  x080000 /* Node 
151b0 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 2a 2f  is a constant */
151c0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61  ../*.** These ma
151d0 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64  cros can be used
151e0 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f   to test, set, o
151f0 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20  r clear bits in 
15200 74 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61  the .** Expr.fla
15210 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
15220 66 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70  fine ExprHasProp
15230 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 28  erty(E,P)     ((
15240 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21  (E)->flags&(P))!
15250 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  =0).#define Expr
15260 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45  HasAllProperty(E
15270 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67  ,P)  (((E)->flag
15280 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65  s&(P))==(P)).#de
15290 66 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70  fine ExprSetProp
152a0 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 45  erty(E,P)     (E
152b0 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64  )->flags|=(P).#d
152c0 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50  efine ExprClearP
152d0 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 28  roperty(E,P)   (
152e0 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a  E)->flags&=~(P).
152f0 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74 56  ./* The ExprSetV
15300 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63  VAProperty() mac
15310 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 56  ro is used for V
15320 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
15330 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20  idation,.** and 
15340 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e  Accreditation on
15350 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69  ly.  It works li
15360 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72  ke ExprSetProper
15370 74 79 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a  ty() during VVA.
15380 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75 74  ** processes but
15390 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20   is a no-op for 
153a0 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66  delivery..*/.#if
153b0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
153c0 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65  .# define ExprSe
153d0 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50  tVVAProperty(E,P
153e0 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28  )  (E)->flags|=(
153f0 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  P).#else.# defin
15400 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70  e ExprSetVVAProp
15410 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66  erty(E,P).#endif
15420 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
15430 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
15440 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
15450 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f  required by a no
15460 72 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74  rmal Expr .** st
15470 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74  ruct, an Expr st
15480 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50  ruct with the EP
15490 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65  _Reduced flag se
154a0 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 20  t in Expr.flags 
154b0 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20  .** and an Expr 
154c0 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20  struct with the 
154d0 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
154e0 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  g set..*/.#defin
154f0 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20  e EXPR_FULLSIZE 
15500 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66            sizeof
15510 28 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20  (Expr)          
15520 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f   /* Full size */
15530 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45  .#define EXPR_RE
15540 44 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20  DUCEDSIZE       
15550 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69   offsetof(Expr,i
15560 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f  Table)  /* Commo
15570 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64  n features */.#d
15580 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e  efine EXPR_TOKEN
15590 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66  ONLYSIZE      of
155a0 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66  fsetof(Expr,pLef
155b0 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65  t)   /* Fewer fe
155c0 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  atures */../*.**
155d0 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f   Flags passed to
155e0 20 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72   the sqlite3Expr
155f0 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20  Dup() function. 
15600 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63  See the header c
15610 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65  omment .** above
15620 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28   sqlite3ExprDup(
15630 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a  ) for details..*
15640 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44 55  /.#define EXPRDU
15650 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20 20  P_REDUCE        
15660 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64   0x0001  /* Used
15670 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78   reduced-size Ex
15680 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a  pr nodes */../*.
15690 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70  ** A list of exp
156a0 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20  ressions.  Each 
156b0 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f  expression may o
156c0 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61  ptionally have a
156d0 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78  .** name.  An ex
156e0 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74  pr/name combinat
156f0 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20  ion can be used 
15700 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c  in several ways,
15710 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20   such.** as the 
15720 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41 53  list of "expr AS
15730 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c   ID" fields foll
15740 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22  owing a "SELECT"
15750 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69   or in the.** li
15760 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72  st of "ID = expr
15770 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50  " items in an UP
15780 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66  DATE.  A list of
15790 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e   expressions can
157a0 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64  .** also be used
157b0 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   as the argument
157c0 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20   to a function, 
157d0 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68  in which case th
157e0 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65  e a.zName.** fie
157f0 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a  ld is not used..
15800 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74  **.** By default
15810 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20   the Expr.zSpan 
15820 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75  field holds a hu
15830 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73  man-readable des
15840 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74  cription of.** t
15850 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  he expression th
15860 61 74 20 69 73 20 75 73 65 64 20 69 6e 20 74 68  at is used in th
15870 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20  e generation of 
15880 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61  error messages a
15890 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62  nd.** column lab
158a0 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61  els.  In this ca
158b0 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69  se, Expr.zSpan i
158c0 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20  s typically the 
158d0 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c  text of a.** col
158e0 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61  umn expression a
158f0 73 20 69 74 20 65 78 69 73 74 73 20 69 6e 20 61  s it exists in a
15900 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
15910 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a  t.  However, if.
15920 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54 61  ** the bSpanIsTa
15930 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74  b flag is set, t
15940 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65  hen zSpan is ove
15950 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20  rloaded to mean 
15960 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74  the name.** of t
15970 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
15980 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41   in the form: DA
15990 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c  TABASE.TABLE.COL
159a0 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72  UMN.  This later
159b0 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64  .** form is used
159c0 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75   for name resolu
159d0 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64  tion with nested
159e0 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a   FROM clauses..*
159f0 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69 73  /.struct ExprLis
15a00 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b  t {.  int nExpr;
15a10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15a20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73  Number of expres
15a30 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73  sions on the lis
15a40 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78  t */.  struct Ex
15a50 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a  prList_item { /*
15a60 20 46 6f 72 20 65 61 63 68 20 65 78 70 72 65 73   For each expres
15a70 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74  sion in the list
15a80 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45   */.    Expr *pE
15a90 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
15aa0 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65  /* The list of e
15ab0 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
15ac0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
15ad0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
15ae0 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  en associated wi
15af0 74 68 20 74 68 69 73 20 65 78 70 72 65 73 73 69  th this expressi
15b00 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  on */.    char *
15b10 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20  zSpan;          
15b20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65    /* Original te
15b30 78 74 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  xt of the expres
15b40 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73  sion */.    u8 s
15b50 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
15b60 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53      /* 1 for DES
15b70 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a  C or 0 for ASC *
15b80 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64  /.    unsigned d
15b90 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a  one :1;       /*
15ba0 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63   A flag to indic
15bb0 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73  ate when process
15bc0 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64 20  ing is finished 
15bd0 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
15be0 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f  bSpanIsTab :1; /
15bf0 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42  * zSpan holds DB
15c00 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f  .TABLE.COLUMN */
15c10 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65  .    unsigned re
15c20 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20  usable :1;   /* 
15c30 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73  Constant express
15c40 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20  ion is reusable 
15c50 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20  */.    union {. 
15c60 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20       struct {.  
15c70 20 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72        u16 iOrder
15c80 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46  ByCol;      /* F
15c90 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c  or ORDER BY, col
15ca0 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65  umn number in re
15cb0 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20  sult set */.    
15cc0 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20      u16 iAlias; 
15cd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
15ce0 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41  ex into Parse.aA
15cf0 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65  lias[] for zName
15d00 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20   */.      } x;. 
15d10 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45       int iConstE
15d20 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20  xprReg;      /* 
15d30 52 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63  Register in whic
15d40 68 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20  h Expr value is 
15d50 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20  cached */.    } 
15d60 75 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20 20  u;.  } *a;      
15d70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
15d80 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f 66 20  lloc a power of 
15d90 74 77 6f 20 67 72 65 61 74 65 72 20 6f 72 20 65  two greater or e
15da0 71 75 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f  qual to nExpr */
15db0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
15dc0 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
15dd0 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
15de0 20 62 79 20 74 68 65 20 70 61 72 73 65 72 20 74   by the parser t
15df0 6f 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a  o record both.**
15e00 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
15e10 66 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f  for an expressio
15e20 6e 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f  n and the span o
15e30 66 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72  f input text for
15e40 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f   an.** expressio
15e50 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  n..*/.struct Exp
15e60 72 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a  rSpan {.  Expr *
15e70 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
15e80 2f 2a 20 54 68 65 20 65 78 70 72 65 73 73 69 6f  /* The expressio
15e90 6e 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a  n parse tree */.
15ea0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53    const char *zS
15eb0 74 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74  tart;   /* First
15ec0 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e   character of in
15ed0 70 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f  put text */.  co
15ee0 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20  nst char *zEnd; 
15ef0 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61      /* One chara
15f00 63 74 65 72 20 70 61 73 74 20 74 68 65 20 65 6e  cter past the en
15f10 64 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20  d of input text 
15f20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
15f30 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
15f40 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68   structure can h
15f50 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73  old a simple lis
15f60 74 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73  t of identifiers
15f70 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65  ,.** such as the
15f80 20 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e   list "a,b,c" in
15f90 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
15fa0 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a  tatements:.**.**
15fb0 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
15fc0 4f 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45  O t(a,b,c) VALUE
15fd0 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43  S ...;.**      C
15fe0 52 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20  REATE INDEX idx 
15ff0 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20  ON t(a,b,c);.** 
16000 20 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47       CREATE TRIG
16010 47 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20  GER trig BEFORE 
16020 55 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c  UPDATE ON t(a,b,
16030 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68  c) ...;.**.** Th
16040 65 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66  e IdList.a.idx f
16050 69 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65  ield is used whe
16060 6e 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70  n the IdList rep
16070 72 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74  resents the list
16080 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61   of.** column na
16090 6d 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c  mes after a tabl
160a0 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53  e name in an INS
160b0 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ERT statement.  
160c0 49 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  In the statement
160d0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52  .**.**     INSER
160e0 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20  T INTO t(a,b,c) 
160f0 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22  ....**.** If "a"
16100 20 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c   is the k-th col
16110 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22  umn of table "t"
16120 2c 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b  , then IdList.a[
16130 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74  0].idx==k..*/.st
16140 72 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20  ruct IdList {.  
16150 73 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74  struct IdList_it
16160 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  em {.    char *z
16170 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
16180 6d 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69  me of the identi
16190 66 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  fier */.    int 
161a0 69 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  idx;          /*
161b0 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54   Index in some T
161c0 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61  able.aCol[] of a
161d0 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e   column named zN
161e0 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20  ame */.  } *a;. 
161f0 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20   int nId;       
16200 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69    /* Number of i
16210 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68  dentifiers on th
16220 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e list */.};../*
16230 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20  .** The bitmask 
16240 64 61 74 61 74 79 70 65 20 64 65 66 69 6e 65 64  datatype defined
16250 20 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66   below is used f
16260 6f 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d  or various optim
16270 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  izations..**.** 
16280 43 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72  Changing this fr
16290 6f 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61  om a 64-bit to a
162a0 20 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d   32-bit type lim
162b0 69 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  its the number o
162c0 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61  f.** tables in a
162d0 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74   join to 32 inst
162e0 65 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20  ead of 64.  But 
162f0 69 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20  it also reduces 
16300 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74  the size.** of t
16310 68 65 20 6c 69 62 72 61 72 79 20 62 79 20 37 33  he library by 73
16320 38 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e  8 bytes on ix86.
16330 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75 36 34 20  .*/.typedef u64 
16340 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20  Bitmask;../*.** 
16350 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  The number of bi
16360 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e  ts in a Bitmask.
16370 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42    "BMS" means "B
16380 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f  itMask Size"..*/
16390 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28  .#define BMS  ((
163a0 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d  int)(sizeof(Bitm
163b0 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20  ask)*8))../*.** 
163c0 41 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61  A bit in a Bitma
163d0 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  sk.*/.#define MA
163e0 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69  SKBIT(n)   (((Bi
163f0 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23  tmask)1)<<(n)).#
16400 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32  define MASKBIT32
16410 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20  (n) (((unsigned 
16420 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a  int)1)<<(n))../*
16430 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
16440 67 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  g structure desc
16450 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63  ribes the FROM c
16460 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
16470 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20  T statement..** 
16480 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75  Each table or su
16490 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52  bquery in the FR
164a0 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73  OM clause is a s
164b0 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20  eparate element 
164c0 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73  of.** the SrcLis
164d0 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a  t.a[] array..**.
164e0 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69  ** With the addi
164f0 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65  tion of multiple
16500 20 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72   database suppor
16510 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  t, the following
16520 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61   structure.** ca
16530 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74  n also be used t
16540 6f 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72  o describe a par
16550 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75  ticular table su
16560 63 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20  ch as the table 
16570 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66  that.** is modif
16580 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54  ied by an INSERT
16590 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44  , DELETE, or UPD
165a0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ATE statement.  
165b0 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c  In standard SQL,
165c0 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65  .** such a table
165d0 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c   must be a simpl
165e0 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74  e name: ID.  But
165f0 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20   in SQLite, the 
16600 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77  table can.** now
16610 20 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62   be identified b
16620 79 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d  y a database nam
16630 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74  e, a dot, then t
16640 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49  he table name: I
16650 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  D.ID..**.** The 
16660 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20  jointype starts 
16670 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20  out showing the 
16680 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65  join type betwee
16690 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61  n the current ta
166a0 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e  ble.** and the n
166b0 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65  ext table on the
166c0 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73   list.  The pars
166d0 65 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69  er builds the li
166e0 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20  st this way..** 
166f0 42 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69  But sqlite3SrcLi
16700 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28  stShiftJoinType(
16710 29 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74  ) later shifts t
16720 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20  he jointypes so 
16730 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69  that each.** joi
16740 6e 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20  ntype expresses 
16750 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e  the join between
16760 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74   the table and t
16770 68 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c  he previous tabl
16780 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  e..**.** In the 
16790 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74  colUsed field, t
167a0 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69  he high-order bi
167b0 74 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65  t (bit 63) is se
167c0 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a  t if the table.*
167d0 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20  * contains more 
167e0 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20  than 63 columns 
167f0 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72  and the 64-th or
16800 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73   later column is
16810 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74   used..*/.struct
16820 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74   SrcList {.  int
16830 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a   nSrc;        /*
16840 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   Number of table
16850 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20  s or subqueries 
16860 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
16870 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c  se */.  u32 nAll
16880 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  oc;      /* Numb
16890 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c  er of entries al
168a0 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62  located in a[] b
168b0 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74  elow */.  struct
168c0 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a   SrcList_item {.
168d0 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68      Schema *pSch
168e0 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20  ema;  /* Schema 
168f0 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74  to which this it
16900 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20  em is fixed */. 
16910 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61     char *zDataba
16920 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  se;  /* Name of 
16930 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67  database holding
16940 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
16950 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
16960 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
16970 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  the table */.   
16980 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20   char *zAlias;  
16990 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61     /* The "B" pa
169a0 72 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22  rt of a "A AS B"
169b0 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20   phrase.  zName 
169c0 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20  is the "A" */.  
169d0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
169e0 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61      /* An SQL ta
169f0 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ble correspondin
16a00 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20  g to zName */.  
16a10 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
16a20 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20  t;  /* A SELECT 
16a30 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69  statement used i
16a40 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62  n place of a tab
16a50 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69  le name */.    i
16a60 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20  nt addrFillSub; 
16a70 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73   /* Address of s
16a80 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e  ubroutine to man
16a90 69 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79  ifest a subquery
16aa0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
16ab0 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67  eturn;    /* Reg
16ac0 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65  ister holding re
16ad0 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20  turn address of 
16ae0 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20  addrFillSub */. 
16af0 20 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74     int regResult
16b00 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  ;    /* Register
16b10 73 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74  s holding result
16b20 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e  s of a co-routin
16b30 65 20 2a 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e  e */.    u8 join
16b40 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79  type;      /* Ty
16b50 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65  pe of join betwe
16b60 65 6e 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64  en this able and
16b70 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f   the previous */
16b80 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f  .    unsigned no
16b90 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20  tIndexed :1;    
16ba0 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65  /* True if there
16bb0 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45   is a NOT INDEXE
16bc0 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  D clause */.    
16bd0 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65  unsigned isCorre
16be0 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72  lated :1;  /* Tr
16bf0 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20  ue if sub-query 
16c00 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f  is correlated */
16c10 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69  .    unsigned vi
16c20 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20  aCoroutine :1;  
16c30 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61  /* Implemented a
16c40 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a  s a co-routine *
16c50 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69  /.    unsigned i
16c60 73 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20  sRecursive :1;  
16c70 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63   /* True for rec
16c80 75 72 73 69 76 65 20 72 65 66 65 72 65 6e 63 65  ursive reference
16c90 20 69 6e 20 57 49 54 48 20 2a 2f 0a 23 69 66 6e   in WITH */.#ifn
16ca0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
16cb0 45 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69  EXPLAIN.    u8 i
16cc0 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a  SelectId;     /*
16cd0 20 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20   If pSelect!=0, 
16ce0 74 68 65 20 69 64 20 6f 66 20 74 68 65 20 73 75  the id of the su
16cf0 62 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20  b-select in EQP 
16d00 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e  */.#endif.    in
16d10 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20  t iCursor;      
16d20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
16d30 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74  or number used t
16d40 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61  o access this ta
16d50 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ble */.    Expr 
16d60 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20  *pOn;        /* 
16d70 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66  The ON clause of
16d80 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49   a join */.    I
16d90 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20  dList *pUsing;  
16da0 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c   /* The USING cl
16db0 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
16dc0 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f  /.    Bitmask co
16dd0 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e  lUsed;  /* Bit N
16de0 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63   (1<<N) set if c
16df0 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20  olumn N of pTab 
16e00 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 63  is used */.    c
16e10 68 61 72 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20  har *zIndex;    
16e20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66   /* Identifier f
16e30 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20  rom "INDEXED BY 
16e40 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65  <zIndex>" clause
16e50 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   */.    Index *p
16e60 49 6e 64 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64  Index;    /* Ind
16e70 65 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72  ex structure cor
16e80 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49  responding to zI
16e90 6e 64 65 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a  ndex, if any */.
16ea0 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20    } a[1];       
16eb0 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74        /* One ent
16ec0 72 79 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e  ry for each iden
16ed0 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69  tifier on the li
16ee0 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
16ef0 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73  Permitted values
16f00 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e   of the SrcList.
16f10 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64  a.jointype field
16f20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49  .*/.#define JT_I
16f30 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30 31 20  NNER     0x0001 
16f40 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f     /* Any kind o
16f50 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73  f inner or cross
16f60 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
16f70 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78   JT_CROSS     0x
16f80 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69  0002    /* Expli
16f90 63 69 74 20 75 73 65 20 6f 66 20 74 68 65 20 43  cit use of the C
16fa0 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a  ROSS keyword */.
16fb0 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52  #define JT_NATUR
16fc0 41 4c 20 20 20 30 78 30 30 30 34 20 20 20 20 2f  AL   0x0004    /
16fd0 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61  * True for a "na
16fe0 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23  tural" join */.#
16ff0 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20  define JT_LEFT  
17000 20 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a      0x0008    /*
17010 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e   Left outer join
17020 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52   */.#define JT_R
17030 49 47 48 54 20 20 20 20 20 30 78 30 30 31 30 20  IGHT     0x0010 
17040 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65     /* Right oute
17050 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
17060 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30  e JT_OUTER     0
17070 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20  x0020    /* The 
17080 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20  "OUTER" keyword 
17090 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64  is present */.#d
170a0 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20  efine JT_ERROR  
170b0 20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20     0x0040    /* 
170c0 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70  unknown or unsup
170d0 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65  ported join type
170e0 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67   */.../*.** Flag
170f0 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f  s appropriate fo
17100 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73  r the wctrlFlags
17110 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71   parameter of sq
17120 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28  lite3WhereBegin(
17130 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65  ).** and the Whe
17140 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67  reInfo.wctrlFlag
17150 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65  s member..*/.#de
17160 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
17170 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30  BY_NORMAL   0x00
17180 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23  00 /* No-op */.#
17190 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
171a0 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78  ERBY_MIN      0x
171b0 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59  0001 /* ORDER BY
171c0 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
171d0 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64  min() func */.#d
171e0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
171f0 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30  RBY_MAX      0x0
17200 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  002 /* ORDER BY 
17210 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d  processing for m
17220 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65  ax() func */.#de
17230 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41  fine WHERE_ONEPA
17240 53 53 5f 44 45 53 49 52 45 44 20 20 30 78 30 30  SS_DESIRED  0x00
17250 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f  04 /* Want to do
17260 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45   one-pass UPDATE
17270 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69  /DELETE */.#defi
17280 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41  ne WHERE_DUPLICA
17290 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 30 38  TES_OK    0x0008
172a0 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e   /* Ok to return
172b0 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e   a row more than
172c0 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65   once */.#define
172d0 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e   WHERE_OMIT_OPEN
172e0 5f 43 4c 4f 53 45 20 20 30 78 30 30 31 30 20 2f  _CLOSE  0x0010 /
172f0 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 73 20  * Table cursors 
17300 61 72 65 20 61 6c 72 65 61 64 79 20 6f 70 65 6e  are already open
17310 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
17320 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45 20 20 20  E_FORCE_TABLE   
17330 20 20 20 30 78 30 30 32 30 20 2f 2a 20 44 6f 20     0x0020 /* Do 
17340 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e 64 65 78  not use an index
17350 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a  -only search */.
17360 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
17370 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30  ETABLE_ONLY    0
17380 78 30 30 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f  x0040 /* Only co
17390 64 65 20 74 68 65 20 31 73 74 20 74 61 62 6c 65  de the 1st table
173a0 20 69 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a   in pTabList */.
173b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 30            /*   0
173d0 78 30 30 38 30 20 2f 2f 20 6e 6f 74 20 63 75 72  x0080 // not cur
173e0 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 23  rently used */.#
173f0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f  define WHERE_GRO
17400 55 50 42 59 20 20 20 20 20 20 20 20 20 20 30 78  UPBY          0x
17410 30 31 30 30 20 2f 2a 20 70 4f 72 64 65 72 42 79  0100 /* pOrderBy
17420 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f   is really a GRO
17430 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65  UP BY */.#define
17440 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42   WHERE_DISTINCTB
17450 59 20 20 20 20 20 20 20 30 78 30 32 30 30 20 2f  Y       0x0200 /
17460 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20 72 65  * pOrderby is re
17470 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20  ally a DISTINCT 
17480 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
17490 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53  e WHERE_WANT_DIS
174a0 54 49 4e 43 54 20 20 20 20 30 78 30 34 30 30 20  TINCT    0x0400 
174b0 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65  /* All output ne
174c0 65 64 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e  eds to be distin
174d0 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ct */.#define WH
174e0 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20  ERE_SORTBYGROUP 
174f0 20 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20 53       0x0800 /* S
17500 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68  upport sqlite3Wh
17510 65 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f  ereIsSorted() */
17520 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 52  .#define WHERE_R
17530 45 4f 50 45 4e 5f 49 44 58 20 20 20 20 20 20 20  EOPEN_IDX       
17540 30 78 31 30 30 30 20 2f 2a 20 54 72 79 20 74 6f  0x1000 /* Try to
17550 20 75 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64   use OP_ReopenId
17560 78 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  x */../* Allowed
17570 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66   return values f
17580 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65  rom sqlite3Where
17590 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a  IsDistinct().*/.
175a0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
175b0 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20  STINCT_NOOP     
175c0 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20   0  /* DISTINCT 
175d0 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64  keyword not used
175e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
175f0 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55  E_DISTINCT_UNIQU
17600 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75  E    1  /* No du
17610 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66  plicates */.#def
17620 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
17630 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20  CT_ORDERED   2  
17640 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65  /* All duplicate
17650 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a  s are adjacent *
17660 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
17670 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52  DISTINCT_UNORDER
17680 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61  ED 3  /* Duplica
17690 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65  tes are scattere
176a0 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61  d */../*.** A Na
176b0 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65  meContext define
176c0 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77  s a context in w
176d0 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20  hich to resolve 
176e0 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e  table and column
176f0 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20  .** names.  The 
17700 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73  context consists
17710 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61   of a list of ta
17720 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69  bles (the pSrcLi
17730 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a  st) field and.**
17740 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64   a list of named
17750 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c   expression (pEL
17760 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64  ist).  The named
17770 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
17780 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e   may.** be NULL.
17790 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65    The pSrc corre
177a0 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52  sponds to the FR
177b0 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
177c0 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74  ELECT or.** to t
177d0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f  he table being o
177e0 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e  perated on by IN
177f0 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72  SERT, UPDATE, or
17800 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a   DELETE.  The.**
17810 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f   pEList correspo
17820 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c  nds to the resul
17830 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43  t set of a SELEC
17840 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f  T and is NULL fo
17850 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65  r.** other state
17860 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d  ments..**.** Nam
17870 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65  eContexts can be
17880 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72   nested.  When r
17890 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20  esolving names, 
178a0 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a  the inner-most .
178b0 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65  ** context is se
178c0 61 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49  arched first.  I
178d0 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f  f no match is fo
178e0 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75  und, the next ou
178f0 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69  ter.** context i
17900 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74  s checked.  If t
17910 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f  here is still no
17920 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74   match, the next
17930 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63   context.** is c
17940 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72  hecked.  This pr
17950 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20  ocess continues 
17960 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d  until either a m
17970 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a  atch is found.**
17980 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73   or all contexts
17990 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65   are check.  Whe
179a0 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  n a match is fou
179b0 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d  nd, the nRef mem
179c0 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  ber of.** the co
179d0 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67  ntext containing
179e0 20 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e   the match is in
179f0 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a  cremented. .**.*
17a00 2a 20 45 61 63 68 20 73 75 62 71 75 65 72 79 20  * Each subquery 
17a10 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43  gets a new NameC
17a20 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65  ontext.  The pNe
17a30 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20  xt field points 
17a40 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f  to the.** NameCo
17a50 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70 61 72  ntext in the par
17a60 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75 73  ent query.  Thus
17a70 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20   the process of 
17a80 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20  scanning the.** 
17a90 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74  NameContext list
17aa0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
17ab0 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67  searching throug
17ac0 68 20 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f  h successively o
17ad0 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69  uter.** subqueri
17ae0 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61  es looking for a
17af0 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63   match..*/.struc
17b00 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a  t NameContext {.
17b10 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
17b20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61         /* The pa
17b30 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73  rser */.  SrcLis
17b40 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f  t *pSrcList;   /
17b50 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61  * One or more ta
17b60 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65 73  bles used to res
17b70 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20  olve names */.  
17b80 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74  ExprList *pEList
17b90 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c  ;    /* Optional
17ba0 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d   list of result-
17bb0 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  set columns */. 
17bc0 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
17bd0 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  fo;   /* Informa
17be0 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65  tion about aggre
17bf0 67 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65  gates at this le
17c00 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e  vel */.  NameCon
17c10 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a  text *pNext;  /*
17c20 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65   Next outer name
17c30 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20   context.  NULL 
17c40 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f  for outermost */
17c50 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20  .  int nRef;    
17c60 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17c70 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c  r of names resol
17c80 76 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74  ved by this cont
17c90 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ext */.  int nEr
17ca0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
17cb0 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
17cc0 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68  s encountered wh
17cd0 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61  ile resolving na
17ce0 6d 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46  mes */.  u16 ncF
17cf0 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a  lags;         /*
17d00 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43   Zero or more NC
17d10 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64  _* flags defined
17d20 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   below */.};../*
17d30 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
17d40 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43  es for the NameC
17d50 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20  ontext, ncFlags 
17d60 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  field..**.** Not
17d70 65 3a 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67  e:  NC_MinMaxAgg
17d80 20 6d 75 73 74 20 68 61 76 65 20 74 68 65 20 73   must have the s
17d90 61 6d 65 20 76 61 6c 75 65 20 61 73 20 53 46 5f  ame value as SF_
17da0 4d 69 6e 4d 61 78 41 67 67 20 61 6e 64 0a 2a 2a  MinMaxAgg and.**
17db0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e   SQLITE_FUNC_MIN
17dc0 4d 41 58 2e 0a 2a 2a 20 0a 2a 2f 0a 23 64 65 66  MAX..** .*/.#def
17dd0 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20  ine NC_AllowAgg 
17de0 20 30 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72   0x0001  /* Aggr
17df0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
17e00 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65  are allowed here
17e10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48   */.#define NC_H
17e20 61 73 41 67 67 20 20 20 20 30 78 30 30 30 32 20  asAgg    0x0002 
17e30 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
17e40 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
17e50 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66  ons seen */.#def
17e60 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20  ine NC_IsCheck  
17e70 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65   0x0004  /* True
17e80 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61   if resolving na
17e90 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63  mes in a CHECK c
17ea0 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
17eb0 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e  fine NC_InAggFun
17ec0 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75  c 0x0008  /* Tru
17ed0 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61  e if analyzing a
17ee0 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61  rguments to an a
17ef0 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  gg func */.#defi
17f00 6e 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20  ne NC_PartIdx   
17f10 30 78 30 30 31 30 20 20 2f 2a 20 54 72 75 65 20  0x0010  /* True 
17f20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70  if resolving a p
17f30 61 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45  artial index WHE
17f40 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  RE */.#define NC
17f50 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30  _MinMaxAgg 0x100
17f60 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67  0  /* min/max ag
17f70 67 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20  gregates seen.  
17f80 53 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a  See note above *
17f90 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
17fa0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
17fb0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
17fc0 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66  contains all inf
17fd0 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64  ormation.** need
17fe0 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63  ed to generate c
17ff0 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65  ode for a single
18000 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
18010 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20  t..**.** nLimit 
18020 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20  is set to -1 if 
18030 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49  there is no LIMI
18040 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73  T clause.  nOffs
18050 65 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a  et is set to 0..
18060 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61  ** If there is a
18070 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74   LIMIT clause, t
18080 68 65 20 70 61 72 73 65 72 20 73 65 74 73 20 6e  he parser sets n
18090 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c  Limit to the val
180a0 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d  ue of the.** lim
180b0 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74  it and nOffset t
180c0 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
180d0 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20  he offset (or 0 
180e0 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a  if there is not.
180f0 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74  ** offset).  But
18100 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69   later on, nLimi
18110 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65  t and nOffset be
18120 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20  come the memory 
18130 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20  locations.** in 
18140 74 68 65 20 56 44 42 45 20 74 68 61 74 20 72 65  the VDBE that re
18150 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61  cord the limit a
18160 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65  nd offset counte
18170 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70  rs..**.** addrOp
18180 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73  enEphm[] entries
18190 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64   contain the add
181a0 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45  ress of OP_OpenE
181b0 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73  phemeral opcodes
181c0 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65  ..** These addre
181d0 73 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f  sses must be sto
181e0 72 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63  red so that we c
181f0 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66  an go back and f
18200 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34  ill in.** the P4
18210 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20  _KEYINFO and P2 
18220 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72  parameters later
18230 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b  .  Neither the K
18240 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68  eyInfo nor.** th
18250 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
18260 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65  mns in P2 can be
18270 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65   computed at the
18280 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73   same time.** as
18290 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d   the OP_OpenEphm
182a0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
182b0 63 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f  coded because no
182c0 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f  t.** enough info
182d0 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
182e0 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79  e compound query
182f0 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61   is known at tha
18300 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20  t point..** The 
18310 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72  KeyInfo for addr
18320 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20  OpenTran[0] and 
18330 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [1] contains col
18340 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
18350 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75  .** for the resu
18360 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79  lt set.  The Key
18370 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
18380 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e  nEphm[2] contain
18390 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73  s collating.** s
183a0 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65  equences for the
183b0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
183c0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65  ..*/.struct Sele
183d0 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20  ct {.  ExprList 
183e0 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a  *pEList;      /*
183f0 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74   The fields of t
18400 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75  he result */.  u
18410 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
18420 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a        /* One of:
18430 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c   TK_UNION TK_ALL
18440 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b   TK_INTERSECT TK
18450 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 75 31 36  _EXCEPT */.  u16
18460 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20   selFlags;      
18470 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53      /* Various S
18480 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  F_* values */.  
18490 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66  int iLimit, iOff
184a0 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79  set;   /* Memory
184b0 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69   registers holdi
184c0 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45  ng LIMIT & OFFSE
184d0 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69  T counters */.#i
184e0 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  f SELECTTRACE_EN
184f0 41 42 4c 45 44 0a 20 20 63 68 61 72 20 7a 53 65  ABLED.  char zSe
18500 6c 4e 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f  lName[12];     /
18510 2a 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20  * Symbolic name 
18520 6f 66 20 74 68 69 73 20 53 45 4c 45 43 54 20 75  of this SELECT u
18530 73 65 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67  se for debugging
18540 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
18550 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d   addrOpenEphm[2]
18560 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70  ;   /* OP_OpenEp
18570 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61  hem opcodes rela
18580 74 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  ted to this sele
18590 63 74 20 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c  ct */.  u64 nSel
185a0 65 63 74 52 6f 77 3b 20 20 20 20 20 20 20 20 2f  ectRow;        /
185b0 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62  * Estimated numb
185c0 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  er of result row
185d0 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  s */.  SrcList *
185e0 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  pSrc;         /*
185f0 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   The FROM clause
18600 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
18610 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  re;          /* 
18620 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
18630 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
18640 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20  pGroupBy;    /* 
18650 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  The GROUP BY cla
18660 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  use */.  Expr *p
18670 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20  Having;         
18680 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c  /* The HAVING cl
18690 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ause */.  ExprLi
186a0 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20  st *pOrderBy;   
186b0 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59   /* The ORDER BY
186c0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c   clause */.  Sel
186d0 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20  ect *pPrior;    
186e0 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c      /* Prior sel
186f0 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  ect in a compoun
18700 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65  d select stateme
18710 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  nt */.  Select *
18720 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
18730 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f  * Next select to
18740 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63   the left in a c
18750 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70  ompound */.  Exp
18760 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20  r *pLimit;      
18770 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70      /* LIMIT exp
18780 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65  ression. NULL me
18790 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f  ans not used. */
187a0 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74  .  Expr *pOffset
187b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46  ;         /* OFF
187c0 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  SET expression. 
187d0 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75  NULL means not u
187e0 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a  sed. */.  With *
187f0 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20  pWith;          
18800 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20   /* WITH clause 
18810 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73  attached to this
18820 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c   select. Or NULL
18830 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  . */.};../*.** A
18840 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
18850 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67  r Select.selFlag
18860 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65  s.  The "SF" pre
18870 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a  fix stands for.*
18880 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e  * "Select Flag".
18890 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44  .*/.#define SF_D
188a0 69 73 74 69 6e 63 74 20 20 20 20 20 20 20 20 30  istinct        0
188b0 78 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74  x0001  /* Output
188c0 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49   should be DISTI
188d0 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NCT */.#define S
188e0 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20  F_Resolved      
188f0 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 64 65    0x0002  /* Ide
18900 6e 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65  ntifiers have be
18910 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23  en resolved */.#
18920 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67  define SF_Aggreg
18930 61 74 65 20 20 20 20 20 20 20 30 78 30 30 30 34  ate       0x0004
18940 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67    /* Contains ag
18950 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
18960 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
18970 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20  UsesEphemeral   
18980 30 78 30 30 30 38 20 20 2f 2a 20 55 73 65 73 20  0x0008  /* Uses 
18990 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61  the OpenEphemera
189a0 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66  l opcode */.#def
189b0 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20  ine SF_Expanded 
189c0 20 20 20 20 20 20 20 30 78 30 30 31 30 20 20 2f         0x0010  /
189d0 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  * sqlite3SelectE
189e0 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f  xpand() called o
189f0 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e  n this */.#defin
18a00 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f  e SF_HasTypeInfo
18a10 20 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20       0x0020  /* 
18a20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20  FROM subqueries 
18a30 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64  have Table metad
18a40 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ata */.#define S
18a50 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20  F_Compound      
18a60 20 20 30 78 30 30 34 30 20 20 2f 2a 20 50 61 72    0x0040  /* Par
18a70 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t of a compound 
18a80 71 75 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65  query */.#define
18a90 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20   SF_Values      
18aa0 20 20 20 20 30 78 30 30 38 30 20 20 2f 2a 20 53      0x0080  /* S
18ab0 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20  ynthesized from 
18ac0 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f  VALUES clause */
18ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18ae0 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78 30 31       /*     0x01
18af0 30 30 20 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0a  00  NOT USED */.
18b00 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65  #define SF_Neste
18b10 64 46 72 6f 6d 20 20 20 20 20 20 30 78 30 32 30  dFrom      0x020
18b20 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20  0  /* Part of a 
18b30 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52  parenthesized FR
18b40 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  OM clause */.#de
18b50 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e  fine SF_MaybeCon
18b60 76 65 72 74 20 20 20 20 30 78 30 34 30 30 20 20  vert    0x0400  
18b70 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43  /* Need convertC
18b80 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
18b90 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65  ubquery() */.#de
18ba0 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76  fine SF_Recursiv
18bb0 65 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20  e       0x0800  
18bc0 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69 76 65  /* The recursive
18bd0 20 70 61 72 74 20 6f 66 20 61 20 72 65 63 75 72   part of a recur
18be0 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66  sive CTE */.#def
18bf0 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67  ine SF_MinMaxAgg
18c00 20 20 20 20 20 20 20 30 78 31 30 30 30 20 20 2f         0x1000  /
18c10 2a 20 41 67 67 72 65 67 61 74 65 20 63 6f 6e 74  * Aggregate cont
18c20 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20  aining min() or 
18c30 6d 61 78 28 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  max() */.../*.**
18c40 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   The results of 
18c50 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20  a SELECT can be 
18c60 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 73  distributed in s
18c70 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20  everal ways, as 
18c80 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e  defined.** by on
18c90 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
18ca0 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20  ng macros.  The 
18cb0 22 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61  "SRT" prefix mea
18cc0 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c  ns "SELECT Resul
18cd0 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a  t.** Type"..**.*
18ce0 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20  *     SRT_Union 
18cf0 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
18d00 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20  lts as a key in 
18d10 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65  a temporary inde
18d20 78 20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  x .**           
18d30 20 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69            identi
18d40 66 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69  fied by pDest->i
18d50 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20  SDParm..**.**   
18d60 20 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20    SRT_Except    
18d70 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73    Remove results
18d80 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72   from the tempor
18d90 61 72 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d  ary index pDest-
18da0 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20  >iSDParm..**.** 
18db0 20 20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20      SRT_Exists  
18dc0 20 20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e      Store a 1 in
18dd0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65   memory cell pDe
18de0 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74  st->iSDParm if t
18df0 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20  he result.**    
18e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e10 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74   set is not empt
18e20 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  y..**.**     SRT
18e30 5f 44 69 73 63 61 72 64 20 20 20 20 20 54 68 72  _Discard     Thr
18e40 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73 20 61  ow the results a
18e50 77 61 79 2e 20 20 54 68 69 73 20 69 73 20 75 73  way.  This is us
18e60 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20  ed by SELECT.** 
18e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e80 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77      statements w
18e90 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 77  ithin triggers w
18ea0 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73  hose only purpos
18eb0 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  e is.**         
18ec0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
18ed0 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20  side-effects of 
18ee0 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
18ef0 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76   All of the abov
18f00 65 20 61 72 65 20 66 72 65 65 20 74 6f 20 69 67  e are free to ig
18f10 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45 52  nore their ORDER
18f20 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73   BY clause. Thos
18f30 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77  e that.** follow
18f40 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20   must honor the 
18f50 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
18f60 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f  .**.**     SRT_O
18f70 75 74 70 75 74 20 20 20 20 20 20 47 65 6e 65 72  utput      Gener
18f80 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74  ate a row of out
18f90 70 75 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f  put (using the O
18fa0 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20  P_ResultRow.**  
18fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fc0 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65     opcode) for e
18fd0 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72  ach row in the r
18fe0 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  esult set..**.**
18ff0 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20       SRT_Mem    
19000 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20       Only valid 
19010 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  if the result is
19020 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
19030 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
19040 20 20 20 20 20 20 20 20 20 53 74 6f 72 65 20 74           Store t
19050 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  he first column 
19060 6f 66 20 74 68 65 20 66 69 72 73 74 20 72 65 73  of the first res
19070 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20  ult row.**      
19080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
19090 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74  n register pDest
190a0 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61  ->iSDParm then a
190b0 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a  bandon the rest.
190c0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
190d0 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 71 75         of the qu
190e0 65 72 79 2e 20 20 54 68 69 73 20 64 65 73 74 69  ery.  This desti
190f0 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22  nation implies "
19100 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20  LIMIT 1"..**.** 
19110 20 20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20      SRT_Set     
19120 20 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d      The result m
19130 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20  ust be a single 
19140 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65  column.  Store e
19150 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ach.**          
19160 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f             row o
19170 66 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20  f result as the 
19180 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65  key in table pDe
19190 73 74 2d 3e 69 53 44 50 61 72 6d 2e 20 0a 2a 2a  st->iSDParm. .**
191a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191b0 20 20 20 20 20 41 70 70 6c 79 20 74 68 65 20 61       Apply the a
191c0 66 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61  ffinity pDest->a
191d0 66 66 53 64 73 74 20 62 65 66 6f 72 65 20 73 74  ffSdst before st
191e0 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20  oring.**        
191f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
19200 75 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69  ults.  Used to i
19210 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45  mplement "IN (SE
19220 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a  LECT ...)"..**.*
19230 2a 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54  *     SRT_EphemT
19240 61 62 20 20 20 20 43 72 65 61 74 65 20 61 6e 20  ab    Create an 
19250 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
19260 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61  pDest->iSDParm a
19270 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20  nd store.**     
19280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19290 74 68 65 20 72 65 73 75 6c 74 20 74 68 65 72 65  the result there
192a0 2e 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20  . The cursor is 
192b0 6c 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a  left open after.
192c0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
192d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67         returning
192e0 2e 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20  .  This is like 
192f0 53 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74  SRT_Table except
19300 20 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20   that.**        
19310 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
19320 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73  s destination us
19330 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  es OP_OpenEpheme
19340 72 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a  ral to create.**
19350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19360 20 20 20 20 20 74 68 65 20 74 61 62 6c 65 20 66       the table f
19370 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  irst..**.**     
19380 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20  SRT_Coroutine   
19390 47 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f  Generate a co-ro
193a0 75 74 69 6e 65 20 74 68 61 74 20 72 65 74 75 72  utine that retur
193b0 6e 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a  ns a new row of.
193c0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
193d0 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 20 65         results e
193e0 61 63 68 20 74 69 6d 65 20 69 74 20 69 73 20 69  ach time it is i
193f0 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74  nvoked.  The ent
19400 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20  ry point.**     
19410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19420 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e  of the co-routin
19430 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  e is stored in r
19440 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69  egister pDest->i
19450 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20  SDParm.**       
19460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e                an
19470 64 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77  d the result row
19480 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44   is stored in pD
19490 65 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73  est->nDest regis
194a0 74 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  ters.**         
194b0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72              star
194c0 74 69 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d  ting with pDest-
194d0 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  >iSdst..**.**   
194e0 20 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20    SRT_Table     
194f0 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
19500 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  in temporary tab
19510 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
19520 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69  m..**     SRT_Fi
19530 66 6f 20 20 20 20 20 20 20 20 54 68 69 73 20 69  fo        This i
19540 73 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d  s like SRT_Ephem
19550 54 61 62 20 65 78 63 65 70 74 20 74 68 61 74 20  Tab except that 
19560 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20  the table.**    
19570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19580 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61   is assumed to a
19590 6c 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20  lready be open. 
195a0 20 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a   SRT_Fifo has.**
195b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195c0 20 20 20 20 20 74 68 65 20 61 64 64 69 74 69 6f       the additio
195d0 6e 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20  nal property of 
195e0 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67  being able to ig
195f0 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  nore.**         
19600 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
19610 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
19620 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44  .**.**     SRT_D
19630 69 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65  istFifo    Store
19640 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65   results in a te
19650 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
19660 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
19670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19680 20 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73       But also us
19690 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  e temporary tabl
196a0 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
196b0 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20  +1 as.**        
196c0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 20 72               a r
196d0 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69  ecord of all pri
196e0 6f 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69  or results and i
196f0 67 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63  gnore any duplic
19700 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ate.**          
19710 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e             rows.
19720 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22    Name means:  "
19730 44 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a  Distinct Fifo"..
19740 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75  **.**     SRT_Qu
19750 65 75 65 20 20 20 20 20 20 20 53 74 6f 72 65 20  eue       Store 
19760 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72  results in prior
19770 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d  ity queue pDest-
19780 3e 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79  >iSDParm (really
19790 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
197a0 20 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78          an index
197b0 29 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65 71  ).  Append a seq
197c0 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20  uence number so 
197d0 74 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73  that all entries
197e0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
197f0 20 20 20 20 20 20 20 20 61 72 65 20 64 69 73 74          are dist
19800 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  inct..**.**     
19810 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20  SRT_DistQueue   
19820 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
19830 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20   priority queue 
19840 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f  pDest->iSDParm o
19850 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20  nly if.**       
19860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
19870 65 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61  e same record ha
19880 73 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f  s never been sto
19890 72 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65  red before.  The
198a0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
198b0 20 20 20 20 20 20 20 20 69 6e 64 65 78 20 61 74          index at
198c0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b   pDest->iSDParm+
198d0 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72  1 hold all prior
198e0 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66   stores..*/.#def
198f0 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20  ine SRT_Union   
19900 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65       1  /* Store
19910 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20   result as keys 
19920 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23  in an index */.#
19930 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70  define SRT_Excep
19940 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65  t       2  /* Re
19950 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d  move result from
19960 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a   a UNION index *
19970 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78  /.#define SRT_Ex
19980 69 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a  ists       3  /*
19990 20 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20   Store 1 if the 
199a0 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d  result is not em
199b0 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  pty */.#define S
199c0 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20  RT_Discard      
199d0 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76  4  /* Do not sav
199e0 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e  e the results an
199f0 79 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e  ywhere */.#defin
19a00 65 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20  e SRT_Fifo      
19a10 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72     5  /* Store r
19a20 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69  esult as data wi
19a30 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20  th an automatic 
19a40 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
19a50 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20   SRT_DistFifo   
19a60 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54    6  /* Like SRT
19a70 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75  _Fifo, but uniqu
19a80 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a  e results only *
19a90 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75  /.#define SRT_Qu
19aa0 65 75 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a  eue        7  /*
19ab0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
19ac0 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65   an queue */.#de
19ad0 66 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65  fine SRT_DistQue
19ae0 75 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65  ue    8  /* Like
19af0 20 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20   SRT_Queue, but 
19b00 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f  unique results o
19b10 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f  nly */../* The O
19b20 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
19b30 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c  s ignored for al
19b40 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a  l of the above *
19b50 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61  /.#define Ignora
19b60 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28  bleOrderby(X) ((
19b70 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44  X->eDest)<=SRT_D
19b80 69 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69  istQueue)..#defi
19b90 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20  ne SRT_Output   
19ba0 20 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74      9  /* Output
19bb0 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73   each row of res
19bc0 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ult */.#define S
19bd0 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31  RT_Mem         1
19be0 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  0  /* Store resu
19bf0 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63  lt in a memory c
19c00 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ell */.#define S
19c10 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 31  RT_Set         1
19c20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  1  /* Store resu
19c30 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61  lts as keys in a
19c40 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  n index */.#defi
19c50 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20  ne SRT_EphemTab 
19c60 20 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65     12  /* Create
19c70 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61   transient tab a
19c80 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52  nd store like SR
19c90 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  T_Table */.#defi
19ca0 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65  ne SRT_Coroutine
19cb0 20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61     13  /* Genera
19cc0 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  te a single row 
19cd0 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65  of result */.#de
19ce0 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20  fine SRT_Table  
19cf0 20 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72       14  /* Stor
19d00 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61  e result as data
19d10 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74   with an automat
19d20 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a  ic rowid */../*.
19d30 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
19d40 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65  f this object de
19d50 73 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f  scribes where to
19d60 20 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75   put of the resu
19d70 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45  lts of.** a SELE
19d80 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f  CT statement..*/
19d90 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65  .struct SelectDe
19da0 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b  st {.  u8 eDest;
19db0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
19dc0 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66  ow to dispose of
19dd0 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f   the results.  O
19de0 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65  n of SRT_* above
19df0 2e 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 53  . */.  char affS
19e00 64 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  dst;        /* A
19e10 66 66 69 6e 69 74 79 20 75 73 65 64 20 77 68 65  ffinity used whe
19e20 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74  n eDest==SRT_Set
19e30 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72   */.  int iSDPar
19e40 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  m;         /* A 
19e50 70 61 72 61 6d 65 74 65 72 20 75 73 65 64 20 62  parameter used b
19e60 79 20 74 68 65 20 65 44 65 73 74 20 64 69 73 70  y the eDest disp
19e70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20  osal method */. 
19e80 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20   int iSdst;     
19e90 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65        /* Base re
19ea0 67 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73  gister where res
19eb0 75 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e  ults are written
19ec0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b   */.  int nSdst;
19ed0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
19ee0 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72  mber of register
19ef0 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20  s allocated */. 
19f00 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65   ExprList *pOrde
19f10 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c  rBy;  /* Key col
19f20 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65  umns for SRT_Que
19f30 75 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51  ue and SRT_DistQ
19f40 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ueue */.};../*.*
19f50 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65  * During code ge
19f60 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74  neration of stat
19f70 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69  ements that do i
19f80 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f  nserts into AUTO
19f90 49 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61  INCREMENT .** ta
19fa0 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  bles, the follow
19fb0 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ing information 
19fc0 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
19fd0 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49  he Table.u.autoI
19fe0 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  nc.p.** pointer 
19ff0 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72  of each autoincr
1a000 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72  ement table to r
1a010 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20  ecord some side 
1a020 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
1a030 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e  .** the code gen
1a040 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57  erator needs.  W
1a050 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70  e have to keep p
1a060 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63  er-table autoinc
1a070 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d  rement.** inform
1a080 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e  ation in case in
1a090 73 65 72 74 73 20 61 72 65 20 64 6f 77 6e 20 77  serts are down w
1a0a0 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20  ithin triggers. 
1a0b0 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74   Triggers do not
1a0c0 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f  .** normally coo
1a0d0 72 64 69 6e 61 74 65 20 74 68 65 69 72 20 61 63  rdinate their ac
1a0e0 74 69 76 69 74 69 65 73 2c 20 62 75 74 20 77 65  tivities, but we
1a0f0 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72   do need to coor
1a100 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f  dinate the.** lo
1a110 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67  ading and saving
1a120 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   of autoincremen
1a130 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  t information..*
1a140 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63  /.struct Autoinc
1a150 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63  Info {.  Autoinc
1a160 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f  Info *pNext;   /
1a170 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63  * Next info bloc
1a180 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74  k in a list of t
1a190 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62  hem all */.  Tab
1a1a0 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
1a1b0 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73     /* Table this
1a1c0 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65   info block refe
1a1d0 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69  rs to */.  int i
1a1e0 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
1a1f0 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c   /* Index in sql
1a200 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61  ite3.aDb[] of da
1a210 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70  tabase holding p
1a220 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  Tab */.  int reg
1a230 43 74 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Ctr;           /
1a240 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  * Memory registe
1a250 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f  r holding the ro
1a260 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d  wid counter */.}
1a270 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66  ;../*.** Size of
1a280 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68   the column cach
1a290 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  e.*/.#ifndef SQL
1a2a0 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23  ITE_N_COLCACHE.#
1a2b0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e   define SQLITE_N
1a2c0 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e  _COLCACHE 10.#en
1a2d0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65  dif../*.** At le
1a2e0 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65  ast one instance
1a2f0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1a300 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 63  g structure is c
1a310 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  reated for each 
1a320 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61 74  .** trigger that
1a330 20 6d 61 79 20 62 65 20 66 69 72 65 64 20 77 68   may be fired wh
1a340 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49  ile parsing an I
1a350 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72  NSERT, UPDATE or
1a360 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65   DELETE.** state
1a370 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f  ment. All such o
1a380 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72 65  bjects are store
1a390 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20  d in the linked 
1a3a0 6c 69 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a  list headed at.*
1a3b0 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  * Parse.pTrigger
1a3c0 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20  Prg and deleted 
1a3d0 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63  once statement c
1a3e0 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62  ompilation has b
1a3f0 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64  een.** completed
1a400 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73  ..**.** A Vdbe s
1a410 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20  ub-program that 
1a420 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62  implements the b
1a430 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61  ody and WHEN cla
1a440 75 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a  use of trigger.*
1a450 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70 54 72  * TriggerPrg.pTr
1a460 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20  igger, assuming 
1a470 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  a default ON CON
1a480 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a  FLICT clause of.
1a490 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72  ** TriggerPrg.or
1a4a0 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20  conf, is stored 
1a4b0 69 6e 20 74 68 65 20 54 72 69 67 67 65 72 50 72  in the TriggerPr
1a4c0 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61  g.pProgram varia
1a4d0 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73  ble..** The Pars
1a4e0 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69  e.pTriggerPrg li
1a4f0 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e  st never contain
1a500 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69  s two entries wi
1a510 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76  th the same.** v
1a520 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70  alues for both p
1a530 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f  Trigger and orco
1a540 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72  nf..**.** The Tr
1a550 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
1a560 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[0] variable is
1a570 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f   set to a mask o
1a580 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a  f old.* columns.
1a590 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72 20  ** accessed (or 
1a5a0 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69  set to 0 for tri
1a5b0 67 67 65 72 73 20 66 69 72 65 64 20 61 73 20 61  ggers fired as a
1a5c0 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52   result of INSER
1a5d0 54 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73  T .** statements
1a5e0 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68  ). Similarly, th
1a5f0 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f  e TriggerPrg.aCo
1a600 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c  lmask[1] variabl
1a610 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61  e is set to.** a
1a620 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63   mask of new.* c
1a630 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74  olumns used by t
1a640 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73  he program..*/.s
1a650 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67  truct TriggerPrg
1a660 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54   {.  Trigger *pT
1a670 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20  rigger;      /* 
1a680 54 72 69 67 67 65 72 20 74 68 69 73 20 70 72 6f  Trigger this pro
1a690 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66  gram was coded f
1a6a0 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  rom */.  Trigger
1a6b0 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  Prg *pNext;     
1a6c0 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69   /* Next entry i
1a6d0 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  n Parse.pTrigger
1a6e0 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75  Prg list */.  Su
1a6f0 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72  bProgram *pProgr
1a700 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d  am;   /* Program
1a710 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54   implementing pT
1a720 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f  rigger/orconf */
1a730 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20  .  int orconf;  
1a740 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
1a750 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1a760 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33  T policy */.  u3
1a770 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20  2 aColmask[2];  
1a780 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f        /* Masks o
1a790 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63  f old.*, new.* c
1a7a0 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20  olumns accessed 
1a7b0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
1a7c0 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70   yDbMask datatyp
1a7d0 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73  e for the bitmas
1a7e0 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65  k of all attache
1a7f0 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a  d databases..*/.
1a800 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41  #if SQLITE_MAX_A
1a810 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70  TTACHED>30.  typ
1a820 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68  edef unsigned ch
1a830 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49  ar yDbMask[(SQLI
1a840 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b  TE_MAX_ATTACHED+
1a850 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20  9)/8];.# define 
1a860 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20  DbMaskTest(M,I) 
1a870 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26     (((M)[(I)/8]&
1a880 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d 30  (1<<((I)&7)))!=0
1a890 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1a8a0 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d 65  kZero(M)      me
1a8b0 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f  mset((M),0,sizeo
1a8c0 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20 44  f(M)).# define D
1a8d0 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20  bMaskSet(M,I)   
1a8e0 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31    (M)[(I)/8]|=(1
1a8f0 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65 66  <<((I)&7)).# def
1a900 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ine DbMaskAllZer
1a910 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44 62  o(M)   sqlite3Db
1a920 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23  MaskAllZero(M).#
1a930 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f   define DbMaskNo
1a940 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c 69  nZero(M)   (sqli
1a950 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  te3DbMaskAllZero
1a960 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20  (M)==0).#else.  
1a970 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64  typedef unsigned
1a980 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20   int yDbMask;.# 
1a990 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73  define DbMaskTes
1a9a0 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 26  t(M,I)    (((M)&
1a9b0 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28  (((yDbMask)1)<<(
1a9c0 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e  I)))!=0).# defin
1a9d0 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20  e DbMaskZero(M) 
1a9e0 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65 66       (M)=0.# def
1a9f0 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c  ine DbMaskSet(M,
1aa00 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79  I)     (M)|=(((y
1aa10 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a  DbMask)1)<<(I)).
1aa20 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41  # define DbMaskA
1aa30 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d  llZero(M)   (M)=
1aa40 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  =0.# define DbMa
1aa50 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28  skNonZero(M)   (
1aa60 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  M)!=0.#endif../*
1aa70 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65  .** An SQL parse
1aa80 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f  r context.  A co
1aa90 70 79 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  py of this struc
1aaa0 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20 74  ture is passed t
1aab0 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61  hrough.** the pa
1aac0 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e  rser and down in
1aad0 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65  to all the parse
1aae0 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65  r action routine
1aaf0 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
1ab00 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66  carry around inf
1ab10 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73  ormation that is
1ab20 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65   global to the e
1ab30 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a  ntire parse..**.
1ab40 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75 72 65  ** The structure
1ab50 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f   is divided into
1ab60 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65   two parts.  Whe
1ab70 6e 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64  n the parser and
1ab80 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74   code.** generat
1ab90 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65  e call themselve
1aba0 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74  s recursively, t
1abb0 68 65 20 66 69 72 73 74 20 70 61 72 74 20 6f 66  he first part of
1abc0 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a   the structure.*
1abd0 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75  * is constant bu
1abe0 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  t the second par
1abf0 74 20 69 73 20 72 65 73 65 74 20 61 74 20 74 68  t is reset at th
1ac00 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20  e beginning and 
1ac10 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72  end of.** each r
1ac20 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ecursion..**.** 
1ac30 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61  The nTableLock a
1ac40 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61  nd aTableLock va
1ac50 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79  riables are only
1ac60 20 75 73 65 64 20 69 66 20 74 68 65 20 73 68 61   used if the sha
1ac70 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65  red-cache .** fe
1ac80 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
1ac90 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28   (if sqlite3Tsd(
1aca0 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61  )->useSharedData
1acb0 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20   is true). They 
1acc0 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73  are.** used to s
1acd0 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20  tore the set of 
1ace0 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75  table-locks requ
1acf0 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74  ired by the stat
1ad00 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63  ement being.** c
1ad10 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f  ompiled. Functio
1ad20 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  n sqlite3TableLo
1ad30 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  ck() is used to 
1ad40 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74  add entries to t
1ad50 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73  he.** list..*/.s
1ad60 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20  truct Parse {.  
1ad70 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
1ad80 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e       /* The main
1ad90 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74   database struct
1ada0 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ure */.  char *z
1adb0 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a  ErrMsg;       /*
1adc0 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   An error messag
1add0 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64  e */.  Vdbe *pVd
1ade0 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  be;         /* A
1adf0 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65  n engine for exe
1ae00 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  cuting database 
1ae10 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e  bytecode */.  in
1ae20 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
1ae30 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64     /* Return cod
1ae40 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e  e from execution
1ae50 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65   */.  u8 colName
1ae60 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52  sSet;      /* TR
1ae70 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75  UE after OP_Colu
1ae80 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20  mnName has been 
1ae90 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20  issued to pVdbe 
1aea0 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68  */.  u8 checkSch
1aeb0 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75  ema;      /* Cau
1aec0 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  ses schema cooki
1aed0 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e  e check after an
1aee0 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e   error */.  u8 n
1aef0 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20  ested;          
1af00 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
1af10 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68  sted calls to th
1af20 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65  e parser/code ge
1af30 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20  nerator */.  u8 
1af40 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20  nTempReg;       
1af50 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
1af60 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
1af70 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d  rs in aTempReg[]
1af80 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69   */.  u8 isMulti
1af90 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72  Write;     /* Tr
1afa0 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20  ue if statement 
1afb0 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72  may modify/inser
1afc0 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  t multiple rows 
1afd0 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74  */.  u8 mayAbort
1afe0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ;         /* Tru
1aff0 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d  e if statement m
1b000 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52  ay throw an ABOR
1b010 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20  T exception */. 
1b020 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b   u8 hasCompound;
1b030 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f        /* Need to
1b040 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43   invoke convertC
1b050 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
1b060 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75  ubquery() */.  u
1b070 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b  8 okConstFactor;
1b080 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63      /* OK to fac
1b090 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74  tor out constant
1b0a0 73 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70  s */.  int aTemp
1b0b0 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48  Reg[8];     /* H
1b0c0 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20  olding area for 
1b0d0 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
1b0e0 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61  ers */.  int nRa
1b0f0 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a  ngeReg;       /*
1b100 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d   Size of the tem
1b110 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
1b120 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69  block */.  int i
1b130 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
1b140 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65  /* First registe
1b150 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72  r in temporary r
1b160 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
1b170 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
1b180 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1b190 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e  r of errors seen
1b1a0 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20   */.  int nTab; 
1b1b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1b1c0 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73  mber of previous
1b1d0 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42  ly allocated VDB
1b1e0 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69  E cursors */.  i
1b1f0 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
1b200 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1b210 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73   memory cells us
1b220 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
1b230 6e 74 20 6e 53 65 74 3b 20 20 20 20 20 20 20 20  nt nSet;        
1b240 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1b250 20 73 65 74 73 20 75 73 65 64 20 73 6f 20 66 61   sets used so fa
1b260 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65  r */.  int nOnce
1b270 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
1b280 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e 63 65  umber of OP_Once
1b290 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 73 6f   instructions so
1b2a0 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f   far */.  int nO
1b2b0 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f  pAlloc;        /
1b2c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74  * Number of slot
1b2d0 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
1b2e0 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20  Vdbe.aOp[] */.  
1b2f0 69 6e 74 20 69 46 69 78 65 64 4f 70 3b 20 20 20  int iFixedOp;   
1b300 20 20 20 20 20 2f 2a 20 4e 65 76 65 72 20 62 61       /* Never ba
1b310 63 6b 20 6f 75 74 20 6f 70 63 6f 64 65 73 20 69  ck out opcodes i
1b320 46 69 78 65 64 4f 70 2d 31 20 6f 72 20 65 61 72  FixedOp-1 or ear
1b330 6c 69 65 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b  lier */.  int ck
1b340 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Base;          /
1b350 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20  * Base register 
1b360 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67 20 63  of data during c
1b370 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73  heck constraints
1b380 20 2a 2f 0a 20 20 69 6e 74 20 69 50 61 72 74 49   */.  int iPartI
1b390 64 78 54 61 62 3b 20 20 20 20 20 2f 2a 20 54 61  dxTab;     /* Ta
1b3a0 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ble correspondin
1b3b0 67 20 74 6f 20 61 20 70 61 72 74 69 61 6c 20 69  g to a partial i
1b3c0 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 43  ndex */.  int iC
1b3d0 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f  acheLevel;     /
1b3e0 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64  * ColCache valid
1b3f0 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b   when aColCache[
1b400 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65  ].iLevel<=iCache
1b410 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69  Level */.  int i
1b420 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20  CacheCnt;       
1b430 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20  /* Counter used 
1b440 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c  to generate aCol
1b450 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75  Cache[].lru valu
1b460 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62  es */.  int nLab
1b470 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  el;          /* 
1b480 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73  Number of labels
1b490 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a   used */.  int *
1b4a0 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20  aLabel;         
1b4b0 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64  /* Space to hold
1b4c0 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20   the labels */. 
1b4d0 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68   struct yColCach
1b4e0 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62  e {.    int iTab
1b4f0 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
1b500 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75   Table cursor nu
1b510 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 31 36 20  mber */.    i16 
1b520 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
1b530 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d    /* Table colum
1b540 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  n number */.    
1b550 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20  u8 tempReg;     
1b560 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73        /* iReg is
1b570 20 61 20 74 65 6d 70 20 72 65 67 69 73 74 65 72   a temp register
1b580 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62   that needs to b
1b590 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69  e freed */.    i
1b5a0 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt iLevel;      
1b5b0 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20       /* Nesting 
1b5c0 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74  level */.    int
1b5d0 20 69 52 65 67 3b 20 20 20 20 20 20 20 20 20 20   iReg;          
1b5e0 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76     /* Reg with v
1b5f0 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  alue of this col
1b600 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e  umn. 0 means non
1b610 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72  e. */.    int lr
1b620 75 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  u;              
1b630 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c  /* Least recentl
1b640 79 20 75 73 65 64 20 65 6e 74 72 79 20 68 61 73  y used entry has
1b650 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61   the smallest va
1b660 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43  lue */.  } aColC
1b670 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f  ache[SQLITE_N_CO
1b680 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65  LCACHE];  /* One
1b690 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
1b6a0 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a   cache entry */.
1b6b0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e    ExprList *pCon
1b6c0 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61  stExpr;/* Consta
1b6d0 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  nt expressions *
1b6e0 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72  /.  Token constr
1b6f0 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65  aintName;/* Name
1b700 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69   of the constrai
1b710 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69  nt currently bei
1b720 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79  ng parsed */.  y
1b730 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b  DbMask writeMask
1b740 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77  ;   /* Start a w
1b750 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
1b760 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62 61   on these databa
1b770 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b  ses */.  yDbMask
1b780 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a   cookieMask;  /*
1b790 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65   Bitmask of sche
1b7a0 6d 61 20 76 65 72 69 66 69 65 64 20 64 61 74 61  ma verified data
1b7b0 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63  bases */.  int c
1b7c0 6f 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49 54  ookieValue[SQLIT
1b7d0 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 32  E_MAX_ATTACHED+2
1b7e0 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66  ];  /* Values of
1b7f0 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72 69   cookies to veri
1b800 66 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52  fy */.  int regR
1b810 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  owid;        /* 
1b820 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1b830 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45   rowid of CREATE
1b840 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a   TABLE entry */.
1b850 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20    int regRoot;  
1b860 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
1b870 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20  er holding root 
1b880 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
1b890 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20  new objects */. 
1b8a0 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20   int nMaxArg;   
1b8b0 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67        /* Max arg
1b8c0 73 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72  s passed to user
1b8d0 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62   function by sub
1b8e0 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20  -program */.#if 
1b8f0 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
1b900 4c 45 44 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63  LED.  int nSelec
1b910 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  t;         /* Nu
1b920 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73  mber of SELECT s
1b930 74 61 74 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a  tatements seen *
1b940 2f 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 49  /.  int nSelectI
1b950 6e 64 65 6e 74 3b 20 20 20 2f 2a 20 48 6f 77 20  ndent;   /* How 
1b960 66 61 72 20 74 6f 20 69 6e 64 65 6e 74 20 53 45  far to indent SE
1b970 4c 45 43 54 54 52 41 43 45 28 29 20 6f 75 74 70  LECTTRACE() outp
1b980 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  ut */.#endif.#if
1b990 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1b9a0 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
1b9b0 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20  int nTableLock; 
1b9c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b9d0 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61   of locks in aTa
1b9e0 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62  bleLock */.  Tab
1b9f0 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f  leLock *aTableLo
1ba00 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20  ck; /* Required 
1ba10 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20  table locks for 
1ba20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
1ba30 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75  e */.#endif.  Au
1ba40 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63  toincInfo *pAinc
1ba50 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  ;  /* Informatio
1ba60 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52  n about AUTOINCR
1ba70 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a  EMENT counters *
1ba80 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  /..  /* Informat
1ba90 69 6f 6e 20 75 73 65 64 20 77 68 69 6c 65 20 63  ion used while c
1baa0 6f 64 69 6e 67 20 74 72 69 67 67 65 72 20 70 72  oding trigger pr
1bab0 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72  ograms. */.  Par
1bac0 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20  se *pToplevel;  
1bad0 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63    /* Parse struc
1bae0 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72  ture for main pr
1baf0 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20  ogram (or NULL) 
1bb00 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69  */.  Table *pTri
1bb10 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62  ggerTab;  /* Tab
1bb20 6c 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20  le triggers are 
1bb30 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20  being coded for 
1bb40 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54  */.  int addrCrT
1bb50 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64  ab;       /* Add
1bb60 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74  ress of OP_Creat
1bb70 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 6f 6e  eTable opcode on
1bb80 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f   CREATE TABLE */
1bb90 0a 20 20 69 6e 74 20 61 64 64 72 53 6b 69 70 50  .  int addrSkipP
1bba0 4b 3b 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65  K;      /* Addre
1bbb0 73 73 20 6f 66 20 69 6e 73 74 72 75 63 74 69 6f  ss of instructio
1bbc0 6e 20 74 6f 20 73 6b 69 70 20 50 52 49 4d 41 52  n to skip PRIMAR
1bbd0 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 20  Y KEY index */. 
1bbe0 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b   u32 nQueryLoop;
1bbf0 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d        /* Est num
1bc00 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e  ber of iteration
1bc10 73 20 6f 66 20 61 20 71 75 65 72 79 20 28 31 30  s of a query (10
1bc20 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75  *log2(N)) */.  u
1bc30 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20  32 oldmask;     
1bc40 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f      /* Mask of o
1bc50 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66  ld.* columns ref
1bc60 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32  erenced */.  u32
1bc70 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20   newmask;       
1bc80 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77    /* Mask of new
1bc90 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
1bca0 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54  enced */.  u8 eT
1bcb0 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20  riggerOp;       
1bcc0 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  /* TK_UPDATE, TK
1bcd0 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45  _INSERT or TK_DE
1bce0 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72  LETE */.  u8 eOr
1bcf0 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f  conf;          /
1bd00 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  * Default ON CON
1bd10 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72  FLICT policy for
1bd20 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a   trigger steps *
1bd30 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72  /.  u8 disableTr
1bd40 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65  iggers;  /* True
1bd50 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67   to disable trig
1bd60 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a  gers */..  /****
1bd70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bd80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bd90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bda0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bdb0 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20  ****.  ** Above 
1bdc0 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77  is constant betw
1bdd0 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20  een recursions. 
1bde0 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20   Below is reset 
1bdf0 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72  before and after
1be00 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72  .  ** each recur
1be10 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64  sion.  The bound
1be20 61 72 79 20 62 65 74 77 65 65 6e 20 74 68 65 73  ary between thes
1be30 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73  e two regions is
1be40 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a   determined.  **
1be50 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28   using offsetof(
1be60 50 61 72 73 65 2c 6e 56 61 72 29 20 73 6f 20 74  Parse,nVar) so t
1be70 68 65 20 6e 56 61 72 20 66 69 65 6c 64 20 6d 75  he nVar field mu
1be80 73 74 20 62 65 20 74 68 65 20 66 69 72 73 74 20  st be the first 
1be90 66 69 65 6c 64 0a 20 20 2a 2a 20 69 6e 20 74 68  field.  ** in th
1bea0 65 20 72 65 63 75 72 73 69 76 65 20 72 65 67 69  e recursive regi
1beb0 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  on..  **********
1bec0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bed0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bee0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bef0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
1bf00 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20 20 20 20  .  int nVar;    
1bf10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1bf20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61  Number of '?' va
1bf30 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20  riables seen in 
1bf40 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a  the SQL so far *
1bf50 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20  /.  int nzVar;  
1bf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1bf70 20 4e 75 6d 62 65 72 20 6f 66 20 61 76 61 69 6c   Number of avail
1bf80 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a  able slots in az
1bf90 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50  Var[] */.  u8 iP
1bfa0 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  kSortOrder;     
1bfb0 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44       /* ASC or D
1bfc0 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20  ESC for INTEGER 
1bfd0 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20  PRIMARY KEY */. 
1bfe0 20 75 38 20 62 46 72 65 65 57 69 74 68 3b 20 20   u8 bFreeWith;  
1bff0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1c000 75 65 20 69 66 20 70 57 69 74 68 20 73 68 6f 75  ue if pWith shou
1c010 6c 64 20 62 65 20 66 72 65 65 64 20 77 69 74 68  ld be freed with
1c020 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 75 38 20   parser */.  u8 
1c030 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20  explain;        
1c040 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1c050 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c  f the EXPLAIN fl
1c060 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74  ag is found on t
1c070 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e  he query */.#ifn
1c080 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1c090 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75  VIRTUALTABLE.  u
1c0a0 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20 20  8 declareVtab;  
1c0b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1c0c0 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69 74   if inside sqlit
1c0d0 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
1c0e0 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62  ) */.  int nVtab
1c0f0 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  Lock;           
1c100 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69   /* Number of vi
1c110 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20  rtual tables to 
1c120 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  lock */.#endif. 
1c130 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20 20   int nAlias;    
1c140 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1c150 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64 20  mber of aliased 
1c160 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d  result set colum
1c170 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69  ns */.  int nHei
1c180 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ght;            
1c190 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
1c1a0 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63  tree height of c
1c1b0 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63  urrent sub-selec
1c1c0 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  t */.#ifndef SQL
1c1d0 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
1c1e0 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64  .  int iSelectId
1c1f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1c200 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65  ID of current se
1c210 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e  lect for EXPLAIN
1c220 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74   output */.  int
1c230 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20   iNextSelectId; 
1c240 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61         /* Next a
1c250 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20  vailable select 
1c260 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f  ID for EXPLAIN o
1c270 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  utput */.#endif.
1c280 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20    char **azVar; 
1c290 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
1c2a0 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65 73  ointers to names
1c2b0 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20 2a   of parameters *
1c2c0 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65  /.  Vdbe *pRepre
1c2d0 70 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  pare;         /*
1c2e0 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70   VM being reprep
1c2f0 61 72 65 64 20 28 73 71 6c 69 74 65 33 52 65 70  ared (sqlite3Rep
1c300 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63  repare()) */.  c
1c310 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c  onst char *zTail
1c320 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
1c330 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68  SQL text past th
1c340 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e  e last semicolon
1c350 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62   parsed */.  Tab
1c360 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20  le *pNewTable;  
1c370 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c         /* A tabl
1c380 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63  e being construc
1c390 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41  ted by CREATE TA
1c3a0 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  BLE */.  Trigger
1c3b0 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20   *pNewTrigger;  
1c3c0 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e     /* Trigger un
1c3d0 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79  der construct by
1c3e0 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45   a CREATE TRIGGE
1c3f0 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  R */.  const cha
1c400 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
1c410 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61   /* The 6th para
1c420 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75  meter to db->xAu
1c430 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a  th callbacks */.
1c440 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b    Token sNameTok
1c450 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  en;         /* T
1c460 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c  oken with unqual
1c470 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a  ified schema obj
1c480 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f  ect name */.  To
1c490 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20  ken sLastToken; 
1c4a0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c          /* The l
1c4b0 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64  ast token parsed
1c4c0 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
1c4d0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1c4e0 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72  ABLE.  Token sAr
1c4f0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
1c500 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78   /* Complete tex
1c510 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72  t of a module ar
1c520 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c  gument */.  Tabl
1c530 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20  e **apVtabLock; 
1c540 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
1c550 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c   to virtual tabl
1c560 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69  es needing locki
1c570 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54  ng */.#endif.  T
1c580 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62  able *pZombieTab
1c590 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
1c5a0 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74   of Table object
1c5b0 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65  s to delete afte
1c5c0 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20  r code gen */.  
1c5d0 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69  TriggerPrg *pTri
1c5e0 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e  ggerPrg;  /* Lin
1c5f0 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65  ked list of code
1c600 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20  d triggers */.  
1c610 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20  With *pWith;    
1c620 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
1c630 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65  rent WITH clause
1c640 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a  , or NULL */.};.
1c650 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72  ./*.** Return tr
1c660 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20  ue if currently 
1c670 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65  inside an sqlite
1c680 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
1c690 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66   call..*/.#ifdef
1c6a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
1c6b0 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66  TUALTABLE.  #def
1c6c0 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56  ine IN_DECLARE_V
1c6d0 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64  TAB 0.#else.  #d
1c6e0 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45  efine IN_DECLARE
1c6f0 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64  _VTAB (pParse->d
1c700 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64  eclareVtab).#end
1c710 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  if../*.** An ins
1c720 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1c730 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1c740 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64   can be declared
1c750 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20   on a stack and 
1c760 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20  used.** to save 
1c770 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43  the Parse.zAuthC
1c780 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20  ontext value so 
1c790 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72  that it can be r
1c7a0 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a  estored later..*
1c7b0 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  /.struct AuthCon
1c7c0 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63  text {.  const c
1c7d0 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78  har *zAuthContex
1c7e0 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65  t;   /* Put save
1c7f0 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e  d Parse.zAuthCon
1c800 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50  text here */.  P
1c810 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
1c820 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1c830 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72  e Parse structur
1c840 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42  e */.};../*.** B
1c850 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f  itfield flags fo
1c860 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61  r P5 value in va
1c870 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a  rious opcodes..*
1c880 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1c890 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30  _NCHANGE       0
1c8a0 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74 6f  x01    /* Set to
1c8b0 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61   update db->nCha
1c8c0 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  nge */.#define O
1c8d0 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20 20  PFLAG_EPHEM     
1c8e0 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
1c8f0 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65  P_Column: Epheme
1c900 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f 6b  ral output is ok
1c910 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1c920 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20  AG_LASTROWID    
1c930 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65 74 20   0x02    /* Set 
1c940 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61  to update db->la
1c950 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  stRowid */.#defi
1c960 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  ne OPFLAG_ISUPDA
1c970 54 45 20 20 20 20 20 20 30 78 30 34 20 20 20 20  TE      0x04    
1c980 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72  /* This OP_Inser
1c990 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41  t is an sql UPDA
1c9a0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  TE */.#define OP
1c9b0 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20  FLAG_APPEND     
1c9c0 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68     0x08    /* Th
1c9d0 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  is is likely to 
1c9e0 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a  be an append */.
1c9f0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55  #define OPFLAG_U
1ca00 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31  SESEEKRESULT 0x1
1ca10 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61  0    /* Try to a
1ca20 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42  void a seek in B
1ca30 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a  treeInsert() */.
1ca40 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c  #define OPFLAG_L
1ca50 45 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34  ENGTHARG     0x4
1ca60 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0    /* OP_Colum
1ca70 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20  n only used for 
1ca80 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66  length() */.#def
1ca90 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ine OPFLAG_TYPEO
1caa0 46 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20  FARG     0x80   
1cab0 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
1cac0 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65  ly used for type
1cad0 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  of() */.#define 
1cae0 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20  OPFLAG_BULKCSR  
1caf0 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
1cb00 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74  OP_Open** used t
1cb10 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73  o open bulk curs
1cb20 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  or */.#define OP
1cb30 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20  FLAG_P2ISREG    
1cb40 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 50 32     0x02    /* P2
1cb50 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73   to OP_Open** is
1cb60 20 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62   a register numb
1cb70 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  er */.#define OP
1cb80 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20  FLAG_PERMUTE    
1cb90 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
1cba0 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68  _Compare: use th
1cbb0 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f  e permutation */
1cbc0 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69  ../*. * Each tri
1cbd0 67 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20  gger present in 
1cbe0 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
1cbf0 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61 73  ema is stored as
1cc00 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a   an instance of.
1cc10 20 2a 20 73 74 72 75 63 74 20 54 72 69 67 67 65   * struct Trigge
1cc20 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65  r. . *. * Pointe
1cc30 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20  rs to instances 
1cc40 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
1cc50 72 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  r are stored in 
1cc60 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20  two ways.. * 1. 
1cc70 49 6e 20 74 68 65 20 22 74 72 69 67 48 61 73 68  In the "trigHash
1cc80 22 20 68 61 73 68 20 74 61 62 6c 65 20 28 70 61  " hash table (pa
1cc90 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  rt of the sqlite
1cca0 33 2a 20 74 68 61 74 20 72 65 70 72 65 73 65 6e  3* that represen
1ccb0 74 73 20 74 68 65 20 0a 20 2a 20 20 20 20 64 61  ts the . *    da
1ccc0 74 61 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c  tabase). This al
1ccd0 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73 74 72  lows Trigger str
1cce0 75 63 74 75 72 65 73 20 74 6f 20 62 65 20 72 65  uctures to be re
1ccf0 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e  trieved by name.
1cd00 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67  . * 2. All trigg
1cd10 65 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ers associated w
1cd20 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62  ith a single tab
1cd30 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64  le form a linked
1cd40 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65   list, using the
1cd50 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d  . *    pNext mem
1cd60 62 65 72 20 6f 66 20 73 74 72 75 63 74 20 54 72  ber of struct Tr
1cd70 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72  igger. A pointer
1cd80 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c   to the first el
1cd90 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20  ement of the. * 
1cda0 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69     linked list i
1cdb0 73 20 73 74 6f 72 65 64 20 61 73 20 74 68 65 20  s stored as the 
1cdc0 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65  "pTrigger" membe
1cdd0 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61  r of the associa
1cde0 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74  ted. *    struct
1cdf0 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68   Table.. *. * Th
1ce00 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65  e "step_list" me
1ce10 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74  mber points to t
1ce20 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
1ce30 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   of a linked lis
1ce40 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20  t. * containing 
1ce50 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
1ce60 74 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ts specified as 
1ce70 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
1ce80 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20  ram.. */.struct 
1ce90 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72  Trigger {.  char
1cea0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
1ceb0 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20      /* The name 
1cec0 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 20 20  of the trigger  
1ced0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cee0 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20        */.  char 
1cef0 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  *table;         
1cf00 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20     /* The table 
1cf10 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68  or view to which
1cf20 20 74 68 65 20 74 72 69 67 67 65 72 20 61 70 70   the trigger app
1cf30 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b  lies */.  u8 op;
1cf40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf50 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44    /* One of TK_D
1cf60 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45  ELETE, TK_UPDATE
1cf70 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20  , TK_INSERT     
1cf80 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74      */.  u8 tr_t
1cf90 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
1cfa0 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47   /* One of TRIGG
1cfb0 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47  ER_BEFORE, TRIGG
1cfc0 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78  ER_AFTER */.  Ex
1cfd0 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20  pr *pWhen;      
1cfe0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
1cff0 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  N clause of the 
1d000 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20  expression (may 
1d010 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64  be NULL) */.  Id
1d020 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20  List *pColumns; 
1d030 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73        /* If this
1d040 20 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46   is an UPDATE OF
1d050 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74   <column-list> t
1d060 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20  rigger,.        
1d070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d080 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e       the <column
1d090 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64  -list> is stored
1d0a0 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d   here */.  Schem
1d0b0 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
1d0c0 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
1d0d0 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67  taining the trig
1d0e0 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ger */.  Schema 
1d0f0 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20  *pTabSchema;    
1d100 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
1d110 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20  ining the table 
1d120 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  */.  TriggerStep
1d130 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20   *step_list; /* 
1d140 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69  Link list of tri
1d150 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65  gger program ste
1d160 70 73 20 20 20 20 20 20 20 20 20 20 20 20 20 2a  ps             *
1d170 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65  /.  Trigger *pNe
1d180 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
1d190 65 78 74 20 74 72 69 67 67 65 72 20 61 73 73 6f  ext trigger asso
1d1a0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
1d1b0 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  table */.};../*.
1d1c0 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69 73 20  ** A trigger is 
1d1d0 65 69 74 68 65 72 20 61 20 42 45 46 4f 52 45 20  either a BEFORE 
1d1e0 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72 69 67  or an AFTER trig
1d1f0 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ger.  The follow
1d200 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a  ing constants.**
1d210 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68   determine which
1d220 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72  . .**.** If ther
1d230 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74  e are multiple t
1d240 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67  riggers, you mig
1d250 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52  ht of some BEFOR
1d260 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52  E and some AFTER
1d270 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73  ..** In that cas
1d280 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74  es, the constant
1d290 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f  s below can be O
1d2a0 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f  Red together..*/
1d2b0 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52  .#define TRIGGER
1d2c0 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69  _BEFORE  1.#defi
1d2d0 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54 45 52  ne TRIGGER_AFTER
1d2e0 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69     2../*. * An i
1d2f0 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63  nstance of struc
1d300 74 20 54 72 69 67 67 65 72 53 74 65 70 20 69 73  t TriggerStep is
1d310 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61   used to store a
1d320 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74   single SQL stat
1d330 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73  ement. * that is
1d340 20 61 20 70 61 72 74 20 6f 66 20 61 20 74 72 69   a part of a tri
1d350 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20  gger-program. . 
1d360 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f  *. * Instances o
1d370 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1d380 53 74 65 70 20 61 72 65 20 73 74 6f 72 65 64 20  Step are stored 
1d390 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b  in a singly link
1d3a0 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a  ed list (linked.
1d3b0 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e   * using the "pN
1d3c0 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66  ext" member) ref
1d3d0 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 22  erenced by the "
1d3e0 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65  step_list" membe
1d3f0 72 20 6f 66 20 74 68 65 20 0a 20 2a 20 61 73 73  r of the . * ass
1d400 6f 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54  ociated struct T
1d410 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e  rigger instance.
1d420 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
1d430 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64  nt of the linked
1d440 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20   list is. * the 
1d450 66 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68  first step of th
1d460 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  e trigger-progra
1d470 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f  m.. * . * The "o
1d480 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61  p" member indica
1d490 74 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73  tes whether this
1d4a0 20 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20   is a "DELETE", 
1d4b0 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54  "INSERT", "UPDAT
1d4c0 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54  E" or. * "SELECT
1d4d0 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65  " statement. The
1d4e0 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65   meanings of the
1d4f0 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69   other members i
1d500 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
1d510 74 68 65 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66  the . * value of
1d520 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73   "op" as follows
1d530 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  :. *. * (op == T
1d540 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63  K_INSERT). * orc
1d550 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73  onf    -> stores
1d560 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
1d570 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53   algorithm. * pS
1d580 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68  elect   -> If th
1d590 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
1d5a0 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20  INTO ... SELECT 
1d5b0 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
1d5c0 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
1d5d0 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
1d5e0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
1d5f0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1d600 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c  t. Otherwise NUL
1d610 4c 2e 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20  L.. * target    
1d620 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69  -> A token holdi
1d630 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61  ng the quoted na
1d640 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
1d650 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a  to insert into..
1d660 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20   * pExprList -> 
1d670 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
1d680 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41  SERT INTO ... VA
1d690 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65  LUES ... stateme
1d6a0 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20  nt, then. *     
1d6b0 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74           this st
1d6c0 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62  ores values to b
1d6d0 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65  e inserted. Othe
1d6e0 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70  rwise NULL.. * p
1d6f0 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74  IdList   -> If t
1d700 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
1d710 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75   INTO ... (<colu
1d720 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45  mn-names>) VALUE
1d730 53 20 2e 2e 2e 20 0a 20 2a 20 20 20 20 20 20 20  S ... . *       
1d740 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
1d750 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72  , then this stor
1d760 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61  es the column-na
1d770 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20  mes to be. *    
1d780 20 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74            insert
1d790 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28  ed into.. *. * (
1d7a0 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29  op == TK_DELETE)
1d7b0 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e  . * target    ->
1d7c0 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67   A token holding
1d7d0 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65   the quoted name
1d7e0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
1d7f0 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a   delete from.. *
1d800 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68   pWhere    -> Th
1d810 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f  e WHERE clause o
1d820 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61  f the DELETE sta
1d830 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73  tement if one is
1d840 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20   specified.. *  
1d850 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65              Othe
1d860 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a  rwise NULL.. * .
1d870 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44   * (op == TK_UPD
1d880 41 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20  ATE). * target  
1d890 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c    -> A token hol
1d8a0 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20  ding the quoted 
1d8b0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
1d8c0 65 20 74 6f 20 75 70 64 61 74 65 20 72 6f 77 73  e to update rows
1d8d0 20 6f 66 2e 0a 20 2a 20 70 57 68 65 72 65 20 20   of.. * pWhere  
1d8e0 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63    -> The WHERE c
1d8f0 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44  lause of the UPD
1d900 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66  ATE statement if
1d910 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65   one is specifie
1d920 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  d.. *           
1d930 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c     Otherwise NUL
1d940 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20  L.. * pExprList 
1d950 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65  -> A list of the
1d960 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61   columns to upda
1d970 74 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65  te and the expre
1d980 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65  ssions to update
1d990 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1d9a0 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71   them to. See sq
1d9b0 6c 69 74 65 33 55 70 64 61 74 65 28 29 20 64 6f  lite3Update() do
1d9c0 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22  cumentation of "
1d9d0 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20  pChanges". *    
1d9e0 20 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65            argume
1d9f0 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75  nt.. * . */.stru
1da00 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 7b  ct TriggerStep {
1da10 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
1da20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
1da30 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f  f TK_DELETE, TK_
1da40 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52  UPDATE, TK_INSER
1da50 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a  T, TK_SELECT */.
1da60 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20    u8 orconf;    
1da70 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c         /* OE_Rol
1da80 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20  lback etc. */.  
1da90 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20  Trigger *pTrig; 
1daa0 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67       /* The trig
1dab0 67 65 72 20 74 68 61 74 20 74 68 69 73 20 73 74  ger that this st
1dac0 65 70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20  ep is a part of 
1dad0 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65  */.  Select *pSe
1dae0 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c  lect;     /* SEL
1daf0 45 43 54 20 73 74 61 74 6d 65 6e 74 20 6f 72 20  ECT statment or 
1db00 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e  RHS of INSERT IN
1db10 54 4f 20 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e  TO .. SELECT ...
1db20 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 74 61 72 67   */.  Token targ
1db30 65 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61  et;        /* Ta
1db40 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44  rget table for D
1db50 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49  ELETE, UPDATE, I
1db60 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20  NSERT */.  Expr 
1db70 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
1db80 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  /* The WHERE cla
1db90 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f  use for DELETE o
1dba0 72 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a  r UPDATE steps *
1dbb0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
1dbc0 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20  xprList; /* SET 
1dbd0 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54  clause for UPDAT
1dbe0 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a  E. */.  IdList *
1dbf0 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20  pIdList;     /* 
1dc00 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72  Column names for
1dc10 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69   INSERT */.  Tri
1dc20 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b  ggerStep *pNext;
1dc30 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65    /* Next in the
1dc40 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20   link-list */.  
1dc50 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61  TriggerStep *pLa
1dc60 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65  st;  /* Last ele
1dc70 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73  ment in link-lis
1dc80 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74  t. Valid for 1st
1dc90 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b   elem only */.};
1dca0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
1dcb0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1dcc0 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
1dcd0 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
1dce0 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a   sqliteFix....**
1dcf0 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65   routines as the
1dd00 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65  y walk the parse
1dd10 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61   tree to make da
1dd20 74 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65  tabase reference
1dd30 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20  s.** explicit.  
1dd40 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
1dd50 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78  ct DbFixer DbFix
1dd60 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78  er;.struct DbFix
1dd70 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  er {.  Parse *pP
1dd80 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68  arse;      /* Th
1dd90 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78  e parsing contex
1dda0 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67  t.  Error messag
1ddb0 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20  es written here 
1ddc0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
1ddd0 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20  hema;    /* Fix 
1dde0 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63  items to this sc
1ddf0 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56  hema */.  int bV
1de00 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a  arOnly;       /*
1de10 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61   Check for varia
1de20 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f  ble references o
1de30 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  nly */.  const c
1de40 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20  har *zDb;    /* 
1de50 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62  Make sure all ob
1de60 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69  jects are contai
1de70 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61  ned in this data
1de80 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  base */.  const 
1de90 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a  char *zType;  /*
1dea0 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e   Type of the con
1deb0 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
1dec0 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
1ded0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65   */.  const Toke
1dee0 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d  n *pName; /* Nam
1def0 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
1df00 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
1df10 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
1df20 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  };../*.** An obj
1df30 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63  ected used to ac
1df40 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78  cumulate the tex
1df50 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68  t of a string wh
1df60 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74  ere we.** do not
1df70 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f   necessarily kno
1df80 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74  w how big the st
1df90 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20  ring will be in 
1dfa0 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
1dfb0 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20  ct StrAccum {.  
1dfc0 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
1dfd0 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c       /* Optional
1dfe0 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f   database for lo
1dff0 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65  okaside.  Can be
1e000 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20   NULL */.  char 
1e010 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20 20  *zBase;         
1e020 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61  /* A base alloca
1e030 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20  tion.  Not from 
1e040 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61  malloc. */.  cha
1e050 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20  r *zText;       
1e060 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20    /* The string 
1e070 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72  collected so far
1e080 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61 72   */.  int  nChar
1e090 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65  ;          /* Le
1e0a0 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69  ngth of the stri
1e0b0 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ng so far */.  i
1e0c0 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  nt  nAlloc;     
1e0d0 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66      /* Amount of
1e0e0 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64   space allocated
1e0f0 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69   in zText */.  i
1e100 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20  nt  mxAlloc;    
1e110 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61      /* Maximum a
1e120 6c 6c 6f 77 65 64 20 73 74 72 69 6e 67 20 6c 65  llowed string le
1e130 6e 67 74 68 20 2a 2f 0a 20 20 75 38 20 20 20 75  ngth */.  u8   u
1e140 73 65 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 2f  seMalloc;      /
1e150 2a 20 30 3a 20 6e 6f 6e 65 2c 20 20 31 3a 20 73  * 0: none,  1: s
1e160 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20  qlite3DbMalloc, 
1e170 20 32 3a 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c   2: sqlite3_mall
1e180 6f 63 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63  oc */.  u8   acc
1e190 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20  Error;       /* 
1e1a0 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f  STRACCUM_NOMEM o
1e1b0 72 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49  r STRACCUM_TOOBI
1e1c0 47 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20  G */.};.#define 
1e1d0 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20  STRACCUM_NOMEM  
1e1e0 20 31 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43   1.#define STRAC
1e1f0 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a 0a 2f  CUM_TOOBIG  2../
1e200 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74  *.** A pointer t
1e210 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
1e220 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d   is used to comm
1e230 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74  unicate informat
1e240 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69  ion.** from sqli
1e250 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50  te3Init and OP_P
1e260 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20  arseSchema into 
1e270 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43  the sqlite3InitC
1e280 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65  allback..*/.type
1e290 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73  def struct {.  s
1e2a0 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
1e2b0 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
1e2c0 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  se being initial
1e2d0 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ized */.  char *
1e2e0 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a  *pzErrMsg;    /*
1e2f0 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   Error message s
1e300 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
1e310 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
1e320 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69      /* 0 for mai
1e330 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20 66  n database.  1 f
1e340 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72  or TEMP, 2.. for
1e350 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69   ATTACHed */.  i
1e360 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
1e370 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64     /* Result cod
1e380 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
1e390 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a  .} InitData;../*
1e3a0 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f  .** Structure co
1e3b0 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20  ntaining global 
1e3c0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61  configuration da
1e3d0 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  ta for the SQLit
1e3e0 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a  e library..**.**
1e3f0 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
1e400 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f  also contains so
1e410 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61  me state informa
1e420 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
1e430 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a  Sqlite3Config {.
1e440 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20    int bMemstat; 
1e450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e460 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
1e470 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61  nable memory sta
1e480 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f  tus */.  int bCo
1e490 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  reMutex;        
1e4a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1e4b0 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72  ue to enable cor
1e4c0 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20  e mutexing */.  
1e4d0 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20  int bFullMutex; 
1e4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4f0 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
1e500 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e  ble full mutexin
1e510 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e  g */.  int bOpen
1e520 55 72 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  Uri;            
1e530 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1e540 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69   to interpret fi
1e550 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20  lenames as URIs 
1e560 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73  */.  int bUseCis
1e570 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e580 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f         /* Use co
1e590 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66  vering indices f
1e5a0 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f  or full-scans */
1e5b0 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b  .  int mxStrlen;
1e5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5d0 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
1e5e0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f  string length */
1e5f0 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72  .  int neverCorr
1e600 75 70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  upt;            
1e610 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65       /* Database
1e620 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d   is always well-
1e630 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20  formed */.  int 
1e640 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  szLookaside;    
1e650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e660 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69   Default lookasi
1e670 64 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a  de buffer size *
1e680 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69  /.  int nLookasi
1e690 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
1e6a0 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
1e6b0 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65   lookaside buffe
1e6c0 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 73 71 6c  r count */.  sql
1e6d0 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
1e6e0 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   m;            /
1e6f0 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f  * Low-level memo
1e700 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e  ry allocation in
1e710 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c  terface */.  sql
1e720 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
1e730 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f  ds mutex;      /
1e740 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65  * Low-level mute
1e750 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  x interface */. 
1e760 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f   sqlite3_pcache_
1e770 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68 65 32  methods2 pcache2
1e780 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20  ;  /* Low-level 
1e790 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72  page-cache inter
1e7a0 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  face */.  void *
1e7b0 70 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20  pHeap;          
1e7c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
1e7d0 65 61 70 20 73 74 6f 72 61 67 65 20 73 70 61 63  eap storage spac
1e7e0 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70  e */.  int nHeap
1e7f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e800 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
1e810 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20   of pHeap[] */. 
1e820 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65   int mnReq, mxRe
1e830 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q;              
1e840 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61     /* Min and ma
1e850 78 20 68 65 61 70 20 72 65 71 75 65 73 74 73 20  x heap requests 
1e860 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74  sizes */.  sqlit
1e870 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b  e3_int64 szMmap;
1e880 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e890 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70 65 72  mmap() space per
1e8a0 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20   open file */.  
1e8b0 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78  sqlite3_int64 mx
1e8c0 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
1e8d0 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c    /* Maximum val
1e8e0 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f  ue for szMmap */
1e8f0 0a 20 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63  .  void *pScratc
1e900 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1e910 20 20 20 20 20 2f 2a 20 53 63 72 61 74 63 68 20       /* Scratch 
1e920 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20  memory */.  int 
1e930 73 7a 53 63 72 61 74 63 68 3b 20 20 20 20 20 20  szScratch;      
1e940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e950 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 73 63   Size of each sc
1e960 72 61 74 63 68 20 62 75 66 66 65 72 20 2a 2f 0a  ratch buffer */.
1e970 20 20 69 6e 74 20 6e 53 63 72 61 74 63 68 3b 20    int nScratch; 
1e980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e990 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1e9a0 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72 73   scratch buffers
1e9b0 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67   */.  void *pPag
1e9c0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1e9d0 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20          /* Page 
1e9e0 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a  cache memory */.
1e9f0 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20    int szPage;   
1ea00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea10 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
1ea20 61 63 68 20 70 61 67 65 20 69 6e 20 70 50 61 67  ach page in pPag
1ea30 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61  e[] */.  int nPa
1ea40 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
1ea50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1ea60 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
1ea70 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e   pPage[] */.  in
1ea80 74 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b  t mxParserStack;
1ea90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eaa0 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68  /* maximum depth
1eab0 20 6f 66 20 74 68 65 20 70 61 72 73 65 72 20 73   of the parser s
1eac0 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68  tack */.  int sh
1ead0 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64  aredCacheEnabled
1eae0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74  ;           /* t
1eaf0 72 75 65 20 69 66 20 73 68 61 72 65 64 2d 63 61  rue if shared-ca
1eb00 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64  che mode enabled
1eb10 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f   */.  /* The abo
1eb20 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74  ve might be init
1eb30 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a  ialized to non-z
1eb40 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ero.  The follow
1eb50 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61  ing need to alwa
1eb60 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c  ys.  ** initiall
1eb70 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76  y be zero, howev
1eb80 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49  er. */.  int isI
1eb90 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
1eba0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1ebb0 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c  ue after initial
1ebc0 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69  ization has fini
1ebd0 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e  shed */.  int in
1ebe0 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20  Progress;       
1ebf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1ec00 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61  rue while initia
1ec10 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67  lization in prog
1ec20 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ress */.  int is
1ec30 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20  MutexInit;      
1ec40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1ec50 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65  rue after mutexe
1ec60 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  s are initialize
1ec70 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c  d */.  int isMal
1ec80 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20  locInit;        
1ec90 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1eca0 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73   after malloc is
1ecb0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
1ecc0 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e    int isPCacheIn
1ecd0 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
1ece0 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
1ecf0 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
1ed00 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
1ed10 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20   nRefInitMutex; 
1ed20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ed30 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72  * Number of user
1ed40 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20  s of pInitMutex 
1ed50 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
1ed60 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20  ex *pInitMutex; 
1ed70 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20         /* Mutex 
1ed80 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
1ed90 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a  initialize() */.
1eda0 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76    void (*xLog)(v
1edb0 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
1edc0 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69  har*); /* Functi
1edd0 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a  on for logging *
1ede0 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72  /.  void *pLogAr
1edf0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
1ee00 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
1ee10 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c  t argument to xL
1ee20 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53  og() */.#ifdef S
1ee30 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c  QLITE_ENABLE_SQL
1ee40 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c  LOG.  void(*xSql
1ee50 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  log)(void*,sqlit
1ee60 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
1ee70 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
1ee80 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69  SqllogArg;.#endi
1ee90 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
1eea0 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20  VDBE_COVERAGE.  
1eeb0 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
1eec0 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f   callback (if no
1eed0 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b  t NULL) is invok
1eee0 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45  ed on every VDBE
1eef0 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65   branch.  ** ope
1ef00 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65  ration.  Set the
1ef10 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20   callback using 
1ef20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
1ef30 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20  VDBE_COVERAGE.. 
1ef40 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64   */.  void (*xVd
1ef50 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c  beBranch)(void*,
1ef60 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75 38 20  int iSrcLine,u8 
1ef70 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20  eThis,u8 eMx);  
1ef80 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  /* Callback */. 
1ef90 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e   void *pVdbeBran
1efa0 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  chArg;          
1efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
1efd0 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65  t argument */.#e
1efe0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
1eff0 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
1f000 5f 54 45 53 54 0a 20 20 69 6e 74 20 28 2a 78 54  _TEST.  int (*xT
1f010 65 73 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74  estCallback)(int
1f020 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 76  );        /* Inv
1f030 6f 6b 65 64 20 62 79 20 73 71 6c 69 74 65 33 46  oked by sqlite3F
1f040 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e  aultSim() */.#en
1f050 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c  dif.  int bLocal
1f060 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20  timeFault;      
1f070 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1f080 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d  to fail localtim
1f090 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a  e() calls */.};.
1f0a0 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72  ./*.** This macr
1f0b0 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65  o is used inside
1f0c0 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74 61   of assert() sta
1f0d0 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63  tements to indic
1f0e0 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ate that.** the 
1f0f0 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76  assert is only v
1f100 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66  alid on a well-f
1f110 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20  ormed database. 
1f120 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a   Instead of:.**.
1f130 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58  **     assert( X
1f140 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72   );.**.** One wr
1f150 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ites:.**.**     
1f160 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52  assert( X || COR
1f170 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a  RUPT_DB );.**.**
1f180 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74   CORRUPT_DB is t
1f190 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61  rue during norma
1f1a0 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f  l operation.  CO
1f1b0 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f  RRUPT_DB does no
1f1c0 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68  t indicate.** th
1f1d0 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  at the database 
1f1e0 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f  is definitely co
1f1f0 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74  rrupt, only that
1f200 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72   it might be cor
1f210 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73  rupt..** For mos
1f220 74 20 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f  t test cases, CO
1f230 52 52 55 50 54 5f 44 42 20 69 73 20 73 65 74 20  RRUPT_DB is set 
1f240 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61  to false using a
1f250 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69   special.** sqli
1f260 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
1f270 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65  ().  This enable
1f280 73 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  s assert() state
1f290 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a  ments to prove.*
1f2a0 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20 61 72  * things that ar
1f2b0 65 20 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f  e always true fo
1f2c0 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61  r well-formed da
1f2d0 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66  tabases..*/.#def
1f2e0 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20  ine CORRUPT_DB  
1f2f0 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e  (sqlite3Config.n
1f300 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a  everCorrupt==0).
1f310 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70  ./*.** Context p
1f320 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f  ointer passed do
1f330 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20 74  wn through the t
1f340 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72  ree-walk..*/.str
1f350 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 69  uct Walker {.  i
1f360 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61  nt (*xExprCallba
1f370 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ck)(Walker*, Exp
1f380 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c  r*);     /* Call
1f390 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73  back for express
1f3a0 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  ions */.  int (*
1f3b0 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29  xSelectCallback)
1f3c0 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a  (Walker*,Select*
1f3d0 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  );  /* Callback 
1f3e0 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20  for SELECTs */. 
1f3f0 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63 74 43   void (*xSelectC
1f400 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65 72  allback2)(Walker
1f410 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65  *,Select*);/* Se
1f420 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f  cond callback fo
1f430 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 50  r SELECTs */.  P
1f440 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
1f450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f460 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73           /* Pars
1f470 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a  er context.  */.
1f480 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74    int walkerDept
1f490 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1f4a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1f4b0 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65 72  umber of subquer
1f4c0 69 65 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ies */.  union {
1f4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4f0 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61     /* Extra data
1f500 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f   for callback */
1f510 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74  .    NameContext
1f520 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20   *pNC;          
1f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f540 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78  /* Naming contex
1f550 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b 20  t */.    int i; 
1f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f580 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
1f590 61 6c 75 65 20 2a 2f 0a 20 20 20 20 53 72 63 4c  alue */.    SrcL
1f5a0 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20  ist *pSrcList;  
1f5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5c0 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63         /* FROM c
1f5d0 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72  lause */.    str
1f5e0 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70 53  uct SrcCount *pS
1f5f0 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20  rcCount;        
1f600 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74          /* Count
1f610 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72  ing column refer
1f620 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 75 3b 0a  ences */.  } u;.
1f630 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64  };../* Forward d
1f640 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69  eclarations */.i
1f650 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
1f660 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  pr(Walker*, Expr
1f670 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1f680 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b  alkExprList(Walk
1f690 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  er*, ExprList*);
1f6a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
1f6b0 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20  Select(Walker*, 
1f6c0 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
1f6d0 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45  lite3WalkSelectE
1f6e0 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  xpr(Walker*, Sel
1f6f0 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
1f700 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d  e3WalkSelectFrom
1f710 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
1f720 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  *);../*.** Retur
1f730 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20  n code from the 
1f740 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69  parse-tree walki
1f750 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e  ng primitives an
1f760 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62  d their.** callb
1f770 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  acks..*/.#define
1f780 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20   WRC_Continue   
1f790 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65   0   /* Continue
1f7a0 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64   down into child
1f7b0 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ren */.#define W
1f7c0 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31  RC_Prune       1
1f7d0 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64     /* Omit child
1f7e0 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65  ren but continue
1f7f0 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67   walking sibling
1f800 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  s */.#define WRC
1f810 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20  _Abort       2  
1f820 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20   /* Abandon the 
1f830 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a  tree walk */../*
1f840 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1f850 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
1f860 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73  e represents a s
1f870 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72  et of one or mor
1f880 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f  e CTEs.** (commo
1f890 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
1f8a0 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62 79 20  ons) created by 
1f8b0 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c  a single WITH cl
1f8c0 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ause..*/.struct 
1f8d0 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74  With {.  int nCt
1f8e0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1f8f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1f900 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68  er of CTEs in th
1f910 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f  e WITH clause */
1f920 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b  .  With *pOuter;
1f930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f940 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67     /* Containing
1f950 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
1f960 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63   NULL */.  struc
1f970 74 20 43 74 65 20 7b 20 20 20 20 20 20 20 20 20  t Cte {         
1f980 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f             /* Fo
1f990 72 20 65 61 63 68 20 43 54 45 20 69 6e 20 74 68  r each CTE in th
1f9a0 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e  e WITH clause...
1f9b0 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  . */.    char *z
1f9c0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
1f9d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
1f9e0 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a   of this CTE */.
1f9f0 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43      ExprList *pC
1fa00 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ols;            
1fa10 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65      /* List of e
1fa20 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e  xplicit column n
1fa30 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ames, or NULL */
1fa40 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
1fa50 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lect;           
1fa60 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69       /* The defi
1fa70 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43  nition of this C
1fa80 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20  TE */.    const 
1fa90 63 68 61 72 20 2a 7a 45 72 72 3b 20 20 20 20 20  char *zErr;     
1faa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72            /* Err
1fab0 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63  or message for c
1fac0 69 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63  ircular referenc
1fad0 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a  es */.  } a[1];.
1fae0 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  };..#ifdef SQLIT
1faf0 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e  E_DEBUG./*.** An
1fb00 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
1fb10 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74   TreeView object
1fb20 20 69 73 20 75 73 65 64 20 66 6f 72 20 70 72 69   is used for pri
1fb30 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e  nting the conten
1fb40 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72  t of.** data str
1fb50 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74  uctures on sqlit
1fb60 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 29 20  e3DebugPrintf() 
1fb70 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b  using a tree-lik
1fb80 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63  e view..*/.struc
1fb90 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69  t TreeView {.  i
1fba0 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt iLevel;      
1fbb0 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
1fbc0 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65  level of the tre
1fbd0 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20  e we are on */. 
1fbe0 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b   u8  bLine[100];
1fbf0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77           /* Draw
1fc00 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c   vertical in col
1fc10 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69  umn i if bLine[i
1fc20 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a  ] is true */.};.
1fc30 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
1fc40 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  _DEBUG */../*.**
1fc50 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f   Assuming zIn po
1fc60 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73  ints to the firs
1fc70 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d  t byte of a UTF-
1fc80 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20  8 character,.** 
1fc90 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70  advance zIn to p
1fca0 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73  oint to the firs
1fcb0 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65  t byte of the ne
1fcc0 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63 74  xt UTF-8 charact
1fcd0 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er..*/.#define S
1fce0 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28  QLITE_SKIP_UTF8(
1fcf0 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20  zIn) {          
1fd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
1fd10 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29    if( (*(zIn++))
1fd20 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20 20  >=0xc0 ){       
1fd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd40 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69         \.    whi
1fd50 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30  le( (*zIn & 0xc0
1fd60 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b  )==0x80 ){ zIn++
1fd70 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20  ; }             
1fd80 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20 20  \.  }           
1fd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdb0 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a           \.}../*
1fdc0 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a  .** The SQLITE_*
1fdd0 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65  _BKPT macros are
1fde0 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f 72   substitutes for
1fdf0 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73   the error codes
1fe00 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d   with.** the sam
1fe10 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f  e name but witho
1fe20 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66  ut the _BKPT suf
1fe30 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72  fix.  These macr
1fe40 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75  os invoke.** rou
1fe50 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72  tines that repor
1fe60 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65  t the line-numbe
1fe70 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65  r on which the e
1fe80 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a  rror originated.
1fe90 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ** using sqlite3
1fea0 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75  _log().  The rou
1feb0 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69  tines also provi
1fec0 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20  de a convenient 
1fed0 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20  place.** to set 
1fee0 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61 6b  a debugger break
1fef0 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71  point..*/.int sq
1ff00 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
1ff10 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
1ff20 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69  te3MisuseError(i
1ff30 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1ff40 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e  CantopenError(in
1ff50 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  t);.#define SQLI
1ff60 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20  TE_CORRUPT_BKPT 
1ff70 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
1ff80 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
1ff90 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53  efine SQLITE_MIS
1ffa0 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  USE_BKPT sqlite3
1ffb0 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49  MisuseError(__LI
1ffc0 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
1ffd0 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b  LITE_CANTOPEN_BK
1ffe0 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70  PT sqlite3Cantop
1fff0 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  enError(__LINE__
20000 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69  ).../*.** FTS4 i
20010 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65  s really an exte
20020 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20  nsion for FTS3. 
20030 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75   It is enabled u
20040 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49  sing the.** SQLI
20050 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d  TE_ENABLE_FTS3 m
20060 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76  acro.  But to av
20070 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65  oid confusion we
20080 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68   also call.** th
20090 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
200a0 46 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65  FTS4 macro to se
200b0 72 76 65 20 61 73 20 61 6e 20 61 6c 69 61 73 20  rve as an alias 
200c0 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  for SQLITE_ENABL
200d0 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64  E_FTS3..*/.#if d
200e0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
200f0 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64  ABLE_FTS4) && !d
20100 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
20110 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66  ABLE_FTS3).# def
20120 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
20130 45 5f 46 54 53 33 0a 23 65 6e 64 69 66 0a 0a 2f  E_FTS3.#endif../
20140 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68  *.** The ctype.h
20150 20 68 65 61 64 65 72 20 69 73 20 6e 65 65 64 65   header is neede
20160 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20  d for non-ASCII 
20170 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20  systems.  It is 
20180 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62  also.** needed b
20190 79 20 46 54 53 33 20 77 68 65 6e 20 46 54 53 33  y FTS3 when FTS3
201a0 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20   is included in 
201b0 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e  the amalgamation
201c0 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
201d0 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20  d(SQLITE_ASCII) 
201e0 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65  || \.    (define
201f0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
20200 46 54 53 33 29 20 26 26 20 64 65 66 69 6e 65 64  FTS3) && defined
20210 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41  (SQLITE_AMALGAMA
20220 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65  TION)).# include
20230 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69   <ctype.h>.#endi
20240 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
20250 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69  lowing macros mi
20260 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61 72 64  mic the standard
20270 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f   library functio
20280 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a  ns toupper(),.**
20290 20 69 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c   isspace(), isal
202a0 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29  num(), isdigit()
202b0 20 61 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c   and isxdigit(),
202c0 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54   respectively. T
202d0 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72  he.** sqlite ver
202e0 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20  sions only work 
202f0 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63  for ASCII charac
20300 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73  ters, regardless
20310 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23   of locale..*/.#
20320 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43  ifdef SQLITE_ASC
20330 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  II.# define sqli
20340 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 28  te3Toupper(x)  (
20350 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79  (x)&~(sqlite3Cty
20360 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
20370 63 68 61 72 29 28 78 29 5d 26 30 78 32 30 29 29  char)(x)]&0x20))
20380 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20390 33 49 73 73 70 61 63 65 28 78 29 20 20 20 28 73  3Isspace(x)   (s
203a0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
203b0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
203c0 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e  )]&0x01).# defin
203d0 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d  e sqlite3Isalnum
203e0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
203f0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
20400 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 36 29   char)(x)]&0x06)
20410 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20420 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 28 73  3Isalpha(x)   (s
20430 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
20440 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
20450 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e  )]&0x02).# defin
20460 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  e sqlite3Isdigit
20470 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
20480 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
20490 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 34 29   char)(x)]&0x04)
204a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
204b0 33 49 73 78 64 69 67 69 74 28 78 29 20 20 28 73  3Isxdigit(x)  (s
204c0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
204d0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
204e0 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e  )]&0x08).# defin
204f0 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  e sqlite3Tolower
20500 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 55 70  (x)   (sqlite3Up
20510 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69  perToLower[(unsi
20520 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a  gned char)(x)]).
20530 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
20540 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29  qlite3Toupper(x)
20550 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69     toupper((unsi
20560 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
20570 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
20580 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70  sspace(x)   issp
20590 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68  ace((unsigned ch
205a0 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
205b0 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28   sqlite3Isalnum(
205c0 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e  x)   isalnum((un
205d0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
205e0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
205f0 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73  3Isalpha(x)   is
20600 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20  alpha((unsigned 
20610 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
20620 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69  ne sqlite3Isdigi
20630 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28  t(x)   isdigit((
20640 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
20650 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
20660 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20  te3Isxdigit(x)  
20670 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e  isxdigit((unsign
20680 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
20690 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c  efine sqlite3Tol
206a0 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65  ower(x)   tolowe
206b0 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
206c0 29 28 78 29 29 0a 23 65 6e 64 69 66 0a 69 6e 74  )(x)).#endif.int
206d0 20 73 71 6c 69 74 65 33 49 73 49 64 43 68 61 72   sqlite3IsIdChar
206e0 28 75 38 29 3b 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74  (u8);../*.** Int
206f0 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70  ernal function p
20700 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 23 64 65  rototypes.*/.#de
20710 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 49  fine sqlite3StrI
20720 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 69  Cmp sqlite3_stri
20730 63 6d 70 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  cmp.int sqlite3S
20740 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68  trlen30(const ch
20750 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71  ar*);.#define sq
20760 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73 71  lite3StrNICmp sq
20770 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a  lite3_strnicmp..
20780 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  int sqlite3Mallo
20790 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69  cInit(void);.voi
207a0 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45  d sqlite3MallocE
207b0 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a  nd(void);.void *
207c0 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36  sqlite3Malloc(u6
207d0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
207e0 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29  3MallocZero(u64)
207f0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
20800 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69  bMallocZero(sqli
20810 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  te3*, u64);.void
20820 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
20830 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20 75  cRaw(sqlite3*, u
20840 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  64);.char *sqlit
20850 65 33 44 62 53 74 72 44 75 70 28 73 71 6c 69 74  e3DbStrDup(sqlit
20860 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
20870 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
20880 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33  bStrNDup(sqlite3
20890 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75  *,const char*, u
208a0 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
208b0 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c  e3Realloc(void*,
208c0 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
208d0 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46  ite3DbReallocOrF
208e0 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  ree(sqlite3 *, v
208f0 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  oid *, u64);.voi
20900 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
20910 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  loc(sqlite3 *, v
20920 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  oid *, u64);.voi
20930 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  d sqlite3DbFree(
20940 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
20950 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c  ;.int sqlite3Mal
20960 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a  locSize(void*);.
20970 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  int sqlite3DbMal
20980 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a  locSize(sqlite3*
20990 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a  , void*);.void *
209a0 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 4d 61  sqlite3ScratchMa
209b0 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20  lloc(int);.void 
209c0 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 46 72  sqlite3ScratchFr
209d0 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
209e0 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c  *sqlite3PageMall
209f0 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  oc(int);.void sq
20a00 6c 69 74 65 33 50 61 67 65 46 72 65 65 28 76 6f  lite3PageFree(vo
20a10 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
20a20 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28  e3MemSetDefault(
20a30 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
20a40 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48  te3BenignMallocH
20a50 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f  ooks(void (*)(vo
20a60 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f  id), void (*)(vo
20a70 69 64 29 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id));.int sqlite
20a80 33 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28  3HeapNearlyFull(
20a90 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e  void);../*.** On
20aa0 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d   systems with am
20ab0 70 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65 20  ple stack space 
20ac0 61 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72 74  and that support
20ad0 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a   alloca(), make.
20ae0 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61  ** use of alloca
20af0 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61  () to obtain spa
20b00 63 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74  ce for large aut
20b10 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20  omatic objects. 
20b20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20   By default,.** 
20b30 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f  obtain space fro
20b40 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a  m malloc()..**.*
20b50 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72  * The alloca() r
20b60 6f 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74  outine never ret
20b70 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73  urns NULL.  This
20b80 20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65   will cause code
20b90 20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64   paths.** that d
20ba0 65 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33  eal with sqlite3
20bb0 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69  StackAlloc() fai
20bc0 6c 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65  lures to be unre
20bd0 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64  achable..*/.#ifd
20be0 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c  ef SQLITE_USE_AL
20bf0 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71  LOCA.# define sq
20c00 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52  lite3StackAllocR
20c10 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61  aw(D,N)   alloca
20c20 28 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (N).# define sql
20c30 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65  ite3StackAllocZe
20c40 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28  ro(D,N)  memset(
20c50 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29  alloca(N), 0, N)
20c60 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20c70 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20  3StackFree(D,P) 
20c80 20 20 20 20 20 20 0a 23 65 6c 73 65 0a 23 20 64        .#else.# d
20c90 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
20ca0 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
20cb0 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f    sqlite3DbMallo
20cc0 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69  cRaw(D,N).# defi
20cd0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
20ce0 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73  llocZero(D,N)  s
20cf0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
20d00 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65  ro(D,N).# define
20d10 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
20d20 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c  e(D,P)       sql
20d30 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a  ite3DbFree(D,P).
20d40 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
20d50 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
20d60 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74  SYS3.const sqlit
20d70 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a  e3_mem_methods *
20d80 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d  sqlite3MemGetMem
20d90 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64  sys3(void);.#end
20da0 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
20db0 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a  _ENABLE_MEMSYS5.
20dc0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65  const sqlite3_me
20dd0 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74  m_methods *sqlit
20de0 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28  e3MemGetMemsys5(
20df0 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a  void);.#endif...
20e00 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  #ifndef SQLITE_M
20e10 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69  UTEX_OMIT.  sqli
20e20 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
20e30 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
20e40 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69  DefaultMutex(voi
20e50 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  d);.  sqlite3_mu
20e60 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73  tex_methods cons
20e70 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75  t *sqlite3NoopMu
20e80 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c  tex(void);.  sql
20e90 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
20ea0 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e  te3MutexAlloc(in
20eb0 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
20ec0 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29  3MutexInit(void)
20ed0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
20ee0 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23  utexEnd(void);.#
20ef0 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74  endif..int sqlit
20f00 65 33 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e  e3StatusValue(in
20f10 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
20f20 53 74 61 74 75 73 41 64 64 28 69 6e 74 2c 20 69  StatusAdd(int, i
20f30 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
20f40 33 53 74 61 74 75 73 53 65 74 28 69 6e 74 2c 20  3StatusSet(int, 
20f50 69 6e 74 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  int);..#ifndef S
20f60 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
20f70 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20  ING_POINT.  int 
20f80 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75  sqlite3IsNaN(dou
20f90 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ble);.#else.# de
20fa0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61  fine sqlite3IsNa
20fb0 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a  N(X)  0.#endif..
20fc0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
20fd0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
20fe0 6e 67 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  ng structure hol
20ff0 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ds information a
21000 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63  bout SQL.** func
21010 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73 20  tions arguments 
21020 74 68 61 74 20 61 72 65 20 74 68 65 20 70 61 72  that are the par
21030 61 6d 65 74 65 72 73 20 74 6f 20 74 68 65 20 70  ameters to the p
21040 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e  rintf() function
21050 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72 69 6e  ..*/.struct Prin
21060 74 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20  tfArguments {.  
21070 69 6e 74 20 6e 41 72 67 3b 20 20 20 20 20 20 20  int nArg;       
21080 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61           /* Tota
21090 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  l number of argu
210a0 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  ments */.  int n
210b0 55 73 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  Used;           
210c0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
210d0 20 61 72 67 75 6d 65 6e 74 73 20 75 73 65 64 20   arguments used 
210e0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69  so far */.  sqli
210f0 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72  te3_value **apAr
21100 67 3b 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75  g;   /* The argu
21110 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d  ment values */.}
21120 3b 0a 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  ;..#define SQLIT
21130 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41  E_PRINTF_INTERNA
21140 4c 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20 53  L 0x01.#define S
21150 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c  QLITE_PRINTF_SQL
21160 46 55 4e 43 20 20 30 78 30 32 0a 76 6f 69 64 20  FUNC  0x02.void 
21170 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28  sqlite3VXPrintf(
21180 53 74 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20  StrAccum*, u32, 
21190 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f  const char*, va_
211a0 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  list);.void sqli
211b0 74 65 33 58 50 72 69 6e 74 66 28 53 74 72 41 63  te3XPrintf(StrAc
211c0 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74  cum*, u32, const
211d0 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68   char*, ...);.ch
211e0 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e  ar *sqlite3MPrin
211f0 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  tf(sqlite3*,cons
21200 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63  t char*, ...);.c
21210 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72  har *sqlite3VMPr
21220 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f  intf(sqlite3*,co
21230 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69  nst char*, va_li
21240 73 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  st);.char *sqlit
21250 65 33 4d 41 70 70 65 6e 64 66 28 73 71 6c 69 74  e3MAppendf(sqlit
21260 65 33 2a 2c 63 68 61 72 2a 2c 63 6f 6e 73 74 20  e3*,char*,const 
21270 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 69 66 20  char*,...);.#if 
21280 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
21290 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  EST) || defined(
212a0 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20  SQLITE_DEBUG).  
212b0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75  void sqlite3Debu
212c0 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68  gPrintf(const ch
212d0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69  ar*, ...);.#endi
212e0 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
212f0 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69  LITE_TEST).  voi
21300 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65  d *sqlite3TestTe
21310 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68  xtToPtr(const ch
21320 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
21330 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
21340 5f 44 45 42 55 47 29 0a 20 20 54 72 65 65 56 69  _DEBUG).  TreeVi
21350 65 77 20 2a 73 71 6c 69 74 65 33 54 72 65 65 56  ew *sqlite3TreeV
21360 69 65 77 50 75 73 68 28 54 72 65 65 56 69 65 77  iewPush(TreeView
21370 2a 2c 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71  *,u8);.  void sq
21380 6c 69 74 65 33 54 72 65 65 56 69 65 77 50 6f 70  lite3TreeViewPop
21390 28 54 72 65 65 56 69 65 77 2a 29 3b 0a 20 20 76  (TreeView*);.  v
213a0 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
213b0 69 65 77 4c 69 6e 65 28 54 72 65 65 56 69 65 77  iewLine(TreeView
213c0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
213d0 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ...);.  void sql
213e0 69 74 65 33 54 72 65 65 56 69 65 77 49 74 65 6d  ite3TreeViewItem
213f0 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
21400 74 20 63 68 61 72 2a 2c 20 75 38 29 3b 0a 20 20  t char*, u8);.  
21410 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
21420 56 69 65 77 45 78 70 72 28 54 72 65 65 56 69 65  ViewExpr(TreeVie
21430 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c  w*, const Expr*,
21440 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c   u8);.  void sql
21450 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72  ite3TreeViewExpr
21460 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20  List(TreeView*, 
21470 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c  const ExprList*,
21480 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a   u8, const char*
21490 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
214a0 33 54 72 65 65 56 69 65 77 53 65 6c 65 63 74 28  3TreeViewSelect(
214b0 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
214c0 20 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 23   Select*, u8);.#
214d0 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c  endif...void sql
214e0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 63 68  ite3SetString(ch
214f0 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c  ar **, sqlite3*,
21500 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
21510 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .);.void sqlite3
21520 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c  ErrorMsg(Parse*,
21530 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
21540 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  .);.int sqlite3D
21550 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 69  equote(char*);.i
21560 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72  nt sqlite3Keywor
21570 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69  dCode(const unsi
21580 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29  gned char*, int)
21590 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e  ;.int sqlite3Run
215a0 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63  Parser(Parse*, c
215b0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72  onst char*, char
215c0 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   **);.void sqlit
215d0 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50  e3FinishCoding(P
215e0 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
215f0 74 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61  te3GetTempReg(Pa
21600 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
21610 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65  te3ReleaseTempRe
21620 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69  g(Parse*,int);.i
21630 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
21640 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  pRange(Parse*,in
21650 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21660 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65  ReleaseTempRange
21670 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29  (Parse*,int,int)
21680 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c  ;.void sqlite3Cl
21690 65 61 72 54 65 6d 70 52 65 67 43 61 63 68 65 28  earTempRegCache(
216a0 50 61 72 73 65 2a 29 3b 0a 45 78 70 72 20 2a 73  Parse*);.Expr *s
216b0 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28  qlite3ExprAlloc(
216c0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
216d0 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  st Token*,int);.
216e0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
216f0 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  r(sqlite3*,int,c
21700 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
21710 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 74 74  d sqlite3ExprAtt
21720 61 63 68 53 75 62 74 72 65 65 73 28 73 71 6c 69  achSubtrees(sqli
21730 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  te3*,Expr*,Expr*
21740 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73  ,Expr*);.Expr *s
21750 71 6c 69 74 65 33 50 45 78 70 72 28 50 61 72 73  qlite3PExpr(Pars
21760 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20  e*, int, Expr*, 
21770 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  Expr*, const Tok
21780 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  en*);.Expr *sqli
21790 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74  te3ExprAnd(sqlit
217a0 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a  e3*,Expr*, Expr*
217b0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
217c0 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72  ExprFunction(Par
217d0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54  se*,ExprList*, T
217e0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
217f0 69 74 65 33 45 78 70 72 41 73 73 69 67 6e 56 61  ite3ExprAssignVa
21800 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20  rNumber(Parse*, 
21810 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
21820 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73  ite3ExprDelete(s
21830 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b  qlite3*, Expr*);
21840 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
21850 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64  e3ExprListAppend
21860 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
21870 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  *,Expr*);.void s
21880 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65  qlite3ExprListSe
21890 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70  tName(Parse*,Exp
218a0 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  rList*,Token*,in
218b0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
218c0 45 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28  ExprListSetSpan(
218d0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
218e0 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69  ,ExprSpan*);.voi
218f0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
21900 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
21910 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
21920 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71  t sqlite3Init(sq
21930 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b  lite3*, char**);
21940 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
21950 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20  Callback(void*, 
21960 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61  int, char**, cha
21970 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r**);.void sqlit
21980 65 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c  e3Pragma(Parse*,
21990 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
219a0 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ken*,int);.void 
219b0 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53  sqlite3ResetAllS
219c0 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69  chemasOfConnecti
219d0 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  on(sqlite3*);.vo
219e0 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f  id sqlite3ResetO
219f0 6e 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33  neSchema(sqlite3
21a00 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
21a10 69 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61  ite3CollapseData
21a20 62 61 73 65 41 72 72 61 79 28 73 71 6c 69 74 65  baseArray(sqlite
21a30 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
21a40 33 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73  3BeginParse(Pars
21a50 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
21a60 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72  lite3CommitInter
21a70 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74  nalChanges(sqlit
21a80 65 33 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  e3*);.Table *sql
21a90 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53  ite3ResultSetOfS
21aa0 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c  elect(Parse*,Sel
21ab0 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ect*);.void sqli
21ac0 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62  te3OpenMasterTab
21ad0 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29  le(Parse *, int)
21ae0 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
21af0 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28  PrimaryKeyIndex(
21b00 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c  Table*);.i16 sql
21b10 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65  ite3ColumnOfInde
21b20 78 28 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a  x(Index*, i16);.
21b30 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 72  void sqlite3Star
21b40 74 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f  tTable(Parse*,To
21b50 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c  ken*,Token*,int,
21b60 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f  int,int,int);.vo
21b70 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
21b80 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  umn(Parse*,Token
21b90 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21ba0 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65  AddNotNull(Parse
21bb0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
21bc0 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b  lite3AddPrimaryK
21bd0 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  ey(Parse*, ExprL
21be0 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ist*, int, int, 
21bf0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21c00 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72  e3AddCheckConstr
21c10 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70  aint(Parse*, Exp
21c20 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
21c30 33 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50  3AddColumnType(P
21c40 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76  arse*,Token*);.v
21c50 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 44 65  oid sqlite3AddDe
21c60 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65  faultValue(Parse
21c70 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f  *,ExprSpan*);.vo
21c80 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
21c90 6c 61 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c  lateType(Parse*,
21ca0 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
21cb0 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50  qlite3EndTable(P
21cc0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
21cd0 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b  en*,u8,Select*);
21ce0 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73  .int sqlite3Pars
21cf0 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a  eUri(const char*
21d00 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73  ,const char*,uns
21d10 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20  igned int*,.    
21d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d30 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68  sqlite3_vfs**,ch
21d40 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42  ar**,char **);.B
21d50 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e  tree *sqlite3DbN
21d60 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74  ameToBtree(sqlit
21d70 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
21d80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64  ;.int sqlite3Cod
21d90 65 4f 6e 63 65 28 50 61 72 73 65 20 2a 29 3b 0a  eOnce(Parse *);.
21da0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
21db0 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
21dc0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
21dd0 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c  3FaultSim(X) SQL
21de0 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69  ITE_OK.#else.  i
21df0 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  nt sqlite3FaultS
21e00 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  im(int);.#endif.
21e10 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33  .Bitvec *sqlite3
21e20 42 69 74 76 65 63 43 72 65 61 74 65 28 75 33 32  BitvecCreate(u32
21e30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
21e40 74 76 65 63 54 65 73 74 28 42 69 74 76 65 63 2a  tvecTest(Bitvec*
21e50 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  , u32);.int sqli
21e60 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74  te3BitvecSet(Bit
21e70 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64  vec*, u32);.void
21e80 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c   sqlite3BitvecCl
21e90 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32  ear(Bitvec*, u32
21ea0 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  , void*);.void s
21eb0 71 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74  qlite3BitvecDest
21ec0 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33  roy(Bitvec*);.u3
21ed0 32 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  2 sqlite3BitvecS
21ee0 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 69 6e  ize(Bitvec*);.in
21ef0 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42  t sqlite3BitvecB
21f00 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69  uiltinTest(int,i
21f10 6e 74 2a 29 3b 0a 0a 52 6f 77 53 65 74 20 2a 73  nt*);..RowSet *s
21f20 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74  qlite3RowSetInit
21f30 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
21f40 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b  , unsigned int);
21f50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
21f60 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a  SetClear(RowSet*
21f70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
21f80 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53  owSetInsert(RowS
21f90 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  et*, i64);.int s
21fa0 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
21fb0 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42  (RowSet*, int iB
21fc0 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20  atch, i64);.int 
21fd0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78  sqlite3RowSetNex
21fe0 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29  t(RowSet*, i64*)
21ff0 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  ;..void sqlite3C
22000 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a  reateView(Parse*
22010 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54  ,Token*,Token*,T
22020 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e  oken*,Select*,in
22030 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65  t,int);..#if !de
22040 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
22050 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69  T_VIEW) || !defi
22060 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
22070 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20  VIRTUALTABLE).  
22080 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47  int sqlite3ViewG
22090 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61  etColumnNames(Pa
220a0 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65  rse*,Table*);.#e
220b0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
220c0 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
220d0 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65  nNames(A,B) 0.#e
220e0 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45  ndif..#if SQLITE
220f0 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30  _MAX_ATTACHED>30
22100 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62  .  int sqlite3Db
22110 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d  MaskAllZero(yDbM
22120 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ask);.#endif.voi
22130 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62  d sqlite3DropTab
22140 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
22150 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
22160 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
22170 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
22180 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
22190 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
221a0 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c  3DeleteTable(sql
221b0 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ite3*, Table*);.
221c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
221d0 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
221e0 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
221f0 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
22200 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  in(Parse *pParse
22210 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
22220 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e  3AutoincrementEn
22230 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  d(Parse *pParse)
22240 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
22250 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
22260 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20  ementBegin(X).# 
22270 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
22280 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58  toincrementEnd(X
22290 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
222a0 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61 72 73  lite3Insert(Pars
222b0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65  e*, SrcList*, Se
222c0 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  lect*, IdList*, 
222d0 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
222e0 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65  te3ArrayAllocate
222f0 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c  (sqlite3*,void*,
22300 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a  int,int*,int*);.
22310 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49  IdList *sqlite3I
22320 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69  dListAppend(sqli
22330 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54  te3*, IdList*, T
22340 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
22350 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49  te3IdListIndex(I
22360 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  dList*,const cha
22370 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  r*);.SrcList *sq
22380 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61  lite3SrcListEnla
22390 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  rge(sqlite3*, Sr
223a0 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
223b0 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
223c0 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
223d0 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
223e0 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
223f0 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  en*);.SrcList *s
22400 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
22410 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73  endFromTerm(Pars
22420 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
22430 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20  ken*, Token*,.  
22440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22460 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65      Token*, Sele
22470 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69  ct*, Expr*, IdLi
22480 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
22490 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64  e3SrcListIndexed
224a0 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  By(Parse *, SrcL
224b0 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  ist *, Token *);
224c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65  .int sqlite3Inde
224d0 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73  xedByLookup(Pars
224e0 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c  e *, struct SrcL
224f0 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69  ist_item *);.voi
22500 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
22510 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72  ShiftJoinType(Sr
22520 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
22530 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69  lite3SrcListAssi
22540 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a  gnCursors(Parse*
22550 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  , SrcList*);.voi
22560 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44  d sqlite3IdListD
22570 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
22580 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  IdList*);.void s
22590 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c  qlite3SrcListDel
225a0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  ete(sqlite3*, Sr
225b0 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a  cList*);.Index *
225c0 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49  sqlite3AllocateI
225d0 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74  ndexObject(sqlit
225e0 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72  e3*,i16,int,char
225f0 2a 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  **);.Index *sqli
22600 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50  te3CreateIndex(P
22610 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
22620 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  en*,SrcList*,Exp
22630 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e  rList*,int,Token
22640 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
22650 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
22660 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
22670 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49  oid sqlite3DropI
22680 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63  ndex(Parse*, Src
22690 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  List*, int);.int
226a0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50   sqlite3Select(P
226b0 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
226c0 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65  SelectDest*);.Se
226d0 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c  lect *sqlite3Sel
226e0 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78  ectNew(Parse*,Ex
226f0 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a  prList*,SrcList*
22700 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
22710 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
22720 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a             Expr*
22730 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45  ,ExprList*,u16,E
22740 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69  xpr*,Expr*);.voi
22750 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
22760 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
22770 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20  Select*);.Table 
22780 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c  *sqlite3SrcListL
22790 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72  ookup(Parse*, Sr
227a0 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
227b0 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50  ite3IsReadOnly(P
227c0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
227d0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
227e0 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65  3OpenTable(Parse
227f0 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74  *, int iCur, int
22800 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e   iDb, Table*, in
22810 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  t);.#if defined(
22820 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50  SQLITE_ENABLE_UP
22830 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49  DATE_DELETE_LIMI
22840 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
22850 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55  QLITE_OMIT_SUBQU
22860 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74  ERY).Expr *sqlit
22870 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72  e3LimitWhere(Par
22880 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  se*,SrcList*,Exp
22890 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
228a0 72 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b  r*,Expr*,char*);
228b0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
228c0 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50  ite3DeleteFrom(P
228d0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
228e0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
228f0 6c 69 74 65 33 55 70 64 61 74 65 28 50 61 72 73  lite3Update(Pars
22900 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
22910 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  prList*, Expr*, 
22920 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20  int);.WhereInfo 
22930 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67  *sqlite3WhereBeg
22940 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73  in(Parse*,SrcLis
22950 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
22960 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36  t*,ExprList*,u16
22970 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
22980 74 65 33 57 68 65 72 65 45 6e 64 28 57 68 65 72  te3WhereEnd(Wher
22990 65 49 6e 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c  eInfo*);.u64 sql
229a0 69 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52  ite3WhereOutputR
229b0 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66  owCount(WhereInf
229c0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
229d0 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28  WhereIsDistinct(
229e0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
229f0 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f   sqlite3WhereIsO
22a00 72 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f  rdered(WhereInfo
22a10 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
22a20 68 65 72 65 49 73 53 6f 72 74 65 64 28 57 68 65  hereIsSorted(Whe
22a30 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
22a40 6c 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e  lite3WhereContin
22a50 75 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  ueLabel(WhereInf
22a60 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
22a70 57 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28  WhereBreakLabel(
22a80 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
22a90 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f   sqlite3WhereOkO
22aa0 6e 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f  nePass(WhereInfo
22ab0 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
22ac0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
22ad0 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54  Column(Parse*, T
22ae0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
22af0 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20   int, u8);.void 
22b00 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
22b10 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28  etColumnOfTable(
22b20 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  Vdbe*, Table*, i
22b30 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
22b40 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
22b50 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20  odeMove(Parse*, 
22b60 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
22b70 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
22b80 43 61 63 68 65 53 74 6f 72 65 28 50 61 72 73 65  CacheStore(Parse
22b90 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
22ba0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
22bb0 78 70 72 43 61 63 68 65 50 75 73 68 28 50 61 72  xprCachePush(Par
22bc0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
22bd0 65 33 45 78 70 72 43 61 63 68 65 50 6f 70 28 50  e3ExprCachePop(P
22be0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
22bf0 69 74 65 33 45 78 70 72 43 61 63 68 65 52 65 6d  ite3ExprCacheRem
22c00 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ove(Parse*, int,
22c10 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
22c20 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61  te3ExprCacheClea
22c30 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  r(Parse*);.void 
22c40 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
22c50 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50  AffinityChange(P
22c60 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
22c70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
22c80 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45  prCode(Parse*, E
22c90 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
22ca0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
22cb0 46 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65  Factorable(Parse
22cc0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
22cd0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
22ce0 43 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65  CodeAtInit(Parse
22cf0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75  *, Expr*, int, u
22d00 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  8);.int sqlite3E
22d10 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73  xprCodeTemp(Pars
22d20 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29  e*, Expr*, int*)
22d30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
22d40 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73  rCodeTarget(Pars
22d50 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
22d60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
22d70 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61  rCodeAndCache(Pa
22d80 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
22d90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
22da0 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50  prCodeExprList(P
22db0 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
22dc0 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66  , int, u8);.#def
22dd0 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
22de0 44 55 50 20 20 20 20 20 20 30 78 30 31 20 20 2f  DUP      0x01  /
22df0 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c  * Deep, not shal
22e00 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64  low copies */.#d
22e10 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
22e20 4c 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32 20  L_FACTOR   0x02 
22e30 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63   /* Factor out c
22e40 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f  onstant terms */
22e50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
22e60 72 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20  rIfTrue(Parse*, 
22e70 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
22e80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
22e90 70 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a  prIfFalse(Parse*
22ea0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
22eb0 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  t);.Table *sqlit
22ec0 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69  e3FindTable(sqli
22ed0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
22ee0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
22ef0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f  Table *sqlite3Lo
22f00 63 61 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a  cateTable(Parse*
22f10 2c 69 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e 73  ,int isView,cons
22f20 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
22f30 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  har*);.Table *sq
22f40 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
22f50 49 74 65 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20  Item(Parse*,int 
22f60 69 73 56 69 65 77 2c 73 74 72 75 63 74 20 53 72  isView,struct Sr
22f70 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49  cList_item *);.I
22f80 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e  ndex *sqlite3Fin
22f90 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  dIndex(sqlite3*,
22fa0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
22fb0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
22fc0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
22fd0 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
22fe0 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
22ff0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
23000 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
23010 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a  teIndex(sqlite3*
23020 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
23030 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
23040 61 63 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69  acuum(Parse*);.i
23050 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63  nt sqlite3RunVac
23060 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69  uum(char**, sqli
23070 74 65 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  te3*);.char *sql
23080 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65  ite3NameFromToke
23090 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65  n(sqlite3*, Toke
230a0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
230b0 45 78 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72  ExprCompare(Expr
230c0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
230d0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c  int sqlite3ExprL
230e0 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c  istCompare(ExprL
230f0 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
23100 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
23110 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70  e3ExprImpliesExp
23120 72 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  r(Expr*, Expr*, 
23130 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
23140 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67  e3ExprAnalyzeAgg
23150 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74  regates(NameCont
23160 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ext*, Expr*);.vo
23170 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e  id sqlite3ExprAn
23180 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d  alyzeAggList(Nam
23190 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69  eContext*,ExprLi
231a0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
231b0 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69  3FunctionUsesThi
231c0 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c  sSrc(Expr*, SrcL
231d0 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c  ist*);.Vdbe *sql
231e0 69 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73  ite3GetVdbe(Pars
231f0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
23200 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76  3PrngSaveState(v
23210 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
23220 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61  e3PrngRestoreSta
23230 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  te(void);.void s
23240 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
23250 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  l(sqlite3*,int);
23260 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
23270 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61  eVerifySchema(Pa
23280 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
23290 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
232a0 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61  fyNamedSchema(Pa
232b0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
232c0 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c   *zDb);.void sql
232d0 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63  ite3BeginTransac
232e0 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
232f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
23300 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f 6e  ommitTransaction
23310 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
23320 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72  qlite3RollbackTr
23330 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a  ansaction(Parse*
23340 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
23350 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c  avepoint(Parse*,
23360 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76   int, Token*);.v
23370 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
23380 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74  Savepoints(sqlit
23390 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e3 *);.void sqli
233a0 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64  te3LeaveMutexAnd
233b0 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69  CloseZombie(sqli
233c0 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
233d0 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
233e0 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
233f0 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
23400 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29  ntNotJoin(Expr*)
23410 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
23420 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e  rIsConstantOrFun
23430 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29  ction(Expr*, u8)
23440 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
23450 72 49 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a  rIsInteger(Expr*
23460 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
23470 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c  ite3ExprCanBeNul
23480 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a  l(const Expr*);.
23490 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4e  int sqlite3ExprN
234a0 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43 68  eedsNoAffinityCh
234b0 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72 2a  ange(const Expr*
234c0 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c  , char);.int sql
234d0 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73  ite3IsRowid(cons
234e0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
234f0 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f  qlite3GenerateRo
23500 77 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 54  wDelete(Parse*,T
23510 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69  able*,Trigger*,i
23520 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75  nt,int,int,i16,u
23530 38 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73  8,u8,u8);.void s
23540 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f  qlite3GenerateRo
23550 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72  wIndexDelete(Par
23560 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
23570 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69 6e  , int, int*);.in
23580 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  t sqlite3Generat
23590 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a  eIndexKey(Parse*
235a0 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69  , Index*, int, i
235b0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e  nt, int, int*,In
235c0 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  dex*,int);.void 
235d0 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61  sqlite3ResolvePa
235e0 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65  rtIdxLabel(Parse
235f0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
23600 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73  ite3GenerateCons
23610 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72  traintChecks(Par
23620 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c  se*,Table*,int*,
23630 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  int,int,int,int,
23640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23660 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c        u8,u8,int,
23670 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  int*);.void sqli
23680 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72  te3CompleteInser
23690 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c  tion(Parse*,Tabl
236a0 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  e*,int,int,int,i
236b0 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29  nt*,int,int,int)
236c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65  ;.int sqlite3Ope
236d0 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73  nTableAndIndices
236e0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
236f0 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2a 2c 20   int, int, u8*, 
23700 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69  int*, int*);.voi
23710 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72  d sqlite3BeginWr
23720 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72  iteOperation(Par
23730 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
23740 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c 74  void sqlite3Mult
23750 69 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b 0a  iWrite(Parse*);.
23760 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79 41  void sqlite3MayA
23770 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f  bort(Parse*);.vo
23780 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43 6f  id sqlite3HaltCo
23790 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
237a0 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a   int, int, char*
237b0 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20  , i8, u8);.void 
237c0 73 71 6c 69 74 65 33 55 6e 69 71 75 65 43 6f 6e  sqlite3UniqueCon
237d0 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
237e0 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f  int, Index*);.vo
237f0 69 64 20 73 71 6c 69 74 65 33 52 6f 77 69 64 43  id sqlite3RowidC
23800 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
23810 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a  , int, Table*);.
23820 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
23830 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78  rDup(sqlite3*,Ex
23840 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69  pr*,int);.ExprLi
23850 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
23860 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
23870 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  ExprList*,int);.
23880 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
23890 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74  SrcListDup(sqlit
238a0 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74  e3*,SrcList*,int
238b0 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74  );.IdList *sqlit
238c0 65 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69  e3IdListDup(sqli
238d0 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53  te3*,IdList*);.S
238e0 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65  elect *sqlite3Se
238f0 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a  lectDup(sqlite3*
23900 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 23  ,Select*,int);.#
23910 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45  if SELECTTRACE_E
23920 4e 41 42 4c 45 44 0a 76 6f 69 64 20 73 71 6c 69  NABLED.void sqli
23930 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65  te3SelectSetName
23940 28 53 65 6c 65 63 74 2a 2c 63 6f 6e 73 74 20 63  (Select*,const c
23950 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  har*);.#else.# d
23960 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c  efine sqlite3Sel
23970 65 63 74 53 65 74 4e 61 6d 65 28 41 2c 42 29 0a  ectSetName(A,B).
23980 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
23990 74 65 33 46 75 6e 63 44 65 66 49 6e 73 65 72 74  te3FuncDefInsert
239a0 28 46 75 6e 63 44 65 66 48 61 73 68 2a 2c 20 46  (FuncDefHash*, F
239b0 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63 44 65  uncDef*);.FuncDe
239c0 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75  f *sqlite3FindFu
239d0 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c  nction(sqlite3*,
239e0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c  const char*,int,
239f0 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64  int,u8,u8);.void
23a00 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
23a10 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
23a20 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
23a30 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
23a40 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e  DateTimeFunction
23a50 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
23a60 6c 69 74 65 33 52 65 67 69 73 74 65 72 47 6c 6f  lite3RegisterGlo
23a70 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  balFunctions(voi
23a80 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  d);.int sqlite3S
23a90 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c  afetyCheckOk(sql
23aa0 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
23ab0 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53 69  te3SafetyCheckSi
23ac0 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29  ckOrOk(sqlite3*)
23ad0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68  ;.void sqlite3Ch
23ae0 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65  angeCookie(Parse
23af0 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64  *, int);..#if !d
23b00 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
23b10 49 54 5f 56 49 45 57 29 20 26 26 20 21 64 65 66  IT_VIEW) && !def
23b20 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
23b30 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73  _TRIGGER).void s
23b40 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a  qlite3Materializ
23b50 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61  eView(Parse*, Ta
23b60 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ble*, Expr*, int
23b70 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  );.#endif..#ifnd
23b80 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
23b90 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71  RIGGER.  void sq
23ba0 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67 67 65  lite3BeginTrigge
23bb0 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  r(Parse*, Token*
23bc0 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Token*,int,int,
23bd0 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a  IdList*,SrcList*
23be0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
23bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
23c00 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  r*,int, int);.  
23c10 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
23c20 73 68 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  shTrigger(Parse*
23c30 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20  , TriggerStep*, 
23c40 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20  Token*);.  void 
23c50 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
23c60 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  er(Parse*, SrcLi
23c70 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  st*, int);.  voi
23c80 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  d sqlite3DropTri
23c90 67 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20  ggerPtr(Parse*, 
23ca0 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69  Trigger*);.  Tri
23cb0 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69  gger *sqlite3Tri
23cc0 67 67 65 72 73 45 78 69 73 74 28 50 61 72 73 65  ggersExist(Parse
23cd0 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c   *, Table*, int,
23ce0 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20   ExprList*, int 
23cf0 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67  *pMask);.  Trigg
23d00 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  er *sqlite3Trigg
23d10 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20  erList(Parse *, 
23d20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64  Table *);.  void
23d30 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
23d40 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
23d50 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45  rigger *, int, E
23d60 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54  xprList*, int, T
23d70 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20  able *,.        
23d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d90 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e      int, int, in
23da0 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
23db0 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
23dc0 44 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20  Direct(Parse *, 
23dd0 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65  Trigger *, Table
23de0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e   *, int, int, in
23df0 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
23e00 65 56 69 65 77 54 72 69 67 67 65 72 73 28 50 61  eViewTriggers(Pa
23e10 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
23e20 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  pr*, int, ExprLi
23e30 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  st*);.  void sql
23e40 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
23e50 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20  rStep(sqlite3*, 
23e60 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20  TriggerStep*);. 
23e70 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
23e80 6c 69 74 65 33 54 72 69 67 67 65 72 53 65 6c 65  lite3TriggerSele
23e90 63 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  ctStep(sqlite3*,
23ea0 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69 67  Select*);.  Trig
23eb0 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
23ec0 54 72 69 67 67 65 72 49 6e 73 65 72 74 53 74 65  TriggerInsertSte
23ed0 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
23ee0 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20  *, IdList*,.    
23ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f10 20 20 20 20 53 65 6c 65 63 74 2a 2c 75 38 29 3b      Select*,u8);
23f20 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
23f30 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70  sqlite3TriggerUp
23f40 64 61 74 65 53 74 65 70 28 73 71 6c 69 74 65 33  dateStep(sqlite3
23f50 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73  *,Token*,ExprLis
23f60 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a  t*, Expr*, u8);.
23f70 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
23f80 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c  qlite3TriggerDel
23f90 65 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a  eteStep(sqlite3*
23fa0 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b  ,Token*, Expr*);
23fb0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
23fc0 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c  eleteTrigger(sql
23fd0 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29  ite3*, Trigger*)
23fe0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
23ff0 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
24000 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
24010 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
24020 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54  ;.  u32 sqlite3T
24030 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61  riggerColmask(Pa
24040 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78  rse*,Trigger*,Ex
24050 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c  prList*,int,int,
24060 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64  Table*,int);.# d
24070 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72  efine sqlite3Par
24080 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28  seToplevel(p) ((
24090 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20  p)->pToplevel ? 
240a0 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a  (p)->pToplevel :
240b0 20 28 70 29 29 0a 23 65 6c 73 65 0a 23 20 64 65   (p)).#else.# de
240c0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
240d0 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c  gersExist(B,C,D,
240e0 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20  E,F) 0.# define 
240f0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
24100 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69  gger(A,B).# defi
24110 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  ne sqlite3DropTr
24120 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20  iggerPtr(A,B).# 
24130 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e  define sqlite3Un
24140 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
24150 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65  gger(A,B,C).# de
24160 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
24170 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43  RowTrigger(A,B,C
24180 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20  ,D,E,F,G,H,I).# 
24190 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
241a0 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
241b0 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a  ct(A,B,C,D,E,F).
241c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
241d0 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59  TriggerList(X, Y
241e0 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 0.# define sql
241f0 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65  ite3ParseTopleve
24200 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20  l(p) p.# define 
24210 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f  sqlite3TriggerCo
24220 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c  lmask(A,B,C,D,E,
24230 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69  F,G) 0.#endif..i
24240 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79  nt sqlite3JoinTy
24250 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
24260 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
24270 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24280 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79  CreateForeignKey
24290 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
242a0 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72  t*, Token*, Expr
242b0 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  List*, int);.voi
242c0 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f  d sqlite3DeferFo
242d0 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
242e0 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53   int);.#ifndef S
242f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
24300 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20  RIZATION.  void 
24310 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
24320 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68  Parse*,Expr*,Sch
24330 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a  ema*,SrcList*);.
24340 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74    int sqlite3Aut
24350 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e  hCheck(Parse*,in
24360 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
24370 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
24380 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
24390 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
243a0 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c  textPush(Parse*,
243b0 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63   AuthContext*, c
243c0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
243d0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43  oid sqlite3AuthC
243e0 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f  ontextPop(AuthCo
243f0 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73  ntext*);.  int s
24400 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f  qlite3AuthReadCo
24410 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  l(Parse*, const 
24420 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68  char *, const ch
24430 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73  ar *, int);.#els
24440 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
24450 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63  e3AuthRead(a,b,c
24460 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,d).# define sql
24470 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c  ite3AuthCheck(a,
24480 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49  b,c,d,e)    SQLI
24490 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73  TE_OK.# define s
244a0 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
244b0 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64  tPush(a,b,c).# d
244c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
244d0 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20  hContextPop(a)  
244e0 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64  ((void)(a)).#end
244f0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  if.void sqlite3A
24500 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  ttach(Parse*, Ex
24510 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  pr*, Expr*, Expr
24520 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24530 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Detach(Parse*, E
24540 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
24550 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78  te3FixInit(DbFix
24560 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74  er*, Parse*, int
24570 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
24580 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  onst Token*);.in
24590 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c  t sqlite3FixSrcL
245a0 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72  ist(DbFixer*, Sr
245b0 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
245c0 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62  ite3FixSelect(Db
245d0 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  Fixer*, Select*)
245e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
245f0 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45  Expr(DbFixer*, E
24600 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
24610 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62  e3FixExprList(Db
24620 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  Fixer*, ExprList
24630 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
24640 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62  ixTriggerStep(Db
24650 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53  Fixer*, TriggerS
24660 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  tep*);.int sqlit
24670 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61  e3AtoF(const cha
24680 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69  r *z, double*, i
24690 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
246a0 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e  ite3GetInt32(con
246b0 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29  st char *, int*)
246c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
246d0 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  i(const char*);.
246e0 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31 36  int sqlite3Utf16
246f0 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f  ByteLen(const vo
24700 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e  id *pData, int n
24710 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Char);.int sqlit
24720 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f  e3Utf8CharLen(co
24730 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c  nst char *pData,
24740 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32   int nByte);.u32
24750 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64   sqlite3Utf8Read
24760 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f  (const u8**);.Lo
24770 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
24780 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20  st(u64);.LogEst 
24790 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64  sqlite3LogEstAdd
247a0 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b  (LogEst,LogEst);
247b0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
247c0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
247d0 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  E.LogEst sqlite3
247e0 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65  LogEstFromDouble
247f0 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66  (double);.#endif
24800 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f 67 45  .u64 sqlite3LogE
24810 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b  stToInt(LogEst);
24820 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73  ../*.** Routines
24830 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69   to read and wri
24840 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67  te variable-leng
24850 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68  th integers.  Th
24860 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62  ese used to.** b
24870 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c  e defined locall
24880 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73  y, but now we us
24890 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75  e the varint rou
248a0 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69  tines in the uti
248b0 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a  l.c.** file..*/.
248c0 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61  int sqlite3PutVa
248d0 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68  rint(unsigned ch
248e0 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71  ar*, u64);.u8 sq
248f0 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63  lite3GetVarint(c
24900 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
24910 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38  ar *, u64 *);.u8
24920 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
24930 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  t32(const unsign
24940 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a  ed char *, u32 *
24950 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
24960 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a  rintLen(u64 v);.
24970 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f  ./*.** The commo
24980 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20 61 20  n case is for a 
24990 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73  varint to be a s
249a0 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65  ingle byte.  The
249b0 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d  y following.** m
249c0 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65  acros handle the
249d0 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74   common case wit
249e0 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72 65  hout a procedure
249f0 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20   call, but then 
24a00 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63  call.** the proc
24a10 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72  edure for larger
24a20 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65   varints..*/.#de
24a30 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32  fine getVarint32
24a40 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28  (A,B)  \.  (u8)(
24a50 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f  (*(A)<(u8)0x80)?
24a60 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c  ((B)=(u32)*(A)),
24a70 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  1:sqlite3GetVari
24a80 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29  nt32((A),(u32 *)
24a90 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70  &(B))).#define p
24aa0 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20  utVarint32(A,B) 
24ab0 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29   \.  (u8)(((u32)
24ac0 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28  (B)<(u32)0x80)?(
24ad0 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63  *(A)=(unsigned c
24ae0 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73  har)(B)),1:\.  s
24af0 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28  qlite3PutVarint(
24b00 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e  (A),(B))).#defin
24b10 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73  e getVarint    s
24b20 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a  qlite3GetVarint.
24b30 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e  #define putVarin
24b40 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56  t    sqlite3PutV
24b50 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68  arint...const ch
24b60 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78  ar *sqlite3Index
24b70 41 66 66 69 6e 69 74 79 53 74 72 28 56 64 62 65  AffinityStr(Vdbe
24b80 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 76 6f   *, Index *);.vo
24b90 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41  id sqlite3TableA
24ba0 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54  ffinity(Vdbe*, T
24bb0 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61  able*, int);.cha
24bc0 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65  r sqlite3Compare
24bd0 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
24be0 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29  Expr, char aff2)
24bf0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
24c00 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70  exAffinityOk(Exp
24c10 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69  r *pExpr, char i
24c20 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68  dx_affinity);.ch
24c30 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66  ar sqlite3ExprAf
24c40 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78  finity(Expr *pEx
24c50 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pr);.int sqlite3
24c60 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61  Atoi64(const cha
24c70 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75  r*, i64*, int, u
24c80 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  8);.int sqlite3D
24c90 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e  ecOrHexToI64(con
24ca0 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b  st char*, i64*);
24cb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
24cc0 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65  orWithMsg(sqlite
24cd0 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
24ce0 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20  har*,...);.void 
24cf0 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c  sqlite3Error(sql
24d00 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
24d10 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c   *sqlite3HexToBl
24d20 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  ob(sqlite3*, con
24d30 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20  st char *z, int 
24d40 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65  n);.u8 sqlite3He
24d50 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69  xToInt(int h);.i
24d60 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72  nt sqlite3TwoPar
24d70 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54  tName(Parse *, T
24d80 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c  oken *, Token *,
24d90 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66   Token **);..#if
24da0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
24db0 54 45 53 54 29 20 0a 63 6f 6e 73 74 20 63 68 61  TEST) .const cha
24dc0 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d  r *sqlite3ErrNam
24dd0 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  e(int);.#endif..
24de0 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
24df0 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a  te3ErrStr(int);.
24e00 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53  int sqlite3ReadS
24e10 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61  chema(Parse *pPa
24e20 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  rse);.CollSeq *s
24e30 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65  qlite3FindCollSe
24e40 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e  q(sqlite3*,u8 en
24e50 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  c, const char*,i
24e60 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  nt);.CollSeq *sq
24e70 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53  lite3LocateCollS
24e80 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
24e90 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61  , const char*zNa
24ea0 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  me);.CollSeq *sq
24eb0 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71  lite3ExprCollSeq
24ec0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
24ed0 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78  Expr *pExpr);.Ex
24ee0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
24ef0 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50  ddCollateToken(P
24f00 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
24f10 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  pr*, const Token
24f20 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
24f30 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 53  3ExprAddCollateS
24f40 74 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78 70  tring(Parse*,Exp
24f50 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
24f60 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
24f70 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78  prSkipCollate(Ex
24f80 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
24f90 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61  3CheckCollSeq(Pa
24fa0 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a  rse *, CollSeq *
24fb0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68  );.int sqlite3Ch
24fc0 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61  eckObjectName(Pa
24fd0 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  rse *, const cha
24fe0 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r *);.void sqlit
24ff0 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
25000 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29  (sqlite3 *, int)
25010 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64  ;.int sqlite3Add
25020 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
25030 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49  .int sqlite3SubI
25040 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
25050 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e  int sqlite3MulIn
25060 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
25070 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74  nt sqlite3AbsInt
25080 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20  32(int);.#ifdef 
25090 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f  SQLITE_ENABLE_8_
250a0 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c  3_NAMES.void sql
250b0 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28  ite3FileSuffix3(
250c0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61  const char*, cha
250d0 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  r*);.#else.# def
250e0 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53  ine sqlite3FileS
250f0 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64  uffix3(X,Y).#end
25100 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  if.u8 sqlite3Get
25110 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68  Boolean(const ch
25120 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73  ar *z,u8);..cons
25130 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56  t void *sqlite3V
25140 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65 33  alueText(sqlite3
25150 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e  _value*, u8);.in
25160 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79  t sqlite3ValueBy
25170 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  tes(sqlite3_valu
25180 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  e*, u8);.void sq
25190 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72  lite3ValueSetStr
251a0 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
251b0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64   int, const void
251c0 20 2a 2c 75 38 2c 20 0a 20 20 20 20 20 20 20 20   *,u8, .        
251d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251e0 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b  void(*)(void*));
251f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
25200 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65  ueSetNull(sqlite
25210 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20  3_value*);.void 
25220 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65  sqlite3ValueFree
25230 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
25240 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  ;.sqlite3_value 
25250 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77  *sqlite3ValueNew
25260 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61  (sqlite3 *);.cha
25270 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74  r *sqlite3Utf16t
25280 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  o8(sqlite3 *, co
25290 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
252a0 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
252b0 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71  ValueFromExpr(sq
252c0 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c  lite3 *, Expr *,
252d0 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33   u8, u8, sqlite3
252e0 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64  _value **);.void
252f0 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70   sqlite3ValueApp
25300 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74  lyAffinity(sqlit
25310 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20  e3_value *, u8, 
25320 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  u8);.#ifndef SQL
25330 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
25340 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
25350 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
25360 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74  te3OpcodePropert
25370 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  y[];.extern cons
25380 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
25390 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
253a0 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  wer[];.extern co
253b0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
253c0 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  r sqlite3CtypeMa
253d0 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  p[];.extern cons
253e0 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49  t Token sqlite3I
253f0 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65  ntTokens[];.exte
25400 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74  rn SQLITE_WSD st
25410 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
25420 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  ig sqlite3Config
25430 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f  ;.extern SQLITE_
25440 57 53 44 20 46 75 6e 63 44 65 66 48 61 73 68 20  WSD FuncDefHash 
25450 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75 6e  sqlite3GlobalFun
25460 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20  ctions;.#ifndef 
25470 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a  SQLITE_OMIT_WSD.
25480 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
25490 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23  e3PendingByte;.#
254a0 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69  endif.#endif.voi
254b0 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67  d sqlite3RootPag
254c0 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c  eMoved(sqlite3*,
254d0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
254e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69  .void sqlite3Rei
254f0 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b  ndex(Parse*, Tok
25500 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
25510 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46  id sqlite3AlterF
25520 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
25530 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
25540 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72  rRenameTable(Par
25550 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
25560 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
25570 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73  te3GetToken(cons
25580 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
25590 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20  *, int *);.void 
255a0 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72  sqlite3NestedPar
255b0 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  se(Parse*, const
255c0 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f   char*, ...);.vo
255d0 69 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65  id sqlite3Expire
255e0 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
255f0 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ts(sqlite3*);.in
25600 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62  t sqlite3CodeSub
25610 73 65 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20  select(Parse *, 
25620 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  Expr *, int, int
25630 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
25640 65 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a  electPrep(Parse*
25650 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43  , Select*, NameC
25660 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71  ontext*);.int sq
25670 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61  lite3MatchSpanNa
25680 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  me(const char*, 
25690 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
256a0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
256b0 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
256c0 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61  te3ResolveExprNa
256d0 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  mes(NameContext*
256e0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
256f0 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c  qlite3ResolveSel
25700 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c  ectNames(Parse*,
25710 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
25720 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71  ntext*);.void sq
25730 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66  lite3ResolveSelf
25740 52 65 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a  Reference(Parse*
25750 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72  ,Table*,int,Expr
25760 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  *,ExprList*);.in
25770 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
25780 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72  OrderGroupBy(Par
25790 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78  se*, Select*, Ex
257a0 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63  prList*, const c
257b0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
257c0 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74  te3ColumnDefault
257d0 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a  (Vdbe *, Table *
257e0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
257f0 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69  d sqlite3AlterFi
25800 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61  nishAddColumn(Pa
25810 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  rse *, Token *);
25820 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
25830 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e  erBeginAddColumn
25840 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73  (Parse *, SrcLis
25850 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  t *);.CollSeq *s
25860 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71  qlite3GetCollSeq
25870 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c  (Parse*, u8, Col
25880 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68  lSeq *, const ch
25890 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  ar*);.char sqlit
258a0 65 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63  e3AffinityType(c
258b0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 38 2a 29  onst char*, u8*)
258c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e  ;.void sqlite3An
258d0 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f  alyze(Parse*, To
258e0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ken*, Token*);.i
258f0 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65  nt sqlite3Invoke
25900 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79  BusyHandler(Busy
25910 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73  Handler*);.int s
25920 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c  qlite3FindDb(sql
25930 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  ite3*, Token*);.
25940 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44  int sqlite3FindD
25950 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c  bName(sqlite3 *,
25960 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
25970 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  int sqlite3Analy
25980 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a  sisLoad(sqlite3*
25990 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20  ,int iDB);.void 
259a0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64  sqlite3DeleteInd
259b0 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65  exSamples(sqlite
259c0 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  3*,Index*);.void
259d0 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52   sqlite3DefaultR
259e0 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76  owEst(Index*);.v
259f0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
25a00 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73  terLikeFunctions
25a10 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
25a20 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69  .int sqlite3IsLi
25a30 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  keFunction(sqlit
25a40 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63  e3*,Expr*,int*,c
25a50 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
25a60 74 65 33 4d 69 6e 69 6d 75 6d 46 69 6c 65 46 6f  te3MinimumFileFo
25a70 72 6d 61 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  rmat(Parse*, int
25a80 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
25a90 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28  ite3SchemaClear(
25aa0 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20  void *);.Schema 
25ab0 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65  *sqlite3SchemaGe
25ac0 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72  t(sqlite3 *, Btr
25ad0 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ee *);.int sqlit
25ae0 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28  e3SchemaToIndex(
25af0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68  sqlite3 *db, Sch
25b00 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  ema *);.KeyInfo 
25b10 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41  *sqlite3KeyInfoA
25b20 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e  lloc(sqlite3*,in
25b30 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
25b40 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66  ite3KeyInfoUnref
25b50 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49  (KeyInfo*);.KeyI
25b60 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
25b70 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29  nfoRef(KeyInfo*)
25b80 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
25b90 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78  e3KeyInfoOfIndex
25ba0 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29  (Parse*, Index*)
25bb0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
25bc0 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65  DEBUG.int sqlite
25bd0 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65 61  3KeyInfoIsWritea
25be0 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23  ble(KeyInfo*);.#
25bf0 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
25c00 33 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69  3CreateFunc(sqli
25c10 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
25c20 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76  r *, int, int, v
25c30 6f 69 64 20 2a 2c 20 0a 20 20 76 6f 69 64 20 28  oid *, .  void (
25c40 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
25c50 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
25c60 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69  value **),.  voi
25c70 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
25c80 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
25c90 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f  e3_value **), vo
25ca0 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
25cb0 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63  ontext*),.  Func
25cc0 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
25cd0 74 72 75 63 74 6f 72 0a 29 3b 0a 69 6e 74 20 73  tructor.);.int s
25ce0 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 73 71  qlite3ApiExit(sq
25cf0 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b  lite3 *db, int);
25d00 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e  .int sqlite3Open
25d10 54 65 6d 70 44 61 74 61 62 61 73 65 28 50 61 72  TempDatabase(Par
25d20 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  se *);..void sql
25d30 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74  ite3StrAccumInit
25d40 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 68 61 72  (StrAccum*, char
25d50 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
25d60 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
25d70 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63 75  umAppend(StrAccu
25d80 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  m*,const char*,i
25d90 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25da0 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 41  3StrAccumAppendA
25db0 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e  ll(StrAccum*,con
25dc0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
25dd0 73 71 6c 69 74 65 33 41 70 70 65 6e 64 53 70 61  sqlite3AppendSpa
25de0 63 65 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74  ce(StrAccum*,int
25df0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
25e00 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53  StrAccumFinish(S
25e10 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20  trAccum*);.void 
25e20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52  sqlite3StrAccumR
25e30 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29 3b  eset(StrAccum*);
25e40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
25e50 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65  ectDestInit(Sele
25e60 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29  ctDest*,int,int)
25e70 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43  ;.Expr *sqlite3C
25e80 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28  reateColumnExpr(
25e90 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69  sqlite3 *, SrcLi
25ea0 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  st *, int, int);
25eb0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ..void sqlite3Ba
25ec0 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c 69  ckupRestart(sqli
25ed0 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76  te3_backup *);.v
25ee0 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75  oid sqlite3Backu
25ef0 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f  pUpdate(sqlite3_
25f00 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20  backup *, Pgno, 
25f10 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69  const u8 *);..#i
25f20 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
25f30 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
25f40 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e  4.void sqlite3An
25f50 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76  alyzeFunctions(v
25f60 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
25f70 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56 61  3Stat4ProbeSetVa
25f80 6c 75 65 28 50 61 72 73 65 2a 2c 49 6e 64 65 78  lue(Parse*,Index
25f90 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  *,UnpackedRecord
25fa0 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c 69 6e 74 2c  **,Expr*,u8,int,
25fb0 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
25fc0 65 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d  e3Stat4ValueFrom
25fd0 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70  Expr(Parse*, Exp
25fe0 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f  r*, u8, sqlite3_
25ff0 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73  value**);.void s
26000 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65  qlite3Stat4Probe
26010 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63  Free(UnpackedRec
26020 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ord*);.int sqlit
26030 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71  e3Stat4Column(sq
26040 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f  lite3*, const vo
26050 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73  id*, int, int, s
26060 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
26070 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
26080 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  he interface to 
26090 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61  the LEMON-genera
260a0 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76 6f  ted parser.*/.vo
260b0 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65  id *sqlite3Parse
260c0 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28  rAlloc(void*(*)(
260d0 75 36 34 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  u64));.void sqli
260e0 74 65 33 50 61 72 73 65 72 46 72 65 65 28 76 6f  te3ParserFree(vo
260f0 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69  id*, void(*)(voi
26100 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  d*));.void sqlit
26110 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20  e3Parser(void*, 
26120 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73  int, Token, Pars
26130 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52  e*);.#ifdef YYTR
26140 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48  ACKMAXSTACKDEPTH
26150 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61  .  int sqlite3Pa
26160 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f  rserStackPeak(vo
26170 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f  id*);.#endif..vo
26180 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f  id sqlite3AutoLo
26190 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c  adExtensions(sql
261a0 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20  ite3*);.#ifndef 
261b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44  SQLITE_OMIT_LOAD
261c0 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69  _EXTENSION.  voi
261d0 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78  d sqlite3CloseEx
261e0 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33  tensions(sqlite3
261f0 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
26200 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45  ne sqlite3CloseE
26210 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e  xtensions(X).#en
26220 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
26230 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
26240 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c  CACHE.  void sql
26250 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61  ite3TableLock(Pa
26260 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  rse *, int, int,
26270 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20   u8, const char 
26280 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
26290 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65  ine sqlite3Table
262a0 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a  Lock(v,w,x,y,z).
262b0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
262c0 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74  QLITE_TEST.  int
262d0 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28   sqlite3Utf8To8(
262e0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b  unsigned char*);
262f0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
26300 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
26310 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69  UALTABLE.#  defi
26320 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c  ne sqlite3VtabCl
26330 65 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65  ear(Y).#  define
26340 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63   sqlite3VtabSync
26350 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  (X,Y) SQLITE_OK.
26360 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
26370 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29  3VtabRollback(X)
26380 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
26390 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a  e3VtabCommit(X).
263a0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
263b0 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20  3VtabInSync(db) 
263c0 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  0.#  define sqli
263d0 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 20 0a  te3VtabLock(X) .
263e0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
263f0 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23  3VtabUnlock(X).#
26400 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
26410 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58  VtabUnlockList(X
26420 29 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 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
26440 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45  (X, Y, Z) SQLITE
26450 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  _OK.#  define sq
26460 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 58  lite3GetVTable(X
26470 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30  ,Y)  ((VTable*)0
26480 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20  ).#else.   void 
26490 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72  sqlite3VtabClear
264a0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61  (sqlite3 *db, Ta
264b0 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  ble*);.   void s
264c0 71 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e  qlite3VtabDiscon
264d0 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62  nect(sqlite3 *db
264e0 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20  , Table *p);.   
264f0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53  int sqlite3VtabS
26500 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ync(sqlite3 *db,
26510 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20   Vdbe*);.   int 
26520 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62  sqlite3VtabRollb
26530 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ack(sqlite3 *db)
26540 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
26550 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74  VtabCommit(sqlit
26560 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64  e3 *db);.   void
26570 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
26580 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76  (VTable *);.   v
26590 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55  oid sqlite3VtabU
265a0 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b  nlock(VTable *);
265b0 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
265c0 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73  VtabUnlockList(s
265d0 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74  qlite3*);.   int
265e0 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
265f0 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c  point(sqlite3 *,
26600 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76   int, int);.   v
26610 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 49  oid sqlite3VtabI
26620 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64 62 65  mportErrmsg(Vdbe
26630 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  *, sqlite3_vtab*
26640 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71  );.   VTable *sq
26650 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 73  lite3GetVTable(s
26660 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29  qlite3*, Table*)
26670 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ;.#  define sqli
26680 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62  te3VtabInSync(db
26690 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73  ) ((db)->nVTrans
266a0 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72  >0 && (db)->aVTr
266b0 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 76  ans==0).#endif.v
266c0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d  oid sqlite3VtabM
266d0 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72 73  akeWritable(Pars
266e0 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64  e*,Table*);.void
266f0 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
26700 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  nParse(Parse*, T
26710 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  oken*, Token*, T
26720 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oken*, int);.voi
26730 64 20 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e  d sqlite3VtabFin
26740 69 73 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ishParse(Parse*,
26750 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
26760 71 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e 69  qlite3VtabArgIni
26770 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  t(Parse*);.void 
26780 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 45 78  sqlite3VtabArgEx
26790 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b  tend(Parse*, Tok
267a0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
267b0 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28  3VtabCallCreate(
267c0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
267d0 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61  onst char *, cha
267e0 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  r **);.int sqlit
267f0 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63  e3VtabCallConnec
26800 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  t(Parse*, Table*
26810 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
26820 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71  abCallDestroy(sq
26830 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
26840 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20  st char *);.int 
26850 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
26860 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62  (sqlite3 *, VTab
26870 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a  le *);.FuncDef *
26880 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c  sqlite3VtabOverl
26890 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  oadFunction(sqli
268a0 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20  te3 *,FuncDef*, 
268b0 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29  int nArg, Expr*)
268c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  ;.void sqlite3In
268d0 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71  validFunction(sq
268e0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
268f0 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
26900 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74  **);.sqlite3_int
26910 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75  64 sqlite3StmtCu
26920 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65  rrentTime(sqlite
26930 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74  3_context*);.int
26940 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72 61   sqlite3VdbePara
26950 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a  meterIndex(Vdbe*
26960 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  , const char*, i
26970 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
26980 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73  TransferBindings
26990 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c  (sqlite3_stmt *,
269a0 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29   sqlite3_stmt *)
269b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
269c0 72 73 65 72 52 65 73 65 74 28 50 61 72 73 65 2a  rserReset(Parse*
269d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
269e0 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a  prepare(Vdbe*);.
269f0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
26a00 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28  ListCheckLength(
26a10 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
26a20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
26a30 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
26a40 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f  3BinaryCompareCo
26a50 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45  llSeq(Parse *, E
26a60 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a  xpr *, Expr *);.
26a70 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49  int sqlite3TempI
26a80 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71  nMemory(const sq
26a90 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63  lite3*);.const c
26aa0 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72  har *sqlite3Jour
26ab0 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29  nalModename(int)
26ac0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
26ad0 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20  _OMIT_WAL.  int 
26ae0 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e  sqlite3Checkpoin
26af0 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  t(sqlite3*, int,
26b00 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   int, int*, int*
26b10 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
26b20 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76  WalDefaultHook(v
26b30 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f  oid*,sqlite3*,co
26b40 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
26b50 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
26b60 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20  QLITE_OMIT_CTE. 
26b70 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69   With *sqlite3Wi
26b80 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74  thAdd(Parse*,Wit
26b90 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  h*,Token*,ExprLi
26ba0 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20  st*,Select*);.  
26bb0 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68  void sqlite3With
26bc0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
26bd0 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73  With*);.  void s
26be0 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 50  qlite3WithPush(P
26bf0 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38  arse*, With*, u8
26c00 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65  );.#else.#define
26c10 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68   sqlite3WithPush
26c20 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20  (x,y,z).#define 
26c30 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74  sqlite3WithDelet
26c40 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f  e(x,y).#endif../
26c50 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66  * Declarations f
26c60 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20  or functions in 
26c70 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74  fkey.c. All of t
26c80 68 65 73 65 20 61 72 65 20 72 65 70 6c 61 63 65  hese are replace
26c90 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61  d by.** no-op ma
26ca0 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52  cros if OMIT_FOR
26cb0 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69  EIGN_KEY is defi
26cc0 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ned. In this cas
26cd0 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20  e no foreign.** 
26ce0 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  key functionalit
26cf0 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20  y is available. 
26d00 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20  If OMIT_TRIGGER 
26d10 69 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a  is defined but.*
26d20 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  * OMIT_FOREIGN_K
26d30 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20  EY is not, only 
26d40 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  some of the func
26d50 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65  tions are no-ope
26d60 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61  d. In.** this ca
26d70 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  se foreign keys 
26d80 61 72 65 20 70 61 72 73 65 64 2c 20 62 75 74 20  are parsed, but 
26d90 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f  no other functio
26da0 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a 20 70 72  nality is .** pr
26db0 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d  ovided (enforcem
26dc0 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72  ent of FK constr
26dd0 61 69 6e 74 73 20 72 65 71 75 69 72 65 73 20 74  aints requires t
26de0 68 65 20 74 72 69 67 67 65 72 73 20 73 75 62 2d  he triggers sub-
26df0 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20  system)..*/.#if 
26e00 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
26e10 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
26e20 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
26e30 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
26e40 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  R).  void sqlite
26e50 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c  3FkCheck(Parse*,
26e60 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
26e70 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  t, int*, int);. 
26e80 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
26e90 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
26ea0 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c   SrcList *, Tabl
26eb0 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
26ec0 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72  te3FkActions(Par
26ed0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
26ee0 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
26ef0 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  *, int);.  int s
26f00 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64  qlite3FkRequired
26f10 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
26f20 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75   int*, int);.  u
26f30 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  32 sqlite3FkOldm
26f40 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ask(Parse*, Tabl
26f50 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c  e*);.  FKey *sql
26f60 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73  ite3FkReferences
26f70 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65  (Table *);.#else
26f80 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
26f90 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c  e3FkActions(a,b,
26fa0 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69  c,d,e,f).  #defi
26fb0 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63  ne sqlite3FkChec
26fc0 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20  k(a,b,c,d,e,f). 
26fd0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
26fe0 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c  FkDropTable(a,b,
26ff0 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  c).  #define sql
27000 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c  ite3FkOldmask(a,
27010 62 29 20 20 20 20 20 20 20 20 20 30 0a 20 20 23  b)         0.  #
27020 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
27030 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64  Required(a,b,c,d
27040 29 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69  )    0.#endif.#i
27050 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
27060 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20  T_FOREIGN_KEY.  
27070 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65  void sqlite3FkDe
27080 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  lete(sqlite3 *, 
27090 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73  Table*);.  int s
270a0 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e  qlite3FkLocateIn
270b0 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  dex(Parse*,Table
270c0 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c  *,FKey*,Index**,
270d0 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  int**);.#else.  
270e0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
270f0 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23  kDelete(a,b).  #
27100 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
27110 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c  LocateIndex(a,b,
27120 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a  c,d,e).#endif...
27130 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20  /*.** Available 
27140 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e  fault injectors.
27150 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62    Should be numb
27160 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77  ered beginning w
27170 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ith 0..*/.#defin
27180 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
27190 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20  JECTOR_MALLOC   
271a0 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49    0.#define SQLI
271b0 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52  TE_FAULTINJECTOR
271c0 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f  _COUNT      1../
271d0 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
271e0 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69  ce to the code i
271f0 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66  n fault.c used f
27200 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22  or identifying "
27210 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f  benign".** mallo
27220 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73  c failures. This
27230 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74   is only present
27240 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   if SQLITE_OMIT_
27250 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20  BUILTIN_TEST.** 
27260 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a  is not defined..
27270 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
27280 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
27290 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  EST.  void sqlit
272a0 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
272b0 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69  loc(void);.  voi
272c0 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69  d sqlite3EndBeni
272d0 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
272e0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
272f0 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
27300 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65  gnMalloc().  #de
27310 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42  fine sqlite3EndB
27320 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65  enignMalloc().#e
27330 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ndif../*.** Allo
27340 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
27350 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69  s from sqlite3Fi
27360 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23  ndInIndex().*/.#
27370 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
27380 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20 20  ROWID        1  
27390 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 72   /* Search the r
273a0 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c  owid of the tabl
273b0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  e */.#define IN_
273c0 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20  INDEX_EPH       
273d0 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68     2   /* Search
273e0 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d   an ephemeral b-
273f0 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tree */.#define 
27400 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41  IN_INDEX_INDEX_A
27410 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69  SC    3   /* Exi
27420 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45  sting index ASCE
27430 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65  NDING */.#define
27440 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
27450 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78  DESC   4   /* Ex
27460 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53  isting index DES
27470 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69  CENDING */.#defi
27480 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  ne IN_INDEX_NOOP
27490 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20           5   /* 
274a0 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62  No table availab
274b0 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73  le. Use comparis
274c0 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c  ons */./*.** All
274d0 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74  owed flags for t
274e0 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65 72  he 3rd parameter
274f0 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49   to sqlite3FindI
27500 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65  nIndex()..*/.#de
27510 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  fine IN_INDEX_NO
27520 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31  OP_OK     0x0001
27530 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72    /* OK to retur
27540 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20  n IN_INDEX_NOOP 
27550 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
27560 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20  DEX_MEMBERSHIP  
27570 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70  0x0002  /* IN op
27580 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20  erator used for 
27590 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74 20  membership test 
275a0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
275b0 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20  DEX_LOOP        
275c0 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70  0x0004  /* IN op
275d0 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20 61  erator used as a
275e0 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c   loop */.int sql
275f0 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
27600 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
27610 20 75 33 32 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69   u32, int*);..#i
27620 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
27630 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a  LE_ATOMIC_WRITE.
27640 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
27650 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
27660 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68  _vfs *, const ch
27670 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69  ar *, sqlite3_fi
27680 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  le *, int, int);
27690 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
276a0 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65  urnalSize(sqlite
276b0 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74 20  3_vfs *);.  int 
276c0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72  sqlite3JournalCr
276d0 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c  eate(sqlite3_fil
276e0 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  e *);.  int sqli
276f0 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73  te3JournalExists
27700 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70  (sqlite3_file *p
27710 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
27720 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  ne sqlite3Journa
27730 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28 70 56  lSize(pVfs) ((pV
27740 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a 20  fs)->szOsFile). 
27750 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
27760 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 70 29  JournalExists(p)
27770 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20   1.#endif..void 
27780 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61  sqlite3MemJourna
27790 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69  lOpen(sqlite3_fi
277a0 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  le *);.int sqlit
277b0 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65  e3MemJournalSize
277c0 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69  (void);.int sqli
277d0 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28  te3IsMemJournal(
277e0 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b  sqlite3_file *);
277f0 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
27800 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20  _EXPR_DEPTH>0.  
27810 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
27820 53 65 74 48 65 69 67 68 74 28 50 61 72 73 65 20  SetHeight(Parse 
27830 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
27840 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
27850 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
27860 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e  (Select *);.  in
27870 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  t sqlite3ExprChe
27880 63 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c  ckHeight(Parse*,
27890 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23   int);.#else.  #
278a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
278b0 70 72 53 65 74 48 65 69 67 68 74 28 78 2c 79 29  prSetHeight(x,y)
278c0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
278d0 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
278e0 68 74 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e  ht(x) 0.  #defin
278f0 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  e sqlite3ExprChe
27900 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65  ckHeight(x,y).#e
27910 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65  ndif..u32 sqlite
27920 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20  3Get4byte(const 
27930 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
27940 65 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20  e3Put4byte(u8*, 
27950 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  u32);..#ifdef SQ
27960 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f  LITE_ENABLE_UNLO
27970 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64  CK_NOTIFY.  void
27980 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
27990 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65  onBlocked(sqlite
279a0 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b  3 *, sqlite3 *);
279b0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
279c0 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
279d0 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
279e0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
279f0 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73  nnectionClosed(s
27a00 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c  qlite3 *db);.#el
27a10 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
27a20 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c  ite3ConnectionBl
27a30 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65  ocked(x,y).  #de
27a40 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
27a50 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78  ectionUnlocked(x
27a60 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
27a70 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f  te3ConnectionClo
27a80 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23  sed(x).#endif..#
27a90 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
27aa0 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  UG.  void sqlite
27ab0 33 50 61 72 73 65 72 54 72 61 63 65 28 46 49 4c  3ParserTrace(FIL
27ac0 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e  E*, char *);.#en
27ad0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68  dif../*.** If th
27ae0 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20  e SQLITE_ENABLE 
27af0 49 4f 54 52 41 43 45 20 65 78 69 73 74 73 20 74  IOTRACE exists t
27b00 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hen the global v
27b10 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74  ariable.** sqlit
27b20 65 33 49 6f 54 72 61 63 65 20 69 73 20 61 20 70  e3IoTrace is a p
27b30 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e  ointer to a prin
27b40 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20  tf-like routine 
27b50 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74  used to.** print
27b60 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73   I/O tracing mes
27b70 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65  sages. .*/.#ifde
27b80 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
27b90 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65  IOTRACE.# define
27ba0 20 49 4f 54 52 41 43 45 28 41 29 20 20 69 66 28   IOTRACE(A)  if(
27bb0 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
27bc0 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  ){ sqlite3IoTrac
27bd0 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71  e A; }.  void sq
27be0 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65  lite3VdbeIOTrace
27bf0 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49  Sql(Vdbe*);.SQLI
27c00 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28  TE_EXTERN void (
27c10 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29  *sqlite3IoTrace)
27c20 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e  (const char*,...
27c30 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
27c40 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64  e IOTRACE(A).# d
27c50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62  efine sqlite3Vdb
27c60 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23  eIOTraceSql(X).#
27c70 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
27c80 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20  se routines are 
27c90 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68  available for th
27ca0 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69  e mem2.c debuggi
27cb0 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ng memory alloca
27cc0 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68  tor.** only.  Th
27cd0 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20 76  ey are used to v
27ce0 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66 65  erify that diffe
27cf0 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20  rent "types" of 
27d00 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61  memory.** alloca
27d10 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72  tions are proper
27d20 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74 68  ly tracked by th
27d30 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20  e system..**.** 
27d40 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
27d50 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74 68  etType() sets th
27d60 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61  e "type" of an a
27d70 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65  llocation to one
27d80 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59   of.** the MEMTY
27d90 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  PE_* macros defi
27da0 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20  ned below.  The 
27db0 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20 62  type must be a b
27dc0 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61  itmask with.** a
27dd0 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e   single bit set.
27de0 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
27df0 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20  mdebugHasType() 
27e00 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20  returns true if 
27e10 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73 20  any of the bits 
27e20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
27e30 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
27e40 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
27e50 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
27e60 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
27e70 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65  ype()..** sqlite
27e80 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
27e90 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66  () is intended f
27ea0 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61 73  or use inside as
27eb0 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
27ec0 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  s..**.** sqlite3
27ed0 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29  MemdebugNoType()
27ee0 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
27ef0 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74   none of the bit
27f00 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
27f10 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
27f20 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
27f30 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
27f40 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
27f50 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50  tType()..**.** P
27f60 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20  erhaps the most 
27f70 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20  important point 
27f80 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e 63  is the differenc
27f90 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50  e between MEMTYP
27fa0 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45  E_HEAP.** and ME
27fb0 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e  MTYPE_LOOKASIDE.
27fc0 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69    If an allocati
27fd0 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f  on is MEMTYPE_LO
27fe0 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65  OKASIDE, that me
27ff0 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20  ans.** it might 
28000 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61  have been alloca
28010 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ted by lookaside
28020 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c  , except the all
28030 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74  ocation was.** t
28040 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b  oo large or look
28050 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61 64  aside was alread
28060 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69  y full.  It is i
28070 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69  mportant to veri
28080 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63  fy.** that alloc
28090 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68  ations that migh
280a0 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74 69  t have been sati
280b0 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  sfied by lookasi
280c0 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61  de are not.** pa
280d0 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e  ssed back to non
280e0 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
280f0 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73  ) routines.  Ass
28100 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68 65  erts such as the
28110 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76  .** example abov
28120 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20  e are placed on 
28130 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64  the non-lookasid
28140 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65  e free() routine
28150 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  s to verify.** t
28160 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  his constraint. 
28170 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68  .**.** All of th
28180 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20  is is no-op for 
28190 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69  a production bui
281a0 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d  ld.  It only com
281b0 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20  es into.** play 
281c0 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  when the SQLITE_
281d0 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65  MEMDEBUG compile
281e0 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
281f0 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  used..*/.#ifdef 
28200 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a  SQLITE_MEMDEBUG.
28210 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65    void sqlite3Me
28220 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f  mdebugSetType(vo
28230 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73  id*,u8);.  int s
28240 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
28250 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  sType(void*,u8);
28260 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  .  int sqlite3Me
28270 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69  mdebugNoType(voi
28280 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20  d*,u8);.#else.# 
28290 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
282a0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c  mdebugSetType(X,
282b0 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a  Y)  /* no-op */.
282c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
282d0 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
282e0 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65  X,Y)  1.# define
282f0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
28300 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a  NoType(X,Y)   1.
28310 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d  #endif.#define M
28320 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20  EMTYPE_HEAP     
28330 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72    0x01  /* Gener
28340 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69  al heap allocati
28350 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
28360 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
28370 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70 20    0x02  /* Heap 
28380 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
28390 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a  been lookaside *
283a0 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
283b0 45 5f 53 43 52 41 54 43 48 20 20 20 20 30 78 30  E_SCRATCH    0x0
283c0 34 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c  4  /* Scratch al
283d0 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
283e0 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41  fine MEMTYPE_PCA
283f0 43 48 45 20 20 20 20 20 30 78 30 38 20 20 2f 2a  CHE     0x08  /*
28400 20 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f   Page cache allo
28410 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 23 69 66 20  cations */..#if 
28420 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41  (SQLITE_ENABLE_A
28430 50 50 4c 45 5f 53 50 49 3e 30 29 20 26 26 20 64  PPLE_SPI>0) && d
28440 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f  efined(__APPLE__
28450 29 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  )../*.** An inst
28460 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
28470 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
28480 69 73 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  is used to hold 
28490 74 68 65 20 70 72 6f 63 65 73 73 20 49 44 0a 2a  the process ID.*
284a0 2a 20 61 6e 64 20 72 65 74 75 72 6e 2d 62 79 2d  * and return-by-
284b0 72 65 66 65 72 65 6e 63 65 20 6c 6f 63 6b 73 74  reference lockst
284c0 61 74 65 20 76 61 6c 75 65 2e 20 20 54 68 65 20  ate value.  The 
284d0 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43  SQLITE_FCNTL_LOC
284e0 4b 53 54 41 54 45 5f 50 49 44 0a 2a 2a 20 72 65  KSTATE_PID.** re
284f0 71 75 69 72 65 73 20 74 68 65 20 34 74 68 20 61  quires the 4th a
28500 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74  rgument to sqlit
28510 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 20  e3_file_control 
28520 74 6f 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20  to be a pointer 
28530 74 6f 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  to an.** instanc
28540 65 20 6f 66 20 4c 6f 63 6b 73 74 61 74 65 50 49  e of LockstatePI
28550 44 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 77 69  D initialized wi
28560 74 68 20 61 20 4c 6f 63 6b 73 74 61 74 65 50 49  th a LockstatePI
28570 44 2e 70 69 64 20 76 61 6c 75 65 20 65 71 75 61  D.pid value equa
28580 6c 0a 2a 2a 20 74 6f 20 61 20 70 72 6f 63 65 73  l.** to a proces
28590 73 20 49 44 20 74 6f 20 62 65 20 74 65 73 74 65  s ID to be teste
285a0 64 2c 20 6f 72 20 74 68 65 20 73 70 65 63 69 61  d, or the specia
285b0 6c 20 76 61 6c 75 65 20 53 51 4c 49 54 45 5f 4c  l value SQLITE_L
285c0 4f 43 4b 53 54 41 54 45 5f 41 4e 59 50 49 44 0a  OCKSTATE_ANYPID.
285d0 2a 2a 20 54 68 65 20 4c 6f 63 6b 73 74 61 74 65  ** The Lockstate
285e0 2e 73 74 61 74 65 20 76 61 6c 75 65 20 69 73 20  .state value is 
285f0 61 6c 77 61 79 73 20 73 65 74 20 74 6f 20 6f 6e  always set to on
28600 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
28610 6e 67 20 76 61 6c 75 65 73 0a 2a 2a 20 77 68 65  ng values.** whe
28620 6e 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63  n sqlite3_file_c
28630 6f 6e 74 72 6f 6c 20 72 65 74 75 72 6e 73 3a 0a  ontrol returns:.
28640 2a 2a 20 0a 2a 2a 20 20 20 53 51 4c 49 54 45 5f  ** .**   SQLITE_
28650 4c 4f 43 4b 53 54 41 54 45 5f 4f 46 46 20 20 20  LOCKSTATE_OFF   
28660 20 6e 6f 20 61 63 74 69 76 65 20 73 71 6c 69 74   no active sqlit
28670 65 20 66 69 6c 65 20 6c 6f 63 6b 73 20 6d 61 74  e file locks mat
28680 63 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ch the specified
28690 20 70 69 64 0a 2a 2a 20 20 20 53 51 4c 49 54 45   pid.**   SQLITE
286a0 5f 4c 4f 43 4b 53 54 41 54 45 5f 4f 4e 20 20 20  _LOCKSTATE_ON   
286b0 20 20 61 63 74 69 76 65 20 73 71 6c 69 74 65 20    active sqlite 
286c0 66 69 6c 65 20 6c 6f 63 6b 73 20 6d 61 74 63 68  file locks match
286d0 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 70   the specified p
286e0 69 64 0a 2a 2a 20 20 20 53 51 4c 49 54 45 5f 4c  id.**   SQLITE_L
286f0 4f 43 4b 53 54 41 54 45 5f 4e 4f 54 41 44 42 20  OCKSTATE_NOTADB 
28700 70 61 74 68 20 70 6f 69 6e 74 73 20 74 6f 20 61  path points to a
28710 20 66 69 6c 65 20 74 68 61 74 20 69 73 20 6e 6f   file that is no
28720 74 20 61 6e 20 73 71 6c 69 74 65 20 64 62 20 66  t an sqlite db f
28730 69 6c 65 0a 2a 2a 20 20 20 53 51 4c 49 54 45 5f  ile.**   SQLITE_
28740 4c 4f 43 4b 53 54 41 54 45 5f 45 52 52 4f 52 20  LOCKSTATE_ERROR 
28750 20 70 61 74 68 20 77 61 73 20 6e 6f 74 20 76 61   path was not va
28760 69 6c 64 20 6f 72 20 77 61 73 20 75 6e 72 65 61  ild or was unrea
28770 64 61 62 6c 65 0a 2a 2f 0a 74 79 70 65 64 65 66  dable.*/.typedef
28780 20 73 74 72 75 63 74 20 4c 6f 63 6b 73 74 61 74   struct Lockstat
28790 65 50 49 44 20 4c 6f 63 6b 73 74 61 74 65 50 49  ePID LockstatePI
287a0 44 3b 0a 73 74 72 75 63 74 20 4c 6f 63 6b 73 74  D;.struct Lockst
287b0 61 74 65 50 49 44 20 7b 0a 20 20 70 69 64 5f 74  atePID {.  pid_t
287c0 20 70 69 64 3b 20 20 20 20 20 20 20 20 20 20 20   pid;           
287d0 20 20 20 20 20 20 2f 2a 20 50 72 6f 63 65 73 73        /* Process
287e0 20 49 44 20 74 6f 20 74 65 73 74 20 2a 2f 0a 20   ID to test */. 
287f0 20 69 6e 74 20 73 74 61 74 65 3b 20 20 20 20 20   int state;     
28800 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
28810 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20  he state of the 
28820 6c 6f 63 6b 20 28 72 65 74 75 72 6e 20 76 61 6c  lock (return val
28830 75 65 29 20 2a 2f 0a 7d 3b 0a 0a 23 65 6e 64 69  ue) */.};..#endi
28840 66 20 2f 2a 20 28 53 51 4c 49 54 45 5f 45 4e 41  f /* (SQLITE_ENA
28850 42 4c 45 5f 41 50 50 4c 45 5f 53 50 49 3e 30 29  BLE_APPLE_SPI>0)
28860 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 41 50   && defined(__AP
28870 50 4c 45 5f 5f 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  PLE__) */../*.**
28880 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65 72   Threading inter
28890 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  face.*/.#if SQLI
288a0 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
288b0 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69  READS>0.int sqli
288c0 74 65 33 54 68 72 65 61 64 43 72 65 61 74 65 28  te3ThreadCreate(
288d0 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c 76  SQLiteThread**,v
288e0 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76  oid*(*)(void*),v
288f0 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
28900 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c  e3ThreadJoin(SQL
28910 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69 64  iteThread*, void
28920 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e  **);.#endif..#en
28930 64 69 66 20 2f 2a 20 5f 53 51 4c 49 54 45 49 4e  dif /* _SQLITEIN
28940 54 5f 48 5f 20 2a 2f 0a                          T_H_ */.