/ Hex Artifact Content
Login

Artifact 5e09fe04f999223680801ddf8fbae6b60751d613:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75 73  .** The previous
0540: 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20 77   paragraph was w
0550: 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e 20  ritten in 2005. 
0560: 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70 68   (This paragraph
0570: 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 6f   is written.** o
0580: 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20 54  n 2008-11-28.) T
0590: 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20 4c  hese days, all L
05a0: 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75 70  inux kernels sup
05b0: 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65 73  port large files
05c0: 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f 75  , so.** you shou
05d0: 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61 76  ld probably leav
05e0: 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20 20  e LFS enabled.  
05f0: 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64 65  But some embedde
0600: 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67 68  d platforms migh
0610: 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69 6e  t.** lack LFS in
0620: 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
0630: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0640: 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20 73  FS macro might s
0650: 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e 0a  till be useful..
0660: 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73  **.** Similar is
0670: 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53   true for Mac OS
0680: 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79   X.  LFS is only
0690: 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61   supported on Ma
06a0: 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74  c OS X 9 and lat
06b0: 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  er..*/.#ifndef S
06c0: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46  QLITE_DISABLE_LF
06d0: 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  S.# define _LARG
06e0: 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23  E_FILE       1.#
06f0: 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46   ifndef _FILE_OF
0700: 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65  FSET_BITS.#   de
0710: 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45  fine _FILE_OFFSE
0720: 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69  T_BITS 64.# endi
0730: 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  f.# define _LARG
0740: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23  EFILE_SOURCE 1.#
0750: 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65 65 64 65 64  endif../* Needed
0760: 20 66 6f 72 20 76 61 72 69 6f 75 73 20 64 65 66   for various def
0770: 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20 2a 2f 0a 23  initions... */.#
0780: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55  if defined(__GNU
0790: 43 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  C__) && !defined
07a0: 28 5f 47 4e 55 5f 53 4f 55 52 43 45 29 0a 23 20  (_GNU_SOURCE).# 
07b0: 64 65 66 69 6e 65 20 5f 47 4e 55 5f 53 4f 55 52  define _GNU_SOUR
07c0: 43 45 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  CE.#endif..#if d
07d0: 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44  efined(__OpenBSD
07e0: 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  __) && !defined(
07f0: 5f 42 53 44 5f 53 4f 55 52 43 45 29 0a 23 20 64  _BSD_SOURCE).# d
0800: 65 66 69 6e 65 20 5f 42 53 44 5f 53 4f 55 52 43  efine _BSD_SOURC
0810: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
0820: 46 6f 72 20 4d 69 6e 47 57 2c 20 63 68 65 63 6b  For MinGW, check
0830: 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 63 61   to see if we ca
0840: 6e 20 69 6e 63 6c 75 64 65 20 74 68 65 20 68 65  n include the he
0850: 61 64 65 72 20 66 69 6c 65 20 63 6f 6e 74 61 69  ader file contai
0860: 6e 69 6e 67 20 69 74 73 0a 2a 2a 20 76 65 72 73  ning its.** vers
0870: 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c  ion information,
0880: 20 61 6d 6f 6e 67 20 6f 74 68 65 72 20 74 68 69   among other thi
0890: 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20  ngs.  Normally, 
08a0: 74 68 69 73 20 69 6e 74 65 72 6e 61 6c 20 4d 69  this internal Mi
08b0: 6e 47 57 0a 2a 2a 20 68 65 61 64 65 72 20 66 69  nGW.** header fi
08c0: 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e 6c 79 5d 20  le would [only] 
08d0: 62 65 20 69 6e 63 6c 75 64 65 64 20 61 75 74 6f  be included auto
08e0: 6d 61 74 69 63 61 6c 6c 79 20 62 79 20 6f 74 68  matically by oth
08f0: 65 72 20 4d 69 6e 47 57 20 68 65 61 64 65 72 0a  er MinGW header.
0900: 2a 2a 20 66 69 6c 65 73 3b 20 68 6f 77 65 76 65  ** files; howeve
0910: 72 2c 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 64  r, the contained
0920: 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61   version informa
0930: 74 69 6f 6e 20 69 73 20 6e 6f 77 20 72 65 71 75  tion is now requ
0940: 69 72 65 64 20 62 79 20 74 68 69 73 0a 2a 2a 20  ired by this.** 
0950: 68 65 61 64 65 72 20 66 69 6c 65 20 74 6f 20 77  header file to w
0960: 6f 72 6b 20 61 72 6f 75 6e 64 20 62 69 6e 61 72  ork around binar
0970: 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  y compatibility 
0980: 69 73 73 75 65 73 20 28 73 65 65 20 62 65 6c 6f  issues (see belo
0990: 77 29 20 61 6e 64 0a 2a 2a 20 74 68 69 73 20 69  w) and.** this i
09a0: 73 20 74 68 65 20 6f 6e 6c 79 20 6b 6e 6f 77 6e  s the only known
09b0: 20 77 61 79 20 74 6f 20 72 65 6c 69 61 62 6c 79   way to reliably
09c0: 20 6f 62 74 61 69 6e 20 69 74 2e 20 20 54 68 69   obtain it.  Thi
09d0: 73 20 65 6e 74 69 72 65 20 23 69 66 20 62 6c 6f  s entire #if blo
09e0: 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20 62 65 20 63  ck.** would be c
09f0: 6f 6d 70 6c 65 74 65 6c 79 20 75 6e 6e 65 63 65  ompletely unnece
0a00: 73 73 61 72 79 20 69 66 20 74 68 65 72 65 20 77  ssary if there w
0a10: 61 73 20 61 6e 79 20 6f 74 68 65 72 20 77 61 79  as any other way
0a20: 20 6f 66 20 64 65 74 65 63 74 69 6e 67 0a 2a 2a   of detecting.**
0a30: 20 4d 69 6e 47 57 20 76 69 61 20 74 68 65 69 72   MinGW via their
0a40: 20 70 72 65 70 72 6f 63 65 73 73 6f 72 20 28 65   preprocessor (e
0a50: 2e 67 2e 20 69 66 20 74 68 65 79 20 63 75 73 74  .g. if they cust
0a60: 6f 6d 69 7a 65 64 20 74 68 65 69 72 20 47 43 43  omized their GCC
0a70: 20 74 6f 20 64 65 66 69 6e 65 0a 2a 2a 20 73 6f   to define.** so
0a80: 6d 65 20 4d 69 6e 47 57 2d 73 70 65 63 69 66 69  me MinGW-specifi
0a90: 63 20 6d 61 63 72 6f 73 29 2e 20 20 57 68 65 6e  c macros).  When
0aa0: 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 4d   compiling for M
0ab0: 69 6e 47 57 2c 20 65 69 74 68 65 72 20 74 68 65  inGW, either the
0ac0: 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49 4e 47 57 5f  .** _HAVE_MINGW_
0ad0: 48 20 6f 72 20 5f 48 41 56 45 5f 5f 4d 49 4e 47  H or _HAVE__MING
0ae0: 57 5f 48 20 28 6e 6f 74 65 20 74 68 65 20 65 78  W_H (note the ex
0af0: 74 72 61 20 75 6e 64 65 72 73 63 6f 72 65 29 20  tra underscore) 
0b00: 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 0a 2a 2a  macro must be.**
0b10: 20 64 65 66 69 6e 65 64 3b 20 6f 74 68 65 72 77   defined; otherw
0b20: 69 73 65 2c 20 64 65 74 65 63 74 69 6f 6e 20 6f  ise, detection o
0b30: 66 20 63 6f 6e 64 69 74 69 6f 6e 73 20 73 70 65  f conditions spe
0b40: 63 69 66 69 63 20 74 6f 20 4d 69 6e 47 57 20 77  cific to MinGW w
0b50: 69 6c 6c 20 62 65 0a 2a 2a 20 64 69 73 61 62 6c  ill be.** disabl
0b60: 65 64 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ed..*/.#if defin
0b70: 65 64 28 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48  ed(_HAVE_MINGW_H
0b80: 29 0a 23 20 69 6e 63 6c 75 64 65 20 22 6d 69 6e  ).# include "min
0b90: 67 77 2e 68 22 0a 23 65 6c 69 66 20 64 65 66 69  gw.h".#elif defi
0ba0: 6e 65 64 28 5f 48 41 56 45 5f 5f 4d 49 4e 47 57  ned(_HAVE__MINGW
0bb0: 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20 22 5f  _H).# include "_
0bc0: 6d 69 6e 67 77 2e 68 22 0a 23 65 6e 64 69 66 0a  mingw.h".#endif.
0bd0: 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57  ./*.** For MinGW
0be0: 20 76 65 72 73 69 6f 6e 20 34 2e 78 20 28 61 6e   version 4.x (an
0bf0: 64 20 68 69 67 68 65 72 29 2c 20 63 68 65 63 6b  d higher), check
0c00: 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 5f   to see if the _
0c10: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
0c20: 0a 2a 2a 20 64 65 66 69 6e 65 20 69 73 20 72 65  .** define is re
0c30: 71 75 69 72 65 64 20 74 6f 20 6d 61 69 6e 74 61  quired to mainta
0c40: 69 6e 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74  in binary compat
0c50: 69 62 69 6c 69 74 79 20 77 69 74 68 20 74 68 65  ibility with the
0c60: 20 4d 53 56 43 20 72 75 6e 74 69 6d 65 0a 2a 2a   MSVC runtime.**
0c70: 20 6c 69 62 72 61 72 79 20 69 6e 20 75 73 65 20   library in use 
0c80: 28 65 2e 67 2e 20 66 6f 72 20 57 69 6e 64 6f 77  (e.g. for Window
0c90: 73 20 58 50 29 2e 0a 2a 2f 0a 23 69 66 20 21 64  s XP)..*/.#if !d
0ca0: 65 66 69 6e 65 64 28 5f 55 53 45 5f 33 32 42 49  efined(_USE_32BI
0cb0: 54 5f 54 49 4d 45 5f 54 29 20 26 26 20 21 64 65  T_TIME_T) && !de
0cc0: 66 69 6e 65 64 28 5f 55 53 45 5f 36 34 42 49 54  fined(_USE_64BIT
0cd0: 5f 54 49 4d 45 5f 54 29 20 26 26 20 5c 0a 20 20  _TIME_T) && \.  
0ce0: 20 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32    defined(_WIN32
0cf0: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57  ) && !defined(_W
0d00: 49 4e 36 34 29 20 26 26 20 5c 0a 20 20 20 20 64  IN64) && \.    d
0d10: 65 66 69 6e 65 64 28 5f 5f 4d 49 4e 47 57 5f 4d  efined(__MINGW_M
0d20: 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 29 20 26 26  AJOR_VERSION) &&
0d30: 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56   __MINGW_MAJOR_V
0d40: 45 52 53 49 4f 4e 20 3e 3d 20 34 20 26 26 20 5c  ERSION >= 4 && \
0d50: 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d  .    defined(__M
0d60: 53 56 43 52 54 5f 5f 29 0a 23 20 64 65 66 69 6e  SVCRT__).# defin
0d70: 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49 4d  e _USE_32BIT_TIM
0d80: 45 5f 54 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54  E_T.#endif../* T
0d90: 68 65 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65  he public SQLite
0da0: 20 69 6e 74 65 72 66 61 63 65 2e 20 20 54 68 65   interface.  The
0db0: 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49   _FILE_OFFSET_BI
0dc0: 54 53 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70  TS macro must ap
0dd0: 70 65 61 72 0a 2a 2a 20 66 69 72 73 74 20 69 6e  pear.** first in
0de0: 20 51 4e 58 2e 20 20 41 6c 73 6f 2c 20 74 68 65   QNX.  Also, the
0df0: 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45   _USE_32BIT_TIME
0e00: 5f 54 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70  _T macro must ap
0e10: 70 65 61 72 20 66 69 72 73 74 20 66 6f 72 0a 2a  pear first for.*
0e20: 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a 23 69 6e 63  * MinGW..*/.#inc
0e30: 6c 75 64 65 20 22 73 71 6c 69 74 65 33 2e 68 22  lude "sqlite3.h"
0e40: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0e50: 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  the configuratio
0e60: 6e 20 68 65 61 64 65 72 20 6f 75 74 70 75 74 20  n header output 
0e70: 62 79 20 27 63 6f 6e 66 69 67 75 72 65 27 20 69  by 'configure' i
0e80: 66 20 77 65 27 72 65 20 75 73 69 6e 67 20 74 68  f we're using th
0e90: 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e 66 2d 62 61  e.** autoconf-ba
0ea0: 73 65 64 20 62 75 69 6c 64 0a 2a 2f 0a 23 69 66  sed build.*/.#if
0eb0: 64 65 66 20 5f 48 41 56 45 5f 53 51 4c 49 54 45  def _HAVE_SQLITE
0ec0: 5f 43 4f 4e 46 49 47 5f 48 0a 23 69 6e 63 6c 75  _CONFIG_H.#inclu
0ed0: 64 65 20 22 63 6f 6e 66 69 67 2e 68 22 0a 23 65  de "config.h".#e
0ee0: 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22  ndif..#include "
0ef0: 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a  sqliteLimit.h"..
0f00: 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61  /* Disable nuisa
0f10: 6e 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20  nce warnings on 
0f20: 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72  Borland compiler
0f30: 73 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  s */.#if defined
0f40: 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23  (__BORLANDC__).#
0f50: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68  pragma warn -rch
0f60: 20 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20   /* unreachable 
0f70: 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20  code */.#pragma 
0f80: 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e  warn -ccc /* Con
0f90: 64 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73  dition is always
0fa0: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a   true or false *
0fb0: 2f 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  /.#pragma warn -
0fc0: 61 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20  aus /* Assigned 
0fd0: 76 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75  value is never u
0fe0: 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  sed */.#pragma w
0ff0: 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70  arn -csu /* Comp
1000: 61 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64  aring signed and
1010: 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72   unsigned */.#pr
1020: 61 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f  agma warn -spa /
1030: 2a 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69  * Suspicious poi
1040: 6e 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20  nter arithmetic 
1050: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
1060: 20 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72   Include standar
1070: 64 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61  d header files a
1080: 73 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23  s necessary.*/.#
1090: 69 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e  ifdef HAVE_STDIN
10a0: 54 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  T_H.#include <st
10b0: 64 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23  dint.h>.#endif.#
10c0: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59  ifdef HAVE_INTTY
10d0: 50 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c  PES_H.#include <
10e0: 69 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64  inttypes.h>.#end
10f0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
1100: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61  llowing macros a
1110: 72 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20  re used to cast 
1120: 70 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65  pointers to inte
1130: 67 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65  gers and.** inte
1140: 67 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73  gers to pointers
1150: 2e 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64  .  The way you d
1160: 6f 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72  o this varies fr
1170: 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a  om one compiler.
1180: 2a 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20  ** to the next, 
1190: 73 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c  so we have devel
11a0: 6f 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69  oped the followi
11b0: 6e 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74  ng set of #if st
11c0: 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67  atements.** to g
11d0: 65 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69  enerate appropri
11e0: 61 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61  ate macros for a
11f0: 20 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63   wide range of c
1200: 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20  ompilers..**.** 
1210: 54 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53  The correct "ANS
1220: 49 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69  I" way to do thi
1230: 73 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20  s is to use the 
1240: 69 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 20 0a  intptr_t type. .
1250: 2a 2a 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79  ** Unfortunately
1260: 2c 20 74 68 61 74 20 74 79 70 65 64 65 66 20 69  , that typedef i
1270: 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20  s not available 
1280: 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73  on all compilers
1290: 2c 20 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73  , or.** if it is
12a0: 20 61 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72   available, it r
12b0: 65 71 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c  equires an #incl
12c0: 75 64 65 20 6f 66 20 73 70 65 63 69 66 69 63 20  ude of specific 
12d0: 68 65 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20  headers.** that 
12e0: 76 61 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61  vary from one ma
12f0: 63 68 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78  chine to the nex
1300: 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  t..**.** Ticket 
1310: 23 33 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d  #3860:  The llvm
1320: 2d 67 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65  -gcc-4.2 compile
1330: 72 20 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f  r from Apple cho
1340: 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28  kes on.** the ((
1350: 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30  void*)&((char*)0
1360: 29 5b 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e  )[X]) construct.
1370: 20 20 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65    But MSVC choke
1380: 73 20 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29  s on ((void*)(X)
1390: 29 2e 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65  )..** So we have
13a0: 20 74 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d   to define the m
13b0: 61 63 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65  acros in differe
13c0: 6e 74 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e  nt ways dependin
13d0: 67 20 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  g on the.** comp
13e0: 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  iler..*/.#if def
13f0: 69 6e 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54  ined(__PTRDIFF_T
1400: 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20  YPE__)  /* This 
1410: 63 61 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b  case should work
1420: 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65   for GCC */.# de
1430: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f  fine SQLITE_INT_
1440: 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69  TO_PTR(X)  ((voi
1450: 64 2a 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59  d*)(__PTRDIFF_TY
1460: 50 45 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69  PE__)(X)).# defi
1470: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
1480: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
1490: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
14a0: 29 28 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66  )(X)).#elif !def
14b0: 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20  ined(__GNUC__)  
14c0: 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f       /* Works fo
14d0: 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65  r compilers othe
14e0: 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23  r than LLVM */.#
14f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
1500: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
1510: 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30  void*)&((char*)0
1520: 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53  )[X]).# define S
1530: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
1540: 28 58 29 20 20 28 28 69 6e 74 29 28 28 28 63 68  (X)  ((int)(((ch
1550: 61 72 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29  ar*)X)-(char*)0)
1560: 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28  ).#elif defined(
1570: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20  HAVE_STDINT_H)  
1580: 20 2f 2a 20 55 73 65 20 74 68 69 73 20 63 61 73   /* Use this cas
1590: 65 20 69 66 20 77 65 20 68 61 76 65 20 41 4e 53  e if we have ANS
15a0: 49 20 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64  I headers */.# d
15b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
15c0: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
15d0: 69 64 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58  id*)(intptr_t)(X
15e0: 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  )).# define SQLI
15f0: 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29  TE_PTR_TO_INT(X)
1600: 20 20 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f    ((int)(intptr_
1610: 74 29 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20  t)(X)).#else    
1620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1630: 20 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74        /* Generat
1640: 65 73 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62  es a warning - b
1650: 75 74 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72  ut it always wor
1660: 6b 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  ks */.# define S
1670: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
1680: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29  (X)  ((void*)(X)
1690: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
16a0: 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20  E_PTR_TO_INT(X) 
16b0: 20 28 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64   ((int)(X)).#end
16c0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72  if../*.** A macr
16d0: 6f 20 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65  o to hint to the
16e0: 20 63 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61   compiler that a
16f0: 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64   function should
1700: 20 6e 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e   not be.** inlin
1710: 65 64 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ed..*/.#if defin
1720: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20  ed(__GNUC__).#  
1730: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
1740: 49 4e 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62  INLINE  __attrib
1750: 75 74 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29  ute__((noinline)
1760: 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28  ).#elif defined(
1770: 5f 4d 53 43 5f 56 45 52 29 0a 23 20 20 64 65 66  _MSC_VER).#  def
1780: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
1790: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
17a0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
17b0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
17c0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
17d0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
17e0: 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 6d 61  TE_THREADSAFE ma
17f0: 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65 66 69  cro must be defi
1800: 6e 65 64 20 61 73 20 30 2c 20 31 2c 20 6f 72 20  ned as 0, 1, or 
1810: 32 2e 0a 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75  2..** 0 means mu
1820: 74 65 78 65 73 20 61 72 65 20 70 65 72 6d 61 6e  texes are perman
1830: 65 6e 74 6c 79 20 64 69 73 61 62 6c 65 20 61 6e  ently disable an
1840: 64 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73  d the library is
1850: 20 6e 65 76 65 72 0a 2a 2a 20 74 68 72 65 61 64   never.** thread
1860: 73 61 66 65 2e 20 20 31 20 6d 65 61 6e 73 20 74  safe.  1 means t
1870: 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 73 65  he library is se
1880: 72 69 61 6c 69 7a 65 64 20 77 68 69 63 68 20 69  rialized which i
1890: 73 20 74 68 65 20 68 69 67 68 65 73 74 0a 2a 2a  s the highest.**
18a0: 20 6c 65 76 65 6c 20 6f 66 20 74 68 72 65 61 64   level of thread
18b0: 73 61 66 65 74 79 2e 20 20 32 20 6d 65 61 6e 73  safety.  2 means
18c0: 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20   the library is 
18d0: 6d 75 6c 74 69 74 68 72 65 61 64 65 64 20 2d 20  multithreaded - 
18e0: 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65  multiple.** thre
18f0: 61 64 73 20 63 61 6e 20 75 73 65 20 53 51 4c 69  ads can use SQLi
1900: 74 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f  te as long as no
1910: 20 74 77 6f 20 74 68 72 65 61 64 73 20 74 72 79   two threads try
1920: 20 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65   to use the same
1930: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
1940: 6e 65 63 74 69 6f 6e 20 61 74 20 74 68 65 20 73  nection at the s
1950: 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20  ame time..**.** 
1960: 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f  Older versions o
1970: 66 20 53 51 4c 69 74 65 20 75 73 65 64 20 61 6e  f SQLite used an
1980: 20 6f 70 74 69 6f 6e 61 6c 20 54 48 52 45 41 44   optional THREAD
1990: 53 41 46 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57  SAFE macro..** W
19a0: 65 20 73 75 70 70 6f 72 74 20 74 68 61 74 20 66  e support that f
19b0: 6f 72 20 6c 65 67 61 63 79 2e 0a 2a 2f 0a 23 69  or legacy..*/.#i
19c0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
19d0: 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23 20  E_THREADSAFE).# 
19e0: 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45 41  if defined(THREA
19f0: 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69 6e  DSAFE).#   defin
1a00: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
1a10: 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a 23  AFE THREADSAFE.#
1a20: 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65   else.#   define
1a30: 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41   SQLITE_THREADSA
1a40: 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d 30  FE 1 /* IMP: R-0
1a50: 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23 20  7272-22309 */.# 
1a60: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
1a70: 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f 76  .** Powersafe ov
1a80: 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62 79  erwrite is on by
1a90: 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20 63   default.  But c
1aa0: 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66 66  an be turned off
1ab0: 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d 44   using.** the -D
1ac0: 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45  SQLITE_POWERSAFE
1ad0: 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f 6d  _OVERWRITE=0 com
1ae0: 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e  mand-line option
1af0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
1b00: 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56  ITE_POWERSAFE_OV
1b10: 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e 65  ERWRITE.# define
1b20: 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46   SQLITE_POWERSAF
1b30: 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23 65  E_OVERWRITE 1.#e
1b40: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
1b50: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
1b60: 45 4d 53 54 41 54 55 53 20 6d 61 63 72 6f 20 6d  EMSTATUS macro m
1b70: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
1b80: 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e  s either 0 or 1.
1b90: 0a 2a 2a 20 49 74 20 64 65 74 65 72 6d 69 6e 65  .** It determine
1ba0: 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  s whether or not
1bb0: 20 74 68 65 20 66 65 61 74 75 72 65 73 20 72 65   the features re
1bc0: 6c 61 74 65 64 20 74 6f 20 0a 2a 2a 20 53 51 4c  lated to .** SQL
1bd0: 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54  ITE_CONFIG_MEMST
1be0: 41 54 55 53 20 61 72 65 20 61 76 61 69 6c 61 62  ATUS are availab
1bf0: 6c 65 20 62 79 20 64 65 66 61 75 6c 74 20 6f 72  le by default or
1c00: 20 6e 6f 74 2e 20 54 68 69 73 20 76 61 6c 75 65   not. This value
1c10: 20 63 61 6e 0a 2a 2a 20 62 65 20 6f 76 65 72 72   can.** be overr
1c20: 69 64 64 65 6e 20 61 74 20 72 75 6e 74 69 6d 65  idden at runtime
1c30: 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74   using the sqlit
1c40: 65 33 5f 63 6f 6e 66 69 67 28 29 20 41 50 49 2e  e3_config() API.
1c50: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
1c60: 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  (SQLITE_DEFAULT_
1c70: 4d 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66  MEMSTATUS).# def
1c80: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
1c90: 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23  LT_MEMSTATUS 1.#
1ca0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61  endif../*.** Exa
1cb0: 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  ctly one of the 
1cc0: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
1cd0: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
1ce0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
1cf0: 73 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65  specify which me
1d00: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1d10: 73 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65  subsystem to use
1d20: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49  ..**.**     SQLI
1d30: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
1d40: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65            // Use
1d50: 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d   normal system m
1d60: 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53  alloc().**     S
1d70: 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c  QLITE_WIN32_MALL
1d80: 4f 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  OC           // 
1d90: 55 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65  Use Win32 native
1da0: 20 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20   heap API.**    
1db0: 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c   SQLITE_ZERO_MAL
1dc0: 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f  LOC            /
1dd0: 2f 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c  / Use a stub all
1de0: 6f 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61  ocator that alwa
1df0: 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20  ys fails.**     
1e00: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20  SQLITE_MEMDEBUG 
1e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1e20: 20 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69   Debugging versi
1e30: 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c  on of system mal
1e40: 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57  loc().**.** On W
1e50: 69 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53  indows, if the S
1e60: 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c  QLITE_WIN32_MALL
1e70: 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72  OC_VALIDATE macr
1e80: 6f 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64  o is defined and
1e90: 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29   the.** assert()
1ea0: 20 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65   macro is enable
1eb0: 64 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74  d, each call int
1ec0: 6f 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69  o the Win32 nati
1ed0: 76 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65  ve heap subsyste
1ee0: 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20  m.** will cause 
1ef0: 48 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20  HeapValidate to 
1f00: 62 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68  be called.  If h
1f10: 65 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73  eap validation s
1f20: 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a  hould fail, an.*
1f30: 2a 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c  * assertion will
1f40: 20 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a   be triggered..*
1f50: 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20  *.** If none of 
1f60: 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65  the above are de
1f70: 66 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20  fined, then set 
1f80: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
1f90: 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64  LLOC as.** the d
1fa0: 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64  efault..*/.#if d
1fb0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59  efined(SQLITE_SY
1fc0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  STEM_MALLOC) \. 
1fd0: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
1fe0: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20  E_WIN32_MALLOC) 
1ff0: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
2000: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
2010: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2020: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29  SQLITE_MEMDEBUG)
2030: 3e 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20  >1.# error "Two 
2040: 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66  or more of the f
2050: 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65  ollowing compile
2060: 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74  -time configurat
2070: 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72  ion options\. ar
2080: 65 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74  e defined but at
2090: 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c   most one is all
20a0: 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53  owed:\. SQLITE_S
20b0: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51  YSTEM_MALLOC, SQ
20c0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
20d0: 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  C, SQLITE_MEMDEB
20e0: 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52  UG,\. SQLITE_ZER
20f0: 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66  O_MALLOC".#endif
2100: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2110: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
2120: 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64  C) \.  + defined
2130: 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41  (SQLITE_WIN32_MA
2140: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
2150: 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f  ned(SQLITE_ZERO_
2160: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2170: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d  fined(SQLITE_MEM
2180: 44 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69  DEBUG)==0.# defi
2190: 6e 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d  ne SQLITE_SYSTEM
21a0: 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66  _MALLOC 1.#endif
21b0: 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54  ../*.** If SQLIT
21c0: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
21d0: 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c  MIT is not zero,
21e0: 20 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65   then try to kee
21f0: 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f  p the.** sizes o
2200: 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  f memory allocat
2210: 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20  ions below this 
2220: 76 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73  value where poss
2230: 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ible..*/.#if !de
2240: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c  fined(SQLITE_MAL
2250: 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a  LOC_SOFT_LIMIT).
2260: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
2270: 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49  MALLOC_SOFT_LIMI
2280: 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f  T 1024.#endif../
2290: 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20  *.** We need to 
22a0: 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f  define _XOPEN_SO
22b0: 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20  URCE as follows 
22c0: 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62  in order to enab
22d0: 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20  le.** recursive 
22e0: 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20  mutexes on most 
22f0: 55 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64  Unix systems and
2300: 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65   fchmod() on Ope
2310: 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f  nBSD..** But _XO
2320: 50 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e  PEN_SOURCE defin
2330: 65 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d  e causes problem
2340: 73 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20  s for Mac OS X, 
2350: 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a  so omit.** it..*
2360: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  /.#if !defined(_
2370: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26  XOPEN_SOURCE) &&
2380: 20 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57   !defined(__DARW
2390: 49 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65  IN__) && !define
23a0: 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20  d(__APPLE__).#  
23b0: 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f  define _XOPEN_SO
23c0: 55 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a  URCE 600.#endif.
23d0: 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e  ./*.** NDEBUG an
23e0: 64 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61  d SQLITE_DEBUG a
23f0: 72 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49  re opposites.  I
2400: 74 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20  t should always 
2410: 62 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20  be true that.** 
2420: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d  defined(NDEBUG)=
2430: 3d 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  =!defined(SQLITE
2440: 5f 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69  _DEBUG).  If thi
2450: 73 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74  s is not current
2460: 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65  ly true,.** make
2470: 20 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69   it true by defi
2480: 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69  ning or undefini
2490: 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a  ng NDEBUG..**.**
24a0: 20 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20   Setting NDEBUG 
24b0: 6d 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73  makes the code s
24c0: 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65  maller and faste
24d0: 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74  r by disabling t
24e0: 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73  he.** assert() s
24f0: 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65  tatements in the
2500: 20 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61   code.  So we wa
2510: 6e 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61  nt the default a
2520: 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66  ction.** to be f
2530: 6f 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20  or NDEBUG to be 
2540: 73 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74  set and NDEBUG t
2550: 6f 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f  o be undefined o
2560: 6e 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45  nly if SQLITE_DE
2570: 42 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20  BUG.** is set.  
2580: 54 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f  Thus NDEBUG beco
2590: 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61  mes an opt-in ra
25a0: 74 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74  ther than an opt
25b0: 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e  -out.** feature.
25c0: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
25d0: 28 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66  (NDEBUG) && !def
25e0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
25f0: 47 29 20 0a 23 20 64 65 66 69 6e 65 20 4e 44 45  G) .# define NDE
2600: 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66  BUG 1.#endif.#if
2610: 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29   defined(NDEBUG)
2620: 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
2630: 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65  TE_DEBUG).# unde
2640: 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a  f NDEBUG.#endif.
2650: 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51  ./*.** Enable SQ
2660: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
2670: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20  AIN_COMMENTS if 
2680: 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20  SQLITE_DEBUG is 
2690: 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69  turned on..*/.#i
26a0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
26b0: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
26c0: 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65  _COMMENTS) && de
26d0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
26e0: 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  UG).# define SQL
26f0: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
2700: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65  IN_COMMENTS 1.#e
2710: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
2720: 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f  testcase() macro
2730: 20 69 73 20 75 73 65 64 20 74 6f 20 61 69 64 20   is used to aid 
2740: 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65 73 74  in coverage test
2750: 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a 2a 20 64  ing.  When .** d
2760: 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65  oing coverage te
2770: 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69  sting, the condi
2780: 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65 20  tion inside the 
2790: 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74  argument to.** t
27a0: 65 73 74 63 61 73 65 28 29 20 6d 75 73 74 20 62  estcase() must b
27b0: 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74 68  e evaluated both
27c0: 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20   true and false 
27d0: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67  in order to.** g
27e0: 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20 63  et full branch c
27f0: 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20 74 65  overage.  The te
2800: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
2810: 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f  s inserted.** to
2820: 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64 65   help ensure ade
2830: 71 75 61 74 65 20 74 65 73 74 20 63 6f 76 65 72  quate test cover
2840: 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77 68  age in places wh
2850: 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f  ere simple.** co
2860: 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e  ndition/decision
2870: 20 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e 61   coverage is ina
2880: 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65 78  dequate.  For ex
2890: 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65 28  ample, testcase(
28a0: 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  ).** can be used
28b0: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62 6f   to make sure bo
28c0: 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61 72  undary values ar
28d0: 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a  e tested.  For.*
28e0: 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73 2c  * bitmask tests,
28f0: 20 74 65 73 74 63 61 73 65 28 29 20 63 61 6e 20   testcase() can 
2900: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
2910: 73 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a 2a  sure each bit.**
2920: 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74 20   is significant 
2930: 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61 73  and used at leas
2940: 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74  t once.  On swit
2950: 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  ch statements.**
2960: 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65 20   where multiple 
2970: 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65 20  cases go to the 
2980: 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f  same block of co
2990: 64 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  de, testcase().*
29a0: 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68 61  * can insure tha
29b0: 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65 20  t all cases are 
29c0: 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f  evaluated..**.*/
29d0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43  .#ifdef SQLITE_C
29e0: 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20 76  OVERAGE_TEST.  v
29f0: 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65 72  oid sqlite3Cover
2a00: 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66 69  age(int);.# defi
2a10: 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 20 20  ne testcase(X)  
2a20: 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65 33  if( X ){ sqlite3
2a30: 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f  Coverage(__LINE_
2a40: 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65  _); }.#else.# de
2a50: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
2a60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2a70: 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72  he TESTONLY macr
2a80: 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e 63  o is used to enc
2a90: 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64 65  lose variable de
2aa0: 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a  clarations or.**
2ab0: 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20 63   other bits of c
2ac0: 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e 65 65  ode that are nee
2ad0: 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 74  ded to support t
2ae0: 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20  he arguments.** 
2af0: 77 69 74 68 69 6e 20 74 65 73 74 63 61 73 65 28  within testcase(
2b00: 29 20 61 6e 64 20 61 73 73 65 72 74 28 29 20 6d  ) and assert() m
2b10: 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64  acros..*/.#if !d
2b20: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 7c  efined(NDEBUG) |
2b30: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
2b40: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a  _COVERAGE_TEST).
2b50: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
2b60: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
2b70: 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28  define TESTONLY(
2b80: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2b90: 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e 65   Sometimes we ne
2ba0: 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e  ed a small amoun
2bb0: 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20 61  t of code such a
2bc0: 73 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e 69  s a variable ini
2bd0: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74  tialization.** t
2be0: 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c 61  o setup for a la
2bf0: 74 65 72 20 61 73 73 65 72 74 28 29 20 73 74 61  ter assert() sta
2c00: 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e  tement.  We do n
2c10: 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f 64  ot want this cod
2c20: 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77  e to.** appear w
2c30: 68 65 6e 20 61 73 73 65 72 74 28 29 20 69 73 20  hen assert() is 
2c40: 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20 66  disabled.  The f
2c50: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69  ollowing macro i
2c60: 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75  s therefore.** u
2c70: 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  sed to contain t
2c80: 68 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e 20  hat setup code. 
2c90: 20 54 68 65 20 22 56 56 41 22 20 61 63 72 6f 6e   The "VVA" acron
2ca0: 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ym stands for.**
2cb0: 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20   "Verification, 
2cc0: 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20  Validation, and 
2cd0: 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e 20  Accreditation". 
2ce0: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2cf0: 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74   the.** code wit
2d00: 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77  hin VVA_ONLY() w
2d10: 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72  ill only run dur
2d20: 69 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f 6e  ing verification
2d30: 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23   processes..*/.#
2d40: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 20  ifndef NDEBUG.# 
2d50: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
2d60: 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65  X)  X.#else.# de
2d70: 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29  fine VVA_ONLY(X)
2d80: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2d90: 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  he ALWAYS and NE
2da0: 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72 6f  VER macros surro
2db0: 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72  und boolean expr
2dc0: 65 73 73 69 6f 6e 73 20 77 68 69 63 68 20 0a 2a  essions which .*
2dd0: 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74  * are intended t
2de0: 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65  o always be true
2df0: 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65   or false, respe
2e00: 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a  ctively.  Such.*
2e10: 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f  * expressions co
2e20: 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66  uld be omitted f
2e30: 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d  rom the code com
2e40: 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68  pletely.  But th
2e50: 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64  ey.** are includ
2e60: 65 64 20 69 6e 20 61 20 66 65 77 20 63 61 73 65  ed in a few case
2e70: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
2e80: 68 61 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69  hance the resili
2e90: 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74  ence.** of SQLit
2ea0: 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20  e to unexpected 
2eb0: 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61  behavior - to ma
2ec0: 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c  ke the code "sel
2ed0: 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72  f-healing".** or
2ee0: 20 22 64 75 63 74 69 6c 65 22 20 72 61 74 68 65   "ductile" rathe
2ef0: 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72  r than being "br
2f00: 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68  ittle" and crash
2f10: 69 6e 67 20 61 74 20 74 68 65 20 66 69 72 73 74  ing at the first
2f20: 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c  .** hint of unpl
2f30: 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a  anned behavior..
2f40: 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  **.** In other w
2f50: 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64  ords, ALWAYS and
2f60: 20 4e 45 56 45 52 20 61 72 65 20 61 64 64 65 64   NEVER are added
2f70: 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63   for defensive c
2f80: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ode..**.** When 
2f90: 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74  doing coverage t
2fa0: 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e  esting ALWAYS an
2fb0: 64 20 4e 45 56 45 52 20 61 72 65 20 68 61 72 64  d NEVER are hard
2fc0: 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20  -coded to.** be 
2fd0: 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73  true and false s
2fe0: 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72 65 61  o that the unrea
2ff0: 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68 65 79  chable code they
3000: 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a   specify will.**
3010: 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20   not be counted 
3020: 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65  as untested code
3030: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
3040: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
3050: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
3060: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
3070: 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  1).# define NEVE
3080: 52 28 58 29 20 20 20 20 20 20 20 28 30 29 0a 23  R(X)       (0).#
3090: 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  elif !defined(ND
30a0: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 41  EBUG).# define A
30b0: 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28 28  LWAYS(X)      ((
30c0: 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29 2c  X)?1:(assert(0),
30d0: 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  0)).# define NEV
30e0: 45 52 28 58 29 20 20 20 20 20 20 20 28 28 58 29  ER(X)       ((X)
30f0: 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30  ?(assert(0),1):0
3100: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
3110: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
3120: 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  (X).# define NEV
3130: 45 52 28 58 29 20 20 20 20 20 20 20 28 58 29 0a  ER(X)       (X).
3140: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
3150: 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a  turn true (non-z
3160: 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e 70 75  ero) if the inpu
3170: 74 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  t is an integer 
3180: 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67  that is too larg
3190: 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20 33  e.** to fit in 3
31a0: 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20 6d 61  2-bits.  This ma
31b0: 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69  cro is used insi
31c0: 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20 74 65  de of various te
31d0: 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72  stcase().** macr
31e0: 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  os to verify tha
31f0: 74 20 77 65 20 68 61 76 65 20 74 65 73 74 65 64  t we have tested
3200: 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61 72 67   SQLite for larg
3210: 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a  e-file support..
3220: 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f 42 49  */.#define IS_BI
3230: 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58 29 26  G_INT(X)  (((X)&
3240: 7e 28 69 36 34 29 30 78 66 66 66 66 66 66 66 66  ~(i64)0xffffffff
3250: 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )!=0)../*.** The
3260: 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28   macro unlikely(
3270: 29 20 69 73 20 61 20 68 69 6e 74 20 74 68 61 74  ) is a hint that
3280: 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f   surrounds a boo
3290: 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69  lean.** expressi
32a0: 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  on that is usual
32b0: 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f  ly false.  Macro
32c0: 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72 6f 75   likely() surrou
32d0: 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e  nds.** a boolean
32e0: 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
32f0: 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65   is usually true
3300: 2e 20 20 54 68 65 73 65 20 68 69 6e 74 73 20 63  .  These hints c
3310: 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f  ould,.** in theo
3320: 72 79 2c 20 62 65 20 75 73 65 64 20 62 79 20 74  ry, be used by t
3330: 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67  he compiler to g
3340: 65 6e 65 72 61 74 65 20 62 65 74 74 65 72 20 63  enerate better c
3350: 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72  ode, but.** curr
3360: 65 6e 74 6c 79 20 74 68 65 79 20 61 72 65 20 6a  ently they are j
3370: 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72  ust comments for
3380: 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a   human readers..
3390: 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c  */.#define likel
33a0: 79 28 58 29 20 20 20 20 28 58 29 0a 23 64 65 66  y(X)    (X).#def
33b0: 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20  ine unlikely(X) 
33c0: 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22   (X)..#include "
33d0: 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65  hash.h".#include
33e0: 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c   "parse.h".#incl
33f0: 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69  ude <stdio.h>.#i
3400: 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68  nclude <stdlib.h
3410: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69  >.#include <stri
3420: 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ng.h>.#include <
3430: 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75  assert.h>.#inclu
3440: 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f  de <stddef.h>../
3450: 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c 69 6e  *.** If compilin
3460: 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73 73 6f  g for a processo
3470: 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66 6c 6f  r that lacks flo
3480: 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75 70 70  ating point supp
3490: 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69 74 75  ort,.** substitu
34a0: 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72 20 66  te integer for f
34b0: 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f  loating-point.*/
34c0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
34d0: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
34e0: 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f 75 62  NT.# define doub
34f0: 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a  le sqlite_int64.
3500: 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74 20 73  # define float s
3510: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65  qlite_int64.# de
3520: 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f  fine LONGDOUBLE_
3530: 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e 74 36  TYPE sqlite_int6
3540: 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c 49 54  4.# ifndef SQLIT
3550: 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20 64 65  E_BIG_DBL.#   de
3560: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f  fine SQLITE_BIG_
3570: 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33 5f 69  DBL (((sqlite3_i
3580: 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23 20 65  nt64)1)<<50).# e
3590: 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51  ndif.# define SQ
35a0: 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49  LITE_OMIT_DATETI
35b0: 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64 65 66  ME_FUNCS 1.# def
35c0: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ine SQLITE_OMIT_
35d0: 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65 66 20  TRACE 1.# undef 
35e0: 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45 4e 44  SQLITE_MIXED_END
35f0: 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41 54 0a  IAN_64BIT_FLOAT.
3600: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 48  # undef SQLITE_H
3610: 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64 69 66  AVE_ISNAN.#endif
3620: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
3630: 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69 6e 65  BIG_DBL.# define
3640: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20   SQLITE_BIG_DBL 
3650: 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a 0a 2f  (1e99).#endif../
3660: 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50 44 42  *.** OMIT_TEMPDB
3670: 20 69 73 20 73 65 74 20 74 6f 20 31 20 69 66 20   is set to 1 if 
3680: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50  SQLITE_OMIT_TEMP
3690: 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c 20 6f  DB is defined, o
36a0: 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61 72 64  r 0.** afterward
36b0: 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20 6d 61  . Having this ma
36c0: 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f  cro allows us to
36d0: 20 63 61 75 73 65 20 74 68 65 20 43 20 63 6f 6d   cause the C com
36e0: 70 69 6c 65 72 20 0a 2a 2a 20 74 6f 20 6f 6d 69  piler .** to omi
36f0: 74 20 63 6f 64 65 20 75 73 65 64 20 62 79 20 54  t code used by T
3700: 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74 68 6f  EMP tables witho
3710: 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64 65 66  ut messy #ifndef
3720: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a   statements..*/.
3730: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
3740: 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66 69 6e  IT_TEMPDB.#defin
3750: 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 31 0a  e OMIT_TEMPDB 1.
3760: 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 4d  #else.#define OM
3770: 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65 6e 64  IT_TEMPDB 0.#end
3780: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22 66  if../*.** The "f
3790: 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75 6d 62  ile format" numb
37a0: 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  er is an integer
37b0: 20 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d 65   that is increme
37c0: 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a 2a 2a  nted whenever.**
37d0: 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65 6c 20   the VDBE-level 
37e0: 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68 61 6e  file format chan
37f0: 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ges.  The follow
3800: 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66 69 6e  ing macros defin
3810: 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64 65 66  e the.** the def
3820: 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d 61 74  ault file format
3830: 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62 61 73   for new databas
3840: 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78 69 6d  es and the maxim
3850: 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 2a  um file format.*
3860: 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62 72 61  * that the libra
3870: 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a  ry can read..*/.
3880: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
3890: 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34  AX_FILE_FORMAT 4
38a0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
38b0: 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52  DEFAULT_FILE_FOR
38c0: 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  MAT.# define SQL
38d0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45  ITE_DEFAULT_FILE
38e0: 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64 69 66  _FORMAT 4.#endif
38f0: 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e  ../*.** Determin
3900: 65 20 77 68 65 74 68 65 72 20 74 72 69 67 67 65  e whether trigge
3910: 72 73 20 61 72 65 20 72 65 63 75 72 73 69 76 65  rs are recursive
3920: 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54 68   by default.  Th
3930: 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63 68 61  is can be.** cha
3940: 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65  nged at run-time
3950: 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d 61 2e   using a pragma.
3960: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
3970: 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52  TE_DEFAULT_RECUR
3980: 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a 23 20  SIVE_TRIGGERS.# 
3990: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
39a0: 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f  FAULT_RECURSIVE_
39b0: 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e 64 69  TRIGGERS 0.#endi
39c0: 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64 65  f../*.** Provide
39d0: 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65   a default value
39e0: 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 4d 50   for SQLITE_TEMP
39f0: 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65 20 69  _STORE in case i
3a00: 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69  t is not specifi
3a10: 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d  ed.** on the com
3a20: 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66  mand-line.*/.#if
3a30: 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45 4d 50  ndef SQLITE_TEMP
3a40: 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e 65 20  _STORE.# define 
3a50: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
3a60: 45 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  E 1.# define SQL
3a70: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 78  ITE_TEMP_STORE_x
3a80: 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20  c 1  /* Exclude 
3a90: 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a  from ctime.c */.
3aa0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
3ab0: 20 6e 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65   no value has be
3ac0: 65 6e 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20  en provided for 
3ad0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
3ae0: 52 5f 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66  R_THREADS, or if
3af0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  .** SQLITE_TEMP_
3b00: 53 54 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20  STORE is set to 
3b10: 33 20 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d  3 (never use tem
3b20: 70 6f 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73  porary files), s
3b30: 65 74 20 69 74 20 0a 2a 2a 20 74 6f 20 7a 65 72  et it .** to zer
3b40: 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  o..*/.#if SQLITE
3b50: 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c  _TEMP_STORE==3 |
3b60: 7c 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  | SQLITE_THREADS
3b70: 41 46 45 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53  AFE==0.# undef S
3b80: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
3b90: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
3ba0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  e SQLITE_MAX_WOR
3bb0: 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65  KER_THREADS 0.#e
3bc0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
3bd0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
3be0: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
3bf0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
3c00: 52 5f 54 48 52 45 41 44 53 20 38 0a 23 65 6e 64  R_THREADS 8.#end
3c10: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
3c20: 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52  E_DEFAULT_WORKER
3c30: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
3c40: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
3c50: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20  _WORKER_THREADS 
3c60: 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  0.#endif.#if SQL
3c70: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
3c80: 45 52 5f 54 48 52 45 41 44 53 3e 53 51 4c 49 54  ER_THREADS>SQLIT
3c90: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
3ca0: 45 41 44 53 0a 23 20 75 6e 64 65 66 20 53 51 4c  EADS.# undef SQL
3cb0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
3cc0: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
3cd0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
3ce0: 52 5f 54 48 52 45 41 44 53 20 53 51 4c 49 54 45  R_THREADS SQLITE
3cf0: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
3d00: 54 48 52 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a  THREADS.#endif..
3d10: 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20  ./*.** GCC does 
3d20: 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20 6f  not define the o
3d30: 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f 20  ffsetof() macro 
3d40: 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74 6f  so we'll have to
3d50: 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c   do it.** oursel
3d60: 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ves..*/.#ifndef 
3d70: 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e 65  offsetof.#define
3d80: 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43 54   offsetof(STRUCT
3d90: 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e 74  URE,FIELD) ((int
3da0: 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52 55  )((char*)&((STRU
3db0: 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44  CTURE*)0)->FIELD
3dc0: 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
3dd0: 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70 75   Macros to compu
3de0: 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20 6d  te minimum and m
3df0: 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e 75  aximum of two nu
3e00: 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  mbers..*/.#defin
3e10: 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c  e MIN(A,B) ((A)<
3e20: 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 64 65  (B)?(A):(B)).#de
3e30: 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20 28 28  fine MAX(A,B) ((
3e40: 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29 29 0a  A)>(B)?(A):(B)).
3e50: 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20  ./*.** Check to 
3e60: 73 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68  see if this mach
3e70: 69 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e  ine uses EBCDIC.
3e80: 20 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20    (Yes, believe 
3e90: 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68  it or.** not, th
3ea0: 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61  ere are still ma
3eb0: 63 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65  chines out there
3ec0: 20 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43   that use EBCDIC
3ed0: 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d  .).*/.#if 'A' ==
3ee0: 20 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65   '\301'.# define
3ef0: 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31   SQLITE_EBCDIC 1
3f00: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
3f10: 53 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23  SQLITE_ASCII 1.#
3f20: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74  endif../*.** Int
3f30: 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73  egers of known s
3f40: 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70  izes.  These typ
3f50: 65 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e  edefs might chan
3f60: 67 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74  ge for architect
3f70: 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68  ures.** where th
3f80: 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50  e sizes very.  P
3f90: 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72  reprocessor macr
3fa0: 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  os are available
3fb0: 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20   so that the.** 
3fc0: 74 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e  types can be con
3fd0: 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69  veniently redefi
3fe0: 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ned at compile-t
3ff0: 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a  ype.  Like this:
4000: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63  .**.**         c
4010: 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50  c '-DUINTPTR_TYP
4020: 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27  E=long long int'
4030: 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20   ....*/.#ifndef 
4040: 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66  UINT32_TYPE.# if
4050: 64 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f  def HAVE_UINT32_
4060: 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  T.#  define UINT
4070: 33 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74  32_TYPE uint32_t
4080: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
4090: 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e  e UINT32_TYPE un
40a0: 73 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64  signed int.# end
40b0: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
40c0: 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20  f UINT16_TYPE.# 
40d0: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31  ifdef HAVE_UINT1
40e0: 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49  6_T.#  define UI
40f0: 4e 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36  NT16_TYPE uint16
4100: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
4110: 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20  ine UINT16_TYPE 
4120: 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69  unsigned short i
4130: 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  nt.# endif.#endi
4140: 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f  f.#ifndef INT16_
4150: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
4160: 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66  E_INT16_T.#  def
4170: 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69  ine INT16_TYPE i
4180: 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20  nt16_t.# else.# 
4190: 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59   define INT16_TY
41a0: 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65  PE short int.# e
41b0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
41c0: 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23  def UINT8_TYPE.#
41d0: 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54   ifdef HAVE_UINT
41e0: 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49  8_T.#  define UI
41f0: 4e 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74  NT8_TYPE uint8_t
4200: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
4210: 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73  e UINT8_TYPE uns
4220: 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64  igned char.# end
4230: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
4240: 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66  f INT8_TYPE.# if
4250: 64 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a  def HAVE_INT8_T.
4260: 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54  #  define INT8_T
4270: 59 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73  YPE int8_t.# els
4280: 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38  e.#  define INT8
4290: 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61  _TYPE signed cha
42a0: 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  r.# endif.#endif
42b0: 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55  .#ifndef LONGDOU
42c0: 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e  BLE_TYPE.# defin
42d0: 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50  e LONGDOUBLE_TYP
42e0: 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65  E long double.#e
42f0: 6e 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c  ndif.typedef sql
4300: 69 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20  ite_int64 i64;  
4310: 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74          /* 8-byt
4320: 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  e signed integer
4330: 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69   */.typedef sqli
4340: 74 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20  te_uint64 u64;  
4350: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
4360: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
4370: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
4380: 54 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20  T32_TYPE u32;   
4390: 20 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74          /* 4-byt
43a0: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
43b0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49  er */.typedef UI
43c0: 4e 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20  NT16_TYPE u16;  
43d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
43e0: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
43f0: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49  ger */.typedef I
4400: 4e 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20  NT16_TYPE i16;  
4410: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62            /* 2-b
4420: 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67  yte signed integ
4430: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49  er */.typedef UI
4440: 4e 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20  NT8_TYPE u8;    
4450: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
4460: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
4470: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49  ger */.typedef I
4480: 4e 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20  NT8_TYPE i8;    
4490: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62            /* 1-b
44a0: 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67  yte signed integ
44b0: 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c  er */../*.** SQL
44c0: 49 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61  ITE_MAX_U32 is a
44d0: 20 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68   u64 constant th
44e0: 61 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75  at is the maximu
44f0: 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74  m u64 value.** t
4500: 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65  hat can be store
4510: 64 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f  d in a u32 witho
4520: 75 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e  ut loss of data.
4530: 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69    The value.** i
4540: 73 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66  s 0x00000000ffff
4550: 66 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75  ffff.  But becau
4560: 73 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20  se of quirks of 
4570: 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20  some compilers, 
4580: 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70  we.** have to sp
4590: 65 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20  ecify the value 
45a0: 69 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75  in the less intu
45b0: 69 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f  itive manner sho
45c0: 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wn:.*/.#define S
45d0: 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28  QLITE_MAX_U32  (
45e0: 28 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31  (((u64)1)<<32)-1
45f0: 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74  )../*.** The dat
4600: 61 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74  atype used to st
4610: 6f 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66  ore estimates of
4620: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
4630: 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c  ows in a.** tabl
4640: 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69  e or index.  Thi
4650: 73 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64  s is an unsigned
4660: 20 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20   integer type.  
4670: 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20  For 99.9% of.** 
4680: 74 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d  the world, a 32-
4690: 62 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73  bit integer is s
46a0: 75 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20  ufficient.  But 
46b0: 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
46c0: 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20  .** can be used 
46d0: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  at compile-time 
46e0: 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23  if desired..*/.#
46f0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42  ifdef SQLITE_64B
4700: 49 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65  IT_STATS. typede
4710: 66 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20  f u64 tRowcnt;  
4720: 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79    /* 64-bit only
4730: 20 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74   if requested at
4740: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f   compile-time */
4750: 0a 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20  .#else. typedef 
4760: 75 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20  u32 tRowcnt;    
4770: 2f 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65  /* 32-bit is the
4780: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64   default */.#end
4790: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61  if../*.** Estima
47a0: 74 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75  ted quantities u
47b0: 73 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c  sed for query pl
47c0: 61 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65  anning are store
47d0: 64 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c  d as 16-bit.** l
47e0: 6f 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20  ogarithms.  For 
47f0: 71 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20  quantity X, the 
4800: 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20  value stored is 
4810: 31 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69  10*log2(X).  Thi
4820: 73 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73  s.** gives a pos
4830: 73 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76  sible range of v
4840: 61 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69  alues of approxi
4850: 6d 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74  mately 1.0e986 t
4860: 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74  o 1e-986..** But
4870: 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c   the allowed val
4880: 75 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22  ues are "grainy"
4890: 2e 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c  .  Not every val
48a0: 75 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61  ue is representa
48b0: 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ble..** For exam
48c0: 70 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20  ple, quantities 
48d0: 31 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f  16 and 17 are bo
48e0: 74 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62  th represented b
48f0: 79 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66  y a LogEst.** of
4900: 20 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73   40.  However, s
4910: 69 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e  ince LogEst quan
4920: 74 61 74 69 65 73 20 61 72 65 20 73 75 70 70 6f  taties are suppo
4930: 73 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74  se to be estimat
4940: 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74  es,.** not exact
4950: 20 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d   values, this im
4960: 70 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74  precision is not
4970: 20 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a   a problem..**.*
4980: 2a 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68  * "LogEst" is sh
4990: 6f 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74  ort for "Logarit
49a0: 68 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a  hmic Estimate"..
49b0: 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a  **.** Examples:.
49c0: 2a 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20  **      1 -> 0  
49d0: 20 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d              20 -
49e0: 3e 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30  > 43          10
49f0: 30 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20  000 -> 132.**   
4a00: 20 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20     2 -> 10      
4a10: 20 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20         25 -> 46 
4a20: 20 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d           25000 -
4a30: 3e 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20  > 146.**      3 
4a40: 2d 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20  -> 16           
4a50: 20 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20   100 -> 66      
4a60: 20 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39    1000000 -> 199
4a70: 0a 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30  .**      4 -> 20
4a80: 20 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20             1000 
4a90: 2d 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34  -> 99        104
4aa0: 38 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20  8576 -> 200.**  
4ab0: 20 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20     10 -> 33     
4ac0: 20 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30        1024 -> 10
4ad0: 30 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20  0    4294967296 
4ae0: 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65  -> 320.**.** The
4af0: 20 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e   LogEst can be n
4b00: 65 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63  egative to indic
4b10: 61 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76  ate fractional v
4b20: 61 6c 75 65 73 2e 20 0a 2a 2a 20 45 78 61 6d 70  alues. .** Examp
4b30: 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e  les:.**.**    0.
4b40: 35 20 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20  5 -> -10        
4b50: 20 20 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20     0.1 -> -33   
4b60: 20 20 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d       0.0625 -> -
4b70: 34 30 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  40.*/.typedef IN
4b80: 54 31 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b  T16_TYPE LogEst;
4b90: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
4ba0: 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74  o determine whet
4bb0: 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e 65 20  her the machine 
4bc0: 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74 6c 65  is big or little
4bd0: 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20   endian,.** and 
4be0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
4bf0: 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74 69 6f  hat determinatio
4c00: 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20 6f 72  n is run-time or
4c10: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a   compile-time..*
4c20: 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20 70 65  *.** For best pe
4c30: 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20 61 74  rformance, an at
4c40: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
4c50: 20 67 75 65 73 73 20 61 74 20 74 68 65 20 62 79   guess at the by
4c60: 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73 69 6e  te-order.** usin
4c70: 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72  g C-preprocessor
4c80: 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74 68 61   macros.  If tha
4c90: 74 20 69 73 20 75 6e 73 75 63 63 65 73 73 66 75  t is unsuccessfu
4ca0: 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44 53 51  l, or if.** -DSQ
4cb0: 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54  LITE_RUNTIME_BYT
4cc0: 45 4f 52 44 45 52 3d 31 20 69 73 20 73 65 74 2c  EORDER=1 is set,
4cd0: 20 74 68 65 6e 20 62 79 74 65 2d 6f 72 64 65 72   then byte-order
4ce0: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a   is determined.*
4cf0: 2a 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a  * at run-time..*
4d00: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4d10: 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e  AMALGAMATION.con
4d20: 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e  st int sqlite3on
4d30: 65 20 3d 20 31 3b 0a 23 65 6c 73 65 0a 65 78 74  e = 1;.#else.ext
4d40: 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71  ern const int sq
4d50: 6c 69 74 65 33 6f 6e 65 3b 0a 23 65 6e 64 69 66  lite3one;.#endif
4d60: 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28 69 33  .#if (defined(i3
4d70: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
4d80: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
4d90: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
4da0: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
4db0: 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34  defined(__x86_64
4dc0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78  ) || defined(__x
4dd0: 38 36 5f 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69  86_64__) || defi
4de0: 6e 65 64 28 5f 4d 5f 58 36 34 29 20 20 7c 7c 20  ned(_M_X64)  || 
4df0: 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65     \.     define
4e00: 64 28 5f 4d 5f 41 4d 44 36 34 29 20 7c 7c 20 64  d(_M_AMD64) || d
4e10: 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20  efined(_M_ARM)  
4e20: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
4e30: 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20  x86)   ||    \. 
4e40: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 61 72      defined(__ar
4e50: 6d 5f 5f 29 29 20 26 26 20 21 64 65 66 69 6e 65  m__)) && !define
4e60: 64 28 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45  d(SQLITE_RUNTIME
4e70: 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20 64 65  _BYTEORDER).# de
4e80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45  fine SQLITE_BYTE
4e90: 4f 52 44 45 52 20 20 20 20 31 32 33 34 0a 23 20  ORDER    1234.# 
4ea0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
4eb0: 47 45 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64  GENDIAN    0.# d
4ec0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54  efine SQLITE_LIT
4ed0: 54 4c 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65  TLEENDIAN 1.# de
4ee0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31  fine SQLITE_UTF1
4ef0: 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f  6NATIVE  SQLITE_
4f00: 55 54 46 31 36 4c 45 0a 23 65 6e 64 69 66 0a 23  UTF16LE.#endif.#
4f10: 69 66 20 28 64 65 66 69 6e 65 64 28 73 70 61 72  if (defined(spar
4f20: 63 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  c)    || defined
4f30: 28 5f 5f 70 70 63 5f 5f 29 29 20 20 5c 0a 20 20  (__ppc__))  \.  
4f40: 20 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51    && !defined(SQ
4f50: 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54  LITE_RUNTIME_BYT
4f60: 45 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65  EORDER).# define
4f70: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
4f80: 52 20 20 20 20 34 33 32 31 0a 23 20 64 65 66 69  R    4321.# defi
4f90: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
4fa0: 49 41 4e 20 20 20 20 31 0a 23 20 64 65 66 69 6e  IAN    1.# defin
4fb0: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
4fc0: 4e 44 49 41 4e 20 30 0a 23 20 64 65 66 69 6e 65  NDIAN 0.# define
4fd0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
4fe0: 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31  IVE  SQLITE_UTF1
4ff0: 36 42 45 0a 23 65 6e 64 69 66 0a 23 69 66 20 21  6BE.#endif.#if !
5000: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 42  defined(SQLITE_B
5010: 59 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66 69  YTEORDER).# defi
5020: 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  ne SQLITE_BYTEOR
5030: 44 45 52 20 20 20 20 30 20 20 20 20 20 2f 2a 20  DER    0     /* 
5040: 30 20 6d 65 61 6e 73 20 22 75 6e 6b 6e 6f 77 6e  0 means "unknown
5050: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
5060: 22 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51  " */.# define SQ
5070: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20  LITE_BIGENDIAN  
5080: 20 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71    (*(char *)(&sq
5090: 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20  lite3one)==0).# 
50a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49  define SQLITE_LI
50b0: 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68  TTLEENDIAN (*(ch
50c0: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
50d0: 65 29 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20  e)==1).# define 
50e0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
50f0: 56 45 20 20 28 53 51 4c 49 54 45 5f 42 49 47 45  VE  (SQLITE_BIGE
5100: 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46  NDIAN?SQLITE_UTF
5110: 31 36 42 45 3a 53 51 4c 49 54 45 5f 55 54 46 31  16BE:SQLITE_UTF1
5120: 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  6LE).#endif../*.
5130: 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72  ** Constants for
5140: 20 74 68 65 20 6c 61 72 67 65 73 74 20 61 6e 64   the largest and
5150: 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69 62   smallest possib
5160: 6c 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64  le 64-bit signed
5170: 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68   integers..** Th
5180: 65 73 65 20 6d 61 63 72 6f 73 20 61 72 65 20 64  ese macros are d
5190: 65 73 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20  esigned to work 
51a0: 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74  correctly on bot
51b0: 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d  h 32-bit and 64-
51c0: 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73  bit.** compilers
51d0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52  ..*/.#define LAR
51e0: 47 45 53 54 5f 49 4e 54 36 34 20 20 28 30 78 66  GEST_INT64  (0xf
51f0: 66 66 66 66 66 66 66 7c 28 28 28 69 36 34 29 30  fffffff|(((i64)0
5200: 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 29  x7fffffff)<<32))
5210: 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53  .#define SMALLES
5220: 54 5f 49 4e 54 36 34 20 28 28 28 69 36 34 29 2d  T_INT64 (((i64)-
5230: 31 29 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54  1) - LARGEST_INT
5240: 36 34 29 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e  64)../* .** Roun
5250: 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20 74 6f  d up a number to
5260: 20 74 68 65 20 6e 65 78 74 20 6c 61 72 67 65 72   the next larger
5270: 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20   multiple of 8. 
5280: 20 54 68 69 73 20 69 73 20 75 73 65 64 0a 2a 2a   This is used.**
5290: 20 74 6f 20 66 6f 72 63 65 20 38 2d 62 79 74 65   to force 8-byte
52a0: 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34   alignment on 64
52b0: 2d 62 69 74 20 61 72 63 68 69 74 65 63 74 75 72  -bit architectur
52c0: 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52  es..*/.#define R
52d0: 4f 55 4e 44 38 28 78 29 20 20 20 20 20 28 28 28  OUND8(x)     (((
52e0: 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a  x)+7)&~7)../*.**
52f0: 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74   Round down to t
5300: 68 65 20 6e 65 61 72 65 73 74 20 6d 75 6c 74 69  he nearest multi
5310: 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66  ple of 8.*/.#def
5320: 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78  ine ROUNDDOWN8(x
5330: 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a  ) ((x)&~7)../*.*
5340: 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68  * Assert that th
5350: 65 20 70 6f 69 6e 74 65 72 20 58 20 69 73 20 61  e pointer X is a
5360: 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62  ligned to an 8-b
5370: 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 20 20 54  yte boundary.  T
5380: 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20  his.** macro is 
5390: 75 73 65 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e  used only within
53a0: 20 61 73 73 65 72 74 28 29 20 74 6f 20 76 65 72   assert() to ver
53b0: 69 66 79 20 74 68 61 74 20 74 68 65 20 63 6f 64  ify that the cod
53c0: 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c  e gets.** all al
53d0: 69 67 6e 6d 65 6e 74 20 72 65 73 74 72 69 63 74  ignment restrict
53e0: 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a  ions correct..**
53f0: 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69 66 20 53  .** Except, if S
5400: 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49  QLITE_4_BYTE_ALI
5410: 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64  GNED_MALLOC is d
5420: 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74 68 65  efined, then the
5430: 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d  .** underlying m
5440: 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e  alloc() implemen
5450: 74 61 74 69 6f 6e 20 6d 69 67 68 74 20 72 65 74  tation might ret
5460: 75 72 6e 20 75 73 20 34 2d 62 79 74 65 20 61 6c  urn us 4-byte al
5470: 69 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72  igned.** pointer
5480: 73 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 65  s.  In that case
5490: 2c 20 6f 6e 6c 79 20 76 65 72 69 66 79 20 34 2d  , only verify 4-
54a0: 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a  byte alignment..
54b0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
54c0: 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f  _4_BYTE_ALIGNED_
54d0: 4d 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20  MALLOC.# define 
54e0: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
54f0: 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68  MENT(X)   ((((ch
5500: 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a  ar*)(X) - (char*
5510: 29 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65  )0)&3)==0).#else
5520: 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f  .# define EIGHT_
5530: 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58  BYTE_ALIGNMENT(X
5540: 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58  )   ((((char*)(X
5550: 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 37 29  ) - (char*)0)&7)
5560: 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ==0).#endif../*.
5570: 2a 2a 20 44 69 73 61 62 6c 65 20 4d 4d 41 50 20  ** Disable MMAP 
5580: 6f 6e 20 70 6c 61 74 66 6f 72 6d 73 20 77 68 65  on platforms whe
5590: 72 65 20 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74  re it is known t
55a0: 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69  o not work.*/.#i
55b0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e  f defined(__Open
55c0: 42 53 44 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  BSD__) || define
55d0: 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20  d(__QNXNTO__).# 
55e0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  undef SQLITE_MAX
55f0: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66  _MMAP_SIZE.# def
5600: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  ine SQLITE_MAX_M
5610: 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69  MAP_SIZE 0.#endi
5620: 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74  f../*.** Default
5630: 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66   maximum size of
5640: 20 6d 65 6d 6f 72 79 20 75 73 65 64 20 62 79 20   memory used by 
5650: 6d 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f  memory-mapped I/
5660: 4f 20 69 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a  O in the VFS.*/.
5670: 23 69 66 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f  #ifdef __APPLE__
5680: 0a 23 20 69 6e 63 6c 75 64 65 20 3c 54 61 72 67  .# include <Targ
5690: 65 74 43 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68  etConditionals.h
56a0: 3e 0a 23 20 69 66 20 54 41 52 47 45 54 5f 4f 53  >.# if TARGET_OS
56b0: 5f 49 50 48 4f 4e 45 0a 23 20 20 20 75 6e 64 65  _IPHONE.#   unde
56c0: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  f SQLITE_MAX_MMA
56d0: 50 5f 53 49 5a 45 0a 23 20 20 20 64 65 66 69 6e  P_SIZE.#   defin
56e0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
56f0: 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66  P_SIZE 0.# endif
5700: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
5710: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
5720: 53 49 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65  SIZE.# if define
5730: 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20  d(__linux__) \. 
5740: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 57 49 4e   || defined(_WIN
5750: 33 32 29 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69  32) \.  || (defi
5760: 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26  ned(__APPLE__) &
5770: 26 20 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48  & defined(__MACH
5780: 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69  __)) \.  || defi
5790: 6e 65 64 28 5f 5f 73 75 6e 29 0a 23 20 20 20 64  ned(__sun).#   d
57a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
57b0: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78 37 66 66  _MMAP_SIZE 0x7ff
57c0: 66 30 30 30 30 20 20 2f 2a 20 32 31 34 37 34 31  f0000  /* 214741
57d0: 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23  8112 */.# else.#
57e0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
57f0: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
5800: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
5810: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
5820: 50 5f 53 49 5a 45 5f 78 63 20 31 20 2f 2a 20 65  P_SIZE_xc 1 /* e
5830: 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d  xclude from ctim
5840: 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  e.c */.#endif../
5850: 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74  *.** The default
5860: 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65   MMAP_SIZE is ze
5870: 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f  ro on all platfo
5880: 72 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69  rms.  Or, even i
5890: 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65  f a larger.** de
58a0: 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20  fault MMAP_SIZE 
58b0: 69 73 20 73 70 65 63 69 66 69 65 64 20 61 74 20  is specified at 
58c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61  compile-time, ma
58d0: 6b 65 20 73 75 72 65 20 74 68 61 74 20 69 74 20  ke sure that it 
58e0: 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65  does.** not exce
58f0: 65 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d  ed the maximum m
5900: 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  map size..*/.#if
5910: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
5920: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  ULT_MMAP_SIZE.# 
5930: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
5940: 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20  FAULT_MMAP_SIZE 
5950: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
5960: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
5970: 49 5a 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63  IZE_xc 1  /* Exc
5980: 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e  lude from ctime.
5990: 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 20  c */.#endif.#if 
59a0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
59b0: 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f  MAP_SIZE>SQLITE_
59c0: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
59d0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  undef SQLITE_DEF
59e0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  AULT_MMAP_SIZE.#
59f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
5a00: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
5a10: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
5a20: 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  _SIZE.#endif../*
5a30: 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20  .** Only one of 
5a40: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
5a50: 41 54 33 20 6f 72 20 53 51 4c 49 54 45 5f 45 4e  AT3 or SQLITE_EN
5a60: 41 42 4c 45 5f 53 54 41 54 34 20 63 61 6e 20 62  ABLE_STAT4 can b
5a70: 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20 50 72  e defined..** Pr
5a80: 69 6f 72 69 74 79 20 69 73 20 67 69 76 65 6e 20  iority is given 
5a90: 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  to SQLITE_ENABLE
5aa0: 5f 53 54 41 54 34 2e 20 20 49 66 20 65 69 74 68  _STAT4.  If eith
5ab0: 65 72 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20  er are defined, 
5ac0: 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65 20 53  also.** define S
5ad0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5ae0: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a 23  T3_OR_STAT4.*/.#
5af0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
5b00: 42 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e 64 65  BLE_STAT4.# unde
5b10: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
5b20: 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53  STAT3.# define S
5b30: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5b40: 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65  T3_OR_STAT4 1.#e
5b50: 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  lif SQLITE_ENABL
5b60: 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65  E_STAT3.# define
5b70: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
5b80: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a  TAT3_OR_STAT4 1.
5b90: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  #elif SQLITE_ENA
5ba0: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
5bb0: 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  T4.# undef SQLIT
5bc0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
5bd0: 52 5f 53 54 41 54 34 0a 23 65 6e 64 69 66 0a 0a  R_STAT4.#endif..
5be0: 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54 52 41 43  /*.** SELECTTRAC
5bf0: 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c 6c 20 62  E_ENABLED will b
5c00: 65 20 65 69 74 68 65 72 20 31 20 6f 72 20 30 20  e either 1 or 0 
5c10: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
5c20: 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74  ther or not.** t
5c30: 68 65 20 53 65 6c 65 63 74 20 71 75 65 72 79 20  he Select query 
5c40: 67 65 6e 65 72 61 74 6f 72 20 74 72 61 63 69 6e  generator tracin
5c50: 67 20 6c 6f 67 69 63 20 69 73 20 74 75 72 6e 65  g logic is turne
5c60: 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  d on..*/.#if def
5c70: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
5c80: 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  G) || defined(SQ
5c90: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45  LITE_ENABLE_SELE
5ca0: 43 54 54 52 41 43 45 29 0a 23 20 64 65 66 69 6e  CTTRACE).# defin
5cb0: 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  e SELECTTRACE_EN
5cc0: 41 42 4c 45 44 20 31 0a 23 65 6c 73 65 0a 23 20  ABLED 1.#else.# 
5cd0: 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41  define SELECTTRA
5ce0: 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a 23 65 6e  CE_ENABLED 0.#en
5cf0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
5d00: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
5d10: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
5d20: 65 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  e is used to sto
5d30: 72 65 20 74 68 65 20 62 75 73 79 2d 68 61 6e 64  re the busy-hand
5d40: 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20  ler.** callback 
5d50: 66 6f 72 20 61 20 67 69 76 65 6e 20 73 71 6c 69  for a given sqli
5d60: 74 65 20 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a  te handle. .**.*
5d70: 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62 75 73  * The sqlite.bus
5d80: 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20  yHandler member 
5d90: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20 73 74  of the sqlite st
5da0: 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  ruct contains th
5db0: 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61  e busy.** callba
5dc0: 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  ck for the datab
5dd0: 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61 63 68  ase handle. Each
5de0: 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20 76 69   pager opened vi
5df0: 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20  a the sqlite.** 
5e00: 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73 65 64  handle is passed
5e10: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 73 71   a pointer to sq
5e20: 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72  lite.busyHandler
5e30: 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e 64 6c  . The busy-handl
5e40: 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69  er.** callback i
5e50: 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f  s currently invo
5e60: 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69  ked only from wi
5e70: 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f  thin pager.c..*/
5e80: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5e90: 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75 73 79  BusyHandler Busy
5ea0: 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63 74 20  Handler;.struct 
5eb0: 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20  BusyHandler {.  
5ec0: 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76 6f 69  int (*xFunc)(voi
5ed0: 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68  d *,int);  /* Th
5ee0: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
5ef0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 3b  */.  void *pArg;
5f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f10: 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f 20  /* First arg to 
5f20: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  busy callback */
5f30: 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20 20  .  int nBusy;   
5f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
5f50: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
5f60: 68 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c  h each busy call
5f70: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61   */.};../*.** Na
5f80: 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72  me of the master
5f90: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e   database table.
5fa0: 20 20 54 68 65 20 6d 61 73 74 65 72 20 64 61 74    The master dat
5fb0: 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69  abase table.** i
5fc0: 73 20 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c  s a special tabl
5fd0: 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  e that holds the
5fe0: 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69   names and attri
5ff0: 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20  butes of all.** 
6000: 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20  user tables and 
6010: 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66  indices..*/.#def
6020: 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20  ine MASTER_NAME 
6030: 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61        "sqlite_ma
6040: 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45  ster".#define TE
6050: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20  MP_MASTER_NAME  
6060: 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
6070: 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ter"../*.** The 
6080: 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65  root-page of the
6090: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
60a0: 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69   table..*/.#defi
60b0: 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20  ne MASTER_ROOT  
60c0: 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
60d0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63  e name of the sc
60e0: 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23  hema table..*/.#
60f0: 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41  define SCHEMA_TA
6100: 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f  BLE(x)  ((!OMIT_
6110: 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f  TEMPDB)&&(x==1)?
6120: 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45  TEMP_MASTER_NAME
6130: 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f  :MASTER_NAME)../
6140: 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e  *.** A convenien
6150: 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65  ce macro that re
6160: 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
6170: 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a   of elements in.
6180: 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a  ** an array..*/.
6190: 23 64 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a  #define ArraySiz
61a0: 65 28 58 29 20 20 20 20 28 28 69 6e 74 29 28 73  e(X)    ((int)(s
61b0: 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28  izeof(X)/sizeof(
61c0: 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44  X[0])))../*.** D
61d0: 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20  etermine if the 
61e0: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f  argument is a po
61f0: 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64  wer of two.*/.#d
6200: 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54  efine IsPowerOfT
6210: 77 6f 28 58 29 20 28 28 28 58 29 26 28 28 58 29  wo(X) (((X)&((X)
6220: 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  -1))==0)../*.** 
6230: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61  The following va
6240: 6c 75 65 20 61 73 20 61 20 64 65 73 74 72 75 63  lue as a destruc
6250: 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65  tor means to use
6260: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
6270: 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33  ..** The sqlite3
6280: 44 62 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65  DbFree() routine
6290: 20 72 65 71 75 69 72 65 73 20 74 77 6f 20 70 61   requires two pa
62a0: 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64  rameters instead
62b0: 20 6f 66 20 74 68 65 20 0a 2a 2a 20 6f 6e 65 20   of the .** one 
62c0: 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20 64  parameter that d
62d0: 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61  estructors norma
62e0: 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77 65  lly want.  So we
62f0: 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64 75   have to introdu
6300: 63 65 20 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69  ce .** this magi
6310: 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  c value that the
6320: 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68   code knows to h
6330: 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c  andle differentl
6340: 79 2e 20 20 41 6e 79 20 0a 2a 2a 20 70 6f 69 6e  y.  Any .** poin
6350: 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65  ter will work he
6360: 72 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74  re as long as it
6370: 20 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f   is distinct fro
6380: 6d 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a  m SQLITE_STATIC.
6390: 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52  ** and SQLITE_TR
63a0: 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66  ANSIENT..*/.#def
63b0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d  ine SQLITE_DYNAM
63c0: 49 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64  IC   ((sqlite3_d
63d0: 65 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73  estructor_type)s
63e0: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
63f0: 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51  )../*.** When SQ
6400: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73  LITE_OMIT_WSD is
6410: 20 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61   defined, it mea
6420: 6e 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67  ns that the targ
6430: 65 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73  et platform does
6440: 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  .** not support 
6450: 57 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20  Writable Static 
6460: 44 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20  Data (WSD) such 
6470: 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74  as global and st
6480: 61 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a  atic variables..
6490: 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73  ** All variables
64a0: 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20   must either be 
64b0: 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20  on the stack or 
64c0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
64d0: 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68  cated from.** th
64e0: 65 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53  e heap.  When WS
64f0: 44 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64  D is unsupported
6500: 2c 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64  , the variable d
6510: 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74  eclarations scat
6520: 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68  tered.** through
6530: 6f 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63  out the SQLite c
6540: 6f 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20  ode must become 
6550: 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61  constants instea
6560: 64 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57  d.  The SQLITE_W
6570: 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75  SD.** macro is u
6580: 73 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72  sed for this pur
6590: 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65  pose.  And inste
65a0: 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e  ad of referencin
65b0: 67 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a  g the variable.*
65c0: 2a 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75  * directly, we u
65d0: 73 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20  se its constant 
65e0: 61 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b  as a key to look
65f0: 75 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  up the run-time 
6600: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66  allocated.** buf
6610: 66 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72  fer that holds r
6620: 65 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54  eal variable.  T
6630: 68 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61  he constant is a
6640: 6c 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69  lso the initiali
6650: 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  zer.** for the r
6660: 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65  un-time allocate
6670: 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20  d buffer..**.** 
6680: 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73  In the usual cas
6690: 65 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73  e where WSD is s
66a0: 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51  upported, the SQ
66b0: 4c 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f  LITE_WSD and GLO
66c0: 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65  BAL.** macros be
66d0: 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20  come no-ops and 
66e0: 68 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72  have zero perfor
66f0: 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f  mance impact..*/
6700: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
6710: 4d 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  MIT_WSD.  #defin
6720: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e  e SQLITE_WSD con
6730: 73 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f  st.  #define GLO
6740: 42 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73  BAL(t,v) (*(t*)s
6750: 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28  qlite3_wsd_find(
6760: 28 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a  (void*)&(v), siz
6770: 65 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69  eof(v))).  #defi
6780: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
6790: 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74  Config GLOBAL(st
67a0: 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
67b0: 69 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  ig, sqlite3Confi
67c0: 67 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  g).  int sqlite3
67d0: 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c  _wsd_init(int N,
67e0: 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20   int J);.  void 
67f0: 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e  *sqlite3_wsd_fin
6800: 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c  d(void *K, int L
6810: 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
6820: 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 0a 20  ne SQLITE_WSD . 
6830: 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28   #define GLOBAL(
6840: 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65  t,v) v.  #define
6850: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
6860: 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66  nfig sqlite3Conf
6870: 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ig.#endif../*.**
6880: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
6890: 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74  acros are used t
68a0: 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69  o suppress compi
68b0: 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64  ler warnings and
68c0: 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63   to.** make it c
68d0: 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65  lear to human re
68e0: 61 64 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e  aders when a fun
68f0: 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20  ction parameter 
6900: 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79 20  is deliberately 
6910: 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64 20  .** left unused 
6920: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
6930: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54  of a function. T
6940: 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70 70  his usually happ
6950: 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75  ens when.** a fu
6960: 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64  nction is called
6970: 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e 20   via a function 
6980: 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78 61  pointer. For exa
6990: 6d 70 6c 65 20 74 68 65 20 0a 2a 2a 20 69 6d 70  mple the .** imp
69a0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
69b0: 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20  n SQL aggregate 
69c0: 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61  step callback ma
69d0: 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a  y not use the.**
69e0: 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63   parameter indic
69f0: 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72  ating the number
6a00: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61   of arguments pa
6a10: 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72  ssed to the aggr
6a20: 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20  egate,.** if it 
6a30: 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20  knows that this 
6a40: 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65  is enforced else
6a50: 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  where..**.** Whe
6a60: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
6a70: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
6a80: 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e  ed at all within
6a90: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66   the body of a f
6aa0: 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69  unction,.** it i
6ab0: 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65  s generally name
6ac0: 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22  d "NotUsed" or "
6ad0: 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b  NotUsed2" to mak
6ae0: 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c  e things even cl
6af0: 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65  earer..** Howeve
6b00: 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20  r, these macros 
6b10: 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64  may also be used
6b20: 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72   to suppress war
6b30: 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f  nings related to
6b40: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74  .** parameters t
6b50: 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e  hat may or may n
6b60: 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e  ot be used depen
6b70: 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74  ding on compilat
6b80: 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20  ion options..** 
6b90: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73  For example thos
6ba0: 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c  e parameters onl
6bb0: 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74  y used in assert
6bc0: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49  () statements. I
6bd0: 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73  n these.** cases
6be0: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
6bf0: 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72  are named as per
6c00: 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65   the usual conve
6c10: 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ntions..*/.#defi
6c20: 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  ne UNUSED_PARAME
6c30: 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29  TER(x) (void)(x)
6c40: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
6c50: 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20  PARAMETER2(x,y) 
6c60: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
6c70: 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d  (x),UNUSED_PARAM
6c80: 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46  ETER(y)../*.** F
6c90: 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65  orward reference
6ca0: 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a  s to structures.
6cb0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
6cc0: 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66  t AggInfo AggInf
6cd0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
6ce0: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75  t AuthContext Au
6cf0: 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  thContext;.typed
6d00: 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e  ef struct Autoin
6d10: 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66  cInfo AutoincInf
6d20: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
6d30: 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b  t Bitvec Bitvec;
6d40: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6d50: 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b  CollSeq CollSeq;
6d60: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6d70: 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74  Column Column;.t
6d80: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
6d90: 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72   Db;.typedef str
6da0: 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d  uct Schema Schem
6db0: 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  a;.typedef struc
6dc0: 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70  t Expr Expr;.typ
6dd0: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
6de0: 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74  List ExprList;.t
6df0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
6e00: 70 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e 3b  prSpan ExprSpan;
6e10: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6e20: 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64  FKey FKey;.typed
6e30: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
6e40: 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73  structor FuncDes
6e50: 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66  tructor;.typedef
6e60: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20   struct FuncDef 
6e70: 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66  FuncDef;.typedef
6e80: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48   struct FuncDefH
6e90: 61 73 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b  ash FuncDefHash;
6ea0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6eb0: 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74  IdList IdList;.t
6ec0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
6ed0: 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64  dex Index;.typed
6ee0: 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 53  ef struct IndexS
6ef0: 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c  ample IndexSampl
6f00: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
6f10: 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c  t KeyClass KeyCl
6f20: 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ass;.typedef str
6f30: 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49  uct KeyInfo KeyI
6f40: 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nfo;.typedef str
6f50: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f  uct Lookaside Lo
6f60: 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66  okaside;.typedef
6f70: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
6f80: 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53  eSlot LookasideS
6f90: 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  lot;.typedef str
6fa0: 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c  uct Module Modul
6fb0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
6fc0: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61  t NameContext Na
6fd0: 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  meContext;.typed
6fe0: 65 66 20 73 74 72 75 63 74 20 50 61 72 73 65 20  ef struct Parse 
6ff0: 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73  Parse;.typedef s
7000: 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75  truct PrintfArgu
7010: 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72 67 75  ments PrintfArgu
7020: 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66 20 73  ments;.typedef s
7030: 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77  truct RowSet Row
7040: 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Set;.typedef str
7050: 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61  uct Savepoint Sa
7060: 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66  vepoint;.typedef
7070: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 53   struct Select S
7080: 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73  elect;.typedef s
7090: 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72 65  truct SQLiteThre
70a0: 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64 3b  ad SQLiteThread;
70b0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
70c0: 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63  SelectDest Selec
70d0: 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73  tDest;.typedef s
70e0: 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53 72  truct SrcList Sr
70f0: 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  cList;.typedef s
7100: 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 53  truct StrAccum S
7110: 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66  trAccum;.typedef
7120: 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61   struct Table Ta
7130: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
7140: 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61  uct TableLock Ta
7150: 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66  bleLock;.typedef
7160: 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f   struct Token To
7170: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
7180: 75 63 74 20 54 72 69 67 67 65 72 20 54 72 69 67  uct Trigger Trig
7190: 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ger;.typedef str
71a0: 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 54  uct TriggerPrg T
71b0: 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64  riggerPrg;.typed
71c0: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
71d0: 72 53 74 65 70 20 54 72 69 67 67 65 72 53 74 65  rStep TriggerSte
71e0: 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  p;.typedef struc
71f0: 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
7200: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b   UnpackedRecord;
7210: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7220: 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74  VTable VTable;.t
7230: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 74  ypedef struct Vt
7240: 61 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74  abCtx VtabCtx;.t
7250: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61  ypedef struct Wa
7260: 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70  lker Walker;.typ
7270: 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72  edef struct Wher
7280: 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b  eInfo WhereInfo;
7290: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
72a0: 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a  With With;../*.*
72b0: 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67  * Defer sourcing
72c0: 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65   vdbe.h and btre
72d0: 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20  e.h until after 
72e0: 74 68 65 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a  the "u8" and .**
72f0: 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74   "BusyHandler" t
7300: 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20  ypedefs. vdbe.h 
7310: 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61 20  also requires a 
7320: 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75  few of the opaqu
7330: 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70  e.** pointer typ
7340: 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66  es (i.e. FuncDef
7350: 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e  ) defined above.
7360: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74  .*/.#include "bt
7370: 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ree.h".#include 
7380: 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64  "vdbe.h".#includ
7390: 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63  e "pager.h".#inc
73a0: 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a  lude "pcache.h".
73b0: 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22  .#include "os.h"
73c0: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78  .#include "mutex
73d0: 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  .h".../*.** Each
73e0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
73f0: 6f 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79  o be accessed by
7400: 20 74 68 65 20 73 79 73 74 65 6d 20 69 73 20 61   the system is a
7410: 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
7420: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
7430: 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 72 65  tructure.  There
7440: 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77   are normally tw
7450: 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63  o of these struc
7460: 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tures.** in the 
7470: 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72  sqlite.aDb[] arr
7480: 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74  ay.  aDb[0] is t
7490: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
74a0: 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62   file and.** aDb
74b0: 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74 61 62  [1] is the datab
74c0: 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
74d0: 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20   hold temporary 
74e0: 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f  tables.  Additio
74f0: 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73  nal.** databases
7500: 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64   may be attached
7510: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b  ..*/.struct Db {
7520: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
7530: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
7540: 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65  of this database
7550: 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
7560: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
7570: 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75  e B*Tree structu
7580: 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61  re for this data
7590: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
75a0: 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20  8 safety_level; 
75b0: 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65      /* How aggre
75c0: 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67  ssive at syncing
75d0: 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f   data to disk */
75e0: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
75f0: 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ma;     /* Point
7600: 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73  er to database s
7610: 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20  chema (possibly 
7620: 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f  shared) */.};../
7630: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
7640: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
7650: 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72  g structure stor
7660: 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63  es a database sc
7670: 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74  hema..**.** Most
7680: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20   Schema objects 
7690: 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  are associated w
76a0: 69 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68  ith a Btree.  Th
76b0: 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a  e exception is.*
76c0: 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72  * the Schema for
76d0: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
76e0: 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b  es (sqlite3.aDb[
76f0: 31 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65  1]) which is fre
7700: 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49  e-standing..** I
7710: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
7720: 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63  ode, a single Sc
7730: 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20  hema object can 
7740: 62 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c  be shared by mul
7750: 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20  tiple.** Btrees 
7760: 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
7770: 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e  e same underlyin
7780: 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63  g BtShared objec
7790: 74 2e 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61  t..** .** Schema
77a0: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75 74   objects are aut
77b0: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c  omatically deall
77c0: 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68 65 20  ocated when the 
77d0: 6c 61 73 74 20 42 74 72 65 65 20 74 68 61 74 0a  last Btree that.
77e0: 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74 68  ** references th
77f0: 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e  em is destroyed.
7800: 20 20 20 54 68 65 20 54 45 4d 50 20 53 63 68 65     The TEMP Sche
7810: 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66  ma is manually f
7820: 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  reed by.** sqlit
7830: 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a  e3_close()..*.**
7840: 20 41 20 74 68 72 65 61 64 20 6d 75 73 74 20 62   A thread must b
7850: 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65  e holding a mute
7860: 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70  x on the corresp
7870: 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20  onding Btree in 
7880: 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65  order.** to acce
7890: 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e  ss Schema conten
78a0: 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73  t.  This implies
78b0: 20 74 68 61 74 20 74 68 65 20 74 68 72 65 61 64   that the thread
78c0: 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a   must also be.**
78d0: 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78   holding a mutex
78e0: 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20   on the sqlite3 
78f0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74  connection point
7900: 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65  er that owns the
7910: 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61   Btree..** For a
7920: 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e   TEMP Schema, on
7930: 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ly the connectio
7940: 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71 75 69  n mutex is requi
7950: 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  red..*/.struct S
7960: 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63  chema {.  int sc
7970: 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f  hema_cookie;   /
7980: 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d  * Database schem
7990: 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  a version number
79a0: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
79b0: 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74  /.  int iGenerat
79c0: 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65  ion;     /* Gene
79d0: 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20  ration counter. 
79e0: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
79f0: 68 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f  h each change */
7a00: 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b  .  Hash tblHash;
7a10: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74          /* All t
7a20: 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79  ables indexed by
7a30: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
7a40: 69 64 78 48 61 73 68 3b 20 20 20 20 20 20 20 20  idxHash;        
7a50: 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69  /* All (named) i
7a60: 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64 20 62  ndices indexed b
7a70: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
7a80: 20 74 72 69 67 48 61 73 68 3b 20 20 20 20 20 20   trigHash;      
7a90: 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73   /* All triggers
7aa0: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
7ab0: 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48   */.  Hash fkeyH
7ac0: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
7ad0: 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62  l foreign keys b
7ae0: 79 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62  y referenced tab
7af0: 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62  le name */.  Tab
7b00: 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20  le *pSeqTab;    
7b10: 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f    /* The sqlite_
7b20: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75  sequence table u
7b30: 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45  sed by AUTOINCRE
7b40: 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c  MENT */.  u8 fil
7b50: 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f  e_format;      /
7b60: 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  * Schema format 
7b70: 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73  version for this
7b80: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e   file */.  u8 en
7b90: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
7ba0: 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
7bb0: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 64 61   used by this da
7bc0: 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20  tabase */.  u16 
7bd0: 73 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20  schemaFlags;    
7be0: 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69   /* Flags associ
7bf0: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 73  ated with this s
7c00: 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63  chema */.  int c
7c10: 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20  ache_size;      
7c20: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
7c30: 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65  es to use in the
7c40: 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   cache */.};../*
7c50: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
7c60: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
7c70: 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
7c80: 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20  ear bits in the 
7c90: 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e  .** Db.pSchema->
7ca0: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
7cb0: 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f  #define DbHasPro
7cc0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
7cd0: 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70   (((D)->aDb[I].p
7ce0: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
7cf0: 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23  ags&(P))==(P)).#
7d00: 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50  define DbHasAnyP
7d10: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
7d20: 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53  (((D)->aDb[I].pS
7d30: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
7d40: 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
7d50: 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74  ine DbSetPropert
7d60: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29  y(D,I,P)     (D)
7d70: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
7d80: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28  ->schemaFlags|=(
7d90: 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65  P).#define DbCle
7da0: 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  arProperty(D,I,P
7db0: 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e  )   (D)->aDb[I].
7dc0: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
7dd0: 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a  lags&=~(P)../*.*
7de0: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
7df0: 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68   for the DB.pSch
7e00: 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64  ema->flags field
7e10: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53  ..**.** The DB_S
7e20: 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67  chemaLoaded flag
7e30: 20 69 73 20 73 65 74 20 61 66 74 65 72 20 74 68   is set after th
7e40: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
7e50: 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65  a has been.** re
7e60: 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c  ad into internal
7e70: 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a   hash tables..**
7e80: 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69  .** DB_UnresetVi
7e90: 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f  ews means that o
7ea0: 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73  ne or more views
7eb0: 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d   have column nam
7ec0: 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20  es that.** have 
7ed0: 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e  been filled out.
7ee0: 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20    If the schema 
7ef0: 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63  changes, these c
7f00: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68  olumn names migh
7f10: 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64  t.** changes and
7f20: 20 73 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c   so the view wil
7f30: 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73  l need to be res
7f40: 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  et..*/.#define D
7f50: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20  B_SchemaLoaded  
7f60: 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65    0x0001  /* The
7f70: 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e   schema has been
7f80: 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69   loaded */.#defi
7f90: 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65  ne DB_UnresetVie
7fa0: 77 73 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a  ws    0x0002  /*
7fb0: 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65   Some views have
7fc0: 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20   defined column 
7fd0: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
7fe0: 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20   DB_Empty       
7ff0: 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54      0x0004  /* T
8000: 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79  he file is empty
8010: 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73   (length 0 bytes
8020: 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ) */../*.** The 
8030: 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72  number of differ
8040: 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69  ent kinds of thi
8050: 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ngs that can be 
8060: 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67  limited.** using
8070: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d   the sqlite3_lim
8080: 69 74 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a  it() interface..
8090: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
80a0: 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54  E_N_LIMIT (SQLIT
80b0: 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54  E_LIMIT_WORKER_T
80c0: 48 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a  HREADS+1)../*.**
80d0: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   Lookaside mallo
80e0: 63 20 69 73 20 61 20 73 65 74 20 6f 66 20 66 69  c is a set of fi
80f0: 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73  xed-size buffers
8100: 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65   that can be use
8110: 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20  d.** to satisfy 
8120: 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20  small transient 
8130: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
8140: 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f  n requests for o
8150: 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69  bjects.** associ
8160: 61 74 65 64 20 77 69 74 68 20 61 20 70 61 72 74  ated with a part
8170: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
8180: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65  connection.  The
8190: 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61   use of.** looka
81a0: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76  side malloc prov
81b0: 69 64 65 73 20 61 20 73 69 67 6e 69 66 69 63 61  ides a significa
81c0: 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65  nt performance e
81d0: 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61  nhancement.** (a
81e0: 70 70 72 6f 78 20 31 30 25 29 20 62 79 20 61 76  pprox 10%) by av
81f0: 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20  oiding numerous 
8200: 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75  malloc/free requ
8210: 65 73 74 73 20 77 68 69 6c 65 20 70 61 72 73 69  ests while parsi
8220: 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d  ng.** SQL statem
8230: 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ents..**.** The 
8240: 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74  Lookaside struct
8250: 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67  ure holds config
8260: 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  uration informat
8270: 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a  ion about the.**
8280: 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   lookaside mallo
8290: 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61  c subsystem.  Ea
82a0: 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d  ch available mem
82b0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  ory allocation i
82c0: 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69  n.** the lookasi
82d0: 64 65 20 73 75 62 73 79 73 74 65 6d 20 69 73 20  de subsystem is 
82e0: 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b  stored on a link
82f0: 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61  ed list of Looka
8300: 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65  sideSlot.** obje
8310: 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61  cts..**.** Looka
8320: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
8330: 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65   are only allowe
8340: 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68  d for objects th
8350: 61 74 20 61 72 65 20 61 73 73 6f 63 69 61 74 65  at are associate
8360: 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74  d.** with a part
8370: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
8380: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e  connection.  Hen
8390: 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  ce, schema infor
83a0: 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a  mation cannot.**
83b0: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f   be stored in lo
83c0: 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73 65 20  okaside because 
83d0: 69 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20  in shared cache 
83e0: 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61 20  mode the schema 
83f0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69  information.** i
8400: 73 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74  s shared by mult
8410: 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f  iple database co
8420: 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72  nnections.  Ther
8430: 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72  efore, while par
8440: 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69  sing.** schema i
8450: 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20  nformation, the 
8460: 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c  Lookaside.bEnabl
8470: 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  ed flag is clear
8480: 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f  ed so that.** lo
8490: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
84a0: 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64  ons are not used
84b0: 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68   to construct th
84c0: 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  e schema objects
84d0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b  ..*/.struct Look
84e0: 61 73 69 64 65 20 7b 0a 20 20 75 31 36 20 73 7a  aside {.  u16 sz
84f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8500: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
8510: 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65  h buffer in byte
8520: 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e 61 62 6c  s */.  u8 bEnabl
8530: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ed;            /
8540: 2a 20 46 61 6c 73 65 20 74 6f 20 64 69 73 61 62  * False to disab
8550: 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73 69 64 65  le new lookaside
8560: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
8570: 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20    u8 bMalloced; 
8580: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
8590: 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61  e if pStart obta
85a0: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
85b0: 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20  3_malloc() */.  
85c0: 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20 20 20  int nOut;       
85d0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
85e0: 72 20 6f 66 20 62 75 66 66 65 72 73 20 63 75 72  r of buffers cur
85f0: 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64 20 6f  rently checked o
8600: 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f 75  ut */.  int mxOu
8610: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
8620: 2f 2a 20 48 69 67 68 77 61 74 65 72 20 6d 61 72  /* Highwater mar
8630: 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20 20  k for nOut */.  
8640: 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20  int anStat[3];  
8650: 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 68 69          /* 0: hi
8660: 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69 73  ts.  1: size mis
8670: 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69  ses.  2: full mi
8680: 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73  sses */.  Lookas
8690: 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20  ideSlot *pFree; 
86a0: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61    /* List of ava
86b0: 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a  ilable buffers *
86c0: 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74  /.  void *pStart
86d0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
86e0: 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61  irst byte of ava
86f0: 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70  ilable memory sp
8700: 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
8710: 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
8720: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70   /* First byte p
8730: 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c  ast end of avail
8740: 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b  able space */.};
8750: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
8760: 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73  eSlot {.  Lookas
8770: 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20  ideSlot *pNext; 
8780: 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65     /* Next buffe
8790: 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66  r in the list of
87a0: 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f   free buffers */
87b0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73  .};../*.** A has
87c0: 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63  h table for func
87d0: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73  tion definitions
87e0: 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63  ..**.** Hash eac
87f0: 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  h FuncDef struct
8800: 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20  ure into one of 
8810: 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68 2e  the FuncDefHash.
8820: 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f  a[] slots..** Co
8830: 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20  llisions are on 
8840: 74 68 65 20 46 75 6e 63 44 65 66 2e 70 48 61 73  the FuncDef.pHas
8850: 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75  h chain..*/.stru
8860: 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 7b  ct FuncDefHash {
8870: 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b 32 33  .  FuncDef *a[23
8880: 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68  ];       /* Hash
8890: 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74   table for funct
88a0: 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64  ions */.};..#ifd
88b0: 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  ef SQLITE_USER_A
88c0: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a  UTHENTICATION./*
88d0: 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** Information 
88e0: 68 65 6c 64 20 69 6e 20 74 68 65 20 22 73 71 6c  held in the "sql
88f0: 69 74 65 33 22 20 64 61 74 61 62 61 73 65 20 63  ite3" database c
8900: 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74  onnection object
8910: 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20   and used.** to 
8920: 6d 61 6e 61 67 65 20 75 73 65 72 20 61 75 74 68  manage user auth
8930: 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74  entication..*/.t
8940: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 73 71  ypedef struct sq
8950: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 73  lite3_userauth s
8960: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 3b  qlite3_userauth;
8970: 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f  .struct sqlite3_
8980: 75 73 65 72 61 75 74 68 20 7b 0a 20 20 75 38 20  userauth {.  u8 
8990: 61 75 74 68 4c 65 76 65 6c 3b 20 20 20 20 20 20  authLevel;      
89a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
89b0: 72 72 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61  rrent authentica
89c0: 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  tion level */.  
89d0: 69 6e 74 20 6e 41 75 74 68 50 57 3b 20 20 20 20  int nAuthPW;    
89e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
89f0: 20 53 69 7a 65 20 6f 66 20 74 68 65 20 7a 41 75   Size of the zAu
8a00: 74 68 50 57 20 69 6e 20 62 79 74 65 73 20 2a 2f  thPW in bytes */
8a10: 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68 50 57  .  char *zAuthPW
8a20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8a30: 20 2f 2a 20 50 61 73 73 77 6f 72 64 20 75 73 65   /* Password use
8a40: 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74  d to authenticat
8a50: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75  e */.  char *zAu
8a60: 74 68 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  thUser;         
8a70: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d       /* User nam
8a80: 65 20 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e  e used to authen
8a90: 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ticate */.};../*
8aa0: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
8ab0: 66 6f 72 20 73 71 6c 69 74 65 33 5f 75 73 65 72  for sqlite3_user
8ac0: 61 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a  auth.authLevel *
8ad0: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
8ae0: 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20 20  Unknown     0   
8af0: 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74    /* Authenticat
8b00: 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68 65 63  ion not yet chec
8b10: 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ked */.#define U
8b20: 41 55 54 48 5f 46 61 69 6c 20 20 20 20 20 20 20  AUTH_Fail       
8b30: 20 31 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61   1     /* User a
8b40: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61  uthentication fa
8b50: 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  iled */.#define 
8b60: 55 41 55 54 48 5f 55 73 65 72 20 20 20 20 20 20  UAUTH_User      
8b70: 20 20 32 20 20 20 20 20 2f 2a 20 41 75 74 68 65    2     /* Authe
8b80: 6e 74 69 63 61 74 65 64 20 61 73 20 61 20 6e 6f  nticated as a no
8b90: 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65  rmal user */.#de
8ba0: 66 69 6e 65 20 55 41 55 54 48 5f 41 64 6d 69 6e  fine UAUTH_Admin
8bb0: 20 20 20 20 20 20 20 33 20 20 20 20 20 2f 2a 20         3     /* 
8bc0: 41 75 74 68 65 6e 74 69 63 61 74 65 64 20 61 73  Authenticated as
8bd0: 20 61 6e 20 61 64 6d 69 6e 69 73 74 72 61 74 6f   an administrato
8be0: 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f  r */../* Functio
8bf0: 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20  ns used only by 
8c00: 75 73 65 72 20 61 75 74 68 6f 72 69 7a 61 74 69  user authorizati
8c10: 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20  on logic */.int 
8c20: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 54  sqlite3UserAuthT
8c30: 61 62 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  able(const char*
8c40: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73  );.int sqlite3Us
8c50: 65 72 41 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e  erAuthCheckLogin
8c60: 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
8c70: 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64  char*,u8*);.void
8c80: 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68   sqlite3UserAuth
8c90: 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a  Init(sqlite3*);.
8ca0: 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 79 70  void sqlite3Cryp
8cb0: 74 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f  tFunc(sqlite3_co
8cc0: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
8cd0: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65  e3_value**);..#e
8ce0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55  ndif /* SQLITE_U
8cf0: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
8d00: 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70  ON */../*.** typ
8d10: 65 64 65 66 20 66 6f 72 20 74 68 65 20 61 75 74  edef for the aut
8d20: 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62  horization callb
8d30: 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f  ack function..*/
8d40: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
8d50: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
8d60: 4f 4e 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74  ON.  typedef int
8d70: 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68   (*sqlite3_xauth
8d80: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
8d90: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
8da0: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
8db0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8dd0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
8de0: 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65  st char*);.#else
8df0: 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28  .  typedef int (
8e00: 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28  *sqlite3_xauth)(
8e10: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
8e20: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
8e30: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20  *,const char*,. 
8e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
8e60: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  nst char*);.#end
8e70: 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  if.../*.** Each 
8e80: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
8e90: 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ion is an instan
8ea0: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
8eb0: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
8ec0: 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  /.struct sqlite3
8ed0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73   {.  sqlite3_vfs
8ee0: 20 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20 20   *pVfs;         
8ef0: 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61     /* OS Interfa
8f00: 63 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56  ce */.  struct V
8f10: 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20  dbe *pVdbe;     
8f20: 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
8f30: 20 61 63 74 69 76 65 20 76 69 72 74 75 61 6c 20   active virtual 
8f40: 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f  machines */.  Co
8f50: 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c  llSeq *pDfltColl
8f60: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
8f70: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
8f80: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42  ting sequence (B
8f90: 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69  INARY) */.  sqli
8fa0: 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78  te3_mutex *mutex
8fb0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  ;         /* Con
8fc0: 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f  nection mutex */
8fd0: 0a 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20  .  Db *aDb;     
8fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ff0: 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73   /* All backends
9000: 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20   */.  int nDb;  
9010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9020: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
9030: 20 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e   backends curren
9040: 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20  tly in use */.  
9050: 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20  int flags;      
9060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9070: 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66   Miscellaneous f
9080: 6c 61 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20  lags. See below 
9090: 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77  */.  i64 lastRow
90a0: 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  id;             
90b0: 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d     /* ROWID of m
90c0: 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72  ost recent inser
90d0: 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
90e0: 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20  .  i64 szMmap;  
90f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9100: 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70   /* Default mmap
9110: 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f  _size setting */
9120: 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  .  unsigned int 
9130: 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20  openFlags;      
9140: 20 2f 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64   /* Flags passed
9150: 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e   to sqlite3_vfs.
9160: 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74  xOpen() */.  int
9170: 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20   errCode;       
9180: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
9190: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
91a0: 63 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20  code (SQLITE_*) 
91b0: 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b  */.  int errMask
91c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
91d0: 20 20 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63     /* & result c
91e0: 6f 64 65 73 20 77 69 74 68 20 74 68 69 73 20 62  odes with this b
91f0: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20  efore returning 
9200: 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c  */.  u16 dbOptFl
9210: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
9220: 20 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65     /* Flags to e
9230: 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70  nable/disable op
9240: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20  timizations */. 
9250: 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20   u8 autoCommit; 
9260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9270: 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  * The auto-commi
9280: 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20  t flag. */.  u8 
9290: 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20  temp_store;     
92a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a             /* 1:
92b0: 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20   file 2: memory 
92c0: 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  0: default */.  
92d0: 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b  u8 mallocFailed;
92e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
92f0: 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65   True if we have
9300: 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66   seen a malloc f
9310: 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64  ailure */.  u8 d
9320: 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20  fltLockMode;    
9330: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
9340: 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64  ault locking-mod
9350: 65 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64  e for attached d
9360: 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63  bs */.  signed c
9370: 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b  har nextAutovac;
9380: 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63        /* Autovac
9390: 20 73 65 74 74 69 6e 67 20 61 66 74 65 72 20 56   setting after V
93a0: 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a  ACUUM if >=0 */.
93b0: 20 20 75 38 20 73 75 70 70 72 65 73 73 45 72 72    u8 suppressErr
93c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
93d0: 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20  /* Do not issue 
93e0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69  error messages i
93f0: 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76  f true */.  u8 v
9400: 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20  tabOnConflict;  
9410: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
9420: 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72  ue to return for
9430: 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66   s3_vtab_on_conf
9440: 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69  lict() */.  u8 i
9450: 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
9460: 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75  point;    /* Tru
9470: 65 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f  e if the outermo
9480: 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20  st savepoint is 
9490: 61 20 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65  a TS */.  int ne
94a0: 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20  xtPagesize;     
94b0: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73          /* Pages
94c0: 69 7a 65 20 61 66 74 65 72 20 56 41 43 55 55 4d  ize after VACUUM
94d0: 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20   if >0 */.  u32 
94e0: 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20 20 20  magic;          
94f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67            /* Mag
9500: 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65  ic number for de
9510: 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73  tect library mis
9520: 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68  use */.  int nCh
9530: 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  ange;           
9540: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
9550: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
9560: 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  te3_changes() */
9570: 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61  .  int nTotalCha
9580: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
9590: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
95a0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f  ed by sqlite3_to
95b0: 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  tal_changes() */
95c0: 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51  .  int aLimit[SQ
95d0: 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20  LITE_N_LIMIT];  
95e0: 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20   /* Limits */.  
95f0: 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d  int nMaxSorterMm
9600: 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ap;           /*
9610: 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66   Maximum size of
9620: 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20   regions mapped 
9630: 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73  by sorter */.  s
9640: 74 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69  truct sqlite3Ini
9650: 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20  tInfo {      /* 
9660: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  Information used
9670: 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
9680: 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  zation */.    in
9690: 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20  t newTnum;      
96a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
96b0: 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62  tpage of table b
96c0: 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
96d0: 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20   */.    u8 iDb; 
96e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96f0: 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20      /* Which db 
9700: 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e  file is being in
9710: 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20  itialized */.   
9720: 20 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20   u8 busy;       
9730: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9740: 54 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c  TRUE if currentl
9750: 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a  y initializing *
9760: 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54  /.    u8 orphanT
9770: 72 69 67 67 65 72 3b 20 20 20 20 20 20 20 20 20  rigger;         
9780: 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d    /* Last statem
9790: 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20  ent is orphaned 
97a0: 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a  TEMP trigger */.
97b0: 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20    } init;.  int 
97c0: 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20 20  nVdbeActive;    
97d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
97e0: 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72  ber of VDBEs cur
97f0: 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a  rently running *
9800: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61  /.  int nVdbeRea
9810: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
9820: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
9830: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
9840: 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a   read or write *
9850: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69  /.  int nVdbeWri
9860: 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
9870: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
9880: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
9890: 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
98a0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78  */.  int nVdbeEx
98b0: 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
98c0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
98d0: 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
98e0: 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20  VdbeExec() */.  
98f0: 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20  int nExtension; 
9900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9910: 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65   Number of loade
9920: 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a  d extensions */.
9930: 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73    void **aExtens
9940: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ion;            
9950: 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72  /* Array of shar
9960: 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c  ed library handl
9970: 65 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  es */.  void (*x
9980: 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  Trace)(void*,con
9990: 73 74 20 63 68 61 72 2a 29 3b 20 20 20 20 20 20  st char*);      
99a0: 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74    /* Trace funct
99b0: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
99c0: 54 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20  TraceArg;       
99d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99e0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
99f0: 6f 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63  o the trace func
9a00: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tion */.  void (
9a10: 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a  *xProfile)(void*
9a20: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34  ,const char*,u64
9a30: 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67  );  /* Profiling
9a40: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
9a50: 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67  oid *pProfileArg
9a60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9a70: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
9a80: 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20  ment to profile 
9a90: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
9aa0: 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20  id *pCommitArg; 
9ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ac0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
9ad0: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29  CommitCallback()
9ae0: 20 2a 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a 78   */   .  int (*x
9af0: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28  CommitCallback)(
9b00: 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e  void*);    /* In
9b10: 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63  voked at every c
9b20: 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64  ommit. */.  void
9b30: 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20   *pRollbackArg; 
9b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9b50: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f   Argument to xRo
9b60: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29  llbackCallback()
9b70: 20 2a 2f 20 20 20 0a 20 20 76 6f 69 64 20 28 2a   */   .  void (*
9b80: 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63  xRollbackCallbac
9b90: 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e  k)(void*); /* In
9ba0: 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63  voked at every c
9bb0: 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64  ommit. */.  void
9bc0: 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20   *pUpdateArg;.  
9bd0: 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61  void (*xUpdateCa
9be0: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e  llback)(void*,in
9bf0: 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  t, const char*,c
9c00: 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74  onst char*,sqlit
9c10: 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 6e 64 65  e_int64);.#ifnde
9c20: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
9c30: 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61  L.  int (*xWalCa
9c40: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20  llback)(void *, 
9c50: 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
9c60: 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20   char *, int);. 
9c70: 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a   void *pWalArg;.
9c80: 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78  #endif.  void(*x
9c90: 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64  CollNeeded)(void
9ca0: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65  *,sqlite3*,int e
9cb0: 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68  TextRep,const ch
9cc0: 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43  ar*);.  void(*xC
9cd0: 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69  ollNeeded16)(voi
9ce0: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
9cf0: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76  eTextRep,const v
9d00: 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70  oid*);.  void *p
9d10: 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20  CollNeededArg;. 
9d20: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
9d30: 70 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f  pErr;          /
9d40: 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  * Most recent er
9d50: 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20  ror message */. 
9d60: 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c   union {.    vol
9d70: 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65  atile int isInte
9d80: 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65  rrupted; /* True
9d90: 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65   if sqlite3_inte
9da0: 72 72 75 70 74 20 68 61 73 20 62 65 65 6e 20 63  rrupt has been c
9db0: 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75  alled */.    dou
9dc0: 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20  ble notUsed1;   
9dd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
9de0: 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20  er */.  } u1;.  
9df0: 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73  Lookaside lookas
9e00: 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ide;          /*
9e10: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   Lookaside mallo
9e20: 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  c configuration 
9e30: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
9e40: 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
9e50: 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78  TION.  sqlite3_x
9e60: 61 75 74 68 20 78 41 75 74 68 3b 20 20 20 20 20  auth xAuth;     
9e70: 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61       /* Access a
9e80: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e  uthorization fun
9e90: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
9ea0: 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20 20 20  *pAuthArg;      
9eb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
9ec0: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
9ed0: 61 63 63 65 73 73 20 61 75 74 68 20 66 75 6e 63  access auth func
9ee0: 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tion */.#endif.#
9ef0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
9f00: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
9f10: 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72  BACK.  int (*xPr
9f20: 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b  ogress)(void *);
9f30: 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67       /* The prog
9f40: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
9f50: 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65  .  void *pProgre
9f60: 73 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ssArg;          
9f70: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
9f80: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
9f90: 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67  lback */.  unsig
9fa0: 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4f 70 73  ned nProgressOps
9fb0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
9fc0: 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f  er of opcodes fo
9fd0: 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  r progress callb
9fe0: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ack */.#endif.#i
9ff0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
a000: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
a010: 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20   int nVTrans;   
a020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a030: 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65  * Allocated size
a040: 20 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20   of aVTrans */. 
a050: 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20   Hash aModule;  
a060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a070: 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73  * populated by s
a080: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f  qlite3_create_mo
a090: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62  dule() */.  Vtab
a0a0: 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20  Ctx *pVtabCtx;  
a0b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
a0c0: 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20  text for active 
a0d0: 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65  vtab connect/cre
a0e0: 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ate */.  VTable 
a0f0: 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20  **aVTrans;      
a100: 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61         /* Virtua
a110: 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70  l tables with op
a120: 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  en transactions 
a130: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69  */.  VTable *pDi
a140: 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20  sconnect;    /* 
a150: 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65  Disconnect these
a160: 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33   in next sqlite3
a170: 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65  _prepare() */.#e
a180: 6e 64 69 66 0a 20 20 46 75 6e 63 44 65 66 48 61  ndif.  FuncDefHa
a190: 73 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20  sh aFunc;       
a1a0: 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62       /* Hash tab
a1b0: 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e  le of connection
a1c0: 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20   functions */.  
a1d0: 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20  Hash aCollSeq;  
a1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a1f0: 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73   All collating s
a200: 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75  equences */.  Bu
a210: 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61  syHandler busyHa
a220: 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42  ndler;      /* B
a230: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
a240: 20 20 44 62 20 61 44 62 53 74 61 74 69 63 5b 32    Db aDbStatic[2
a250: 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ];              
a260: 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63 65 20  /* Static space 
a270: 66 6f 72 20 74 68 65 20 32 20 64 65 66 61 75 6c  for the 2 defaul
a280: 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  t backends */.  
a290: 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65  Savepoint *pSave
a2a0: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a  point;        /*
a2b0: 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20   List of active 
a2c0: 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20  savepoints */.  
a2d0: 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b  int busyTimeout;
a2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a2f0: 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69   Busy handler ti
a300: 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a  meout, in msec *
a310: 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69  /.  int nSavepoi
a320: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
a330: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
a340: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
a350: 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69  avepoints */.  i
a360: 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20  nt nStatement;  
a370: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a380: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
a390: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
a3a0: 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36  actions  */.  i6
a3b0: 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  4 nDeferredCons;
a3c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
a3d0: 65 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  et deferred cons
a3e0: 74 72 61 69 6e 74 73 20 74 68 69 73 20 74 72 61  traints this tra
a3f0: 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69  nsaction. */.  i
a400: 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  64 nDeferredImmC
a410: 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ons;         /* 
a420: 4e 65 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d  Net deferred imm
a430: 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e  ediate constrain
a440: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42  ts */.  int *pnB
a450: 79 74 65 73 46 72 65 65 64 3b 20 20 20 20 20 20  ytesFreed;      
a460: 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20        /* If not 
a470: 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20  NULL, increment 
a480: 74 68 69 73 20 69 6e 20 44 62 46 72 65 65 28 29  this in DbFree()
a490: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
a4a0: 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f  E_ENABLE_UNLOCK_
a4b0: 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20  NOTIFY.  /* The 
a4c0: 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62  following variab
a4d0: 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74  les are all prot
a4e0: 65 63 74 65 64 20 62 79 20 74 68 65 20 53 54 41  ected by the STA
a4f0: 54 49 43 5f 4d 41 53 54 45 52 20 0a 20 20 2a 2a  TIC_MASTER .  **
a500: 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73   mutex, not by s
a510: 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68  qlite3.mutex. Th
a520: 65 79 20 61 72 65 20 75 73 65 64 20 62 79 20 63  ey are used by c
a530: 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e  ode in notify.c.
a540: 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e   .  **.  ** When
a550: 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63   X.pUnlockConnec
a560: 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65  tion==Y, that me
a570: 61 6e 73 20 74 68 61 74 20 58 20 69 73 20 77 61  ans that X is wa
a580: 69 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20  iting for Y to. 
a590: 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68   ** unlock so th
a5a0: 61 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65  at it can procee
a5b0: 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65  d..  **.  ** Whe
a5c0: 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e  n X.pBlockingCon
a5d0: 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74  nection==Y, that
a5e0: 20 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65   means that some
a5f0: 74 68 69 6e 67 20 74 68 61 74 20 58 20 74 72 69  thing that X tri
a600: 65 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f  ed.  ** tried to
a610: 20 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69   do recently fai
a620: 6c 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49  led with an SQLI
a630: 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20  TE_LOCKED error 
a640: 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a  due to locks.  *
a650: 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a  * held by Y..  *
a660: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c  /.  sqlite3 *pBl
a670: 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e  ockingConnection
a680: 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20  ; /* Connection 
a690: 74 68 61 74 20 63 61 75 73 65 64 20 53 51 4c 49  that caused SQLI
a6a0: 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73  TE_LOCKED */.  s
a6b0: 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43  qlite3 *pUnlockC
a6c0: 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20  onnection;      
a6d0: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
a6e0: 6f 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20  on to watch for 
a6f0: 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  unlock */.  void
a700: 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20   *pUnlockArg;   
a710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a720: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
a730: 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a   xUnlockNotify *
a740: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f  /.  void (*xUnlo
a750: 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a  ckNotify)(void *
a760: 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c  *, int);  /* Unl
a770: 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62  ock notify callb
a780: 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ack */.  sqlite3
a790: 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20   *pNextBlocked; 
a7a0: 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69         /* Next i
a7b0: 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c  n list of all bl
a7c0: 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  ocked connection
a7d0: 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64  s */.#endif.#ifd
a7e0: 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  ef SQLITE_USER_A
a7f0: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20  UTHENTICATION.  
a800: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
a810: 20 61 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a   auth;        /*
a820: 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   User authentica
a830: 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tion information
a840: 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f   */.#endif.};../
a850: 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20  *.** A macro to 
a860: 64 69 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63  discover the enc
a870: 6f 64 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62  oding of a datab
a880: 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ase..*/.#define 
a890: 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61  ENC(db) ((db)->a
a8a0: 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65  Db[0].pSchema->e
a8b0: 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  nc)../*.** Possi
a8c0: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ble values for t
a8d0: 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  he sqlite3.flags
a8e0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
a8f0: 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 20 20  ITE_VdbeTrace   
a900: 20 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f     0x00000001  /
a910: 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63 65 20  * True to trace 
a920: 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a  VDBE execution *
a930: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a940: 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20  _InternChanges  
a950: 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55  0x00000002  /* U
a960: 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20  ncommitted Hash 
a970: 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f  table changes */
a980: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a990: 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30  FullFSync      0
a9a0: 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20 55 73  x00000004  /* Us
a9b0: 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20  e full fsync on 
a9c0: 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23  the backend */.#
a9d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b  define SQLITE_Ck
a9e0: 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30  ptFullFSync  0x0
a9f0: 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20  0000008  /* Use 
aa00: 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63  full fsync for c
aa10: 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65  heckpoint */.#de
aa20: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68  fine SQLITE_Cach
aa30: 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30  eSpill     0x000
aa40: 30 30 30 31 30 20 20 2f 2a 20 4f 4b 20 74 6f 20  00010  /* OK to 
aa50: 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68  spill pager cach
aa60: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
aa70: 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73  ITE_FullColNames
aa80: 20 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f     0x00000020  /
aa90: 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75  * Show full colu
aaa0: 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45  mn names on SELE
aab0: 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  CT */.#define SQ
aac0: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
aad0: 65 73 20 20 30 78 30 30 30 30 30 30 34 30 20 20  es  0x00000040  
aae0: 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f  /* Show short co
aaf0: 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23  lumns names */.#
ab00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
ab10: 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78 30  untRows      0x0
ab20: 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e  0000080  /* Coun
ab30: 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62  t rows changed b
ab40: 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20  y INSERT, */.   
ab50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab70: 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45         /*   DELE
ab80: 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e  TE, or UPDATE an
ab90: 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20  d return */.    
aba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abc0: 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63        /*   the c
abd0: 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c  ount using a cal
abe0: 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e  lback. */.#defin
abf0: 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c  e SQLITE_NullCal
ac00: 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30 30 31  lback   0x000001
ac10: 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  00  /* Invoke th
ac20: 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20  e callback once 
ac30: 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20  if the */.      
ac40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac60: 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20      /*   result 
ac70: 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  set is empty */.
ac80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
ac90: 71 6c 54 72 61 63 65 20 20 20 20 20 20 20 30 78  qlTrace       0x
aca0: 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44 65 62  00000200  /* Deb
acb0: 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20  ug print SQL as 
acc0: 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23  it executes */.#
acd0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
ace0: 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78 30  beListing    0x0
acf0: 30 30 30 30 34 30 30 20 20 2f 2a 20 44 65 62 75  0000400  /* Debu
ad00: 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44  g listings of VD
ad10: 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23  BE programs */.#
ad20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72  define SQLITE_Wr
ad30: 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78 30  iteSchema    0x0
ad40: 30 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74  0000800  /* OK t
ad50: 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f  o update SQLITE_
ad60: 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e  MASTER */.#defin
ad70: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64  e SQLITE_VdbeAdd
ad80: 6f 70 54 72 61 63 65 20 30 78 30 30 30 30 31 30  opTrace 0x000010
ad90: 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c  00  /* Trace sql
ada0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 29 20  ite3VdbeAddOp() 
adb0: 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65  calls */.#define
adc0: 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68   SQLITE_IgnoreCh
add0: 65 63 6b 73 20 20 20 30 78 30 30 30 30 32 30 30  ecks   0x0000200
ade0: 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66  0  /* Do not enf
adf0: 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74  orce check const
ae00: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
ae10: 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63  e SQLITE_ReadUnc
ae20: 6f 6d 6d 69 74 74 65 64 20 30 78 30 30 30 34 30  ommitted 0x00040
ae30: 30 30 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65  00  /* For share
ae40: 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
ae50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
ae60: 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78  egacyFileFmt  0x
ae70: 30 30 30 30 38 30 30 30 20 20 2f 2a 20 43 72 65  00008000  /* Cre
ae80: 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65  ate new database
ae90: 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f  s in format 1 */
aea0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
aeb0: 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30  RecoveryMode   0
aec0: 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 49 67  x00010000  /* Ig
aed0: 6e 6f 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f  nore schema erro
aee0: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
aef0: 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65  LITE_ReverseOrde
af00: 72 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20  r   0x00020000  
af10: 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64  /* Reverse unord
af20: 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a  ered SELECTs */.
af30: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
af40: 65 63 54 72 69 67 67 65 72 73 20 20 20 20 30 78  ecTriggers    0x
af50: 30 30 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 61  00040000  /* Ena
af60: 62 6c 65 20 72 65 63 75 72 73 69 76 65 20 74 72  ble recursive tr
af70: 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e  iggers */.#defin
af80: 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e  e SQLITE_Foreign
af90: 4b 65 79 73 20 20 20 20 30 78 30 30 30 38 30 30  Keys    0x000800
afa0: 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66  00  /* Enforce f
afb0: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
afc0: 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69  raints  */.#defi
afd0: 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e  ne SQLITE_AutoIn
afe0: 64 65 78 20 20 20 20 20 20 30 78 30 30 31 30 30  dex      0x00100
aff0: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61  000  /* Enable a
b000: 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73  utomatic indexes
b010: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b020: 54 45 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e  TE_PreferBuiltin
b030: 20 20 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a    0x00200000  /*
b040: 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62   Preference to b
b050: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f  uilt-in funcs */
b060: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b070: 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30  LoadExtension  0
b080: 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e  x00400000  /* En
b090: 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  able load_extens
b0a0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
b0b0: 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67  QLITE_EnableTrig
b0c0: 67 65 72 20 20 30 78 30 30 38 30 30 30 30 30 20  ger  0x00800000 
b0d0: 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
b0e0: 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  le triggers */.#
b0f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65  define SQLITE_De
b100: 66 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30  ferFKs       0x0
b110: 31 30 30 30 30 30 30 20 20 2f 2a 20 44 65 66 65  1000000  /* Defe
b120: 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61  r all FK constra
b130: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
b140: 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
b150: 20 20 20 20 20 20 30 78 30 32 30 30 30 30 30 30        0x02000000
b160: 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74    /* Disable dat
b170: 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f  abase changes */
b180: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b190: 56 64 62 65 45 51 50 20 20 20 20 20 20 20 20 30  VdbeEQP        0
b1a0: 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20 44 65  x04000000  /* De
b1b0: 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52  bug EXPLAIN QUER
b1c0: 59 20 50 4c 41 4e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  Y PLAN */.../*.*
b1d0: 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20 73 71  * Bits of the sq
b1e0: 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73  lite3.dbOptFlags
b1f0: 20 66 69 65 6c 64 20 74 68 61 74 20 61 72 65 20   field that are 
b200: 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73  used by the.** s
b210: 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
b220: 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43  rol(SQLITE_TESTC
b230: 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  TRL_OPTIMIZATION
b240: 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65  S,...) interface
b250: 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65   to.** selective
b260: 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f  ly disable vario
b270: 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
b280: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
b290: 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e  ITE_QueryFlatten
b2a0: 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51  er 0x0001   /* Q
b2b0: 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20  uery flattening 
b2c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b2d0: 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20  E_ColumnCache   
b2e0: 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c   0x0002   /* Col
b2f0: 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65  umn cache */.#de
b300: 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75  fine SQLITE_Grou
b310: 70 42 79 4f 72 64 65 72 20 20 20 30 78 30 30 30  pByOrder   0x000
b320: 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63  4   /* GROUPBY c
b330: 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20  over of ORDERBY 
b340: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b350: 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74  E_FactorOutConst
b360: 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e   0x0008   /* Con
b370: 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20  stant factoring 
b380: 2a 2f 0a 2f 2a 20 20 20 20 20 20 20 20 20 20 20  */./*           
b390: 20 20 20 20 20 6e 6f 74 20 75 73 65 64 20 20 20       not used   
b3a0: 20 30 78 30 30 31 30 20 20 20 2f 2f 20 57 61 73   0x0010   // Was
b3b0: 3a 20 53 51 4c 49 54 45 5f 49 64 78 52 65 61 6c  : SQLITE_IdxReal
b3c0: 41 73 49 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  AsInt */.#define
b3d0: 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74   SQLITE_Distinct
b3e0: 4f 70 74 20 20 20 20 30 78 30 30 32 30 20 20 20  Opt    0x0020   
b3f0: 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e  /* DISTINCT usin
b400: 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  g indexes */.#de
b410: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65  fine SQLITE_Cove
b420: 72 49 64 78 53 63 61 6e 20 20 20 30 78 30 30 34  rIdxScan   0x004
b430: 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20  0   /* Covering 
b440: 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23  index scans */.#
b450: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72  define SQLITE_Or
b460: 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30  derByIdxJoin 0x0
b470: 30 38 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42  080   /* ORDER B
b480: 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69  Y of joins via i
b490: 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
b4a0: 53 51 4c 49 54 45 5f 53 75 62 71 43 6f 72 6f 75  SQLITE_SubqCorou
b4b0: 74 69 6e 65 20 20 30 78 30 31 30 30 20 20 20 2f  tine  0x0100   /
b4c0: 2a 20 45 76 61 6c 75 61 74 65 20 73 75 62 71 75  * Evaluate subqu
b4d0: 65 72 69 65 73 20 61 73 20 63 6f 72 6f 75 74 69  eries as corouti
b4e0: 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nes */.#define S
b4f0: 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65  QLITE_Transitive
b500: 20 20 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a       0x0200   /*
b510: 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73   Transitive cons
b520: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69  traints */.#defi
b530: 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f  ne SQLITE_OmitNo
b540: 6f 70 4a 6f 69 6e 20 20 20 30 78 30 34 30 30 20  opJoin   0x0400 
b550: 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64    /* Omit unused
b560: 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73   tables in joins
b570: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b580: 54 45 5f 53 74 61 74 33 20 20 20 20 20 20 20 20  TE_Stat3        
b590: 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73    0x0800   /* Us
b5a0: 65 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 41  e the SQLITE_STA
b5b0: 54 33 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  T3 table */.#def
b5c0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70  ine SQLITE_AllOp
b5d0: 74 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66  ts        0xffff
b5e0: 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69     /* All optimi
b5f0: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a  zations */../*.*
b600: 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73  * Macros for tes
b610: 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
b620: 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  not optimization
b630: 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72  s are enabled or
b640: 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69   disabled..*/.#i
b650: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
b660: 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23  T_BUILTIN_TEST.#
b670: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
b680: 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20  ionDisabled(db, 
b690: 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64  mask)  (((db)->d
b6a0: 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29  bOptFlags&(mask)
b6b0: 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70  )!=0).#define Op
b6c0: 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65  timizationEnable
b6d0: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28  d(db, mask)   ((
b6e0: 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73  (db)->dbOptFlags
b6f0: 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c  &(mask))==0).#el
b700: 73 65 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d  se.#define Optim
b710: 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28  izationDisabled(
b720: 64 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65  db, mask)  0.#de
b730: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
b740: 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  nEnabled(db, mas
b750: 6b 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  k)   1.#endif../
b760: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
b770: 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63   if it OK to fac
b780: 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70  tor constant exp
b790: 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68  ressions into th
b7a0: 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
b7b0: 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72  .** code. The ar
b7c0: 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73  gument is a Pars
b7d0: 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65  e object for the
b7e0: 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e   code generator.
b7f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73  .*/.#define Cons
b800: 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50  tFactorOk(P) ((P
b810: 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72  )->okConstFactor
b820: 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  )../*.** Possibl
b830: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  e values for the
b840: 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69   sqlite.magic fi
b850: 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  eld..** The numb
b860: 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64  ers are obtained
b870: 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68   at random and h
b880: 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d  ave no special m
b890: 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a  eaning, other.**
b8a0: 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74   than being dist
b8b0: 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e  inct from one an
b8c0: 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  other..*/.#defin
b8d0: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f  e SQLITE_MAGIC_O
b8e0: 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61 36  PEN     0xa029a6
b8f0: 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  97  /* Database 
b900: 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69  is open */.#defi
b910: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
b920: 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63 32  CLOSED   0x9f3c2
b930: 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65  d33  /* Database
b940: 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64   is closed */.#d
b950: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
b960: 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62  IC_SICK     0x4b
b970: 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72  771290  /* Error
b980: 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c   and awaiting cl
b990: 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ose */.#define S
b9a0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
b9b0: 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36 20       0xf03b7906 
b9c0: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75 72   /* Database cur
b9d0: 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f  rently in use */
b9e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b9f0: 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30  MAGIC_ERROR    0
ba00: 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e  xb5357930  /* An
ba10: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65   SQLITE_MISUSE e
ba20: 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f  rror occurred */
ba30: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ba40: 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30  MAGIC_ZOMBIE   0
ba50: 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c  x64cffc7f  /* Cl
ba60: 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20 73 74  ose with last st
ba70: 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f  atement close */
ba80: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
ba90: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66   function is def
baa0: 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61  ined by an insta
bab0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
bac0: 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72  wing.** structur
bad0: 65 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  e.  A pointer to
bae0: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
baf0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
bb00: 20 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a   sqlite.aFunc.**
bb10: 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57 68   hash table.  Wh
bb20: 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63  en multiple func
bb30: 74 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20 73  tions have the s
bb40: 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68 61  ame name, the ha
bb50: 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e  sh table.** poin
bb60: 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c  ts to a linked l
bb70: 69 73 74 20 6f 66 20 74 68 65 73 65 20 73 74 72  ist of these str
bb80: 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75  uctures..*/.stru
bb90: 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69  ct FuncDef {.  i
bba0: 31 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20  16 nArg;        
bbb0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
bbc0: 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20   arguments.  -1 
bbd0: 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20  means unlimited 
bbe0: 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61  */.  u16 funcFla
bbf0: 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d  gs;       /* Som
bc00: 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66  e combination of
bc10: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a   SQLITE_FUNC_* *
bc20: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  /.  void *pUserD
bc30: 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72  ata;     /* User
bc40: 20 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20   data parameter 
bc50: 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e  */.  FuncDef *pN
bc60: 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ext;      /* Nex
bc70: 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  t function with 
bc80: 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76  same name */.  v
bc90: 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c  oid (*xFunc)(sql
bca0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
bcb0: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
bcc0: 2a 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20 66  *); /* Regular f
bcd0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
bce0: 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74  d (*xStep)(sqlit
bcf0: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
bd00: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
bd10: 3b 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 73  ; /* Aggregate s
bd20: 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  tep */.  void (*
bd30: 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74  xFinalize)(sqlit
bd40: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20  e3_context*);   
bd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bd60: 41 67 67 72 65 67 61 74 65 20 66 69 6e 61 6c 69  Aggregate finali
bd70: 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  zer */.  char *z
bd80: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
bd90: 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65   SQL name of the
bda0: 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20   function. */.  
bdb0: 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20  FuncDef *pHash; 
bdc0: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74       /* Next wit
bdd0: 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61  h a different na
bde0: 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20  me but the same 
bdf0: 68 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65  hash */.  FuncDe
be00: 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72  structor *pDestr
be10: 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65  uctor;   /* Refe
be20: 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65  rence counted de
be30: 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f  structor functio
be40: 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  n */.};../*.** T
be50: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 65 6e  his structure en
be60: 63 61 70 73 75 6c 61 74 65 73 20 61 20 75 73 65  capsulates a use
be70: 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72  r-function destr
be80: 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28  uctor callback (
be90: 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  as.** configured
bea0: 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75   using create_fu
beb0: 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64  nction_v2()) and
bec0: 20 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75   a reference cou
bed0: 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72  nter. When.** cr
bee0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32  eate_function_v2
bef0: 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20  () is called to 
bf00: 63 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f  create a functio
bf10: 6e 20 77 69 74 68 20 61 20 64 65 73 74 72 75 63  n with a destruc
bf20: 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65  tor,.** a single
bf30: 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20   object of this 
bf40: 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  type is allocate
bf50: 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  d. FuncDestructo
bf60: 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f  r.nRef is set to
bf70: 20 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20   .** the number 
bf80: 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  of FuncDef objec
bf90: 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68  ts created (eith
bfa0: 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e  er 1 or 3, depen
bfb0: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
bfc0: 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70  ** or not the sp
bfd0: 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67  ecified encoding
bfe0: 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e   is SQLITE_ANY).
bff0: 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65   The FuncDef.pDe
c000: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62  structor.** memb
c010: 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68  er of each of th
c020: 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62  e new FuncDef ob
c030: 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20  jects is set to 
c040: 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c  point to the all
c050: 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65  ocated.** FuncDe
c060: 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  structor..**.** 
c070: 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e  Thereafter, when
c080: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
c090: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64  Def objects is d
c0a0: 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65  eleted, the refe
c0b0: 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f  rence.** count o
c0c0: 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73  n this object is
c0d0: 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68   decremented. Wh
c0e0: 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c  en it reaches 0,
c0f0: 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a   the destructor.
c100: 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e  ** is invoked an
c110: 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75  d the FuncDestru
c120: 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66  ctor structure f
c130: 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  reed..*/.struct 
c140: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b  FuncDestructor {
c150: 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76  .  int nRef;.  v
c160: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
c170: 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20  void *);.  void 
c180: 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a  *pUserData;.};..
c190: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
c1a0: 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65  alues for FuncDe
c1b0: 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74  f.flags.  Note t
c1c0: 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20  hat the _LENGTH 
c1d0: 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76  and _TYPEOF.** v
c1e0: 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65  alues must corre
c1f0: 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f  spond to OPFLAG_
c200: 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50  LENGTHARG and OP
c210: 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20  FLAG_TYPEOFARG. 
c220: 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73   There.** are as
c230: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
c240: 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f  s in the code to
c250: 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2f   verify this..*/
c260: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c270: 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78  FUNC_ENCMASK  0x
c280: 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54  003 /* SQLITE_UT
c290: 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  F8, SQLITE_UTF16
c2a0: 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f  BE or UTF16LE */
c2b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c2c0: 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78  FUNC_LIKE     0x
c2d0: 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65  004 /* Candidate
c2e0: 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70   for the LIKE op
c2f0: 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64  timization */.#d
c300: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
c310: 43 5f 43 41 53 45 20 20 20 20 20 30 78 30 30 38  C_CASE     0x008
c320: 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69   /* Case-sensiti
c330: 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e  ve LIKE-type fun
c340: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
c350: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48   SQLITE_FUNC_EPH
c360: 45 4d 20 20 20 20 30 78 30 31 30 20 2f 2a 20 45  EM    0x010 /* E
c370: 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74  phemeral.  Delet
c380: 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23  e with VDBE */.#
c390: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
c3a0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 32  NC_NEEDCOLL 0x02
c3b0: 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46  0 /* sqlite3GetF
c3c0: 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67  uncCollSeq() mig
c3d0: 68 74 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f 0a  ht be called */.
c3e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
c3f0: 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30  UNC_LENGTH   0x0
c400: 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c  40 /* Built-in l
c410: 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e  ength() function
c420: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c430: 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20  TE_FUNC_TYPEOF  
c440: 20 30 78 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d   0x080 /* Built-
c450: 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  in typeof() func
c460: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
c470: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e  SQLITE_FUNC_COUN
c480: 54 20 20 20 20 30 78 31 30 30 20 2f 2a 20 42 75  T    0x100 /* Bu
c490: 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20  ilt-in count(*) 
c4a0: 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65  aggregate */.#de
c4b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
c4c0: 5f 43 4f 41 4c 45 53 43 45 20 30 78 32 30 30 20  _COALESCE 0x200 
c4d0: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c  /* Built-in coal
c4e0: 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c  esce() or ifnull
c4f0: 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  () */.#define SQ
c500: 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45  LITE_FUNC_UNLIKE
c510: 4c 59 20 30 78 34 30 30 20 2f 2a 20 42 75 69 6c  LY 0x400 /* Buil
c520: 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20  t-in unlikely() 
c530: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
c540: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
c550: 43 4f 4e 53 54 41 4e 54 20 30 78 38 30 30 20 2f  CONSTANT 0x800 /
c560: 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74  * Constant input
c570: 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e  s give a constan
c580: 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66  t output */.#def
c590: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
c5a0: 4d 49 4e 4d 41 58 20 20 30 78 31 30 30 30 20 2f  MINMAX  0x1000 /
c5b0: 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29  * True for min()
c5c0: 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65   and max() aggre
c5d0: 67 61 74 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  gates */../*.** 
c5e0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  The following th
c5f0: 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43  ree macros, FUNC
c600: 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43  TION(), LIKEFUNC
c610: 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54 45  () and AGGREGATE
c620: 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  () are.** used t
c630: 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e 69  o create the ini
c640: 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68  tializers for th
c650: 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  e FuncDef struct
c660: 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55  ures..**.**   FU
c670: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
c680: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
c690: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65  Func).**     Use
c6a0: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
c6b0: 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
c6c0: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
c6d0: 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a  nction zName .**
c6e0: 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64       implemented
c6f0: 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78   by C function x
c700: 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74  Func that accept
c710: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
c720: 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c  . The.**     val
c730: 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72  ue passed as iAr
c740: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
c750: 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20  void*) and made 
c760: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20  available.**    
c770: 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74   as the user-dat
c780: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
c790: 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20  data()) for the 
c7a0: 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a 2a  function. If .**
c7b0: 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e       argument bN
c7c0: 43 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  C is true, then 
c7d0: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
c7e0: 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73  NEEDCOLL flag is
c7f0: 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46   set..**.**   VF
c800: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
c810: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
c820: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69  xFunc).**     Li
c830: 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65  ke FUNCTION exce
c840: 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20  pt it omits the 
c850: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
c860: 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a  TANT flag..**.**
c870: 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61     AGGREGATE(zNa
c880: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
c890: 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e  bNC, xStep, xFin
c8a0: 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  al).**     Used 
c8b0: 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67  to create an agg
c8c0: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
c8d0: 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65  definition imple
c8e0: 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20  mented by.**    
c8f0: 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73   the C functions
c900: 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61   xStep and xFina
c910: 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75  l. The first fou
c920: 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20  r parameters.** 
c930: 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65      are interpre
c940: 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ted in the same 
c950: 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74  way as the first
c960: 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f   4 parameters to
c970: 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e  .**     FUNCTION
c980: 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45  ()..**.**   LIKE
c990: 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  FUNC(zName, nArg
c9a0: 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a  , pArg, flags).*
c9b0: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
c9c0: 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75  eate a scalar fu
c9d0: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
c9e0: 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  n of a function 
c9f0: 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68  zName .**     th
ca00: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
ca10: 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73  arguments and is
ca20: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
ca30: 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20  a call to C .** 
ca40: 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b      function lik
ca50: 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20  eFunc. Argument 
ca60: 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  pArg is cast to 
ca70: 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d  a (void *) and m
ca80: 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c  ade.**     avail
ca90: 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63  able as the func
caa0: 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28  tion user-data (
cab0: 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
cac0: 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20  a()). The.**    
cad0: 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76   FuncDef.flags v
cae0: 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
caf0: 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73  o the value pass
cb00: 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a  ed as the flags.
cb10: 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72  **     parameter
cb20: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e  ..*/.#define FUN
cb30: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
cb40: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
cb50: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
cb60: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
cb70: 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
cb80: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
cb90: 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
cba0: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
cbb0: 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
cbc0: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
cbd0: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
cbe0: 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   VFUNCTION(zName
cbf0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
cc00: 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
cc10: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
cc20: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
cc30: 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
cc40: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
cc50: 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
cc60: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
cc70: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
cc80: 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65   FUNCTION2(zName
cc90: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
cca0: 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46  C, xFunc, extraF
ccb0: 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
ccc0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
ccd0: 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
cce0: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
ccf0: 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72  C_NEEDCOLL)|extr
cd00: 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49  aFlags,\.   SQLI
cd10: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
cd20: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
cd30: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
cd40: 30 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46  0}.#define STR_F
cd50: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
cd60: 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20  Arg, pArg, bNC, 
cd70: 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
cd80: 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  , SQLITE_FUNC_CO
cd90: 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
cda0: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
cdb0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
cdc0: 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75  .   pArg, 0, xFu
cdd0: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
cde0: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
cdf0: 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
ce00: 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73  nArg, arg, flags
ce10: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
ce20: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
ce30: 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c  T|SQLITE_UTF8|fl
ce40: 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20  ags, \.   (void 
ce50: 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75  *)arg, 0, likeFu
ce60: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
ce70: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
ce80: 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
ce90: 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
cea0: 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c  xStep, xFinal) \
ceb0: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
cec0: 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45  _UTF8|(nc*SQLITE
ced0: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
cee0: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
cef0: 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c  _TO_PTR(arg), 0,
cf00: 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c   0, xStep,xFinal
cf10: 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 23 64 65  ,#zName,0,0}.#de
cf20: 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 32 28  fine AGGREGATE2(
cf30: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
cf40: 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69  , nc, xStep, xFi
cf50: 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61 67 73 29  nal, extraFlags)
cf60: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
cf70: 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49  TE_UTF8|(nc*SQLI
cf80: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
cf90: 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a  )|extraFlags, \.
cfa0: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
cfb0: 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c  _PTR(arg), 0, 0,
cfc0: 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a   xStep,xFinal,#z
cfd0: 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a  Name,0,0}../*.**
cfe0: 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76   All current sav
cff0: 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72  epoints are stor
d000: 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed in a linked l
d010: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a  ist starting at.
d020: 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65  ** sqlite3.pSave
d030: 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74  point. The first
d040: 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20   element in the 
d050: 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74  list is the most
d060: 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65   recently.** ope
d070: 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53  ned savepoint. S
d080: 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64  avepoints are ad
d090: 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20  ded to the list 
d0a0: 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f  by the vdbe.** O
d0b0: 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
d0c0: 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ruction..*/.stru
d0d0: 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20  ct Savepoint {. 
d0e0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
d0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d100: 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e       /* Savepoin
d110: 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d  t name (nul-term
d120: 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34  inated) */.  i64
d130: 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20   nDeferredCons; 
d140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d150: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
d160: 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74  ferred fk violat
d170: 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ions */.  i64 nD
d180: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
d190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d1a0: 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   Number of defer
d1b0: 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20  red imm fk. */. 
d1c0: 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78   Savepoint *pNex
d1d0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
d1e0: 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73       /* Parent s
d1f0: 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79  avepoint (if any
d200: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ) */.};../*.** T
d210: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
d220: 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63   used as the sec
d230: 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f  ond parameter to
d240: 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e   sqlite3Savepoin
d250: 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74  t(),.** and as t
d260: 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
d270: 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69  o the OP_Savepoi
d280: 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
d290: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50  */.#define SAVEP
d2a0: 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20  OINT_BEGIN      
d2b0: 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  0.#define SAVEPO
d2c0: 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31  INT_RELEASE    1
d2d0: 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
d2e0: 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a  NT_ROLLBACK   2.
d2f0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
d300: 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74  ite module (virt
d310: 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ual table defini
d320: 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64  tion) is defined
d330: 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
d340: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
d350: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73  ing structure, s
d360: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
d370: 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20  ite3.aModule.** 
d380: 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73  hash table..*/.s
d390: 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20  truct Module {. 
d3a0: 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
d3b0: 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20  odule *pModule; 
d3c0: 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63        /* Callbac
d3d0: 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20  k pointers */.  
d3e0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
d3f0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
d400: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73       /* Name pas
d410: 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
d420: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
d430: 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20   *pAux;         
d440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d450: 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20   /* pAux passed 
d460: 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
d470: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
d480: 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
d490: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
d4a0: 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f  Module destructo
d4b0: 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b  r function */.};
d4c0: 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  ../*.** informat
d4d0: 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63  ion about each c
d4e0: 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20  olumn of an SQL 
d4f0: 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e  table is held in
d500: 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
d510: 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
d520: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c  e..*/.struct Col
d530: 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  umn {.  char *zN
d540: 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ame;     /* Name
d550: 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20   of this column 
d560: 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74  */.  Expr *pDflt
d570: 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74  ;     /* Default
d580: 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
d590: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20  olumn */.  char 
d5a0: 2a 7a 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 4f  *zDflt;     /* O
d5b0: 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20  riginal text of 
d5c0: 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
d5d0: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 79  e */.  char *zTy
d5e0: 70 65 3b 20 20 20 20 20 2f 2a 20 44 61 74 61 20  pe;     /* Data 
d5f0: 74 79 70 65 20 66 6f 72 20 74 68 69 73 20 63 6f  type for this co
d600: 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  lumn */.  char *
d610: 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  zColl;     /* Co
d620: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
d630: 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20  .  If NULL, use 
d640: 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20  the default */. 
d650: 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20   u8 notNull;    
d660: 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65    /* An OE_ code
d670: 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20   for handling a 
d680: 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
d690: 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  int */.  char af
d6a0: 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65  finity;   /* One
d6b0: 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41   of the SQLITE_A
d6c0: 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f  FF_... values */
d6d0: 0a 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20  .  u8 szEst;    
d6e0: 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
d6f0: 20 73 69 7a 65 20 6f 66 20 74 68 69 73 20 63 6f   size of this co
d700: 6c 75 6d 6e 2e 20 20 49 4e 54 3d 3d 31 20 2a 2f  lumn.  INT==1 */
d710: 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20  .  u8 colFlags; 
d720: 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70      /* Boolean p
d730: 72 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20  roperties.  See 
d740: 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73  COLFLAG_ defines
d750: 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   below */.};../*
d760: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
d770: 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c  for Column.colFl
d780: 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ags:.*/.#define 
d790: 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20  COLFLAG_PRIMKEY 
d7a0: 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f   0x0001    /* Co
d7b0: 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20  lumn is part of 
d7c0: 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  the primary key 
d7d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
d7e0: 41 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30  AG_HIDDEN   0x00
d7f0: 30 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65  02    /* A hidde
d800: 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69  n column in a vi
d810: 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a  rtual table */..
d820: 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69  /*.** A "Collati
d830: 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20  ng Sequence" is 
d840: 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e  defined by an in
d850: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
d860: 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63  llowing.** struc
d870: 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c  ture. Conceptual
d880: 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20  ly, a collating 
d890: 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74  sequence consist
d8a0: 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a  s of a name and.
d8b0: 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20  ** a comparison 
d8c0: 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66  routine that def
d8d0: 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f  ines the order o
d8e0: 66 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e  f that sequence.
d8f0: 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65  .**.** If CollSe
d900: 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20  q.xCmp is NULL, 
d910: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
d920: 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73  e.** collating s
d930: 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66  equence is undef
d940: 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62  ined.  Indices b
d950: 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66  uilt on an undef
d960: 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e  ined.** collatin
d970: 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e  g sequence may n
d980: 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72  ot be read or wr
d990: 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  itten..*/.struct
d9a0: 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61   CollSeq {.  cha
d9b0: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
d9c0: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
d9d0: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
d9e0: 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f  ence, UTF-8 enco
d9f0: 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ded */.  u8 enc;
da00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
da10: 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
da20: 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28  handled by xCmp(
da30: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73  ) */.  void *pUs
da40: 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
da50: 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
da60: 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e  o xCmp() */.  in
da70: 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c  t (*xCmp)(void*,
da80: 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  int, const void*
da90: 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
daa0: 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44  d*);.  void (*xD
dab0: 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20  el)(void*);  /* 
dac0: 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70  Destructor for p
dad0: 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  User */.};../*.*
dae0: 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63  * A sort order c
daf0: 61 6e 20 62 65 20 65 69 74 68 65 72 20 41 53 43  an be either ASC
db00: 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65   or DESC..*/.#de
db10: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41  fine SQLITE_SO_A
db20: 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53  SC       0  /* S
db30: 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ort in ascending
db40: 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e   order */.#defin
db50: 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43  e SQLITE_SO_DESC
db60: 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74        1  /* Sort
db70: 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72   in ascending or
db80: 64 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f  der */../*.** Co
db90: 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79  lumn affinity ty
dba0: 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65  pes..**.** These
dbb0: 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e   used to have mn
dbc0: 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65  emonic name like
dbd0: 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f   'i' for SQLITE_
dbe0: 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a  AFF_INTEGER and.
dbf0: 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54  ** 't' for SQLIT
dc00: 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74  E_AFF_TEXT.  But
dc10: 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c   we can save a l
dc20: 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20  ittle space and 
dc30: 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73  improve.** the s
dc40: 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79  peed a little by
dc50: 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76   numbering the v
dc60: 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76  alues consecutiv
dc70: 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75 74  ely.  .**.** But
dc80: 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61   rather than sta
dc90: 72 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20  rt with 0 or 1, 
dca0: 77 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 41  we begin with 'A
dcb0: 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a  '.  That way,.**
dcc0: 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61   when multiple a
dcd0: 66 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72  ffinity types ar
dce0: 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69  e concatenated i
dcf0: 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64  nto a string and
dd00: 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20  .** used as the 
dd10: 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79  P4 operand, they
dd20: 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65   will be more re
dd30: 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  adable..**.** No
dd40: 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65  te also that the
dd50: 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61   numeric types a
dd60: 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74  re grouped toget
dd70: 68 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74  her so that test
dd80: 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d  ing.** for a num
dd90: 65 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73  eric type is a s
dda0: 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e  ingle comparison
ddb0: 2e 20 20 41 6e 64 20 74 68 65 20 4e 4f 4e 45 20  .  And the NONE 
ddc0: 74 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a  type is first..*
ddd0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dde0: 5f 41 46 46 5f 4e 4f 4e 45 20 20 20 20 20 27 41  _AFF_NONE     'A
ddf0: 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
de00: 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20 27 42  _AFF_TEXT     'B
de10: 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
de20: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 43  _AFF_NUMERIC  'C
de30: 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
de40: 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27 44  _AFF_INTEGER  'D
de50: 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
de60: 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27 45  _AFF_REAL     'E
de70: 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  '..#define sqlit
de80: 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e  e3IsNumericAffin
de90: 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51  ity(X)  ((X)>=SQ
dea0: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
deb0: 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  )../*.** The SQL
dec0: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c  ITE_AFF_MASK val
ded0: 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68  ues masks off th
dee0: 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69  e significant bi
def0: 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69  ts of an.** affi
df00: 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a  nity value. .*/.
df10: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
df20: 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34 37  FF_MASK     0x47
df30: 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e  ../*.** Addition
df40: 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74 68  al bit values th
df50: 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77  at can be ORed w
df60: 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20  ith an affinity 
df70: 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67  without.** chang
df80: 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79  ing the affinity
df90: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ..**.** The SQLI
dfa0: 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20  TE_NOTNULL flag 
dfb0: 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  is a combination
dfc0: 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a   of NULLEQ and J
dfd0: 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74  UMPIFNULL..** It
dfe0: 20 63 61 75 73 65 73 20 61 6e 20 61 73 73 65 72   causes an asser
dff0: 74 28 29 20 74 6f 20 66 69 72 65 20 69 66 20 65  t() to fire if e
e000: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74 6f  ither operand to
e010: 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a   a comparison.**
e020: 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55 4c   operator is NUL
e030: 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65 64 20  L.  It is added 
e040: 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70 61  to certain compa
e050: 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20  rison operators 
e060: 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61 74  to.** prove that
e070: 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61 72   the operands ar
e080: 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c  e always NOT NUL
e090: 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  L..*/.#define SQ
e0a0: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
e0b0: 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73    0x10  /* jumps
e0c0: 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
e0d0: 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64  nd is NULL */.#d
e0e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f  efine SQLITE_STO
e0f0: 52 45 50 32 20 20 20 20 20 20 30 78 32 30 20 20  REP2      0x20  
e100: 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
e110: 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65  in reg[P2] rathe
e120: 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23  r than jump */.#
e130: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55  define SQLITE_NU
e140: 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38 30 20  LLEQ       0x80 
e150: 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f   /* NULL=NULL */
e160: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e170: 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78 39  NOTNULL      0x9
e180: 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61  0  /* Assert tha
e190: 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e  t operands are n
e1a0: 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a  ever NULL */../*
e1b0: 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66  .** An object of
e1c0: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63 72   this type is cr
e1d0: 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 76  eated for each v
e1e0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65  irtual table pre
e1f0: 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64  sent in.** the d
e200: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
e210: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61  .**.** If the da
e220: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
e230: 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68   shared, then th
e240: 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61  ere is one insta
e250: 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73  nce of this.** s
e260: 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63  tructure for eac
e270: 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
e280: 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29  ction (sqlite3*)
e290: 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73   that uses the s
e2a0: 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e  hared.** schema.
e2b0: 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65   This is because
e2c0: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
e2d0: 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72  onnection requir
e2e0: 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75  es its own uniqu
e2f0: 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  e.** instance of
e300: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
e310: 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74  b* handle used t
e320: 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72  o access the vir
e330: 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20 69  tual table .** i
e340: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73  mplementation. s
e350: 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
e360: 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20  dles can not be 
e370: 73 68 61 72 65 64 20 62 65 74 77 65 65 6e 20 0a  shared between .
e380: 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ** database conn
e390: 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68  ections, even wh
e3a0: 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20 74  en the rest of t
e3b0: 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74  he in-memory dat
e3c0: 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d 61  abase .** schema
e3d0: 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20 74   is shared, as t
e3e0: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
e3f0: 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74  n often stores t
e400: 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  he database.** c
e410: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
e420: 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76 69   passed to it vi
e430: 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29  a the xConnect()
e440: 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d 65   or xCreate() me
e450: 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69  thod.** during i
e460: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e  nitialization in
e470: 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64  ternally. This d
e480: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
e490: 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a  on handle may.**
e4a0: 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62 79   then be used by
e4b0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
e4c0: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
e4d0: 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c  n to access real
e4e0: 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74 68   tables .** with
e4f0: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  in the database.
e500: 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70   So that they ap
e510: 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20  pear as part of 
e520: 74 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a 20  the callers .** 
e530: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
e540: 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64  se accesses need
e550: 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20   to be made via 
e560: 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
e570: 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  e .** connection
e580: 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f   as that used to
e590: 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65   execute SQL ope
e5a0: 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76  rations on the v
e5b0: 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a  irtual table..**
e5c0: 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f  .** All VTable o
e5d0: 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72  bjects that corr
e5e0: 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67  espond to a sing
e5f0: 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68  le table in a sh
e600: 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65  ared.** database
e610: 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74   schema are init
e620: 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20  ially stored in 
e630: 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f  a linked-list po
e640: 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74  inted to by.** t
e650: 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65  he Table.pVTable
e660: 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65   member variable
e670: 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f   of the correspo
e680: 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65  nding Table obje
e690: 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73  ct..** When an s
e6a0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
e6b0: 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65   operation is re
e6c0: 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73  quired to access
e6d0: 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20   the virtual.** 
e6e0: 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68  table, it search
e6f0: 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20  es the list for 
e700: 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20  the VTable that 
e710: 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
e720: 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  he.** database c
e730: 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20  onnection doing 
e740: 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f  the preparing so
e750: 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63   as to use the c
e760: 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65  orrect.** sqlite
e770: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69  3_vtab* handle i
e780: 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71  n the compiled q
e790: 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e  uery..**.** When
e7a0: 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61   an in-memory Ta
e7b0: 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65  ble object is de
e7c0: 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70  leted (for examp
e7d0: 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73  le when the.** s
e7e0: 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72  chema is being r
e7f0: 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65  eloaded for some
e800: 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54   reason), the VT
e810: 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65  able objects are
e820: 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65 64   not .** deleted
e830: 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33   and the sqlite3
e840: 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61  _vtab* handles a
e850: 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65  re not xDisconne
e860: 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65 64  ct()ed .** immed
e870: 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c  iately. Instead,
e880: 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20   they are moved 
e890: 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70  from the Table.p
e8a0: 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a  VTable list to.*
e8b0: 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64  * another linked
e8c0: 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20   list headed by 
e8d0: 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73  the sqlite3.pDis
e8e0: 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f  connect member o
e8f0: 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70  f the.** corresp
e900: 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73  onding sqlite3 s
e910: 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61  tructure. They a
e920: 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f  re then deleted/
e930: 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a 2a  xDisconnected .*
e940: 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74  * next time a st
e950: 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61  atement is prepa
e960: 72 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73  red using said s
e970: 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73  qlite3*. This is
e980: 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69   done.** to avoi
e990: 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65  d deadlock issue
e9a0: 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74  s involving mult
e9b0: 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74  iple sqlite3.mut
e9c0: 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52  ex mutexes..** R
e9d0: 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73  efer to comments
e9e0: 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20   above function 
e9f0: 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
ea00: 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a  kList() for an.*
ea10: 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73  * explanation as
ea20: 20 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61   to why it is sa
ea30: 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74  fe to add an ent
ea40: 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  ry to an sqlite3
ea50: 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20  .pDisconnect.** 
ea60: 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c  list without hol
ea70: 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70  ding the corresp
ea80: 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d  onding sqlite3.m
ea90: 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a  utex mutex..**.*
eaa0: 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72  * The memory for
eab0: 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73   objects of this
eac0: 20 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20   type is always 
ead0: 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a  allocated by .**
eae0: 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
eaf0: 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f  (), using the co
eb00: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
eb10: 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65  stored in VTable
eb20: 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68 65 20 66  .db as .** the f
eb30: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a  irst argument..*
eb40: 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  /.struct VTable 
eb50: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
eb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
eb70: 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   Database connec
eb80: 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20  tion associated 
eb90: 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20  with this table 
eba0: 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f  */.  Module *pMo
ebb0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  d;             /
ebc0: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64  * Pointer to mod
ebd0: 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
ebe0: 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  on */.  sqlite3_
ebf0: 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20  vtab *pVtab;    
ec00: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
ec10: 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f  vtab instance */
ec20: 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20  .  int nRef;    
ec30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ec40: 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
ec50: 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  rs to this struc
ec60: 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f  ture */.  u8 bCo
ec70: 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20  nstraint;       
ec80: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
ec90: 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73  onstraints are s
eca0: 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e  upported */.  in
ecb0: 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t iSavepoint;   
ecc0: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68          /* Depth
ecd0: 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e   of the SAVEPOIN
ece0: 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61  T stack */.  VTa
ecf0: 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ble *pNext;     
ed00: 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69         /* Next i
ed10: 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73  n linked list (s
ed20: 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a  ee above) */.};.
ed30: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
ed40: 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65  table is represe
ed50: 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62  nted in memory b
ed60: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
ed70: 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e   the.** followin
ed80: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
ed90: 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65 20 69  ** Table.zName i
eda0: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
edb0: 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 63 61  e table.  The ca
edc0: 73 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e  se of the origin
edd0: 61 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54 41 42  al.** CREATE TAB
ede0: 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  LE statement is 
edf0: 73 74 6f 72 65 64 2c 20 62 75 74 20 63 61 73 65  stored, but case
ee00: 20 69 73 20 6e 6f 74 20 73 69 67 6e 69 66 69 63   is not signific
ee10: 61 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70 61  ant for.** compa
ee20: 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 61  risons..**.** Ta
ee30: 62 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68 65 20  ble.nCol is the 
ee40: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
ee50: 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 2e  s in this table.
ee60: 20 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69 73 20    Table.aCol is 
ee70: 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20  a.** pointer to 
ee80: 61 6e 20 61 72 72 61 79 20 6f 66 20 43 6f 6c 75  an array of Colu
ee90: 6d 6e 20 73 74 72 75 63 74 75 72 65 73 2c 20 6f  mn structures, o
eea0: 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  ne for each colu
eeb0: 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  mn..**.** If the
eec0: 20 74 61 62 6c 65 20 68 61 73 20 61 6e 20 49 4e   table has an IN
eed0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
eee0: 59 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e 69 50  Y, then Table.iP
eef0: 4b 65 79 20 69 73 20 74 68 65 20 69 6e 64 65 78  Key is the index
ef00: 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c 75 6d   of.** the colum
ef10: 6e 20 74 68 61 74 20 69 73 20 74 68 61 74 20 6b  n that is that k
ef20: 65 79 2e 20 20 20 4f 74 68 65 72 77 69 73 65 20  ey.   Otherwise 
ef30: 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 6e  Table.iPKey is n
ef40: 65 67 61 74 69 76 65 2e 20 20 4e 6f 74 65 0a 2a  egative.  Note.*
ef50: 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61 74  * that the datat
ef60: 79 70 65 20 6f 66 20 74 68 65 20 50 52 49 4d 41  ype of the PRIMA
ef70: 52 59 20 4b 45 59 20 6d 75 73 74 20 62 65 20 49  RY KEY must be I
ef80: 4e 54 45 47 45 52 20 66 6f 72 20 74 68 69 73 20  NTEGER for this 
ef90: 66 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65 20 73  field to.** be s
efa0: 65 74 2e 20 20 41 6e 20 49 4e 54 45 47 45 52 20  et.  An INTEGER 
efb0: 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 75  PRIMARY KEY is u
efc0: 73 65 64 20 61 73 20 74 68 65 20 72 6f 77 69 64  sed as the rowid
efd0: 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66   for each row of
efe0: 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e 20 20  .** the table.  
eff0: 49 66 20 61 20 74 61 62 6c 65 20 68 61 73 20 6e  If a table has n
f000: 6f 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  o INTEGER PRIMAR
f010: 59 20 4b 45 59 2c 20 74 68 65 6e 20 61 20 72 61  Y KEY, then a ra
f020: 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20 69 73  ndom rowid.** is
f030: 20 67 65 6e 65 72 61 74 65 64 20 66 6f 72 20 65   generated for e
f040: 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74  ach row of the t
f050: 61 62 6c 65 2e 20 20 54 46 5f 48 61 73 50 72 69  able.  TF_HasPri
f060: 6d 61 72 79 4b 65 79 20 69 73 20 73 65 74 20 69  maryKey is set i
f070: 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 68  f.** the table h
f080: 61 73 20 61 6e 79 20 50 52 49 4d 41 52 59 20 4b  as any PRIMARY K
f090: 45 59 2c 20 49 4e 54 45 47 45 52 20 6f 72 20 6f  EY, INTEGER or o
f0a0: 74 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a 20  therwise..**.** 
f0b0: 54 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20 74 68  Table.tnum is th
f0c0: 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f  e page number fo
f0d0: 72 20 74 68 65 20 72 6f 6f 74 20 42 54 72 65 65  r the root BTree
f0e0: 20 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62   page of the tab
f0f0: 6c 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64 61 74  le in the.** dat
f100: 61 62 61 73 65 20 66 69 6c 65 2e 20 20 49 66 20  abase file.  If 
f110: 54 61 62 6c 65 2e 69 44 62 20 69 73 20 74 68 65  Table.iDb is the
f120: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
f130: 74 61 62 61 73 65 20 74 61 62 6c 65 20 62 61 63  tabase table bac
f140: 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c 69 74  kend.** in sqlit
f150: 65 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73 20 66  e.aDb[].  0 is f
f160: 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  or the main data
f170: 62 61 73 65 20 61 6e 64 20 31 20 69 73 20 66 6f  base and 1 is fo
f180: 72 20 74 68 65 20 66 69 6c 65 20 74 68 61 74 0a  r the file that.
f190: 2a 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f 72 61  ** holds tempora
f1a0: 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  ry tables and in
f1b0: 64 69 63 65 73 2e 20 20 49 66 20 54 46 5f 45 70  dices.  If TF_Ep
f1c0: 68 65 6d 65 72 61 6c 20 69 73 20 73 65 74 0a 2a  hemeral is set.*
f1d0: 2a 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  * then the table
f1e0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20   is stored in a 
f1f0: 66 69 6c 65 20 74 68 61 74 20 69 73 20 61 75 74  file that is aut
f200: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74  omatically delet
f210: 65 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20 56  ed.** when the V
f220: 44 42 45 20 63 75 72 73 6f 72 20 74 6f 20 74 68  DBE cursor to th
f230: 65 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65  e table is close
f240: 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65  d.  In this case
f250: 20 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20   Table.tnum .** 
f260: 72 65 66 65 72 73 20 56 44 42 45 20 63 75 72 73  refers VDBE curs
f270: 6f 72 20 6e 75 6d 62 65 72 20 74 68 61 74 20 68  or number that h
f280: 6f 6c 64 73 20 74 68 65 20 74 61 62 6c 65 20 6f  olds the table o
f290: 70 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65 20  pen, not to the 
f2a0: 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75 6d  root.** page num
f2b0: 62 65 72 2e 20 20 54 72 61 6e 73 69 65 6e 74 20  ber.  Transient 
f2c0: 74 61 62 6c 65 73 20 61 72 65 20 75 73 65 64 20  tables are used 
f2d0: 74 6f 20 68 6f 6c 64 20 74 68 65 20 72 65 73 75  to hold the resu
f2e0: 6c 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62 2d  lts of a.** sub-
f2f0: 71 75 65 72 79 20 74 68 61 74 20 61 70 70 65 61  query that appea
f300: 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20  rs instead of a 
f310: 72 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 20  real table name 
f320: 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
f330: 73 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c 45  se .** of a SELE
f340: 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f  CT statement..*/
f350: 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a  .struct Table {.
f360: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
f370: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
f380: 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76  f the table or v
f390: 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20  iew */.  Column 
f3a0: 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a  *aCol;        /*
f3b0: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
f3c0: 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  ut each column *
f3d0: 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65  /.  Index *pInde
f3e0: 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  x;       /* List
f3f0: 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20   of SQL indexes 
f400: 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a  on this table. *
f410: 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
f420: 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c  ect;     /* NULL
f430: 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f   for tables.  Po
f440: 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69  ints to definiti
f450: 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f  on if a view. */
f460: 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20  .  FKey *pFKey; 
f470: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65          /* Linke
f480: 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f  d list of all fo
f490: 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68  reign keys in th
f4a0: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68  is table */.  ch
f4b0: 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20  ar *zColAff;    
f4c0: 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
f4d0: 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
f4e0: 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
f4f0: 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  n */.#ifndef SQL
f500: 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20  ITE_OMIT_CHECK. 
f510: 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63   ExprList *pChec
f520: 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45  k;    /* All CHE
f530: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  CK constraints *
f540: 2f 0a 23 65 6e 64 69 66 0a 20 20 4c 6f 67 45 73  /.#endif.  LogEs
f550: 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20  t nRowLogEst;   
f560: 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77  /* Estimated row
f570: 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f  s in table - fro
f580: 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  m sqlite_stat1 t
f590: 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 74 6e  able */.  int tn
f5a0: 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  um;            /
f5b0: 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 6e 6f 64  * Root BTree nod
f5c0: 65 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65  e for this table
f5d0: 20 28 73 65 65 20 6e 6f 74 65 20 61 62 6f 76 65   (see note above
f5e0: 29 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79  ) */.  i16 iPKey
f5f0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
f600: 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20  f not negative, 
f610: 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20  use aCol[iPKey] 
f620: 61 73 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  as the primary k
f630: 65 79 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c  ey */.  i16 nCol
f640: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
f650: 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
f660: 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
f670: 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20  */.  u16 nRef;  
f680: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
f690: 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ber of pointers 
f6a0: 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f  to this Table */
f6b0: 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52  .  LogEst szTabR
f6c0: 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d  ow;     /* Estim
f6d0: 61 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63  ated size of eac
f6e0: 68 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62  h table row in b
f6f0: 79 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  ytes */.#ifdef S
f700: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53  QLITE_ENABLE_COS
f710: 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63  TMULT.  LogEst c
f720: 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20  ostMult;     /* 
f730: 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20  Cost multiplier 
f740: 66 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20 74  for using this t
f750: 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  able */.#endif. 
f760: 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20   u8 tabFlags;   
f770: 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
f780: 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   TF_* values */.
f790: 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20    u8 keyConf;   
f7a0: 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74         /* What t
f7b0: 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20  o do in case of 
f7c0: 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c  uniqueness confl
f7d0: 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a  ict on iPKey */.
f7e0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
f7f0: 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20  MIT_ALTERTABLE. 
f800: 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65   int addColOffse
f810: 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20  t;    /* Offset 
f820: 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  in CREATE TABLE 
f830: 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65  stmt to add a ne
f840: 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64  w column */.#end
f850: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
f860: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
f870: 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c  BLE.  int nModul
f880: 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75  eArg;      /* Nu
f890: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
f8a0: 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20  s to the module 
f8b0: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f  */.  char **azMo
f8c0: 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65 78  duleArg;  /* Tex
f8d0: 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20  t of all module 
f8e0: 61 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64  args. [0] is mod
f8f0: 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 56 54  ule name */.  VT
f900: 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20  able *pVTable;  
f910: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54     /* List of VT
f920: 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f  able objects. */
f930: 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65  .#endif.  Trigge
f940: 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f  r *pTrigger;   /
f950: 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65  * List of trigge
f960: 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63  rs stored in pSc
f970: 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61  hema */.  Schema
f980: 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f   *pSchema;     /
f990: 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f  * Schema that co
f9a0: 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c  ntains this tabl
f9b0: 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e  e */.  Table *pN
f9c0: 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e  extZombie;  /* N
f9d0: 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65  ext on the Parse
f9e0: 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74  .pZombieTab list
f9f0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
fa00: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
fa10: 20 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e   Table.tabFlags.
fa20: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52  .*/.#define TF_R
fa30: 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30  eadonly        0
fa40: 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  x01    /* Read-o
fa50: 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
fa60: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
fa70: 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
fa80: 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68  x02    /* An eph
fa90: 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  emeral table */.
faa0: 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72  #define TF_HasPr
fab0: 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20  imaryKey   0x04 
fac0: 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
fad0: 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
fae0: 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
faf0: 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38  increment   0x08
fb00: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70      /* Integer p
fb10: 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75  rimary key is au
fb20: 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23  toincrement */.#
fb30: 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61  define TF_Virtua
fb40: 6c 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20  l         0x10  
fb50: 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61    /* Is a virtua
fb60: 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
fb70: 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77  ne TF_WithoutRow
fb80: 69 64 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a  id    0x20    /*
fb90: 20 4e 6f 20 72 6f 77 69 64 20 75 73 65 64 2e 20   No rowid used. 
fba0: 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74  PRIMARY KEY is t
fbb0: 68 65 20 6b 65 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  he key */.../*.*
fbc0: 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68  * Test to see wh
fbd0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74  ether or not a t
fbe0: 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61  able is a virtua
fbf0: 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69  l table.  This i
fc00: 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d  s.** done as a m
fc10: 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20  acro so that it 
fc20: 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65  will be optimize
fc30: 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75  d out when virtu
fc40: 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70  al.** table supp
fc50: 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66  ort is omitted f
fc60: 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a  rom the build..*
fc70: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
fc80: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
fc90: 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  LE.#  define IsV
fca0: 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28  irtual(X)      (
fcb0: 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
fcc0: 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29   TF_Virtual)!=0)
fcd0: 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64  .#  define IsHid
fce0: 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28  denColumn(X) (((
fcf0: 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
fd00: 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
fd10: 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  0).#else.#  defi
fd20: 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
fd30: 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65       0.#  define
fd40: 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
fd50: 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  X) 0.#endif../* 
fd60: 44 6f 65 73 20 74 68 65 20 74 61 62 6c 65 20 68  Does the table h
fd70: 61 76 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23  ave a rowid */.#
fd80: 64 65 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28  define HasRowid(
fd90: 58 29 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61  X)     (((X)->ta
fda0: 62 46 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68  bFlags & TF_With
fdb0: 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f  outRowid)==0)../
fdc0: 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67  *.** Each foreig
fdd0: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
fde0: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
fdf0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
fe00: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
fe10: 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  * A foreign key 
fe20: 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  is associated wi
fe30: 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20  th two tables.  
fe40: 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65  The "from" table
fe50: 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65   is.** the table
fe60: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
fe70: 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
fe80: 61 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65  ause that create
fe90: 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a  s the foreign.**
fea0: 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20   key.  The "to" 
feb0: 74 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62  table is the tab
fec0: 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64  le that is named
fed0: 20 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43   in the REFERENC
fee0: 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f  ES clause..** Co
fef0: 6e 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d  nsider this exam
ff00: 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  ple:.**.**     C
ff10: 52 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28  REATE TABLE ex1(
ff20: 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45  .**       a INTE
ff30: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
ff40: 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45  .**       b INTE
ff50: 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66  GER CONSTRAINT f
ff60: 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78  k1 REFERENCES ex
ff70: 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a  2(x).**     );.*
ff80: 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e  *.** For foreign
ff90: 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20   key "fk1", the 
ffa0: 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65  from-table is "e
ffb0: 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74  x1" and the to-t
ffc0: 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a  able is "ex2"..*
ffd0: 2a 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d  * Equivalent nam
ffe0: 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72  es:.**.**     fr
fff0: 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c  om-table == chil
10000 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20  d-table.**      
10010 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72   to-table == par
10020 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20  ent-table.**.** 
10030 45 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20  Each REFERENCES 
10040 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73  clause generates
10050 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
10060 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
10070 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68  ructure.** which
10080 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20   is attached to 
10090 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20  the from-table. 
100a0 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65   The to-table ne
100b0 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65  ed not exist whe
100c0 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61  n.** the from-ta
100d0 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20  ble is created. 
100e0 20 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f   The existence o
100f0 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69  f the to-table i
10100 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a  s not checked..*
10110 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66  *.** The list of
10120 20 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72   all parents for
10130 20 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69   child Table X i
10140 73 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65  s held at X.pFKe
10150 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20  y..**.** A list 
10160 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20  of all children 
10170 66 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65  for a table name
10180 64 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74  d Z (which might
10190 20 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29   not even exist)
101a0 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53  .** is held in S
101b0 63 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77  chema.fkeyHash w
101c0 69 74 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f  ith a hash key o
101d0 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  f Z..*/.struct F
101e0 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70  Key {.  Table *p
101f0 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62  From;     /* Tab
10200 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
10210 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
10220 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29  use (aka: Child)
10230 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78   */.  FKey *pNex
10240 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20  tFrom;  /* Next 
10250 46 4b 65 79 20 77 69 74 68 20 74 68 65 20 73 61  FKey with the sa
10260 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78  me in pFrom. Nex
10270 74 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f  t parent of pFro
10280 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f  m */.  char *zTo
10290 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ;        /* Name
102a0 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74   of table that t
102b0 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f  he key points to
102c0 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a   (aka: Parent) *
102d0 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54  /.  FKey *pNextT
102e0 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69  o;    /* Next wi
102f0 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e  th the same zTo.
10300 20 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a   Next child of z
10310 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  To. */.  FKey *p
10320 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72  PrevTo;    /* Pr
10330 65 76 69 6f 75 73 20 77 69 74 68 20 74 68 65 20  evious with the 
10340 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e  same zTo */.  in
10350 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  t nCol;         
10360 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
10370 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79  umns in this key
10380 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33   */.  /* EV: R-3
10390 30 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20  0323-21917 */.  
103a0 75 38 20 69 73 44 65 66 65 72 72 65 64 3b 20 20  u8 isDeferred;  
103b0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
103c0 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b  constraint check
103d0 69 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20  ing is deferred 
103e0 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20  till COMMIT */. 
103f0 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20   u8 aAction[2]; 
10400 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c         /* ON DEL
10410 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54  ETE and ON UPDAT
10420 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65  E actions, respe
10430 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69  ctively */.  Tri
10440 67 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b  gger *apTrigger[
10450 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66  2];/* Triggers f
10460 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74  or aAction[] act
10470 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  ions */.  struct
10480 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20   sColMap {      
10490 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f  /* Mapping of co
104a0 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74  lumns in pFrom t
104b0 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f  o columns in zTo
104c0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f   */.    int iFro
104d0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
104e0 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e   Index of column
104f0 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20   in pFrom */.   
10500 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20   char *zCol;    
10510 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
10520 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e  f column in zTo.
10530 20 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52    If NULL use PR
10540 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d  IMARY KEY */.  }
10550 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20   aCol[1];       
10560 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72       /* One entr
10570 79 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43  y for each of nC
10580 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b  ol columns */.};
10590 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73  ../*.** SQLite s
105a0 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66  upports many dif
105b0 66 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72  ferent ways to r
105c0 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61  esolve a constra
105d0 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52  int.** error.  R
105e0 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69  OLLBACK processi
105f0 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20  ng means that a 
10600 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
10610 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74  tion.** causes t
10620 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
10630 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20  process to fail 
10640 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72  and for the curr
10650 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
10660 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ** to be rolled 
10670 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f  back.  ABORT pro
10680 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
10690 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
106a0 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20  rocess.** fails 
106b0 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68  and any prior ch
106c0 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20  anges from that 
106d0 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  one operation ar
106e0 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a  e backed out,.**
106f0 20 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63   but the transac
10700 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c  tion is not roll
10710 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70  ed back.  FAIL p
10720 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
10730 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72  that.** the oper
10740 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
10750 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75  s stops and retu
10760 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  rns an error cod
10770 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a  e.  But prior.**
10780 20 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20   changes due to 
10790 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
107a0 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65  on are not backe
107b0 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c  d out and no rol
107c0 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e  lback.** occurs.
107d0 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74    IGNORE means t
107e0 68 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c  hat the particul
107f0 61 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73  ar row that caus
10800 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ed the constrain
10810 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f  t.** error is no
10820 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70  t inserted or up
10830 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69  dated.  Processi
10840 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64  ng continues and
10850 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20   no error.** is 
10860 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41  returned.  REPLA
10870 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72  CE means that pr
10880 65 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61  eexisting databa
10890 73 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75  se rows that cau
108a0 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20  sed.** a UNIQUE 
108b0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
108c0 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64  tion are removed
108d0 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77   so that the new
108e0 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70   insert or.** up
108f0 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64  date can proceed
10900 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
10910 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
10920 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64  rror is reported
10930 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54  ..**.** RESTRICT
10940 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43  , SETNULL, and C
10950 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61  ASCADE actions a
10960 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72  pply only to for
10970 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45  eign keys..** RE
10980 53 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61  STRICT is the sa
10990 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20  me as ABORT for 
109a0 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67  IMMEDIATE foreig
109b0 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a  n keys and the.*
109c0 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41  * same as ROLLBA
109d0 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20  CK for DEFERRED 
109e0 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d  keys.  SETNULL m
109f0 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f  eans that the fo
10a00 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20  reign.** key is 
10a10 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41  set to NULL.  CA
10a20 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74  SCADE means that
10a30 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44   a DELETE or UPD
10a40 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65  ATE of the.** re
10a50 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72  ferenced table r
10a60 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64  ow is propagated
10a70 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68   into the row th
10a80 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20  at holds the.** 
10a90 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20  foreign key..** 
10aa0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
10ab0 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65  g symbolic value
10ac0 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 72 65  s are used to re
10ad0 63 6f 72 64 20 77 68 69 63 68 20 74 79 70 65 0a  cord which type.
10ae0 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20  ** of action to 
10af0 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  take..*/.#define
10b00 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20   OE_None     0  
10b10 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20   /* There is no 
10b20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68  constraint to ch
10b30 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  eck */.#define O
10b40 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f  E_Rollback 1   /
10b50 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61  * Fail the opera
10b60 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63  tion and rollbac
10b70 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  k the transactio
10b80 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  n */.#define OE_
10b90 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20  Abort    2   /* 
10ba0 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73  Back out changes
10bb0 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62   but do no rollb
10bc0 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ack transaction 
10bd0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61  */.#define OE_Fa
10be0 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74  il     3   /* St
10bf0 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  op the operation
10c00 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70   but leave all p
10c10 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a  rior changes */.
10c20 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72  #define OE_Ignor
10c30 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72  e   4   /* Ignor
10c40 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20  e the error. Do 
10c50 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52  not do the INSER
10c60 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23  T or UPDATE */.#
10c70 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63  define OE_Replac
10c80 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65  e  5   /* Delete
10c90 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64   existing record
10ca0 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54  , then do INSERT
10cb0 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23   or UPDATE */..#
10cc0 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69  define OE_Restri
10cd0 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f  ct 6   /* OE_Abo
10ce0 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  rt for IMMEDIATE
10cf0 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f  , OE_Rollback fo
10d00 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64  r DEFERRED */.#d
10d10 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c  efine OE_SetNull
10d20 20 20 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65    7   /* Set the
10d30 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c   foreign key val
10d40 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64  ue to NULL */.#d
10d50 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74  efine OE_SetDflt
10d60 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65    8   /* Set the
10d70 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c   foreign key val
10d80 75 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c  ue to its defaul
10d90 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  t */.#define OE_
10da0 43 61 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20  Cascade  9   /* 
10db0 43 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e  Cascade the chan
10dc0 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ges */..#define 
10dd0 4f 45 5f 44 65 66 61 75 6c 74 20 20 31 30 20 20  OE_Default  10  
10de0 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20 74  /* Do whatever t
10df0 68 65 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f  he default actio
10e00 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  n is */.../*.** 
10e10 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
10e20 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
10e30 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64  ucture is passed
10e40 20 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   as the first.**
10e50 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c   argument to sql
10e60 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61  ite3VdbeKeyCompa
10e70 72 65 20 61 6e 64 20 69 73 20 75 73 65 64 20 74  re and is used t
10e80 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a  o control the .*
10e90 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20  * comparison of 
10ea0 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65  the two index ke
10eb0 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74  ys..**.** Note t
10ec0 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d  hat aSortOrder[]
10ed0 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76   and aColl[] hav
10ee0 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73  e nField+1 slots
10ef0 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20  .  There.** are 
10f00 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72  nField slots for
10f10 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   the columns of 
10f20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e  an index then on
10f30 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20  e extra slot.** 
10f40 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 74  for the rowid at
10f50 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72   the end..*/.str
10f60 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20  uct KeyInfo {.  
10f70 75 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20 20  u32 nRef;       
10f80 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
10f90 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74   references to t
10fa0 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65  his KeyInfo obje
10fb0 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ct */.  u8 enc; 
10fc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
10fd0 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f  ext encoding - o
10fe0 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45  ne of the SQLITE
10ff0 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a  _UTF* values */.
11000 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
11010 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
11020 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69  of key columns i
11030 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  n the index */. 
11040 20 75 31 36 20 6e 58 46 69 65 6c 64 3b 20 20 20   u16 nXField;   
11050 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
11060 66 20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64  f columns beyond
11070 20 74 68 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73   the key columns
11080 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
11090 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  b;        /* The
110a0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
110b0 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53  tion */.  u8 *aS
110c0 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a  ortOrder;     /*
110d0 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20   Sort order for 
110e0 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a  each column. */.
110f0 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c    CollSeq *aColl
11100 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  [1];  /* Collati
11110 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20  ng sequence for 
11120 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65  each term of the
11130 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a   key */.};../*.*
11140 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
11150 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
11160 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69  tructure holds i
11170 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
11180 20 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64   a.** single ind
11190 65 78 20 72 65 63 6f 72 64 20 74 68 61 74 20 68  ex record that h
111a0 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  as already been 
111b0 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20  parsed out into 
111c0 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61  individual.** va
111d0 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65  lues..**.** A re
111e0 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63  cord is an objec
111f0 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  t that contains 
11200 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c  one or more fiel
11210 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52  ds of data..** R
11220 65 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20  ecords are used 
11230 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e  to store the con
11240 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20  tent of a table 
11250 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65  row and to store
11260 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61  .** the key of a
11270 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62  n index.  A blob
11280 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72   encoding of a r
11290 65 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64  ecord is created
112a0 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61   by.** the OP_Ma
112b0 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
112c0 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20  of the VDBE and 
112d0 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20  is disassembled 
112e0 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c  by the.** OP_Col
112f0 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  umn opcode..**.*
11300 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
11310 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20   holds a record 
11320 74 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79  that has already
11330 20 62 65 65 6e 20 64 69 73 61 73 73 65 6d 62 6c   been disassembl
11340 65 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63  ed.** into its c
11350 6f 6e 73 74 69 74 75 65 6e 74 20 66 69 65 6c 64  onstituent field
11360 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20  s..**.** The r1 
11370 61 6e 64 20 72 32 20 6d 65 6d 62 65 72 20 76 61  and r2 member va
11380 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79  riables are only
11390 20 75 73 65 64 20 62 79 20 74 68 65 20 6f 70 74   used by the opt
113a0 69 6d 69 7a 65 64 20 63 6f 6d 70 61 72 69 73 6f  imized compariso
113b0 6e 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 76  n.** functions v
113c0 64 62 65 52 65 63 6f 72 64 43 6f 6d 70 61 72 65  dbeRecordCompare
113d0 49 6e 74 28 29 20 61 6e 64 20 76 64 62 65 52 65  Int() and vdbeRe
113e0 63 6f 72 64 43 6f 6d 70 61 72 65 53 74 72 69 6e  cordCompareStrin
113f0 67 28 29 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55  g()..*/.struct U
11400 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a  npackedRecord {.
11410 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
11420 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  nfo;  /* Collati
11430 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65  on and sort-orde
11440 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f  r information */
11450 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20  .  u16 nField;  
11460 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
11470 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
11480 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64  pMem[] */.  i8 d
11490 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20  efault_rc;      
114a0 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65  /* Comparison re
114b0 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65  sult if keys are
114c0 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65   equal */.  u8 e
114d0 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20  rrCode;         
114e0 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74 65  /* Error detecte
114f0 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70  d by xRecordComp
11500 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20  are (CORRUPT or 
11510 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 4d 65 6d 20  NOMEM) */.  Mem 
11520 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *aMem;          
11530 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20 69  /* Values */.  i
11540 6e 74 20 72 31 3b 20 20 20 20 20 20 20 20 20 20  nt r1;          
11550 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
11560 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20  eturn if (lhs > 
11570 72 68 73 29 20 2a 2f 0a 20 20 69 6e 74 20 72 32  rhs) */.  int r2
11580 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
11590 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
115a0 20 69 66 20 28 72 68 73 20 3c 20 6c 68 73 29 20   if (rhs < lhs) 
115b0 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  */.};.../*.** Ea
115c0 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20  ch SQL index is 
115d0 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
115e0 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69  emory by an.** i
115f0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
11600 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
11610 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  re..**.** The co
11620 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62  lumns of the tab
11630 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62  le that are to b
11640 65 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65  e indexed are de
11650 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68  scribed.** by th
11660 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65  e aiColumn[] fie
11670 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ld of this struc
11680 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  ture.  For examp
11690 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77  le, suppose.** w
116a0 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f  e have the follo
116b0 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69  wing table and i
116c0 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ndex:.**.**     
116d0 43 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31  CREATE TABLE Ex1
116e0 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c  (c1 int, c2 int,
116f0 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20   c3 text);.**   
11700 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45    CREATE INDEX E
11710 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29  x2 ON Ex1(c3,c1)
11720 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54  ;.**.** In the T
11730 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64  able structure d
11740 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e  escribing Ex1, n
11750 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74  Col==3 because t
11760 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65  here are.** thre
11770 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
11780 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20   table.  In the 
11790 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20  Index structure 
117a0 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78  describing.** Ex
117b0 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69  2, nColumn==2 si
117c0 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63  nce 2 of the 3 c
117d0 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72  olumns of Ex1 ar
117e0 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68  e indexed..** Th
117f0 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c  e value of aiCol
11800 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20  umn is {2, 0}.  
11810 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62  aiColumn[0]==2 b
11820 65 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20 66  ecause the .** f
11830 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  irst column to b
11840 65 20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68  e indexed (c3) h
11850 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32  as an index of 2
11860 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a   in Ex1.aCol[]..
11870 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f  ** The second co
11880 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
11890 65 64 20 28 63 31 29 20 68 61 73 20 61 6e 20 69  ed (c1) has an i
118a0 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20  ndex of 0 in.** 
118b0 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63  Ex1.aCol[], henc
118c0 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31  e Ex2.aiColumn[1
118d0 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ]==0..**.** The 
118e0 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69  Index.onError fi
118f0 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77  eld determines w
11900 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
11910 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  e indexed column
11920 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69  s.** must be uni
11930 71 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20  que and what to 
11940 64 6f 20 69 66 20 74 68 65 79 20 61 72 65 20 6e  do if they are n
11950 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e  ot.  When Index.
11960 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c  onError=OE_None,
11970 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69  .** it means thi
11980 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75  s is not a uniqu
11990 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77  e index.  Otherw
119a0 69 73 65 20 69 74 20 69 73 20 61 20 75 6e 69 71  ise it is a uniq
119b0 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20  ue index.** and 
119c0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64  the value of Ind
119d0 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63  ex.onError indic
119e0 61 74 65 20 74 68 65 20 77 68 69 63 68 20 63 6f  ate the which co
119f0 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
11a00 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20  n .** algorithm 
11a10 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76  to employ whenev
11a20 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73  er an attempt is
11a30 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20   made to insert 
11a40 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20  a non-unique.** 
11a50 65 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  element..*/.stru
11a60 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61  ct Index {.  cha
11a70 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
11a80 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
11a90 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
11aa0 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20   i16 *aiColumn; 
11ab0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
11ac0 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75  ch columns are u
11ad0 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65  sed by this inde
11ae0 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a  x.  1st is 0 */.
11af0 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c    LogEst *aiRowL
11b00 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72  ogEst;     /* Fr
11b10 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e  om ANALYZE: Est.
11b20 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62   rows selected b
11b30 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  y each column */
11b40 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65  .  Table *pTable
11b50 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
11b60 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69  he SQL table bei
11b70 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20  ng indexed */.  
11b80 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
11b90 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69           /* Stri
11ba0 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20  ng defining the 
11bb0 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68  affinity of each
11bc0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64   column */.  Ind
11bd0 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ex *pNext;      
11be0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78        /* The nex
11bf0 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74  t index associat
11c00 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ed with the same
11c10 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65   table */.  Sche
11c20 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
11c30 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
11c40 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69  ontaining this i
11c50 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53  ndex */.  u8 *aS
11c60 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
11c70 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63     /* for each c
11c80 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53  olumn: True==DES
11c90 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f  C, False==ASC */
11ca0 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c  .  char **azColl
11cb0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  ;           /* A
11cc0 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f  rray of collatio
11cd0 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73  n sequence names
11ce0 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20   for index */.  
11cf0 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68  Expr *pPartIdxWh
11d00 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52  ere;     /* WHER
11d10 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72  E clause for par
11d20 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a  tial indices */.
11d30 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
11d40 6e 66 6f 3b 20 20 20 20 20 20 20 2f 2a 20 41 20  nfo;       /* A 
11d50 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 73  KeyInfo object s
11d60 75 69 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73  uitable for this
11d70 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
11d80 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
11d90 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20       /* DB Page 
11da0 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20  containing root 
11db0 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  of this index */
11dc0 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52  .  LogEst szIdxR
11dd0 6f 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45  ow;         /* E
11de0 73 74 69 6d 61 74 65 64 20 61 76 65 72 61 67 65  stimated average
11df0 20 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74   row size in byt
11e00 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79  es */.  u16 nKey
11e10 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
11e20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
11e30 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68  lumns forming th
11e40 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e  e key */.  u16 n
11e50 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
11e60 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11e70 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20   columns stored 
11e80 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  in the index */.
11e90 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20    u8 onError;   
11ea0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45             /* OE
11eb0 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72  _Abort, OE_Ignor
11ec0 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f  e, OE_Replace, o
11ed0 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75  r OE_None */.  u
11ee0 6e 73 69 67 6e 65 64 20 69 64 78 54 79 70 65 3a  nsigned idxType:
11ef0 32 3b 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e  2;      /* 1==UN
11f00 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59  IQUE, 2==PRIMARY
11f10 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20   KEY, 0==CREATE 
11f20 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67  INDEX */.  unsig
11f30 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31  ned bUnordered:1
11f40 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20  ;   /* Use this 
11f50 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20  index for == or 
11f60 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20  IN queries only 
11f70 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e  */.  unsigned un
11f80 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a  iqNotNull:1;  /*
11f90 20 54 72 75 65 20 69 66 20 55 4e 49 51 55 45 20   True if UNIQUE 
11fa0 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72  and NOT NULL for
11fb0 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a   all columns */.
11fc0 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73    unsigned isRes
11fd0 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72  ized:1;    /* Tr
11fe0 75 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65  ue if resizeInde
11ff0 78 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62 65  xObject() has be
12000 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75  en called */.  u
12010 6e 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69  nsigned isCoveri
12020 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  ng:1;   /* True 
12030 69 66 20 74 68 69 73 20 69 73 20 61 20 63 6f 76  if this is a cov
12040 65 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 23  ering index */.#
12050 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
12060 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
12070 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  T4.  int nSample
12080 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
12090 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   Number of eleme
120a0 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d  nts in aSample[]
120b0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c   */.  int nSampl
120c0 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  eCol;          /
120d0 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53  * Size of IndexS
120e0 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64  ample.anEq[] and
120f0 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77   so on */.  tRow
12100 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20  cnt *aAvgEq;    
12110 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20       /* Average 
12120 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b  nEq values for k
12130 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70  eys not in aSamp
12140 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d  le */.  IndexSam
12150 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20  ple *aSample;   
12160 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74   /* Samples of t
12170 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79  he left-most key
12180 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f   */.#endif.};../
12190 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
121a0 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64  ues for Index.id
121b0 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65  xType.*/.#define
121c0 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
121d0 41 50 50 44 45 46 20 20 20 20 20 20 30 20 20 20  APPDEF      0   
121e0 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e 67  /* Created using
121f0 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f   CREATE INDEX */
12200 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
12210 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20  IDXTYPE_UNIQUE  
12220 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65      1   /* Imple
12230 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63  ments a UNIQUE c
12240 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
12250 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
12260 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20  YPE_PRIMARYKEY  
12270 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52  2   /* Is the PR
12280 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68  IMARY KEY for th
12290 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52  e table */../* R
122a0 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e  eturn true if in
122b0 64 65 78 20 58 20 69 73 20 61 20 50 52 49 4d 41  dex X is a PRIMA
122c0 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a  RY KEY index */.
122d0 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72  #define IsPrimar
122e0 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28 28  yKeyIndex(X)  ((
122f0 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c  X)->idxType==SQL
12300 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d  ITE_IDXTYPE_PRIM
12310 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75  ARYKEY)../* Retu
12320 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78  rn true if index
12330 20 58 20 69 73 20 61 20 55 4e 49 51 55 45 20 69   X is a UNIQUE i
12340 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
12350 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29  IsUniqueIndex(X)
12360 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72        ((X)->onEr
12370 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f  ror!=OE_None)../
12380 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65  *.** Each sample
12390 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73   stored in the s
123a0 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
123b0 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  e is represented
123c0 20 69 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75   in memory .** u
123d0 73 69 6e 67 20 61 20 73 74 72 75 63 74 75 72 65  sing a structure
123e0 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20 20   of this type.  
123f0 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  See documentatio
12400 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20  n at the top of 
12410 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63  the.** analyze.c
12420 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72   source file for
12430 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
12440 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
12450 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b  ct IndexSample {
12460 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20  .  void *p;     
12470 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
12480 74 6f 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72  to sampled recor
12490 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20  d */.  int n;   
124a0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
124b0 20 6f 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79   of record in by
124c0 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  tes */.  tRowcnt
124d0 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73   *anEq;    /* Es
124e0 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  t. number of row
124f0 73 20 77 68 65 72 65 20 74 68 65 20 6b 65 79 20  s where the key 
12500 65 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70  equals this samp
12510 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  le */.  tRowcnt 
12520 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74  *anLt;    /* Est
12530 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  . number of rows
12540 20 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65   where key is le
12550 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d  ss than this sam
12560 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  ple */.  tRowcnt
12570 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73   *anDLt;   /* Es
12580 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73  t. number of dis
12590 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20  tinct keys less 
125a0 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65  than this sample
125b0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61   */.};../*.** Ea
125c0 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20  ch token coming 
125d0 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72  out of the lexer
125e0 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
125f0 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63  of.** this struc
12600 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72  ture.  Tokens ar
12610 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70  e also used as p
12620 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73  art of an expres
12630 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  sion..**.** Note
12640 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74   if Token.z==0 t
12650 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e  hen Token.dyn an
12660 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e  d Token.n are un
12670 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d  defined and.** m
12680 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f  ay contain rando
12690 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f  m values.  Do no
126a0 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d  t make any assum
126b0 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b  ptions about Tok
126c0 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f  en.dyn.** and To
126d0 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e  ken.n when Token
126e0 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74  .z==0..*/.struct
126f0 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74   Token {.  const
12700 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a   char *z;     /*
12710 20 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b   Text of the tok
12720 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65  en.  Not NULL-te
12730 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75  rminated! */.  u
12740 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20  nsigned int n;  
12750 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
12760 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 69  haracters in thi
12770 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f  s token */.};../
12780 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
12790 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
127a0 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
127b0 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74  rmation needed t
127c0 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f  o generate.** co
127d0 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20  de for a SELECT 
127e0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67  that contains ag
127f0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
12800 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72  s..**.** If Expr
12810 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55  .op==TK_AGG_COLU
12820 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e  MN or TK_AGG_FUN
12830 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e  CTION then Expr.
12840 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a  pAggInfo is a.**
12850 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
12860 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65   structure.  The
12870 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69   Expr.iColumn fi
12880 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65 78  eld is the index
12890 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61   in.** AggInfo.a
128a0 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f  Col[] or AggInfo
128b0 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f  .aFunc[] of info
128c0 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74  rmation needed t
128d0 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f  o generate.** co
128e0 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65  de for that node
128f0 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e  ..**.** AggInfo.
12900 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67  pGroupBy and Agg
12910 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72  Info.aFunc.pExpr
12920 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73   point to fields
12930 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f   within the.** o
12940 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73  riginal Select s
12950 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65  tructure that de
12960 73 63 72 69 62 65 73 20 74 68 65 20 53 45 4c 45  scribes the SELE
12970 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  CT statement.  T
12980 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64  hese.** fields d
12990 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65  o not need to be
129a0 20 66 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c   freed when deal
129b0 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67 67  locating the Agg
129c0 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a  Info structure..
129d0 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66  */.struct AggInf
129e0 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d  o {.  u8 directM
129f0 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ode;          /*
12a00 20 44 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e   Direct renderin
12a10 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b  g mode means tak
12a20 65 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a  e data directly.
12a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a40 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f            ** fro
12a50 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20  m source tables 
12a60 72 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d  rather than from
12a70 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f   accumulators */
12a80 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67  .  u8 useSorting
12a90 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e  Idx;       /* In
12aa0 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65   direct mode, re
12ab0 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74  ference the sort
12ac0 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65 72  ing index rather
12ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12ae0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68             ** th
12af0 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  an the source ta
12b00 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72  ble */.  int sor
12b10 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20  tingIdx;        
12b20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
12b30 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67  r of the sorting
12b40 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
12b50 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20  sortingIdxPTab; 
12b60 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
12b70 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74  mber of pseudo-t
12b80 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  able */.  int nS
12b90 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20  ortingColumn;   
12ba0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
12bb0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f  olumns in the so
12bc0 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
12bd0 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65   int mnReg, mxRe
12be0 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67  g;       /* Rang
12bf0 65 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61  e of registers a
12c00 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f  llocated for aCo
12c10 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20  l and aFunc */. 
12c20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
12c30 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  pBy;     /* The 
12c40 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20  group by clause 
12c50 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49  */.  struct AggI
12c60 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20  nfo_col {    /* 
12c70 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  For each column 
12c80 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74  used in source t
12c90 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62  ables */.    Tab
12ca0 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
12cb0 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20        /* Source 
12cc0 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
12cd0 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
12ce0 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
12cf0 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f  number of the so
12d00 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
12d10 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20    int iColumn;  
12d20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
12d30 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68  lumn number with
12d40 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  in the source ta
12d50 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
12d60 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20  SorterColumn;   
12d70 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
12d80 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74  mber in the sort
12d90 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20  ing index */.   
12da0 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20   int iMem;      
12db0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
12dc0 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
12dd0 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75  t acts as accumu
12de0 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70  lator */.    Exp
12df0 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
12e00 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69        /* The ori
12e10 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e  ginal expression
12e20 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20   */.  } *aCol;. 
12e30 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20   int nColumn;   
12e40 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
12e50 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69  er of used entri
12e60 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a  es in aCol[] */.
12e70 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74    int nAccumulat
12e80 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  or;       /* Num
12e90 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74  ber of columns t
12ea0 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68  hat show through
12eb0 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a   to the output..
12ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ed0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64            ** Add
12ee0 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20  itional columns 
12ef0 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73  are used only as
12f00 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20   parameters to. 
12f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72           ** aggr
12f30 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
12f40 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49  */.  struct AggI
12f50 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20  nfo_func {   /* 
12f60 46 6f 72 20 65 61 63 68 20 61 67 67 72 65 67 61  For each aggrega
12f70 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  te function */. 
12f80 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
12f90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
12fa0 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69  xpression encodi
12fb0 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  ng the function 
12fc0 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a  */.    FuncDef *
12fd0 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  pFunc;          
12fe0 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61 74 65  /* The aggregate
12ff0 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d   function implem
13000 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  entation */.    
13010 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20  int iMem;       
13020 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
13030 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
13040 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c   acts as accumul
13050 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ator */.    int 
13060 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20  iDistinct;      
13070 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61       /* Ephemera
13080 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20  l table used to 
13090 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54  enforce DISTINCT
130a0 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a   */.  } *aFunc;.
130b0 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20    int nFunc;    
130c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
130d0 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
130e0 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a  n aFunc[] */.};.
130f0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74  ./*.** The datat
13100 79 70 65 20 79 6e 56 61 72 20 69 73 20 61 20 73  ype ynVar is a s
13110 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65  igned integer, e
13120 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20  ither 16-bit or 
13130 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c  32-bit..** Usual
13140 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69 74 73  ly it is 16-bits
13150 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49 54 45  .  But if SQLITE
13160 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
13170 4d 42 45 52 20 69 73 20 67 72 65 61 74 65 72 0a  MBER is greater.
13180 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77 65  ** than 32767 we
13190 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74   have to make it
131a0 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74   32-bit.  16-bit
131b0 20 69 73 20 70 72 65 66 65 72 72 65 64 20 62 65   is preferred be
131c0 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73  cause.** it uses
131d0 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20   less memory in 
131e0 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c  the Expr object,
131f0 20 77 68 69 63 68 20 69 73 20 61 20 62 69 67 20   which is a big 
13200 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69  memory user.** i
13210 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c  n systems with l
13220 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65 64 20  ots of prepared 
13230 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64  statements.  And
13240 20 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e   few application
13250 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74  s.** need more t
13260 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20  han about 10 or 
13270 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42  20 variables.  B
13280 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20  ut some extreme 
13290 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f  users want.** to
132a0 20 68 61 76 65 20 70 72 65 70 61 72 65 64 20 73   have prepared s
132b0 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f  tatements with o
132c0 76 65 72 20 33 32 37 36 37 20 76 61 72 69 61 62  ver 32767 variab
132d0 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65  les, and for the
132e0 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20  m.** the option 
132f0 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74  is available (at
13300 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a   compile-time)..
13310 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
13320 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
13330 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66  R<=32767.typedef
13340 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73   i16 ynVar;.#els
13350 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e  e.typedef int yn
13360 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  Var;.#endif../*.
13370 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20  ** Each node of 
13380 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  an expression in
13390 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
133a0 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  is an instance.*
133b0 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
133c0 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ure..**.** Expr.
133d0 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65  op is the opcode
133e0 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 70 61  . The integer pa
133f0 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73  rser token codes
13400 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61   are reused.** a
13410 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20  s opcodes here. 
13420 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
13430 20 70 61 72 73 65 72 20 64 65 66 69 6e 65 73 20   parser defines 
13440 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69  TK_GE to be an i
13450 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72  nteger.** code r
13460 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
13470 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54  ">=" operator. T
13480 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72  his same integer
13490 20 63 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a   code is reused.
134a0 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20  ** to represent 
134b0 74 68 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e  the greater-than
134c0 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65  -or-equal-to ope
134d0 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70  rator in the exp
134e0 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e  ression.** tree.
134f0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
13500 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
13510 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49  QL literal (TK_I
13520 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54  NTEGER, TK_FLOAT
13530 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20 6f  , TK_BLOB, .** o
13540 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68  r TK_STRING), th
13550 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
13560 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74 20  ntains the text 
13570 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72  of the SQL liter
13580 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78  al. If.** the ex
13590 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61  pression is a va
135a0 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41  riable (TK_VARIA
135b0 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  BLE), then Expr.
135c0 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
135d0 68 65 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20  he .** variable 
135e0 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69  name. Finally, i
135f0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
13600 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
13610 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e  ion (TK_FUNCTION
13620 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e  ),.** then Expr.
13630 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
13640 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
13650 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45  unction..**.** E
13660 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45  xpr.pRight and E
13670 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68  xpr.pLeft are th
13680 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
13690 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20   subexpressions 
136a0 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f  of a.** binary o
136b0 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20  perator. Either 
136c0 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e  or both may be N
136d0 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ULL..**.** Expr.
136e0 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73  x.pList is a lis
136f0 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69  t of arguments i
13700 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
13710 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
13720 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65  ion,.** a CASE e
13730 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20  xpression or an 
13740 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  IN expression of
13750 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
13760 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e   IN (<y>, <z>...
13770 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53  )"..** Expr.x.pS
13780 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69 66  elect is used if
13790 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
137a0 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20  is a sub-select 
137b0 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
137c0 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20   of.** the form 
137d0 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43  "<lhs> IN (SELEC
137e0 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20  T ...)". If the 
137f0 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74  EP_xIsSelect bit
13800 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a   is set in the.*
13810 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  * Expr.flags mas
13820 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70  k, then Expr.x.p
13830 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e  Select is valid.
13840 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70 72   Otherwise, Expr
13850 2e 78 2e 70 4c 69 73 74 20 69 73 20 0a 2a 2a 20  .x.pList is .** 
13860 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  valid..**.** An 
13870 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68  expression of th
13880 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e  e form ID or ID.
13890 49 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63  ID refers to a c
138a0 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65  olumn in a table
138b0 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78  ..** For such ex
138c0 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e  pressions, Expr.
138d0 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f  op is set to TK_
138e0 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e  COLUMN and Expr.
138f0 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65  iTable is.** the
13900 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20   integer cursor 
13910 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45  number of a VDBE
13920 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
13930 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61   to that table a
13940 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75  nd.** Expr.iColu
13950 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e  mn is the column
13960 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
13970 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e  specific column.
13980 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72    If the.** expr
13990 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61  ession is used a
139a0 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  s a result in an
139b0 20 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43   aggregate SELEC
139c0 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76  T, then the.** v
139d0 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f  alue is also sto
139e0 72 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e  red in the Expr.
139f0 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  iAgg column in t
13a00 68 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20  he aggregate so 
13a10 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62  that.** it can b
13a20 65 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72  e accessed after
13a30 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20   all aggregates 
13a40 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a  are computed..**
13a50 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
13a60 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f  ssion is an unbo
13a70 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72  und variable mar
13a80 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20  ker (a question 
13a90 6d 61 72 6b 20 0a 2a 2a 20 63 68 61 72 61 63 74  mark .** charact
13aa0 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72  er '?' in the or
13ab0 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e  iginal SQL) then
13ac0 20 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65   the Expr.iTable
13ad0 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78   holds the index
13ae0 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20   .** number for 
13af0 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a  that variable..*
13b00 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
13b10 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71  ession is a subq
13b20 75 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69  uery then Expr.i
13b30 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20  Column holds an 
13b40 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73  integer.** regis
13b50 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61  ter number conta
13b60 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74  ining the result
13b70 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72 79   of the subquery
13b80 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62  .  If the.** sub
13b90 71 75 65 72 79 20 67 69 76 65 73 20 61 20 63 6f  query gives a co
13ba0 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74  nstant result, t
13bb0 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31  hen iTable is -1
13bc0 2e 20 20 49 66 20 74 68 65 20 73 75 62 71 75 65  .  If the subque
13bd0 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69  ry.** gives a di
13be0 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61  fferent answer a
13bf0 74 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65  t different time
13c00 73 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65  s during stateme
13c10 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a  nt processing.**
13c20 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20   then iTable is 
13c30 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61  the address of a
13c40 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74   subroutine that
13c50 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75   computes the su
13c60 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66  bquery..**.** If
13c70 20 74 68 65 20 45 78 70 72 20 69 73 20 6f 66 20   the Expr is of 
13c80 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20  type OP_Column, 
13c90 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 74  and the table it
13ca0 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72   is selecting fr
13cb0 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20  om.** is a disk 
13cc0 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c  table or the "ol
13cd0 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c  d.*" pseudo-tabl
13ce0 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69  e, then pTab poi
13cf0 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f  nts to the.** co
13d00 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c  rresponding tabl
13d10 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a  e definition..**
13d20 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e  .** ALLOCATION N
13d30 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72  OTES:.**.** Expr
13d40 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65   objects can use
13d50 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79   a lot of memory
13d60 20 73 70 61 63 65 20 69 6e 20 64 61 74 61 62 61   space in databa
13d70 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a  se schema.  To.*
13d80 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65  * help reduce me
13d90 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74  mory requirement
13da0 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20  s, sometimes an 
13db0 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c  Expr object will
13dc0 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64   be.** truncated
13dd0 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65  .  And to reduce
13de0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d   the number of m
13df0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
13e00 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20  s, sometimes.** 
13e10 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72  two or more Expr
13e20 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65   objects will be
13e30 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e   stored in a sin
13e40 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  gle memory alloc
13e50 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68  ation,.** togeth
13e60 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f  er with Expr.zTo
13e70 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a  ken strings..**.
13e80 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64  ** If the EP_Red
13e90 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65  uced and EP_Toke
13ea0 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20  nOnly flags are 
13eb0 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45  set when.** an E
13ec0 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72  xpr object is tr
13ed0 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45  uncated.  When E
13ee0 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74  P_Reduced is set
13ef0 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68  , then all.** th
13f00 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a  e child Expr obj
13f10 65 63 74 73 20 69 6e 20 74 68 65 20 45 78 70 72  ects in the Expr
13f20 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e  .pLeft and Expr.
13f30 70 52 69 67 68 74 20 73 75 62 74 72 65 65 73 0a  pRight subtrees.
13f40 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  ** are contained
13f50 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
13f60 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
13f70 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76  on.  Note, howev
13f80 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  er, that.** the 
13f90 73 75 62 74 72 65 65 73 20 69 6e 20 45 78 70 72  subtrees in Expr
13fa0 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72  .x.pList or Expr
13fb0 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61  .x.pSelect are a
13fc0 6c 77 61 79 73 20 73 65 70 61 72 61 74 65 6c 79  lways separately
13fd0 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72  .** allocated, r
13fe0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
13ff0 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52  ther or not EP_R
14000 65 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a  educed is set..*
14010 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a  /.struct Expr {.
14020 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
14030 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72           /* Oper
14040 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20  ation performed 
14050 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a  by this node */.
14060 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
14070 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
14080 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20  affinity of the 
14090 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e  column or 0 if n
140a0 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  ot a column */. 
140b0 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20   u32 flags;     
140c0 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f          /* Vario
140d0 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20  us flags.  EP_* 
140e0 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75  See below */.  u
140f0 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20  nion {.    char 
14100 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20  *zToken;        
14110 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65    /* Token value
14120 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65  . Zero terminate
14130 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a  d and dequoted *
14140 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65  /.    int iValue
14150 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
14160 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74  Non-negative int
14170 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 45 50  eger value if EP
14180 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d  _IntValue */.  }
14190 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   u;..  /* If the
141a0 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
141b0 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  ag is set in the
141c0 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
141d0 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73  , then no.  ** s
141e0 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  pace is allocate
141f0 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73  d for the fields
14200 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e   below this poin
14210 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f  t. An attempt to
14220 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65  .  ** access the
14230 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  m will result in
14240 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d   a segfault or m
14250 61 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a 20 20 2a  alfunction. .  *
14260 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14270 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14280 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14290 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
142a0 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70  ****/..  Expr *p
142b0 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20 20 20  Left;           
142c0 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20  /* Left subnode 
142d0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68  */.  Expr *pRigh
142e0 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  t;          /* R
142f0 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a  ight subnode */.
14300 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78    union {.    Ex
14310 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20  prList *pList;  
14320 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45     /* op = IN, E
14330 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43  XISTS, SELECT, C
14340 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42  ASE, FUNCTION, B
14350 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65  ETWEEN */.    Se
14360 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
14370 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65     /* EP_xIsSele
14380 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20  ct and op = IN, 
14390 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a  EXISTS, SELECT *
143a0 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49  /.  } x;..  /* I
143b0 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  f the EP_Reduced
143c0 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
143d0 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
143e0 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
143f0 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
14400 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
14410 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
14420 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
14430 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
14440 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
14450 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
14460 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20  r malfunction.. 
14470 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
14480 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14490 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
144a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
144b0 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c  ******/..#if SQL
144c0 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
144d0 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67  TH>0.  int nHeig
144e0 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ht;           /*
144f0 20 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74   Height of the t
14500 72 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68  ree headed by th
14510 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69  is node */.#endi
14520 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20  f.  int iTable; 
14530 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
14540 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20  _COLUMN: cursor 
14550 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20  number of table 
14560 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20  holding column. 
14570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14580 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45          ** TK_RE
14590 47 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72  GISTER: register
145a0 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20   number.        
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145c0 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20   ** TK_TRIGGER: 
145d0 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f  1 -> new, 0 -> o
145e0 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ld.             
145f0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45              ** E
14600 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 30 30  P_Unlikely:  100
14610 30 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f  0 times likeliho
14620 6f 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43  od */.  ynVar iC
14630 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f  olumn;         /
14640 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c  * TK_COLUMN: col
14650 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66  umn index.  -1 f
14660 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20  or rowid..      
14670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14680 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c     ** TK_VARIABL
14690 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62  E: variable numb
146a0 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29  er (always >= 1)
146b0 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b  . */.  i16 iAgg;
146c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
146d0 20 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20   Which entry in 
146e0 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d  pAggInfo->aCol[]
146f0 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f   or ->aFunc[] */
14700 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69  .  i16 iRightJoi
14710 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20  nTable;   /* If 
14720 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65  EP_FromJoin, the
14730 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20   right table of 
14740 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38  the join */.  u8
14750 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20   op2;           
14760 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53       /* TK_REGIS
14770 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61  TER: original va
14780 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20  lue of Expr.op. 
14790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147a0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f          ** TK_CO
147b0 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20  LUMN: the value 
147c0 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c  of p5 for OP_Col
147d0 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  umn.            
147e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
147f0 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a  TK_AGG_FUNCTION:
14800 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a   nesting depth *
14810 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67  /.  AggInfo *pAg
14820 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73  gInfo;     /* Us
14830 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c  ed by TK_AGG_COL
14840 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46  UMN and TK_AGG_F
14850 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62  UNCTION */.  Tab
14860 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
14870 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72      /* Table for
14880 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65   TK_COLUMN expre
14890 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f  ssions. */.};../
148a0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
148b0 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69  ng are the meani
148c0 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74  ngs of bits in t
148d0 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  he Expr.flags fi
148e0 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
148f0 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30  EP_FromJoin  0x0
14900 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61  00001 /* Origina
14910 74 65 64 20 69 6e 20 4f 4e 20 6f 72 20 55 53 49  ted in ON or USI
14920 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  NG clause of a j
14930 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  oin */.#define E
14940 50 5f 41 67 67 20 20 20 20 20 20 20 30 78 30 30  P_Agg       0x00
14950 30 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  0002 /* Contains
14960 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   one or more agg
14970 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
14980 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52   */.#define EP_R
14990 65 73 6f 6c 76 65 64 20 20 30 78 30 30 30 30 30  esolved  0x00000
149a0 34 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65  4 /* IDs have be
149b0 65 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43  en resolved to C
149c0 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e  OLUMNs */.#defin
149d0 65 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20 30  e EP_Error     0
149e0 78 30 30 30 30 30 38 20 2f 2a 20 45 78 70 72 65  x000008 /* Expre
149f0 73 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f  ssion contains o
14a00 6e 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72  ne or more error
14a10 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
14a20 44 69 73 74 69 6e 63 74 20 20 30 78 30 30 30 30  Distinct  0x0000
14a30 31 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  10 /* Aggregate 
14a40 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49  function with DI
14a50 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a  STINCT keyword *
14a60 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72  /.#define EP_Var
14a70 53 65 6c 65 63 74 20 30 78 30 30 30 30 32 30 20  Select 0x000020 
14a80 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f  /* pSelect is co
14a90 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f  rrelated, not co
14aa0 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  nstant */.#defin
14ab0 65 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30  e EP_DblQuoted 0
14ac0 78 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e  x000040 /* token
14ad0 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c  .z was originall
14ae0 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64  y in "..." */.#d
14af0 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75  efine EP_InfixFu
14b00 6e 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54  nc 0x000080 /* T
14b10 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78  rue for an infix
14b20 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c   function: LIKE,
14b30 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64   GLOB, etc */.#d
14b40 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65  efine EP_Collate
14b50 20 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54     0x000100 /* T
14b60 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54  ree contains a T
14b70 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74  K_COLLATE operat
14b80 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  or */.#define EP
14b90 5f 47 65 6e 65 72 69 63 20 20 20 30 78 30 30 30  _Generic   0x000
14ba0 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f  200 /* Ignore CO
14bb0 4c 4c 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74  LLATE or affinit
14bc0 79 20 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a  y on this tree *
14bd0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74  /.#define EP_Int
14be0 56 61 6c 75 65 20 20 30 78 30 30 30 34 30 30 20  Value  0x000400 
14bf0 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
14c00 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e   contained in u.
14c10 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e  iValue */.#defin
14c20 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30  e EP_xIsSelect 0
14c30 78 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65  x000800 /* x.pSe
14c40 6c 65 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f  lect is valid (o
14c50 74 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74  therwise x.pList
14c60 20 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20   is) */.#define 
14c70 45 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30  EP_Skip      0x0
14c80 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45  01000 /* COLLATE
14c90 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c  , AS, or UNLIKEL
14ca0 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  Y */.#define EP_
14cb0 52 65 64 75 63 65 64 20 20 20 30 78 30 30 32 30  Reduced   0x0020
14cc0 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
14cd0 74 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49  t EXPR_REDUCEDSI
14ce0 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f  ZE bytes only */
14cf0 0a 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65  .#define EP_Toke
14d00 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f  nOnly 0x004000 /
14d10 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58  * Expr struct EX
14d20 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45  PR_TOKENONLYSIZE
14d30 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
14d40 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63  define EP_Static
14d50 20 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20      0x008000 /* 
14d60 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e  Held in memory n
14d70 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ot obtained from
14d80 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65   malloc() */.#de
14d90 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e  fine EP_MemToken
14da0 20 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65    0x010000 /* Ne
14db0 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46  ed to sqlite3DbF
14dc0 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65  ree() Expr.zToke
14dd0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
14de0 4e 6f 52 65 64 75 63 65 20 20 30 78 30 32 30 30  NoReduce  0x0200
14df0 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50  00 /* Cannot EXP
14e00 52 44 55 50 5f 52 45 44 55 43 45 20 74 68 69 73  RDUP_REDUCE this
14e10 20 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65   Expr */.#define
14e20 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78   EP_Unlikely  0x
14e30 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65  040000 /* unlike
14e40 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f  ly() or likeliho
14e50 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  od() function */
14e60 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73  .#define EP_Cons
14e70 74 61 6e 74 20 20 30 78 30 38 30 30 30 30 20 2f  tant  0x080000 /
14e80 2a 20 4e 6f 64 65 20 69 73 20 61 20 63 6f 6e 73  * Node is a cons
14e90 74 61 6e 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  tant */../*.** T
14ea0 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20  hese macros can 
14eb0 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c  be used to test,
14ec0 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62   set, or clear b
14ed0 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 45  its in the .** E
14ee0 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e  xpr.flags field.
14ef0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72  .*/.#define Expr
14f00 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29  HasProperty(E,P)
14f10 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67       (((E)->flag
14f20 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69  s&(P))!=0).#defi
14f30 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f  ne ExprHasAllPro
14f40 70 65 72 74 79 28 45 2c 50 29 20 20 28 28 28 45  perty(E,P)  (((E
14f50 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28  )->flags&(P))==(
14f60 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  P)).#define Expr
14f70 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29  SetProperty(E,P)
14f80 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c       (E)->flags|
14f90 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70  =(P).#define Exp
14fa0 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45  rClearProperty(E
14fb0 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73  ,P)   (E)->flags
14fc0 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45  &=~(P)../* The E
14fd0 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
14fe0 79 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65  y() macro is use
14ff0 64 20 66 6f 72 20 56 65 72 69 66 69 63 61 74 69  d for Verificati
15000 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a  on, Validation,.
15010 2a 2a 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  ** and Accredita
15020 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77  tion only.  It w
15030 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65  orks like ExprSe
15040 74 50 72 6f 70 65 72 74 79 28 29 20 64 75 72 69  tProperty() duri
15050 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73  ng VVA.** proces
15060 73 65 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d  ses but is a no-
15070 6f 70 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e  op for delivery.
15080 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
15090 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65  E_DEBUG.# define
150a0 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65   ExprSetVVAPrope
150b0 72 74 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66  rty(E,P)  (E)->f
150c0 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a  lags|=(P).#else.
150d0 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  # define ExprSet
150e0 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29  VVAProperty(E,P)
150f0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
15100 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
15110 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ne the number of
15120 20 62 79 74 65 73 20 72 65 71 75 69 72 65 64 20   bytes required 
15130 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72  by a normal Expr
15140 20 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20   .** struct, an 
15150 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68  Expr struct with
15160 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
15170 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70 72  flag set in Expr
15180 2e 66 6c 61 67 73 20 0a 2a 2a 20 61 6e 64 20 61  .flags .** and a
15190 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69  n Expr struct wi
151a0 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f  th the EP_TokenO
151b0 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f  nly flag set..*/
151c0 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55  .#define EXPR_FU
151d0 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20 20  LLSIZE          
151e0 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20   sizeof(Expr)   
151f0 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20          /* Full 
15200 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  size */.#define 
15210 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45  EXPR_REDUCEDSIZE
15220 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66          offsetof
15230 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f  (Expr,iTable)  /
15240 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65  * Common feature
15250 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  s */.#define EXP
15260 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20  R_TOKENONLYSIZE 
15270 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78       offsetof(Ex
15280 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46  pr,pLeft)   /* F
15290 65 77 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f  ewer features */
152a0 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61  ../*.** Flags pa
152b0 73 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69  ssed to the sqli
152c0 74 65 33 45 78 70 72 44 75 70 28 29 20 66 75 6e  te3ExprDup() fun
152d0 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68  ction. See the h
152e0 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a  eader comment .*
152f0 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45  * above sqlite3E
15300 78 70 72 44 75 70 28 29 20 66 6f 72 20 64 65 74  xprDup() for det
15310 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
15320 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
15330 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20          0x0001  
15340 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65 64 2d  /* Used reduced-
15350 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20  size Expr nodes 
15360 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74  */../*.** A list
15370 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e   of expressions.
15380 20 20 45 61 63 68 20 65 78 70 72 65 73 73 69 6f    Each expressio
15390 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79  n may optionally
153a0 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e   have a.** name.
153b0 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63    An expr/name c
153c0 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62  ombination can b
153d0 65 20 75 73 65 64 20 69 6e 20 73 65 76 65 72 61  e used in severa
153e0 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20  l ways, such.** 
153f0 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22  as the list of "
15400 65 78 70 72 20 41 53 20 49 44 22 20 66 69 65 6c  expr AS ID" fiel
15410 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22  ds following a "
15420 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68  SELECT" or in th
15430 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44  e.** list of "ID
15440 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20 69   = expr" items i
15450 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20  n an UPDATE.  A 
15460 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
15470 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20  ons can.** also 
15480 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61  be used as the a
15490 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e  rgument to a fun
154a0 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20  ction, in which 
154b0 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65  case the a.zName
154c0 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74  .** field is not
154d0 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20   used..**.** By 
154e0 64 65 66 61 75 6c 74 20 74 68 65 20 45 78 70 72  default the Expr
154f0 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c  .zSpan field hol
15500 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61  ds a human-reada
15510 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20  ble description 
15520 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73  of.** the expres
15530 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65  sion that is use
15540 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74  d in the generat
15550 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73  ion of error mes
15560 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c  sages and.** col
15570 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20  umn labels.  In 
15580 74 68 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e  this case, Expr.
15590 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c  zSpan is typical
155a0 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  ly the text of a
155b0 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65  .** column expre
155c0 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73  ssion as it exis
155d0 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73  ts in a SELECT s
155e0 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76  tatement.  Howev
155f0 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53  er, if.** the bS
15600 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73  panIsTab flag is
15610 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e   set, then zSpan
15620 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74   is overloaded t
15630 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a  o mean the name.
15640 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ** of the result
15650 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66   column in the f
15660 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41  orm: DATABASE.TA
15670 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69  BLE.COLUMN.  Thi
15680 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20  s later.** form 
15690 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65  is used for name
156a0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68   resolution with
156b0 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61   nested FROM cla
156c0 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  uses..*/.struct 
156d0 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74  ExprList {.  int
156e0 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20 20   nExpr;         
156f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
15700 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20   expressions on 
15710 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74  the list */.  st
15720 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74  ruct ExprList_it
15730 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68  em { /* For each
15740 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
15750 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45  he list */.    E
15760 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
15770 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 69         /* The li
15780 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
15790 73 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  s */.    char *z
157a0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
157b0 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69   /* Token associ
157c0 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 65  ated with this e
157d0 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20  xpression */.   
157e0 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20   char *zSpan;   
157f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67           /* Orig
15800 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65  inal text of the
15810 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
15820 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b     u8 sortOrder;
15830 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20             /* 1 
15840 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f  for DESC or 0 fo
15850 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73  r ASC */.    uns
15860 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20  igned done :1;  
15870 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74       /* A flag t
15880 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20  o indicate when 
15890 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69  processing is fi
158a0 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e  nished */.    un
158b0 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61  signed bSpanIsTa
158c0 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68  b :1; /* zSpan h
158d0 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f  olds DB.TABLE.CO
158e0 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69  LUMN */.    unsi
158f0 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a 31  gned reusable :1
15900 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  ;   /* Constant 
15910 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72 65  expression is re
15920 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e  usable */.    un
15930 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74 72 75  ion {.      stru
15940 63 74 20 7b 0a 20 20 20 20 20 20 20 20 75 31 36  ct {.        u16
15950 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20   iOrderByCol;   
15960 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20     /* For ORDER 
15970 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  BY, column numbe
15980 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20  r in result set 
15990 2a 2f 0a 20 20 20 20 20 20 20 20 75 31 36 20 69  */.        u16 i
159a0 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20  Alias;          
159b0 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50   /* Index into P
159c0 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f  arse.aAlias[] fo
159d0 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20  r zName */.     
159e0 20 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e 74 20   } x;.      int 
159f0 69 43 6f 6e 73 74 45 78 70 72 52 65 67 3b 20 20  iConstExprReg;  
15a00 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
15a10 69 6e 20 77 68 69 63 68 20 45 78 70 72 20 76 61  in which Expr va
15a20 6c 75 65 20 69 73 20 63 61 63 68 65 64 20 2a 2f  lue is cached */
15a30 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20 2a 61  .    } u;.  } *a
15a40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
15a50 20 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f     /* Alloc a po
15a60 77 65 72 20 6f 66 20 74 77 6f 20 67 72 65 61 74  wer of two great
15a70 65 72 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e  er or equal to n
15a80 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  Expr */.};../*.*
15a90 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
15aa0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
15ab0 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70  is used by the p
15ac0 61 72 73 65 72 20 74 6f 20 72 65 63 6f 72 64 20  arser to record 
15ad0 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61 72 73  both.** the pars
15ae0 65 20 74 72 65 65 20 66 6f 72 20 61 6e 20 65 78  e tree for an ex
15af0 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65  pression and the
15b00 20 73 70 61 6e 20 6f 66 20 69 6e 70 75 74 20 74   span of input t
15b10 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78  ext for an.** ex
15b20 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  pression..*/.str
15b30 75 63 74 20 45 78 70 72 53 70 61 6e 20 7b 0a 20  uct ExprSpan {. 
15b40 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
15b50 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65 78         /* The ex
15b60 70 72 65 73 73 69 6f 6e 20 70 61 72 73 65 20 74  pression parse t
15b70 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ree */.  const c
15b80 68 61 72 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f  har *zStart;   /
15b90 2a 20 46 69 72 73 74 20 63 68 61 72 61 63 74 65  * First characte
15ba0 72 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20  r of input text 
15bb0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
15bc0 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e  *zEnd;     /* On
15bd0 65 20 63 68 61 72 61 63 74 65 72 20 70 61 73 74  e character past
15be0 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75   the end of inpu
15bf0 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  t text */.};../*
15c00 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
15c10 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
15c20 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d  e can hold a sim
15c30 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e  ple list of iden
15c40 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68  tifiers,.** such
15c50 20 61 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c   as the list "a,
15c60 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c  b,c" in the foll
15c70 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73  owing statements
15c80 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53  :.**.**      INS
15c90 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63  ERT INTO t(a,b,c
15ca0 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a  ) VALUES ...;.**
15cb0 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44        CREATE IND
15cc0 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c  EX idx ON t(a,b,
15cd0 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  c);.**      CREA
15ce0 54 45 20 54 52 49 47 47 45 52 20 74 72 69 67 20  TE TRIGGER trig 
15cf0 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e  BEFORE UPDATE ON
15d00 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a   t(a,b,c) ...;.*
15d10 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e  *.** The IdList.
15d20 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20 75  a.idx field is u
15d30 73 65 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c  sed when the IdL
15d40 69 73 74 20 72 65 70 72 65 73 65 6e 74 73 20 74  ist represents t
15d50 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f  he list of.** co
15d60 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72  lumn names after
15d70 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e   a table name in
15d80 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65   an INSERT state
15d90 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74  ment.  In the st
15da0 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20  atement.**.**   
15db0 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28    INSERT INTO t(
15dc0 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a  a,b,c) ....**.**
15dd0 20 49 66 20 22 61 22 20 69 73 20 74 68 65 20 6b   If "a" is the k
15de0 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61  -th column of ta
15df0 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64  ble "t", then Id
15e00 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b  List.a[0].idx==k
15e10 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69  ..*/.struct IdLi
15e20 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64  st {.  struct Id
15e30 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20  List_item {.    
15e40 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
15e50 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
15e60 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20   identifier */. 
15e70 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20     int idx;     
15e80 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
15e90 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c   some Table.aCol
15ea0 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e  [] of a column n
15eb0 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20  amed zName */.  
15ec0 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b  } *a;.  int nId;
15ed0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15ee0 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72  er of identifier
15ef0 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  s on the list */
15f00 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62  .};../*.** The b
15f10 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20  itmask datatype 
15f20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73  defined below is
15f30 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75   used for variou
15f40 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e  s optimizations.
15f50 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20  .**.** Changing 
15f60 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62  this from a 64-b
15f70 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74  it to a 32-bit t
15f80 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e  ype limits the n
15f90 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c  umber of.** tabl
15fa0 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20  es in a join to 
15fb0 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34  32 instead of 64
15fc0 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72  .  But it also r
15fd0 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a  educes the size.
15fe0 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72  ** of the librar
15ff0 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f  y by 738 bytes o
16000 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74 79 70 65 64  n ix86..*/.typed
16010 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a  ef u64 Bitmask;.
16020 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
16030 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42  r of bits in a B
16040 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d  itmask.  "BMS" m
16050 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69  eans "BitMask Si
16060 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ze"..*/.#define 
16070 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65  BMS  ((int)(size
16080 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a  of(Bitmask)*8)).
16090 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20  ./*.** A bit in 
160a0 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65  a Bitmask.*/.#de
160b0 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20  fine MASKBIT(n) 
160c0 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c    (((Bitmask)1)<
160d0 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d 41  <(n)).#define MA
160e0 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75 6e  SKBIT32(n) (((un
160f0 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28  signed int)1)<<(
16100 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  n))../*.** The f
16110 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
16120 72 65 20 64 65 73 63 72 69 62 65 73 20 74 68 65  re describes the
16130 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
16140 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
16150 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c  nt..** Each tabl
16160 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e  e or subquery in
16170 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
16180 20 69 73 20 61 20 73 65 70 61 72 61 74 65 20 65   is a separate e
16190 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65  lement of.** the
161a0 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72   SrcList.a[] arr
161b0 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74  ay..**.** With t
161c0 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d  he addition of m
161d0 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65  ultiple database
161e0 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f   support, the fo
161f0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
16200 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65  e.** can also be
16210 20 75 73 65 64 20 74 6f 20 64 65 73 63 72 69 62   used to describ
16220 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74  e a particular t
16230 61 62 6c 65 20 73 75 63 68 20 61 73 20 74 68 65  able such as the
16240 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69   table that.** i
16250 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e  s modified by an
16260 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c   INSERT, DELETE,
16270 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65   or UPDATE state
16280 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61  ment.  In standa
16290 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20  rd SQL,.** such 
162a0 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20  a table must be 
162b0 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49  a simple name: I
162c0 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74  D.  But in SQLit
162d0 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e  e, the table can
162e0 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74  .** now be ident
162f0 69 66 69 65 64 20 62 79 20 61 20 64 61 74 61 62  ified by a datab
16300 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c  ase name, a dot,
16310 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
16320 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a  name: ID.ID..**.
16330 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20  ** The jointype 
16340 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69  starts out showi
16350 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65  ng the join type
16360 20 62 65 74 77 65 65 6e 20 74 68 65 20 63 75 72   between the cur
16370 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e  rent table.** an
16380 64 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65  d the next table
16390 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54   on the list.  T
163a0 68 65 20 70 61 72 73 65 72 20 62 75 69 6c 64 73  he parser builds
163b0 20 74 68 65 20 6c 69 73 74 20 74 68 69 73 20 77   the list this w
163c0 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74  ay..** But sqlit
163d0 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f  e3SrcListShiftJo
163e0 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20 73  inType() later s
163f0 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79  hifts the jointy
16400 70 65 73 20 73 6f 20 74 68 61 74 20 65 61 63 68  pes so that each
16410 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70  .** jointype exp
16420 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20  resses the join 
16430 62 65 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c  between the tabl
16440 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f  e and the previo
16450 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  us table..**.** 
16460 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66  In the colUsed f
16470 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f  ield, the high-o
16480 72 64 65 72 20 62 69 74 20 28 62 69 74 20 36 33  rder bit (bit 63
16490 29 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20  ) is set if the 
164a0 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e  table.** contain
164b0 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63  s more than 63 c
164c0 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36  olumns and the 6
164d0 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f  4-th or later co
164e0 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f  lumn is used..*/
164f0 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20  .struct SrcList 
16500 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20  {.  int nSrc;   
16510 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16520 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71  f tables or subq
16530 75 65 72 69 65 73 20 69 6e 20 74 68 65 20 46 52  ueries in the FR
16540 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75  OM clause */.  u
16550 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  32 nAlloc;      
16560 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
16570 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69  ries allocated i
16580 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20  n a[] below */. 
16590 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
165a0 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d  item {.    Schem
165b0 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20  a *pSchema;  /* 
165c0 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20  Schema to which 
165d0 74 68 69 73 20 69 74 65 6d 20 69 73 20 66 69 78  this item is fix
165e0 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  ed */.    char *
165f0 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e  zDatabase;  /* N
16600 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ame of database 
16610 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62  holding this tab
16620 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  le */.    char *
16630 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  zName;      /* N
16640 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
16650 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41   */.    char *zA
16660 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65  lias;     /* The
16670 20 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22   "B" part of a "
16680 41 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20  A AS B" phrase. 
16690 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41   zName is the "A
166a0 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a  " */.    Table *
166b0 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e  pTab;      /* An
166c0 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65   SQL table corre
166d0 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d  sponding to zNam
166e0 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  e */.    Select 
166f0 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20  *pSelect;  /* A 
16700 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
16710 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f   used in place o
16720 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a  f a table name *
16730 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46 69  /.    int addrFi
16740 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65  llSub;  /* Addre
16750 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65  ss of subroutine
16760 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73   to manifest a s
16770 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69  ubquery */.    i
16780 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20  nt regReturn;   
16790 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
167a0 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72  ding return addr
167b0 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53  ess of addrFillS
167c0 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  ub */.    int re
167d0 67 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52  gResult;    /* R
167e0 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67  egisters holding
167f0 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f   results of a co
16800 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20  -routine */.    
16810 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20  u8 jointype;    
16820 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69    /* Type of joi
16830 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 61  n between this a
16840 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
16850 69 6f 75 73 20 2a 2f 0a 20 20 20 20 75 6e 73 69  ious */.    unsi
16860 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20  gned notIndexed 
16870 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  :1;    /* True i
16880 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54  f there is a NOT
16890 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20   INDEXED clause 
168a0 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
168b0 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b  isCorrelated :1;
168c0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62    /* True if sub
168d0 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c  -query is correl
168e0 61 74 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69  ated */.    unsi
168f0 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e  gned viaCoroutin
16900 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d  e :1;  /* Implem
16910 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f  ented as a co-ro
16920 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 75 6e 73  utine */.    uns
16930 69 67 6e 65 64 20 69 73 52 65 63 75 72 73 69 76  igned isRecursiv
16940 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  e :1;   /* True 
16950 66 6f 72 20 72 65 63 75 72 73 69 76 65 20 72 65  for recursive re
16960 66 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20  ference in WITH 
16970 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
16980 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20  E_OMIT_EXPLAIN. 
16990 20 20 20 75 38 20 69 53 65 6c 65 63 74 49 64 3b     u8 iSelectId;
169a0 20 20 20 20 20 2f 2a 20 49 66 20 70 53 65 6c 65       /* If pSele
169b0 63 74 21 3d 30 2c 20 74 68 65 20 69 64 20 6f 66  ct!=0, the id of
169c0 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74 20   the sub-select 
169d0 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66  in EQP */.#endif
169e0 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72  .    int iCursor
169f0 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44  ;      /* The VD
16a00 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  BE cursor number
16a10 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
16a20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
16a30 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20    Expr *pOn;    
16a40 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c      /* The ON cl
16a50 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
16a60 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55  /.    IdList *pU
16a70 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55  sing;   /* The U
16a80 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61  SING clause of a
16a90 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74   join */.    Bit
16aa0 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f  mask colUsed;  /
16ab0 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73  * Bit N (1<<N) s
16ac0 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f  et if column N o
16ad0 66 20 70 54 61 62 20 69 73 20 75 73 65 64 20 2a  f pTab is used *
16ae0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64  /.    char *zInd
16af0 65 78 3b 20 20 20 20 20 2f 2a 20 49 64 65 6e 74  ex;     /* Ident
16b00 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45  ifier from "INDE
16b10 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22  XED BY <zIndex>"
16b20 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 49   clause */.    I
16b30 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20  ndex *pIndex;   
16b40 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74   /* Index struct
16b50 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ure correspondin
16b60 67 20 74 6f 20 7a 49 6e 64 65 78 2c 20 69 66 20  g to zIndex, if 
16b70 61 6e 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b  any */.  } a[1];
16b80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16b90 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
16ba0 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e  ch identifier on
16bb0 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
16bc0 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64  ./*.** Permitted
16bd0 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53   values of the S
16be0 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70  rcList.a.jointyp
16bf0 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69  e field.*/.#defi
16c00 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20  ne JT_INNER     
16c10 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79  0x0001    /* Any
16c20 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f   kind of inner o
16c30 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a  r cross join */.
16c40 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53  #define JT_CROSS
16c50 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f       0x0002    /
16c60 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f  * Explicit use o
16c70 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77  f the CROSS keyw
16c80 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  ord */.#define J
16c90 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30  T_NATURAL   0x00
16ca0 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  04    /* True fo
16cb0 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f  r a "natural" jo
16cc0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
16cd0 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30  _LEFT      0x000
16ce0 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74  8    /* Left out
16cf0 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
16d00 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20  ne JT_RIGHT     
16d10 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67  0x0010    /* Rig
16d20 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ht outer join */
16d30 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45  .#define JT_OUTE
16d40 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20  R     0x0020    
16d50 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b  /* The "OUTER" k
16d60 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e  eyword is presen
16d70 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  t */.#define JT_
16d80 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30  ERROR     0x0040
16d90 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f      /* unknown o
16da0 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f  r unsupported jo
16db0 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a  in type */.../*.
16dc0 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72  ** Flags appropr
16dd0 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74  iate for the wct
16de0 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65  rlFlags paramete
16df0 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72  r of sqlite3Wher
16e00 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20  eBegin().** and 
16e10 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63  the WhereInfo.wc
16e20 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e  trlFlags member.
16e30 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52  .*/.#define WHER
16e40 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c  E_ORDERBY_NORMAL
16e50 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d     0x0000 /* No-
16e60 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  op */.#define WH
16e70 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20  ERE_ORDERBY_MIN 
16e80 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f       0x0001 /* O
16e90 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69  RDER BY processi
16ea0 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e  ng for min() fun
16eb0 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  c */.#define WHE
16ec0 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20  RE_ORDERBY_MAX  
16ed0 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52      0x0002 /* OR
16ee0 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e  DER BY processin
16ef0 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63  g for max() func
16f00 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
16f10 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45  E_ONEPASS_DESIRE
16f20 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e  D  0x0004 /* Wan
16f30 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73  t to do one-pass
16f40 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a   UPDATE/DELETE *
16f50 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
16f60 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20  DUPLICATES_OK   
16f70 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20 74 6f   0x0008 /* Ok to
16f80 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f   return a row mo
16f90 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a  re than once */.
16fa0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d  #define WHERE_OM
16fb0 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20 20 30  IT_OPEN_CLOSE  0
16fc0 78 30 30 31 30 20 2f 2a 20 54 61 62 6c 65 20 63  x0010 /* Table c
16fd0 75 72 73 6f 72 73 20 61 72 65 20 61 6c 72 65 61  ursors are alrea
16fe0 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69  dy open */.#defi
16ff0 6e 65 20 57 48 45 52 45 5f 46 4f 52 43 45 5f 54  ne WHERE_FORCE_T
17000 41 42 4c 45 20 20 20 20 20 20 30 78 30 30 32 30  ABLE      0x0020
17010 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 61   /* Do not use a
17020 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73 65 61  n index-only sea
17030 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  rch */.#define W
17040 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e  HERE_ONETABLE_ON
17050 4c 59 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20  LY    0x0040 /* 
17060 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65 20 31 73  Only code the 1s
17070 74 20 74 61 62 6c 65 20 69 6e 20 70 54 61 62 4c  t table in pTabL
17080 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ist */.#define W
17090 48 45 52 45 5f 41 4e 44 5f 4f 4e 4c 59 20 20 20  HERE_AND_ONLY   
170a0 20 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20        0x0080 /* 
170b0 44 6f 6e 27 74 20 75 73 65 20 69 6e 64 69 63 65  Don't use indice
170c0 73 20 66 6f 72 20 4f 52 20 74 65 72 6d 73 20 2a  s for OR terms *
170d0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
170e0 47 52 4f 55 50 42 59 20 20 20 20 20 20 20 20 20  GROUPBY         
170f0 20 30 78 30 31 30 30 20 2f 2a 20 70 4f 72 64 65   0x0100 /* pOrde
17100 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rBy is really a 
17110 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66  GROUP BY */.#def
17120 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
17130 43 54 42 59 20 20 20 20 20 20 20 30 78 30 32 30  CTBY       0x020
17140 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73  0 /* pOrderby is
17150 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e   really a DISTIN
17160 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  CT clause */.#de
17170 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f  fine WHERE_WANT_
17180 44 49 53 54 49 4e 43 54 20 20 20 20 30 78 30 34  DISTINCT    0x04
17190 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74  00 /* All output
171a0 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69 73   needs to be dis
171b0 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65  tinct */.#define
171c0 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f   WHERE_SORTBYGRO
171d0 55 50 20 20 20 20 20 20 30 78 30 38 30 30 20 2f  UP      0x0800 /
171e0 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65  * Support sqlite
171f0 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 29  3WhereIsSorted()
17200 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
17210 45 5f 52 45 4f 50 45 4e 5f 49 44 58 20 20 20 20  E_REOPEN_IDX    
17220 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72 79     0x1000 /* Try
17230 20 74 6f 20 75 73 65 20 4f 50 5f 52 65 6f 70 65   to use OP_Reope
17240 6e 49 64 78 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f  nIdx */../* Allo
17250 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
17260 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 57 68  s from sqlite3Wh
17270 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 29 0a  ereIsDistinct().
17280 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
17290 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20  _DISTINCT_NOOP  
172a0 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e      0  /* DISTIN
172b0 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75  CT keyword not u
172c0 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  sed */.#define W
172d0 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e  HERE_DISTINCT_UN
172e0 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f  IQUE    1  /* No
172f0 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23   duplicates */.#
17300 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
17310 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20  TINCT_ORDERED   
17320 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63  2  /* All duplic
17330 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e  ates are adjacen
17340 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
17350 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52  RE_DISTINCT_UNOR
17360 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c  DERED 3  /* Dupl
17370 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74 74  icates are scatt
17380 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  ered */../*.** A
17390 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66   NameContext def
173a0 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69  ines a context i
173b0 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c  n which to resol
173c0 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c  ve table and col
173d0 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54  umn.** names.  T
173e0 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69  he context consi
173f0 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66  sts of a list of
17400 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53 72   tables (the pSr
17410 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64  cList) field and
17420 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61  .** a list of na
17430 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28  med expression (
17440 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61  pEList).  The na
17450 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  med expression l
17460 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55  ist may.** be NU
17470 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f  LL.  The pSrc co
17480 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
17490 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
174a0 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74  a SELECT or.** t
174b0 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  o the table bein
174c0 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79  g operated on by
174d0 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c   INSERT, UPDATE,
174e0 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65   or DELETE.  The
174f0 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65  .** pEList corre
17500 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65  sponds to the re
17510 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45  sult set of a SE
17520 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c  LECT and is NULL
17530 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74   for.** other st
17540 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
17550 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e  NameContexts can
17560 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65   be nested.  Whe
17570 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  n resolving name
17580 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73  s, the inner-mos
17590 74 20 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  t .** context is
175a0 20 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e   searched first.
175b0 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73    If no match is
175c0 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74   found, the next
175d0 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78   outer.** contex
175e0 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49  t is checked.  I
175f0 66 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c  f there is still
17600 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e   no match, the n
17610 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69  ext context.** i
17620 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73  s checked.  This
17630 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75   process continu
17640 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20  es until either 
17650 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
17660 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65  .** or all conte
17670 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20  xts are check.  
17680 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20  When a match is 
17690 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20  found, the nRef 
176a0 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65  member of.** the
176b0 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e   context contain
176c0 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73  ing the match is
176d0 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a   incremented. .*
176e0 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65  *.** Each subque
176f0 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61  ry gets a new Na
17700 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20  meContext.  The 
17710 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e  pNext field poin
17720 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d  ts to the.** Nam
17730 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20  eContext in the 
17740 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54  parent query.  T
17750 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73 20  hus the process 
17760 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a  of scanning the.
17770 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c  ** NameContext l
17780 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ist corresponds 
17790 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68 72  to searching thr
177a0 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65 6c  ough successivel
177b0 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75  y outer.** subqu
177c0 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f  eries looking fo
177d0 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74  r a match..*/.st
177e0 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ruct NameContext
177f0 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
17800 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  se;       /* The
17810 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63   parser */.  Src
17820 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20  List *pSrcList; 
17830 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65    /* One or more
17840 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20   tables used to 
17850 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f  resolve names */
17860 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c  .  ExprList *pEL
17870 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f  ist;    /* Optio
17880 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65 73 75  nal list of resu
17890 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a  lt-set columns *
178a0 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67  /.  AggInfo *pAg
178b0 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f  gInfo;   /* Info
178c0 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67  rmation about ag
178d0 67 72 65 67 61 74 65 73 20 61 74 20 74 68 69 73  gregates at this
178e0 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65   level */.  Name
178f0 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20  Context *pNext; 
17900 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e   /* Next outer n
17910 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55  ame context.  NU
17920 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74  LL for outermost
17930 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20   */.  int nRef; 
17940 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
17950 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65  mber of names re
17960 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20 63  solved by this c
17970 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20  ontext */.  int 
17980 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  nErr;           
17990 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
179a0 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  rors encountered
179b0 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67   while resolving
179c0 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 31 36 20   names */.  u16 
179d0 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  ncFlags;        
179e0 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65   /* Zero or more
179f0 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69   NC_* flags defi
17a00 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  ned below */.};.
17a10 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
17a20 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61  alues for the Na
17a30 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61  meContext, ncFla
17a40 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
17a50 4e 6f 74 65 3a 20 20 4e 43 5f 4d 69 6e 4d 61 78  Note:  NC_MinMax
17a60 41 67 67 20 6d 75 73 74 20 68 61 76 65 20 74 68  Agg must have th
17a70 65 20 73 61 6d 65 20 76 61 6c 75 65 20 61 73 20  e same value as 
17a80 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 61 6e 64  SF_MinMaxAgg and
17a90 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  .** SQLITE_FUNC_
17aa0 4d 49 4e 4d 41 58 2e 0a 2a 2a 20 0a 2a 2f 0a 23  MINMAX..** .*/.#
17ab0 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41  define NC_AllowA
17ac0 67 67 20 20 30 78 30 30 30 31 20 20 2f 2a 20 41  gg  0x0001  /* A
17ad0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
17ae0 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68  ns are allowed h
17af0 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ere */.#define N
17b00 43 5f 48 61 73 41 67 67 20 20 20 20 30 78 30 30  C_HasAgg    0x00
17b10 30 32 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f  02  /* One or mo
17b20 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
17b30 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23  ctions seen */.#
17b40 64 65 66 69 6e 65 20 4e 43 5f 49 73 43 68 65 63  define NC_IsChec
17b50 6b 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54  k   0x0004  /* T
17b60 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67  rue if resolving
17b70 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43   names in a CHEC
17b80 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  K constraint */.
17b90 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67  #define NC_InAgg
17ba0 46 75 6e 63 20 30 78 30 30 30 38 20 20 2f 2a 20  Func 0x0008  /* 
17bb0 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e  True if analyzin
17bc0 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61  g arguments to a
17bd0 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64  n agg func */.#d
17be0 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64 78  efine NC_PartIdx
17bf0 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 54 72     0x0010  /* Tr
17c00 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20  ue if resolving 
17c10 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20  a partial index 
17c20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65  WHERE */.#define
17c30 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78   NC_MinMaxAgg 0x
17c40 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78  1000  /* min/max
17c50 20 61 67 67 72 65 67 61 74 65 73 20 73 65 65 6e   aggregates seen
17c60 2e 20 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 76  .  See note abov
17c70 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  e */../*.** An i
17c80 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
17c90 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
17ca0 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20  re contains all 
17cb0 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e  information.** n
17cc0 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
17cd0 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e  e code for a sin
17ce0 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  gle SELECT state
17cf0 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d  ment..**.** nLim
17d00 69 74 20 69 73 20 73 65 74 20 74 6f 20 2d 31 20  it is set to -1 
17d10 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c  if there is no L
17d20 49 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f  IMIT clause.  nO
17d30 66 66 73 65 74 20 69 73 20 73 65 74 20 74 6f 20  ffset is set to 
17d40 30 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69  0..** If there i
17d50 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  s a LIMIT clause
17d60 2c 20 74 68 65 20 70 61 72 73 65 72 20 73 65 74  , the parser set
17d70 73 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65 20  s nLimit to the 
17d80 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20  value of the.** 
17d90 6c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65  limit and nOffse
17da0 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
17db0 66 20 74 68 65 20 6f 66 66 73 65 74 20 28 6f 72  f the offset (or
17dc0 20 30 20 69 66 20 74 68 65 72 65 20 69 73 20 6e   0 if there is n
17dd0 6f 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20  ot.** offset).  
17de0 42 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c  But later on, nL
17df0 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74  imit and nOffset
17e00 20 62 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f   become the memo
17e10 72 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20  ry locations.** 
17e20 69 6e 20 74 68 65 20 56 44 42 45 20 74 68 61 74  in the VDBE that
17e30 20 72 65 63 6f 72 64 20 74 68 65 20 6c 69 6d 69   record the limi
17e40 74 20 61 6e 64 20 6f 66 66 73 65 74 20 63 6f 75  t and offset cou
17e50 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64  nters..**.** add
17e60 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72  rOpenEphm[] entr
17e70 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ies contain the 
17e80 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70  address of OP_Op
17e90 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f  enEphemeral opco
17ea0 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64  des..** These ad
17eb0 64 72 65 73 73 65 73 20 6d 75 73 74 20 62 65 20  dresses must be 
17ec0 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77  stored so that w
17ed0 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e  e can go back an
17ee0 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65  d fill in.** the
17ef0 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20   P4_KEYINFO and 
17f00 50 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61  P2 parameters la
17f10 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68  ter.  Neither th
17f20 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a  e KeyInfo nor.**
17f30 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
17f40 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e  olumns in P2 can
17f50 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20   be computed at 
17f60 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a  the same time.**
17f70 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45   as the OP_OpenE
17f80 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  phm instruction 
17f90 69 73 20 63 6f 64 65 64 20 62 65 63 61 75 73 65  is coded because
17fa0 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69   not.** enough i
17fb0 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
17fc0 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75   the compound qu
17fd0 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20  ery is known at 
17fe0 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54  that point..** T
17ff0 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61  he KeyInfo for a
18000 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61  ddrOpenTran[0] a
18010 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20  nd [1] contains 
18020 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
18030 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  ces.** for the r
18040 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20  esult set.  The 
18050 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72  KeyInfo for addr
18060 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74  OpenEphm[2] cont
18070 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a  ains collating.*
18080 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20  * sequences for 
18090 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
180a0 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  use..*/.struct S
180b0 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69  elect {.  ExprLi
180c0 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20  st *pEList;     
180d0 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f   /* The fields o
180e0 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a  f the result */.
180f0 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
18100 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
18110 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f  of: TK_UNION TK_
18120 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54  ALL TK_INTERSECT
18130 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20   TK_EXCEPT */.  
18140 75 31 36 20 73 65 6c 46 6c 61 67 73 3b 20 20 20  u16 selFlags;   
18150 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75         /* Variou
18160 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  s SF_* values */
18170 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69  .  int iLimit, i
18180 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d  Offset;   /* Mem
18190 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 68 6f  ory registers ho
181a0 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46  lding LIMIT & OF
181b0 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f  FSET counters */
181c0 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45  .#if SELECTTRACE
181d0 5f 45 4e 41 42 4c 45 44 0a 20 20 63 68 61 72 20  _ENABLED.  char 
181e0 7a 53 65 6c 4e 61 6d 65 5b 31 32 5d 3b 20 20 20  zSelName[12];   
181f0 20 20 2f 2a 20 53 79 6d 62 6f 6c 69 63 20 6e 61    /* Symbolic na
18200 6d 65 20 6f 66 20 74 68 69 73 20 53 45 4c 45 43  me of this SELEC
18210 54 20 75 73 65 20 66 6f 72 20 64 65 62 75 67 67  T use for debugg
18220 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ing */.#endif.  
18230 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  int addrOpenEphm
18240 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  [2];   /* OP_Ope
18250 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72  nEphem opcodes r
18260 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20 73  elated to this s
18270 65 6c 65 63 74 20 2a 2f 0a 20 20 75 36 34 20 6e  elect */.  u64 n
18280 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 20  SelectRow;      
18290 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e    /* Estimated n
182a0 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20  umber of result 
182b0 72 6f 77 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73  rows */.  SrcLis
182c0 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20  t *pSrc;        
182d0 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61   /* The FROM cla
182e0 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  use */.  Expr *p
182f0 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 20 20  Where;          
18300 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  /* The WHERE cla
18310 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
18320 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
18330 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42 59 20  /* The GROUP BY 
18340 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
18350 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20   *pHaving;      
18360 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47     /* The HAVING
18370 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
18380 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b  rList *pOrderBy;
18390 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52      /* The ORDER
183a0 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
183b0 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20  Select *pPrior; 
183c0 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20         /* Prior 
183d0 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70  select in a comp
183e0 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74  ound select stat
183f0 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63  ement */.  Selec
18400 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  t *pNext;       
18410 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74    /* Next select
18420 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20   to the left in 
18430 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20  a compound */.  
18440 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20  Expr *pLimit;   
18450 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20         /* LIMIT 
18460 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c  expression. NULL
18470 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e   means not used.
18480 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66 66   */.  Expr *pOff
18490 73 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  set;         /* 
184a0 4f 46 46 53 45 54 20 65 78 70 72 65 73 73 69 6f  OFFSET expressio
184b0 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f  n. NULL means no
184c0 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74  t used. */.  Wit
184d0 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20  h *pWith;       
184e0 20 20 20 20 2f 2a 20 57 49 54 48 20 63 6c 61 75      /* WITH clau
184f0 73 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  se attached to t
18500 68 69 73 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e  his select. Or N
18510 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ULL. */.};../*.*
18520 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
18530 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46   for Select.selF
18540 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46 22 20  lags.  The "SF" 
18550 70 72 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f  prefix stands fo
18560 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61  r.** "Select Fla
18570 67 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  g"..*/.#define S
18580 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20  F_Distinct      
18590 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 75 74    0x0001  /* Out
185a0 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49  put should be DI
185b0 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e  STINCT */.#defin
185c0 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20  e SF_Resolved   
185d0 20 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20       0x0002  /* 
185e0 49 64 65 6e 74 69 66 69 65 72 73 20 68 61 76 65  Identifiers have
185f0 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a   been resolved *
18600 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67  /.#define SF_Agg
18610 72 65 67 61 74 65 20 20 20 20 20 20 20 30 78 30  regate       0x0
18620 30 30 34 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  004  /* Contains
18630 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
18640 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
18650 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c  SF_UsesEphemeral
18660 20 20 20 30 78 30 30 30 38 20 20 2f 2a 20 55 73     0x0008  /* Us
18670 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d  es the OpenEphem
18680 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  eral opcode */.#
18690 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64  define SF_Expand
186a0 65 64 20 20 20 20 20 20 20 20 30 78 30 30 31 30  ed        0x0010
186b0 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65    /* sqlite3Sele
186c0 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65  ctExpand() calle
186d0 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65  d on this */.#de
186e0 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49  fine SF_HasTypeI
186f0 6e 66 6f 20 20 20 20 20 30 78 30 30 32 30 20 20  nfo     0x0020  
18700 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69  /* FROM subqueri
18710 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65  es have Table me
18720 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e  tadata */.#defin
18730 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20  e SF_Compound   
18740 20 20 20 20 20 30 78 30 30 34 30 20 20 2f 2a 20       0x0040  /* 
18750 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75  Part of a compou
18760 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66  nd query */.#def
18770 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20  ine SF_Values   
18780 20 20 20 20 20 20 20 30 78 30 30 38 30 20 20 2f         0x0080  /
18790 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72  * Synthesized fr
187a0 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65  om VALUES clause
187b0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
187c0 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30          /*     0
187d0 78 30 31 30 30 20 20 4e 4f 54 20 55 53 45 44 20  x0100  NOT USED 
187e0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65  */.#define SF_Ne
187f0 73 74 65 64 46 72 6f 6d 20 20 20 20 20 20 30 78  stedFrom      0x
18800 30 32 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66  0200  /* Part of
18810 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64   a parenthesized
18820 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
18830 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65  #define SF_Maybe
18840 43 6f 6e 76 65 72 74 20 20 20 20 30 78 30 34 30  Convert    0x040
18850 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65  0  /* Need conve
18860 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
18870 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
18880 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72  #define SF_Recur
18890 73 69 76 65 20 20 20 20 20 20 20 30 78 30 38 30  sive       0x080
188a0 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73  0  /* The recurs
188b0 69 76 65 20 70 61 72 74 20 6f 66 20 61 20 72 65  ive part of a re
188c0 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23  cursive CTE */.#
188d0 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78  define SF_MinMax
188e0 41 67 67 20 20 20 20 20 20 20 30 78 31 30 30 30  Agg       0x1000
188f0 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 63    /* Aggregate c
18900 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20  ontaining min() 
18910 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 0a 0a 2f 2a  or max() */.../*
18920 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20  .** The results 
18930 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20  of a SELECT can 
18940 62 65 20 64 69 73 74 72 69 62 75 74 65 64 20 69  be distributed i
18950 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20  n several ways, 
18960 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79  as defined.** by
18970 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
18980 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54  owing macros.  T
18990 68 65 20 22 53 52 54 22 20 70 72 65 66 69 78 20  he "SRT" prefix 
189a0 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65  means "SELECT Re
189b0 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a  sult.** Type"..*
189c0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69  *.**     SRT_Uni
189d0 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  on       Store r
189e0 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20  esults as a key 
189f0 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69  in a temporary i
18a00 6e 64 65 78 20 0a 2a 2a 20 20 20 20 20 20 20 20  ndex .**        
18a10 20 20 20 20 20 20 20 20 20 20 20 20 20 69 64 65               ide
18a20 6e 74 69 66 69 65 64 20 62 79 20 70 44 65 73 74  ntified by pDest
18a30 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a  ->iSDParm..**.**
18a40 20 20 20 20 20 53 52 54 5f 45 78 63 65 70 74 20       SRT_Except 
18a50 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75       Remove resu
18a60 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d  lts from the tem
18a70 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44 65  porary index pDe
18a80 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a  st->iSDParm..**.
18a90 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73 74  **     SRT_Exist
18aa0 73 20 20 20 20 20 20 53 74 6f 72 65 20 61 20 31  s      Store a 1
18ab0 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   in memory cell 
18ac0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69  pDest->iSDParm i
18ad0 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  f the result.** 
18ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18af0 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65      set is not e
18b00 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  mpty..**.**     
18b10 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20  SRT_Discard     
18b20 54 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74  Throw the result
18b30 73 20 61 77 61 79 2e 20 20 54 68 69 73 20 69 73  s away.  This is
18b40 20 75 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a   used by SELECT.
18b50 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18b60 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
18b70 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  s within trigger
18b80 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72  s whose only pur
18b90 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20  pose is.**      
18ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
18bb0 68 65 20 73 69 64 65 2d 65 66 66 65 63 74 73 20  he side-effects 
18bc0 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  of functions..**
18bd0 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61  .** All of the a
18be0 62 6f 76 65 20 61 72 65 20 66 72 65 65 20 74 6f  bove are free to
18bf0 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52   ignore their OR
18c00 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54  DER BY clause. T
18c10 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c  hose that.** fol
18c20 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74  low must honor t
18c30 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
18c40 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  se..**.**     SR
18c50 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47 65  T_Output      Ge
18c60 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20  nerate a row of 
18c70 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20 74 68  output (using th
18c80 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a  e OP_ResultRow.*
18c90 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
18ca0 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f        opcode) fo
18cb0 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68  r each row in th
18cc0 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a  e result set..**
18cd0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20  .**     SRT_Mem 
18ce0 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c          Only val
18cf0 69 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  id if the result
18d00 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c   is a single col
18d10 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  umn..**         
18d20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 6f 72              Stor
18d30 65 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75  e the first colu
18d40 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  mn of the first 
18d50 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20  result row.**   
18d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d70 20 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44    in register pD
18d80 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65  est->iSDParm the
18d90 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65  n abandon the re
18da0 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  st.**           
18db0 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65            of the
18dc0 20 71 75 65 72 79 2e 20 20 54 68 69 73 20 64 65   query.  This de
18dd0 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65  stination implie
18de0 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a  s "LIMIT 1"..**.
18df0 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20 20  **     SRT_Set  
18e00 20 20 20 20 20 20 20 54 68 65 20 72 65 73 75 6c         The resul
18e10 74 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67  t must be a sing
18e20 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72  le column.  Stor
18e30 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20  e each.**       
18e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
18e50 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74  w of result as t
18e60 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20  he key in table 
18e70 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 20  pDest->iSDParm. 
18e80 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18e90 20 20 20 20 20 20 20 20 41 70 70 6c 79 20 74 68          Apply th
18ea0 65 20 61 66 66 69 6e 69 74 79 20 70 44 65 73 74  e affinity pDest
18eb0 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72 65  ->affSdst before
18ec0 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20   storing.**     
18ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ee0 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74  results.  Used t
18ef0 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20  o implement "IN 
18f00 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a  (SELECT ...)"..*
18f10 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68  *.**     SRT_Eph
18f20 65 6d 54 61 62 20 20 20 20 43 72 65 61 74 65 20  emTab    Create 
18f30 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  an temporary tab
18f40 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
18f50 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20  m and store.**  
18f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f70 20 20 20 74 68 65 20 72 65 73 75 6c 74 20 74 68     the result th
18f80 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20  ere. The cursor 
18f90 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74  is left open aft
18fa0 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  er.**           
18fb0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
18fc0 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69  ing.  This is li
18fd0 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63  ke SRT_Table exc
18fe0 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20  ept that.**     
18ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19000 74 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e  this destination
19010 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68   uses OP_OpenEph
19020 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65  emeral to create
19030 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19040 20 20 20 20 20 20 20 20 74 68 65 20 74 61 62 6c          the tabl
19050 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20  e first..**.**  
19060 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65     SRT_Coroutine
19070 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f     Generate a co
19080 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65  -routine that re
19090 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20  turns a new row 
190a0 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  of.**           
190b0 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
190c0 73 20 65 61 63 68 20 74 69 6d 65 20 69 74 20 69  s each time it i
190d0 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20  s invoked.  The 
190e0 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20  entry point.**  
190f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19100 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75     of the co-rou
19110 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69  tine is stored i
19120 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74  n register pDest
19130 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20  ->iSDParm.**    
19140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19150 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result 
19160 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e  row is stored in
19170 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65   pDest->nDest re
19180 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20  gisters.**      
19190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
191a0 74 61 72 74 69 6e 67 20 77 69 74 68 20 70 44 65  tarting with pDe
191b0 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a  st->iSdst..**.**
191c0 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20       SRT_Table  
191d0 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
191e0 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  ts in temporary 
191f0 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
19200 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54  Parm..**     SRT
19210 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54 68 69  _Fifo        Thi
19220 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70  s is like SRT_Ep
19230 68 65 6d 54 61 62 20 65 78 63 65 70 74 20 74 68  hemTab except th
19240 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20  at the table.** 
19250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19260 20 20 20 20 69 73 20 61 73 73 75 6d 65 64 20 74      is assumed t
19270 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65  o already be ope
19280 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73  n.  SRT_Fifo has
19290 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
192a0 20 20 20 20 20 20 20 20 74 68 65 20 61 64 64 69          the addi
192b0 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20  tional property 
192c0 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f  of being able to
192d0 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20   ignore.**      
192e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
192f0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
19300 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  se..**.**     SR
19310 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53 74  T_DistFifo    St
19320 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61  ore results in a
19330 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
19340 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
19350 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19360 20 20 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f          But also
19370 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74   use temporary t
19380 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
19390 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20  arm+1 as.**     
193a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193b0 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20  a record of all 
193c0 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e  prior results an
193d0 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70  d ignore any dup
193e0 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20  licate.**       
193f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
19400 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a  ws.  Name means:
19410 20 20 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f    "Distinct Fifo
19420 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
19430 5f 51 75 65 75 65 20 20 20 20 20 20 20 53 74 6f  _Queue       Sto
19440 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72  re results in pr
19450 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65  iority queue pDe
19460 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61  st->iSDParm (rea
19470 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  lly.**          
19480 20 20 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e             an in
19490 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20  dex).  Append a 
194a0 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
194b0 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72  so that all entr
194c0 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ies.**          
194d0 20 20 20 20 20 20 20 20 20 20 20 61 72 65 20 64             are d
194e0 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20  istinct..**.**  
194f0 20 20 20 53 52 54 5f 44 69 73 74 51 75 65 75 65     SRT_DistQueue
19500 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
19510 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65   in priority que
19520 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ue pDest->iSDPar
19530 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20  m only if.**    
19540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19550 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64   the same record
19560 20 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20   has never been 
19570 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20  stored before.  
19580 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  The.**          
19590 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
195a0 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61   at pDest->iSDPa
195b0 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72  rm+1 hold all pr
195c0 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23  ior stores..*/.#
195d0 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e  define SRT_Union
195e0 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74          1  /* St
195f0 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65  ore result as ke
19600 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
19610 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78  /.#define SRT_Ex
19620 63 65 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a  cept       2  /*
19630 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66   Remove result f
19640 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65  rom a UNION inde
19650 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
19660 5f 45 78 69 73 74 73 20 20 20 20 20 20 20 33 20  _Exists       3 
19670 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74   /* Store 1 if t
19680 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74  he result is not
19690 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
196a0 65 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20  e SRT_Discard   
196b0 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20     4  /* Do not 
196c0 73 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 73  save the results
196d0 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65   anywhere */.#de
196e0 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20  fine SRT_Fifo   
196f0 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72        5  /* Stor
19700 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61  e result as data
19710 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74   with an automat
19720 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66  ic rowid */.#def
19730 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f  ine SRT_DistFifo
19740 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20       6  /* Like 
19750 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e  SRT_Fifo, but un
19760 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c  ique results onl
19770 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  y */.#define SRT
19780 5f 51 75 65 75 65 20 20 20 20 20 20 20 20 37 20  _Queue        7 
19790 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
197a0 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a   in an queue */.
197b0 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74  #define SRT_Dist
197c0 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c  Queue    8  /* L
197d0 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62  ike SRT_Queue, b
197e0 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74  ut unique result
197f0 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68  s only */../* Th
19800 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
19810 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72  e is ignored for
19820 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76   all of the abov
19830 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e  e */.#define Ign
19840 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29  orableOrderby(X)
19850 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52   ((X->eDest)<=SR
19860 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64  T_DistQueue)..#d
19870 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74  efine SRT_Output
19880 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74         9  /* Out
19890 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20  put each row of 
198a0 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  result */.#defin
198b0 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20  e SRT_Mem       
198c0 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72    10  /* Store r
198d0 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72  esult in a memor
198e0 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e  y cell */.#defin
198f0 65 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20  e SRT_Set       
19900 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72    11  /* Store r
19910 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69  esults as keys i
19920 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
19930 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54  efine SRT_EphemT
19940 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65  ab    12  /* Cre
19950 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61  ate transient ta
19960 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65  b and store like
19970 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64   SRT_Table */.#d
19980 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74  efine SRT_Corout
19990 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e  ine   13  /* Gen
199a0 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72  erate a single r
199b0 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a  ow of result */.
199c0 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c  #define SRT_Tabl
199d0 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53  e       14  /* S
199e0 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64  tore result as d
199f0 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f  ata with an auto
19a00 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a  matic rowid */..
19a10 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
19a20 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74  e of this object
19a30 20 64 65 73 63 72 69 62 65 73 20 77 68 65 72 65   describes where
19a40 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72   to put of the r
19a50 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53  esults of.** a S
19a60 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
19a70 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63  .*/.struct Selec
19a80 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65  tDest {.  u8 eDe
19a90 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  st;            /
19aa0 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65  * How to dispose
19ab0 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e   of the results.
19ac0 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62    On of SRT_* ab
19ad0 6f 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20 61  ove. */.  char a
19ae0 66 66 53 64 73 74 3b 20 20 20 20 20 20 20 20 2f  ffSdst;        /
19af0 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65 64 20  * Affinity used 
19b00 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f  when eDest==SRT_
19b10 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44  Set */.  int iSD
19b20 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a  Parm;         /*
19b30 20 41 20 70 61 72 61 6d 65 74 65 72 20 75 73 65   A parameter use
19b40 64 20 62 79 20 74 68 65 20 65 44 65 73 74 20 64  d by the eDest d
19b50 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a  isposal method *
19b60 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20  /.  int iSdst;  
19b70 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65           /* Base
19b80 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20   register where 
19b90 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74  results are writ
19ba0 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64  ten */.  int nSd
19bb0 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  st;           /*
19bc0 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73   Number of regis
19bd0 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a  ters allocated *
19be0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f  /.  ExprList *pO
19bf0 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20  rderBy;  /* Key 
19c00 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f  columns for SRT_
19c10 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69  Queue and SRT_Di
19c20 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f  stQueue */.};../
19c30 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65  *.** During code
19c40 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73   generation of s
19c50 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64  tatements that d
19c60 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41  o inserts into A
19c70 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a  UTOINCREMENT .**
19c80 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c   tables, the fol
19c90 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69  lowing informati
19ca0 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74  on is attached t
19cb0 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75  o the Table.u.au
19cc0 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74  toInc.p.** point
19cd0 65 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69  er of each autoi
19ce0 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74  ncrement table t
19cf0 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69  o record some si
19d00 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  de information t
19d10 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20  hat.** the code 
19d20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e  generator needs.
19d30 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65    We have to kee
19d40 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f  p per-table auto
19d50 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66  increment.** inf
19d60 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65  ormation in case
19d70 20 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 77   inserts are dow
19d80 6e 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  n within trigger
19d90 73 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20  s.  Triggers do 
19da0 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20  not.** normally 
19db0 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72  coordinate their
19dc0 20 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74   activities, but
19dd0 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63   we do need to c
19de0 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a  oordinate the.**
19df0 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76   loading and sav
19e00 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65  ing of autoincre
19e10 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ment information
19e20 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f  ..*/.struct Auto
19e30 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f  incInfo {.  Auto
19e40 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20  incInfo *pNext; 
19e50 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62    /* Next info b
19e60 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f  lock in a list o
19e70 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20  f them all */.  
19e80 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
19e90 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74        /* Table t
19ea0 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72  his info block r
19eb0 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e  efers to */.  in
19ec0 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
19ed0 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
19ee0 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66  sqlite3.aDb[] of
19ef0 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
19f00 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20  g pTab */.  int 
19f10 72 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20  regCtr;         
19f20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
19f30 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65  ster holding the
19f40 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a   rowid counter *
19f50 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65  /.};../*.** Size
19f60 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63   of the column c
19f70 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ache.*/.#ifndef 
19f80 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
19f90 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
19fa0 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a  E_N_COLCACHE 10.
19fb0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74  #endif../*.** At
19fc0 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61   least one insta
19fd0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
19fe0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
19ff0 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
1a000 63 68 20 0a 2a 2a 20 74 72 69 67 67 65 72 20 74  ch .** trigger t
1a010 68 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64  hat may be fired
1a020 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61   while parsing a
1a030 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  n INSERT, UPDATE
1a040 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74   or DELETE.** st
1a050 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63  atement. All suc
1a060 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74  h objects are st
1a070 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b  ored in the link
1a080 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61  ed list headed a
1a090 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67  t.** Parse.pTrig
1a0a0 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74  gerPrg and delet
1a0b0 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e  ed once statemen
1a0c0 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61  t compilation ha
1a0d0 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65  s been.** comple
1a0e0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62  ted..**.** A Vdb
1a0f0 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68  e sub-program th
1a100 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68  at implements th
1a110 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20  e body and WHEN 
1a120 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65  clause of trigge
1a130 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  r.** TriggerPrg.
1a140 70 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69  pTrigger, assumi
1a150 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20  ng a default ON 
1a160 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
1a170 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67  of.** TriggerPrg
1a180 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72  .orconf, is stor
1a190 65 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65  ed in the Trigge
1a1a0 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61  rPrg.pProgram va
1a1b0 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50  riable..** The P
1a1c0 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1a1d0 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74   list never cont
1a1e0 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73  ains two entries
1a1f0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a   with the same.*
1a200 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74  * values for bot
1a210 68 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f  h pTrigger and o
1a220 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rconf..**.** The
1a230 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
1a240 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65  mask[0] variable
1a250 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73   is set to a mas
1a260 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
1a270 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28  ns.** accessed (
1a280 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20  or set to 0 for 
1a290 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61  triggers fired a
1a2a0 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e  s a result of IN
1a2b0 53 45 52 54 20 0a 2a 2a 20 73 74 61 74 65 6d 65  SERT .** stateme
1a2c0 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c  nts). Similarly,
1a2d0 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   the TriggerPrg.
1a2e0 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69  aColmask[1] vari
1a2f0 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a  able is set to.*
1a300 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e  * a mask of new.
1a310 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62  * columns used b
1a320 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  y the program..*
1a330 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
1a340 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20  Prg {.  Trigger 
1a350 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20  *pTrigger;      
1a360 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20  /* Trigger this 
1a370 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65  program was code
1a380 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67  d from */.  Trig
1a390 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20  gerPrg *pNext;  
1a3a0 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72      /* Next entr
1a3b0 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67  y in Parse.pTrig
1a3c0 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20  gerPrg list */. 
1a3d0 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72   SubProgram *pPr
1a3e0 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67  ogram;   /* Prog
1a3f0 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  ram implementing
1a400 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66   pTrigger/orconf
1a410 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66   */.  int orconf
1a420 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1a430 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
1a440 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20  LICT policy */. 
1a450 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d   u32 aColmask[2]
1a460 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b  ;        /* Mask
1a470 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e  s of old.*, new.
1a480 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73  * columns access
1a490 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ed */.};../*.** 
1a4a0 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61  The yDbMask data
1a4b0 74 79 70 65 20 66 6f 72 20 74 68 65 20 62 69 74  type for the bit
1a4c0 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61  mask of all atta
1a4d0 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  ched databases..
1a4e0 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
1a4f0 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20  X_ATTACHED>30.  
1a500 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64  typedef unsigned
1a510 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53   char yDbMask[(S
1a520 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
1a530 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69  ED+9)/8];.# defi
1a540 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c  ne DbMaskTest(M,
1a550 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f  I)    (((M)[(I)/
1a560 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29  8]&(1<<((I)&7)))
1a570 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62  !=0).# define Db
1a580 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20  MaskZero(M)     
1a590 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69   memset((M),0,si
1a5a0 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e  zeof(M)).# defin
1a5b0 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29  e DbMaskSet(M,I)
1a5c0 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c       (M)[(I)/8]|
1a5d0 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20  =(1<<((I)&7)).# 
1a5e0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c  define DbMaskAll
1a5f0 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65  Zero(M)   sqlite
1a600 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d  3DbMaskAllZero(M
1a610 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1a620 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73  kNonZero(M)   (s
1a630 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
1a640 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65  ero(M)==0).#else
1a650 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67  .  typedef unsig
1a660 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b  ned int yDbMask;
1a670 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1a680 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28  Test(M,I)    (((
1a690 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29  M)&(((yDbMask)1)
1a6a0 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65  <<(I)))!=0).# de
1a6b0 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28  fine DbMaskZero(
1a6c0 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20  M)      (M)=0.# 
1a6d0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74  define DbMaskSet
1a6e0 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28  (M,I)     (M)|=(
1a6f0 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49  ((yDbMask)1)<<(I
1a700 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
1a710 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28  skAllZero(M)   (
1a720 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44  M)==0.# define D
1a730 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20  bMaskNonZero(M) 
1a740 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a    (M)!=0.#endif.
1a750 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61  ./*.** An SQL pa
1a760 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41  rser context.  A
1a770 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74   copy of this st
1a780 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65  ructure is passe
1a790 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65  d through.** the
1a7a0 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e   parser and down
1a7b0 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61   into all the pa
1a7c0 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74  rser action rout
1a7d0 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ine in order to.
1a7e0 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20  ** carry around 
1a7f0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
1a800 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68   is global to th
1a810 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a  e entire parse..
1a820 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74  **.** The struct
1a830 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69  ure is divided i
1a840 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20  nto two parts.  
1a850 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20  When the parser 
1a860 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65  and code.** gene
1a870 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65  rate call themse
1a880 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79  lves recursively
1a890 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74  , the first part
1a8a0 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72   of the structur
1a8b0 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74  e.** is constant
1a8c0 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20   but the second 
1a8d0 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74  part is reset at
1a8e0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61   the beginning a
1a8f0 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63  nd end of.** eac
1a900 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a  h recursion..**.
1a910 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63  ** The nTableLoc
1a920 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b  k and aTableLock
1a930 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f   variables are o
1a940 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20  nly used if the 
1a950 73 68 61 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a  shared-cache .**
1a960 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62   feature is enab
1a970 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54  led (if sqlite3T
1a980 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44  sd()->useSharedD
1a990 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68  ata is true). Th
1a9a0 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  ey are.** used t
1a9b0 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20  o store the set 
1a9c0 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72  of table-locks r
1a9d0 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
1a9e0 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a  tatement being.*
1a9f0 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63  * compiled. Func
1aa00 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c  tion sqlite3Tabl
1aa10 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20  eLock() is used 
1aa20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74  to add entries t
1aa30 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a  o the.** list..*
1aa40 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b  /.struct Parse {
1aa50 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
1aa60 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d          /* The m
1aa70 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72  ain database str
1aa80 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72  ucture */.  char
1aa90 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20   *zErrMsg;      
1aaa0 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73   /* An error mes
1aab0 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a  sage */.  Vdbe *
1aac0 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f  pVdbe;         /
1aad0 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20  * An engine for 
1aae0 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61  executing databa
1aaf0 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20  se bytecode */. 
1ab00 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
1ab10 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20        /* Return 
1ab20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74  code from execut
1ab30 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e  ion */.  u8 colN
1ab40 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a  amesSet;      /*
1ab50 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43   TRUE after OP_C
1ab60 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65  olumnName has be
1ab70 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64  en issued to pVd
1ab80 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b  be */.  u8 check
1ab90 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20  Schema;      /* 
1aba0 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f  Causes schema co
1abb0 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72  okie check after
1abc0 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75   an error */.  u
1abd0 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20  8 nested;       
1abe0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1abf0 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
1ac00 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65   the parser/code
1ac10 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20   generator */.  
1ac20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20  u8 nTempReg;    
1ac30 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1ac40 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  f temporary regi
1ac50 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65  sters in aTempRe
1ac60 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75  g[] */.  u8 isMu
1ac70 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a  ltiWrite;     /*
1ac80 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65   True if stateme
1ac90 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e  nt may modify/in
1aca0 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f  sert multiple ro
1acb0 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62  ws */.  u8 mayAb
1acc0 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ort;         /* 
1acd0 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e  True if statemen
1ace0 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41  t may throw an A
1acf0 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a  BORT exception *
1ad00 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75  /.  u8 hasCompou
1ad10 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64  nd;      /* Need
1ad20 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65   to invoke conve
1ad30 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
1ad40 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
1ad50 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74    u8 okConstFact
1ad60 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20  or;    /* OK to 
1ad70 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74  factor out const
1ad80 61 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 61 54  ants */.  int aT
1ad90 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f  empReg[8];     /
1ada0 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66  * Holding area f
1adb0 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  or temporary reg
1adc0 69 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20  isters */.  int 
1add0 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20  nRangeReg;      
1ade0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
1adf0 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
1ae00 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
1ae10 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t iRangeReg;    
1ae20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69     /* First regi
1ae30 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72  ster in temporar
1ae40 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
1ae50 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
1ae60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1ae70 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73  mber of errors s
1ae80 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61  een */.  int nTa
1ae90 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
1aea0 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69   Number of previ
1aeb0 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  ously allocated 
1aec0 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a  VDBE cursors */.
1aed0 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20    int nMem;     
1aee0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1aef0 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73   of memory cells
1af00 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
1af10 20 20 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20    int nSet;     
1af20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1af30 20 6f 66 20 73 65 74 73 20 75 73 65 64 20 73 6f   of sets used so
1af40 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f   far */.  int nO
1af50 6e 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  nce;           /
1af60 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f  * Number of OP_O
1af70 6e 63 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  nce instructions
1af80 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1af90 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20   nOpAlloc;      
1afa0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
1afb0 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  lots allocated f
1afc0 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f  or Vdbe.aOp[] */
1afd0 0a 20 20 69 6e 74 20 69 46 69 78 65 64 4f 70 3b  .  int iFixedOp;
1afe0 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 76 65 72          /* Never
1aff0 20 62 61 63 6b 20 6f 75 74 20 6f 70 63 6f 64 65   back out opcode
1b000 73 20 69 46 69 78 65 64 4f 70 2d 31 20 6f 72 20  s iFixedOp-1 or 
1b010 65 61 72 6c 69 65 72 20 2a 2f 0a 20 20 69 6e 74  earlier */.  int
1b020 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20   ckBase;        
1b030 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74    /* Base regist
1b040 65 72 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e  er of data durin
1b050 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69  g check constrai
1b060 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 50 61  nts */.  int iPa
1b070 72 74 49 64 78 54 61 62 3b 20 20 20 20 20 2f 2a  rtIdxTab;     /*
1b080 20 54 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e   Table correspon
1b090 64 69 6e 67 20 74 6f 20 61 20 70 61 72 74 69 61  ding to a partia
1b0a0 6c 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  l index */.  int
1b0b0 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20   iCacheLevel;   
1b0c0 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61    /* ColCache va
1b0d0 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63  lid when aColCac
1b0e0 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61  he[].iLevel<=iCa
1b0f0 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e  cheLevel */.  in
1b100 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20  t iCacheCnt;    
1b110 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73     /* Counter us
1b120 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ed to generate a
1b130 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76  ColCache[].lru v
1b140 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  alues */.  int n
1b150 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Label;          
1b160 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62  /* Number of lab
1b170 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e  els used */.  in
1b180 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20  t *aLabel;      
1b190 20 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68     /* Space to h
1b1a0 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20 2a  old the labels *
1b1b0 2f 0a 20 20 73 74 72 75 63 74 20 79 43 6f 6c 43  /.  struct yColC
1b1c0 61 63 68 65 20 7b 0a 20 20 20 20 69 6e 74 20 69  ache {.    int i
1b1d0 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
1b1e0 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72   /* Table cursor
1b1f0 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69   number */.    i
1b200 31 36 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  16 iColumn;     
1b210 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
1b220 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  lumn number */. 
1b230 20 20 20 75 38 20 74 65 6d 70 52 65 67 3b 20 20     u8 tempReg;  
1b240 20 20 20 20 20 20 20 20 20 2f 2a 20 69 52 65 67           /* iReg
1b250 20 69 73 20 61 20 74 65 6d 70 20 72 65 67 69 73   is a temp regis
1b260 74 65 72 20 74 68 61 74 20 6e 65 65 64 73 20 74  ter that needs t
1b270 6f 20 62 65 20 66 72 65 65 64 20 2a 2f 0a 20 20  o be freed */.  
1b280 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20    int iLevel;   
1b290 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 73 74 69          /* Nesti
1b2a0 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20  ng level */.    
1b2b0 69 6e 74 20 69 52 65 67 3b 20 20 20 20 20 20 20  int iReg;       
1b2c0 20 20 20 20 20 20 2f 2a 20 52 65 67 20 77 69 74        /* Reg wit
1b2d0 68 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  h value of this 
1b2e0 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20  column. 0 means 
1b2f0 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74  none. */.    int
1b300 20 6c 72 75 3b 20 20 20 20 20 20 20 20 20 20 20   lru;           
1b310 20 20 20 2f 2a 20 4c 65 61 73 74 20 72 65 63 65     /* Least rece
1b320 6e 74 6c 79 20 75 73 65 64 20 65 6e 74 72 79 20  ntly used entry 
1b330 68 61 73 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  has the smallest
1b340 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43   value */.  } aC
1b350 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e  olCache[SQLITE_N
1b360 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20  _COLCACHE];  /* 
1b370 4f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  One for each col
1b380 75 6d 6e 20 63 61 63 68 65 20 65 6e 74 72 79 20  umn cache entry 
1b390 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1b3a0 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e  ConstExpr;/* Con
1b3b0 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
1b3c0 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e  s */.  Token con
1b3d0 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e  straintName;/* N
1b3e0 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74  ame of the const
1b3f0 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20  raint currently 
1b400 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a  being parsed */.
1b410 20 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d    yDbMask writeM
1b420 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20  ask;   /* Start 
1b430 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74  a write transact
1b440 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74  ion on these dat
1b450 61 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d  abases */.  yDbM
1b460 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20  ask cookieMask; 
1b470 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73   /* Bitmask of s
1b480 63 68 65 6d 61 20 76 65 72 69 66 69 65 64 20 64  chema verified d
1b490 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e  atabases */.  in
1b4a0 74 20 63 6f 6f 6b 69 65 56 61 6c 75 65 5b 53 51  t cookieValue[SQ
1b4b0 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
1b4c0 44 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73  D+2];  /* Values
1b4d0 20 6f 66 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76   of cookies to v
1b4e0 65 72 69 66 79 20 2a 2f 0a 20 20 69 6e 74 20 72  erify */.  int r
1b4f0 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20  egRowid;        
1b500 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
1b510 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45  ing rowid of CRE
1b520 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20  ATE TABLE entry 
1b530 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74  */.  int regRoot
1b540 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67  ;         /* Reg
1b550 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f  ister holding ro
1b560 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  ot page number f
1b570 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a  or new objects *
1b580 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b  /.  int nMaxArg;
1b590 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20           /* Max 
1b5a0 61 72 67 73 20 70 61 73 73 65 64 20 74 6f 20 75  args passed to u
1b5b0 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20  ser function by 
1b5c0 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23  sub-program */.#
1b5d0 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45  if SELECTTRACE_E
1b5e0 4e 41 42 4c 45 44 0a 20 20 69 6e 74 20 6e 53 65  NABLED.  int nSe
1b5f0 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  lect;         /*
1b600 20 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43   Number of SELEC
1b610 54 20 73 74 61 74 65 6d 65 6e 74 73 20 73 65 65  T statements see
1b620 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 6c 65  n */.  int nSele
1b630 63 74 49 6e 64 65 6e 74 3b 20 20 20 2f 2a 20 48  ctIndent;   /* H
1b640 6f 77 20 66 61 72 20 74 6f 20 69 6e 64 65 6e 74  ow far to indent
1b650 20 53 45 4c 45 43 54 54 52 41 43 45 28 29 20 6f   SELECTTRACE() o
1b660 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  utput */.#endif.
1b670 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1b680 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
1b690 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63  .  int nTableLoc
1b6a0 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  k;        /* Num
1b6b0 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20  ber of locks in 
1b6c0 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20  aTableLock */.  
1b6d0 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c  TableLock *aTabl
1b6e0 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72  eLock; /* Requir
1b6f0 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66  ed table locks f
1b700 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
1b710 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  mode */.#endif. 
1b720 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41   AutoincInfo *pA
1b730 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  inc;  /* Informa
1b740 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49  tion about AUTOI
1b750 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72  NCREMENT counter
1b760 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72  s */..  /* Infor
1b770 6d 61 74 69 6f 6e 20 75 73 65 64 20 77 68 69 6c  mation used whil
1b780 65 20 63 6f 64 69 6e 67 20 74 72 69 67 67 65 72  e coding trigger
1b790 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20   programs. */.  
1b7a0 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c  Parse *pToplevel
1b7b0 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74  ;    /* Parse st
1b7c0 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e  ructure for main
1b7d0 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c   program (or NUL
1b7e0 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  L) */.  Table *p
1b7f0 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20  TriggerTab;  /* 
1b800 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61  Table triggers a
1b810 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66  re being coded f
1b820 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72  or */.  int addr
1b830 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20  CrTab;       /* 
1b840 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72  Address of OP_Cr
1b850 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65  eateTable opcode
1b860 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45   on CREATE TABLE
1b870 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 53 6b   */.  int addrSk
1b880 69 70 50 4b 3b 20 20 20 20 20 20 2f 2a 20 41 64  ipPK;      /* Ad
1b890 64 72 65 73 73 20 6f 66 20 69 6e 73 74 72 75 63  dress of instruc
1b8a0 74 69 6f 6e 20 74 6f 20 73 6b 69 70 20 50 52 49  tion to skip PRI
1b8b0 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a  MARY KEY index *
1b8c0 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f  /.  u32 nQueryLo
1b8d0 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20  op;      /* Est 
1b8e0 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74  number of iterat
1b8f0 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20  ions of a query 
1b900 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a  (10*log2(N)) */.
1b910 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20    u32 oldmask;  
1b920 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
1b930 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f old.* columns 
1b940 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20  referenced */.  
1b950 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20  u32 newmask;    
1b960 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
1b970 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  new.* columns re
1b980 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38  ferenced */.  u8
1b990 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20   eTriggerOp;    
1b9a0 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c     /* TK_UPDATE,
1b9b0 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b   TK_INSERT or TK
1b9c0 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20  _DELETE */.  u8 
1b9d0 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20  eOrconf;        
1b9e0 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
1b9f0 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
1ba00 66 6f 72 20 74 72 69 67 67 65 72 20 73 74 65 70  for trigger step
1ba10 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  s */.  u8 disabl
1ba20 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54  eTriggers;  /* T
1ba30 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74  rue to disable t
1ba40 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a  riggers */..  /*
1ba50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ba60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ba70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ba80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ba90 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f  *******.  ** Abo
1baa0 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ve is constant b
1bab0 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e  etween recursion
1bac0 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73  s.  Below is res
1bad0 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66  et before and af
1bae0 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65  ter.  ** each re
1baf0 63 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f  cursion.  The bo
1bb00 75 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20 74  undary between t
1bb10 68 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73  hese two regions
1bb20 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20   is determined. 
1bb30 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74   ** using offset
1bb40 6f 66 28 50 61 72 73 65 2c 6e 56 61 72 29 20 73  of(Parse,nVar) s
1bb50 6f 20 74 68 65 20 6e 56 61 72 20 66 69 65 6c 64  o the nVar field
1bb60 20 6d 75 73 74 20 62 65 20 74 68 65 20 66 69 72   must be the fir
1bb70 73 74 20 66 69 65 6c 64 0a 20 20 2a 2a 20 69 6e  st field.  ** in
1bb80 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 72   the recursive r
1bb90 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  egion..  *******
1bba0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bbb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bbc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bbd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bbe0 2a 2f 0a 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20  */..  int nVar; 
1bbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc00 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27  /* Number of '?'
1bc10 20 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20   variables seen 
1bc20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61  in the SQL so fa
1bc30 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72  r */.  int nzVar
1bc40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1bc50 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 76   /* Number of av
1bc60 61 69 6c 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e  ailable slots in
1bc70 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38   azVar[] */.  u8
1bc80 20 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20   iPkSortOrder;  
1bc90 20 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f          /* ASC o
1bca0 72 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47  r DESC for INTEG
1bcb0 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  ER PRIMARY KEY *
1bcc0 2f 0a 20 20 75 38 20 62 46 72 65 65 57 69 74 68  /.  u8 bFreeWith
1bcd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1bce0 20 54 72 75 65 20 69 66 20 70 57 69 74 68 20 73   True if pWith s
1bcf0 68 6f 75 6c 64 20 62 65 20 66 72 65 65 64 20 77  hould be freed w
1bd00 69 74 68 20 70 61 72 73 65 72 20 2a 2f 0a 20 20  ith parser */.  
1bd10 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20  u8 explain;     
1bd20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1bd30 65 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e  e if the EXPLAIN
1bd40 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f   flag is found o
1bd50 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23  n the query */.#
1bd60 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1bd70 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
1bd80 20 20 75 38 20 64 65 63 6c 61 72 65 56 74 61 62    u8 declareVtab
1bd90 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
1bda0 72 75 65 20 69 66 20 69 6e 73 69 64 65 20 73 71  rue if inside sq
1bdb0 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
1bdc0 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  ab() */.  int nV
1bdd0 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20  tabLock;        
1bde0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1bdf0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
1be00 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69  to lock */.#endi
1be10 66 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20  f.  int nAlias; 
1be20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1be30 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69 61 73   Number of alias
1be40 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f  ed result set co
1be50 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  lumns */.  int n
1be60 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
1be70 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
1be80 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f  on tree height o
1be90 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65  f current sub-se
1bea0 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20  lect */.#ifndef 
1beb0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
1bec0 41 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63  AIN.  int iSelec
1bed0 74 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  tId;            
1bee0 2f 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74  /* ID of current
1bef0 20 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c   select for EXPL
1bf00 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20  AIN output */.  
1bf10 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49  int iNextSelectI
1bf20 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  d;        /* Nex
1bf30 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65  t available sele
1bf40 63 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49  ct ID for EXPLAI
1bf50 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64  N output */.#end
1bf60 69 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61  if.  char **azVa
1bf70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
1bf80 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61  * Pointers to na
1bf90 6d 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72  mes of parameter
1bfa0 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65  s */.  Vdbe *pRe
1bfb0 70 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20  prepare;        
1bfc0 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70   /* VM being rep
1bfd0 72 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33  repared (sqlite3
1bfe0 52 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a  Reprepare()) */.
1bff0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
1c000 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ail;        /* A
1c010 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74  ll SQL text past
1c020 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f   the last semico
1c030 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  lon parsed */.  
1c040 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65  Table *pNewTable
1c050 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74  ;         /* A t
1c060 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74  able being const
1c070 72 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45  ructed by CREATE
1c080 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67   TABLE */.  Trig
1c090 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72  ger *pNewTrigger
1c0a0 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72  ;     /* Trigger
1c0b0 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74   under construct
1c0c0 20 62 79 20 61 20 43 52 45 41 54 45 20 54 52 49   by a CREATE TRI
1c0d0 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  GGER */.  const 
1c0e0 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
1c0f0 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70  xt; /* The 6th p
1c100 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e  arameter to db->
1c110 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20  xAuth callbacks 
1c120 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65  */.  Token sName
1c130 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f  Token;         /
1c140 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71  * Token with unq
1c150 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20  ualified schema 
1c160 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20  object name */. 
1c170 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65   Token sLastToke
1c180 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  n;         /* Th
1c190 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72  e last token par
1c1a0 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  sed */.#ifndef S
1c1b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
1c1c0 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20  ALTABLE.  Token 
1c1d0 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  sArg;           
1c1e0 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20      /* Complete 
1c1f0 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65  text of a module
1c200 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54   argument */.  T
1c210 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63  able **apVtabLoc
1c220 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  k;       /* Poin
1c230 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74  ter to virtual t
1c240 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f  ables needing lo
1c250 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  cking */.#endif.
1c260 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65    Table *pZombie
1c270 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  Tab;        /* L
1c280 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a  ist of Table obj
1c290 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61  ects to delete a
1c2a0 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f  fter code gen */
1c2b0 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70  .  TriggerPrg *p
1c2c0 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20  TriggerPrg;  /* 
1c2d0 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63  Linked list of c
1c2e0 6f 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f  oded triggers */
1c2f0 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20  .  With *pWith; 
1c300 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c310 43 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61  Current WITH cla
1c320 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  use, or NULL */.
1c330 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  };../*.** Return
1c340 20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74   true if current
1c350 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c  ly inside an sql
1c360 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
1c370 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66  b() call..*/.#if
1c380 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1c390 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23  VIRTUALTABLE.  #
1c3a0 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
1c3b0 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20  E_VTAB 0.#else. 
1c3c0 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
1c3d0 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65  ARE_VTAB (pParse
1c3e0 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23  ->declareVtab).#
1c3f0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
1c400 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
1c410 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1c420 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61  ure can be decla
1c430 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61  red on a stack a
1c440 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  nd used.** to sa
1c450 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75  ve the Parse.zAu
1c460 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20  thContext value 
1c470 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
1c480 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72  e restored later
1c490 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68  ..*/.struct Auth
1c4a0 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73  Context {.  cons
1c4b0 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
1c4c0 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73  text;   /* Put s
1c4d0 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68  aved Parse.zAuth
1c4e0 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a  Context here */.
1c4f0 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c510 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63   The Parse struc
1c520 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ture */.};../*.*
1c530 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73  * Bitfield flags
1c540 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e   for P5 value in
1c550 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73   various opcodes
1c560 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ..*/.#define OPF
1c570 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20  LAG_NCHANGE     
1c580 20 20 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74    0x01    /* Set
1c590 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e   to update db->n
1c5a0 43 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e  Change */.#defin
1c5b0 65 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20  e OPFLAG_EPHEM  
1c5c0 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
1c5d0 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68  * OP_Column: Eph
1c5e0 65 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73  emeral output is
1c5f0 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f   ok */.#define O
1c600 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
1c610 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53      0x02    /* S
1c620 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d  et to update db-
1c630 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64  >lastRowid */.#d
1c640 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55  efine OPFLAG_ISU
1c650 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20  PDATE      0x04 
1c660 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e     /* This OP_In
1c670 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55  sert is an sql U
1c680 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
1c690 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20   OPFLAG_APPEND  
1c6a0 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a        0x08    /*
1c6b0 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20   This is likely 
1c6c0 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20  to be an append 
1c6d0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1c6e0 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
1c6f0 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74  0x10    /* Try t
1c700 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69  o avoid a seek i
1c710 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20  n BtreeInsert() 
1c720 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1c730 47 5f 43 4c 45 41 52 43 41 43 48 45 20 20 20 20  G_CLEARCACHE    
1c740 30 78 32 30 20 20 20 20 2f 2a 20 43 6c 65 61 72  0x20    /* Clear
1c750 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 61   pseudo-table ca
1c760 63 68 65 20 69 6e 20 4f 50 5f 43 6f 6c 75 6d 6e  che in OP_Column
1c770 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1c780 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20  AG_LENGTHARG    
1c790 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43   0x40    /* OP_C
1c7a0 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20  olumn only used 
1c7b0 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a  for length() */.
1c7c0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54  #define OPFLAG_T
1c7d0 59 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38  YPEOFARG     0x8
1c7e0 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0    /* OP_Colum
1c7f0 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20  n only used for 
1c800 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66  typeof() */.#def
1c810 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  ine OPFLAG_BULKC
1c820 53 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20  SR       0x01   
1c830 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73   /* OP_Open** us
1c840 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20  ed to open bulk 
1c850 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  cursor */.#defin
1c860 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47  e OPFLAG_P2ISREG
1c870 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f         0x02    /
1c880 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a  * P2 to OP_Open*
1c890 2a 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  * is a register 
1c8a0 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e  number */.#defin
1c8b0 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
1c8c0 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
1c8d0 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73  * OP_Compare: us
1c8e0 65 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f  e the permutatio
1c8f0 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68  n */../*. * Each
1c900 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e 74   trigger present
1c910 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
1c920 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65   schema is store
1c930 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  d as an instance
1c940 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72   of. * struct Tr
1c950 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f  igger. . *. * Po
1c960 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e  inters to instan
1c970 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
1c980 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64  igger are stored
1c990 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a   in two ways.. *
1c9a0 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67   1. In the "trig
1c9b0 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65  Hash" hash table
1c9c0 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71   (part of the sq
1c9d0 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72  lite3* that repr
1c9e0 65 73 65 6e 74 73 20 74 68 65 20 0a 20 2a 20 20  esents the . *  
1c9f0 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69    database). Thi
1ca00 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72  s allows Trigger
1ca10 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62   structures to b
1ca20 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e  e retrieved by n
1ca30 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74  ame.. * 2. All t
1ca40 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74  riggers associat
1ca50 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ed with a single
1ca60 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69   table form a li
1ca70 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67  nked list, using
1ca80 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74   the. *    pNext
1ca90 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63   member of struc
1caa0 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69  t Trigger. A poi
1cab0 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73  nter to the firs
1cac0 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
1cad0 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69  . *    linked li
1cae0 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  st is stored as 
1caf0 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d  the "pTrigger" m
1cb00 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73  ember of the ass
1cb10 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74  ociated. *    st
1cb20 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20  ruct Table.. *. 
1cb30 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74  * The "step_list
1cb40 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20  " member points 
1cb50 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
1cb60 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64  ment of a linked
1cb70 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e   list. * contain
1cb80 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74  ing the SQL stat
1cb90 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64  ements specified
1cba0 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20   as the trigger 
1cbb0 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72  program.. */.str
1cbc0 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20  uct Trigger {.  
1cbd0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
1cbe0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
1cbf0 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67  ame of the trigg
1cc00 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20  er              
1cc10 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63            */.  c
1cc20 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20  har *table;     
1cc30 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61         /* The ta
1cc40 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77  ble or view to w
1cc50 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
1cc60 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38   applies */.  u8
1cc70 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
1cc80 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
1cc90 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
1cca0 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20  DATE, TK_INSERT 
1ccb0 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20          */.  u8 
1ccc0 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20  tr_tm;          
1ccd0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
1cce0 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54  RIGGER_BEFORE, T
1ccf0 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a  RIGGER_AFTER */.
1cd00 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20    Expr *pWhen;  
1cd10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1cd20 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
1cd30 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28  the expression (
1cd40 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a  may be NULL) */.
1cd50 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d    IdList *pColum
1cd60 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20  ns;       /* If 
1cd70 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54  this is an UPDAT
1cd80 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73  E OF <column-lis
1cd90 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20  t> trigger,.    
1cda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cdb0 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f           the <co
1cdc0 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74  lumn-list> is st
1cdd0 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53  ored here */.  S
1cde0 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
1cdf0 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61         /* Schema
1ce00 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1ce10 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68  trigger */.  Sch
1ce20 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b  ema *pTabSchema;
1ce30 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
1ce40 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61  ontaining the ta
1ce50 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ble */.  Trigger
1ce60 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b  Step *step_list;
1ce70 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66   /* Link list of
1ce80 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
1ce90 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20   steps          
1cea0 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20     */.  Trigger 
1ceb0 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
1cec0 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20  /* Next trigger 
1ced0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1cee0 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a  the table */.};.
1cef0 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72  ./*.** A trigger
1cf00 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46   is either a BEF
1cf10 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20  ORE or an AFTER 
1cf20 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f  trigger.  The fo
1cf30 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74  llowing constant
1cf40 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77  s.** determine w
1cf50 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20  hich. .**.** If 
1cf60 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70  there are multip
1cf70 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75  le triggers, you
1cf80 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42   might of some B
1cf90 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41  EFORE and some A
1cfa0 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74  FTER..** In that
1cfb0 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73   cases, the cons
1cfc0 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20  tants below can 
1cfd0 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72  be ORed together
1cfe0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49  ..*/.#define TRI
1cff0 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23  GGER_BEFORE  1.#
1d000 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41  define TRIGGER_A
1d010 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20  FTER   2../*. * 
1d020 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73  An instance of s
1d030 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
1d040 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  p is used to sto
1d050 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20  re a single SQL 
1d060 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61  statement. * tha
1d070 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61  t is a part of a
1d080 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
1d090 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63  . . *. * Instanc
1d0a0 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
1d0b0 67 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f  ggerStep are sto
1d0c0 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20  red in a singly 
1d0d0 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e  linked list (lin
1d0e0 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65  ked. * using the
1d0f0 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29   "pNext" member)
1d100 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74   referenced by t
1d110 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d  he "step_list" m
1d120 65 6d 62 65 72 20 6f 66 20 74 68 65 20 0a 20 2a  ember of the . *
1d130 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75   associated stru
1d140 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61  ct Trigger insta
1d150 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65  nce. The first e
1d160 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69  lement of the li
1d170 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20  nked list is. * 
1d180 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f  the first step o
1d190 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72  f the trigger-pr
1d1a0 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68  ogram.. * . * Th
1d1b0 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e  e "op" member in
1d1c0 64 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20  dicates whether 
1d1d0 74 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54  this is a "DELET
1d1e0 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55  E", "INSERT", "U
1d1f0 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45  PDATE" or. * "SE
1d200 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e  LECT" statement.
1d210 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   The meanings of
1d220 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65   the other membe
1d230 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  rs is determined
1d240 20 62 79 20 74 68 65 20 0a 20 2a 20 76 61 6c 75   by the . * valu
1d250 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c  e of "op" as fol
1d260 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20  lows:. *. * (op 
1d270 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a  == TK_INSERT). *
1d280 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74   orconf    -> st
1d290 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46  ores the ON CONF
1d2a0 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20  LICT algorithm. 
1d2b0 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49  * pSelect   -> I
1d2c0 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
1d2d0 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c  ERT INTO ... SEL
1d2e0 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e  ECT ... statemen
1d2f0 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20  t, then. *      
1d300 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f          this sto
1d310 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  res a pointer to
1d320 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
1d330 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65  ement. Otherwise
1d340 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72 67 65 74   NULL.. * target
1d350 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68      -> A token h
1d360 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65  olding the quote
1d370 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
1d380 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e  ble to insert in
1d390 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  to.. * pExprList
1d3a0 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
1d3b0 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
1d3c0 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61  . VALUES ... sta
1d3d0 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20  tement, then. * 
1d3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
1d3f0 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20  s stores values 
1d400 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20  to be inserted. 
1d410 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
1d420 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20   * pIdList   -> 
1d430 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
1d440 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c  SERT INTO ... (<
1d450 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56  column-names>) V
1d460 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20  ALUES ... . *   
1d470 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
1d480 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20  ment, then this 
1d490 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d  stores the colum
1d4a0 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a  n-names to be. *
1d4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
1d4c0 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a  serted into.. *.
1d4d0 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c   * (op == TK_DEL
1d4e0 45 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20  ETE). * target  
1d4f0 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c    -> A token hol
1d500 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20  ding the quoted 
1d510 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
1d520 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d  e to delete from
1d530 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
1d540 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
1d550 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45  se of the DELETE
1d560 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
1d570 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
1d580 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1d590 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
1d5a0 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b   * . * (op == TK
1d5b0 5f 55 50 44 41 54 45 29 0a 20 2a 20 74 61 72 67  _UPDATE). * targ
1d5c0 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e  et    -> A token
1d5d0 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f   holding the quo
1d5e0 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
1d5f0 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65 20  table to update 
1d600 72 6f 77 73 20 6f 66 2e 0a 20 2a 20 70 57 68 65  rows of.. * pWhe
1d610 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
1d620 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
1d630 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
1d640 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
1d650 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
1d660 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
1d670 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c   NULL.. * pExprL
1d680 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66  ist -> A list of
1d690 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20   the columns to 
1d6a0 75 70 64 61 74 65 20 61 6e 64 20 74 68 65 20 65  update and the e
1d6b0 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70  xpressions to up
1d6c0 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20  date. *         
1d6d0 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65       them to. Se
1d6e0 65 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28  e sqlite3Update(
1d6f0 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  ) documentation 
1d700 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a  of "pChanges". *
1d710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
1d720 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a  gument.. * . */.
1d730 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
1d740 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20  ep {.  u8 op;   
1d750 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1d760 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c  ne of TK_DELETE,
1d770 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
1d780 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54  NSERT, TK_SELECT
1d790 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b   */.  u8 orconf;
1d7a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45             /* OE
1d7b0 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a  _Rollback etc. *
1d7c0 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  /.  Trigger *pTr
1d7d0 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ig;      /* The 
1d7e0 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68 69  trigger that thi
1d7f0 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72 74  s step is a part
1d800 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20   of */.  Select 
1d810 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
1d820 20 53 45 4c 45 43 54 20 73 74 61 74 6d 65 6e 74   SELECT statment
1d830 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52   or RHS of INSER
1d840 54 20 49 4e 54 4f 20 2e 2e 20 53 45 4c 45 43 54  T INTO .. SELECT
1d850 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20   ... */.  Token 
1d860 74 61 72 67 65 74 3b 20 20 20 20 20 20 20 20 2f  target;        /
1d870 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66  * Target table f
1d880 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54  or DELETE, UPDAT
1d890 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45  E, INSERT */.  E
1d8a0 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
1d8b0 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
1d8c0 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45   clause for DELE
1d8d0 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65  TE or UPDATE ste
1d8e0 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ps */.  ExprList
1d8f0 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20   *pExprList; /* 
1d900 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55  SET clause for U
1d910 50 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c 69  PDATE. */.  IdLi
1d920 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20  st *pIdList;    
1d930 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73   /* Column names
1d940 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20   for INSERT */. 
1d950 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e   TriggerStep *pN
1d960 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e  ext;  /* Next in
1d970 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a   the link-list *
1d980 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
1d990 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74  *pLast;  /* Last
1d9a0 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b   element in link
1d9b0 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72  -list. Valid for
1d9c0 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a   1st elem only *
1d9d0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
1d9e0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1d9f0 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ure contains inf
1da00 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79  ormation used by
1da10 20 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e   the sqliteFix..
1da20 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73  ..** routines as
1da30 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70   they walk the p
1da40 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b  arse tree to mak
1da50 65 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72  e database refer
1da60 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69  ences.** explici
1da70 74 2e 20 20 0a 2a 2f 0a 74 79 70 65 64 65 66 20  t.  .*/.typedef 
1da80 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20 44  struct DbFixer D
1da90 62 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44  bFixer;.struct D
1daa0 62 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65  bFixer {.  Parse
1dab0 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f   *pParse;      /
1dac0 2a 20 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f  * The parsing co
1dad0 6e 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65  ntext.  Error me
1dae0 73 73 61 67 65 73 20 77 72 69 74 74 65 6e 20 68  ssages written h
1daf0 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ere */.  Schema 
1db00 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20  *pSchema;    /* 
1db10 46 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69  Fix items to thi
1db20 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e  s schema */.  in
1db30 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20  t bVarOnly;     
1db40 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76    /* Check for v
1db50 61 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63  ariable referenc
1db60 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e  es only */.  con
1db70 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20  st char *zDb;   
1db80 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c   /* Make sure al
1db90 6c 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f  l objects are co
1dba0 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20  ntained in this 
1dbb0 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f  database */.  co
1dbc0 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b  nst char *zType;
1dbd0 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65    /* Type of the
1dbe0 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65   container - use
1dbf0 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73  d for error mess
1dc00 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ages */.  const 
1dc10 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a  Token *pName; /*
1dc20 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e   Name of the con
1dc30 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
1dc40 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
1dc50 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
1dc60 20 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20 74   objected used t
1dc70 6f 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65  o accumulate the
1dc80 20 74 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e   text of a strin
1dc90 67 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f  g where we.** do
1dca0 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79   not necessarily
1dcb0 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68   know how big th
1dcc0 65 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65  e string will be
1dcd0 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a   in the end..*/.
1dce0 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20  struct StrAccum 
1dcf0 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
1dd00 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69           /* Opti
1dd10 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f  onal database fo
1dd20 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61  r lookaside.  Ca
1dd30 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  n be NULL */.  c
1dd40 68 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20  har *zBase;     
1dd50 20 20 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c      /* A base al
1dd60 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66  location.  Not f
1dd70 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20  rom malloc. */. 
1dd80 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20   char *zText;   
1dd90 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72        /* The str
1dda0 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f  ing collected so
1ddb0 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e   far */.  int  n
1ddc0 43 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Char;          /
1ddd0 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  * Length of the 
1dde0 73 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f  string so far */
1ddf0 0a 20 20 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20  .  int  nAlloc; 
1de00 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e          /* Amoun
1de10 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63  t of space alloc
1de20 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f  ated in zText */
1de30 0a 20 20 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b  .  int  mxAlloc;
1de40 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
1de50 75 6d 20 61 6c 6c 6f 77 65 64 20 73 74 72 69 6e  um allowed strin
1de60 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 75 38  g length */.  u8
1de70 20 20 20 75 73 65 4d 61 6c 6c 6f 63 3b 20 20 20     useMalloc;   
1de80 20 20 20 2f 2a 20 30 3a 20 6e 6f 6e 65 2c 20 20     /* 0: none,  
1de90 31 3a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  1: sqlite3DbMall
1dea0 6f 63 2c 20 20 32 3a 20 73 71 6c 69 74 65 33 5f  oc,  2: sqlite3_
1deb0 6d 61 6c 6c 6f 63 20 2a 2f 0a 20 20 75 38 20 20  malloc */.  u8  
1dec0 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20   accError;      
1ded0 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d   /* STRACCUM_NOM
1dee0 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54  EM or STRACCUM_T
1def0 4f 4f 42 49 47 20 2a 2f 0a 7d 3b 0a 23 64 65 66  OOBIG */.};.#def
1df00 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d  ine STRACCUM_NOM
1df10 45 4d 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53  EM   1.#define S
1df20 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20  TRACCUM_TOOBIG  
1df30 32 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74  2../*.** A point
1df40 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  er to this struc
1df50 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
1df60 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f  communicate info
1df70 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20  rmation.** from 
1df80 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20  sqlite3Init and 
1df90 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69  OP_ParseSchema i
1dfa0 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49  nto the sqlite3I
1dfb0 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a  nitCallback..*/.
1dfc0 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b  typedef struct {
1dfd0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
1dfe0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
1dff0 74 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69  tabase being ini
1e000 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68  tialized */.  ch
1e010 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20  ar **pzErrMsg;  
1e020 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61    /* Error messa
1e030 67 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  ge stored here *
1e040 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
1e050 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72          /* 0 for
1e060 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20   main database. 
1e070 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e   1 for TEMP, 2..
1e080 20 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f   for ATTACHed */
1e090 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
1e0a0 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
1e0b0 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72   code stored her
1e0c0 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b  e */.} InitData;
1e0d0 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72  ../*.** Structur
1e0e0 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f  e containing glo
1e0f0 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  bal configuratio
1e100 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 53  n data for the S
1e110 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a  QLite library..*
1e120 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
1e130 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e  ure also contain
1e140 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66  s some state inf
1e150 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  ormation..*/.str
1e160 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
1e170 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74  g {.  int bMemst
1e180 61 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  at;             
1e190 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1e1a0 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79  to enable memory
1e1b0 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74   status */.  int
1e1c0 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20   bCoreMutex;    
1e1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e1e0 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
1e1f0 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a   core mutexing *
1e200 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74  /.  int bFullMut
1e210 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
1e220 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1e230 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74   enable full mut
1e240 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62  exing */.  int b
1e250 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20  OpenUri;        
1e260 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e270 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65  True to interpre
1e280 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55  t filenames as U
1e290 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73  RIs */.  int bUs
1e2a0 65 43 69 73 3b 20 20 20 20 20 20 20 20 20 20 20  eCis;           
1e2b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
1e2c0 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63  e covering indic
1e2d0 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e  es for full-scan
1e2e0 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72  s */.  int mxStr
1e2f0 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  len;            
1e300 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
1e310 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74  mum string lengt
1e320 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72  h */.  int never
1e330 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20 20  Corrupt;        
1e340 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
1e350 62 61 73 65 20 69 73 20 61 6c 77 61 79 73 20 77  base is always w
1e360 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20  ell-formed */.  
1e370 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b  int szLookaside;
1e380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e390 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f    /* Default loo
1e3a0 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69  kaside buffer si
1e3b0 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f  ze */.  int nLoo
1e3c0 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
1e3d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1e3e0 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62  ault lookaside b
1e3f0 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20  uffer count */. 
1e400 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
1e410 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20  hods m;         
1e420 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
1e430 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
1e440 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  n interface */. 
1e450 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
1e460 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20  ethods mutex;   
1e470 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
1e480 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20  mutex interface 
1e490 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61  */.  sqlite3_pca
1e4a0 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61  che_methods2 pca
1e4b0 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65  che2;  /* Low-le
1e4c0 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69  vel page-cache i
1e4d0 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f  nterface */.  vo
1e4e0 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20  id *pHeap;      
1e4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e500 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20  /* Heap storage 
1e510 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
1e520 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
1e530 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e540 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20  Size of pHeap[] 
1e550 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20  */.  int mnReq, 
1e560 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20  mxReq;          
1e570 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e         /* Min an
1e580 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65  d max heap reque
1e590 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73  sts sizes */.  s
1e5a0 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d  qlite3_int64 szM
1e5b0 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
1e5c0 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65   /* mmap() space
1e5d0 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a   per open file *
1e5e0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  /.  sqlite3_int6
1e5f0 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 mxMmap;       
1e600 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
1e610 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61   value for szMma
1e620 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63  p */.  void *pSc
1e630 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
1e640 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61           /* Scra
1e650 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  tch memory */.  
1e660 69 6e 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20  int szScratch;  
1e670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e680 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
1e690 68 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72  h scratch buffer
1e6a0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74   */.  int nScrat
1e6b0 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ch;             
1e6c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1e6d0 72 20 6f 66 20 73 63 72 61 74 63 68 20 62 75 66  r of scratch buf
1e6e0 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  fers */.  void *
1e6f0 70 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  pPage;          
1e700 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
1e710 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79  age cache memory
1e720 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65   */.  int szPage
1e730 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e740 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
1e750 6f 66 20 65 61 63 68 20 70 61 67 65 20 69 6e 20  of each page in 
1e760 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pPage[] */.  int
1e770 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20 20   nPage;         
1e780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e790 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * Number of page
1e7a0 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a  s in pPage[] */.
1e7b0 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74    int mxParserSt
1e7c0 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ack;            
1e7d0 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64      /* maximum d
1e7e0 65 70 74 68 20 6f 66 20 74 68 65 20 70 61 72 73  epth of the pars
1e7f0 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e  er stack */.  in
1e800 74 20 73 68 61 72 65 64 43 61 63 68 65 45 6e 61  t sharedCacheEna
1e810 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  bled;           
1e820 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61 72 65  /* true if share
1e830 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61  d-cache mode ena
1e840 62 6c 65 64 20 2a 2f 0a 20 20 2f 2a 20 54 68 65  bled */.  /* The
1e850 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20   above might be 
1e860 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e  initialized to n
1e870 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f  on-zero.  The fo
1e880 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20  llowing need to 
1e890 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74  always.  ** init
1e8a0 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68  ially be zero, h
1e8b0 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74  owever. */.  int
1e8c0 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20   isInit;        
1e8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e8e0 2a 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69  * True after ini
1e8f0 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20  tialization has 
1e900 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e  finished */.  in
1e910 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20  t inProgress;   
1e920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e930 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e  /* True while in
1e940 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20  itialization in 
1e950 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e  progress */.  in
1e960 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20  t isMutexInit;  
1e970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e980 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75  /* True after mu
1e990 74 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61  texes are initia
1e9a0 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  lized */.  int i
1e9b0 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20  sMallocInit;    
1e9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e9d0 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f  True after mallo
1e9e0 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  c is initialized
1e9f0 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63   */.  int isPCac
1ea00 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  heInit;         
1ea10 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1ea20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20  after malloc is 
1ea30 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
1ea40 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74   int nRefInitMut
1ea50 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
1ea60 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1ea70 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75  users of pInitMu
1ea80 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  tex */.  sqlite3
1ea90 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74  _mutex *pInitMut
1eaa0 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75  ex;        /* Mu
1eab0 74 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69  tex used by sqli
1eac0 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29  te3_initialize()
1ead0 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f   */.  void (*xLo
1eae0 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  g)(void*,int,con
1eaf0 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75  st char*); /* Fu
1eb00 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69  nction for loggi
1eb10 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c  ng */.  void *pL
1eb20 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ogArg;          
1eb30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1eb40 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
1eb50 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64  o xLog() */.#ifd
1eb60 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1eb70 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a  _SQLLOG.  void(*
1eb80 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73  xSqllog)(void*,s
1eb90 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1eba0 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  ar*, int);.  voi
1ebb0 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23  d *pSqllogArg;.#
1ebc0 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
1ebd0 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  ITE_VDBE_COVERAG
1ebe0 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  E.  /* The follo
1ebf0 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69  wing callback (i
1ec00 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69  f not NULL) is i
1ec10 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20  nvoked on every 
1ec20 56 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a  VDBE branch.  **
1ec30 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74   operation.  Set
1ec40 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73   the callback us
1ec50 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ing SQLITE_TESTC
1ec60 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  TRL_VDBE_COVERAG
1ec70 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28  E..  */.  void (
1ec80 2a 78 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f  *xVdbeBranch)(vo
1ec90 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65  id*,int iSrcLine
1eca0 2c 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78  ,u8 eThis,u8 eMx
1ecb0 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  );  /* Callback 
1ecc0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65  */.  void *pVdbe
1ecd0 42 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20  BranchArg;      
1ece0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ed00 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a  * 1st argument *
1ed10 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
1ed20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
1ed30 4c 54 49 4e 5f 54 45 53 54 0a 20 20 69 6e 74 20  LTIN_TEST.  int 
1ed40 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29  (*xTestCallback)
1ed50 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a  (int);        /*
1ed60 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69   Invoked by sqli
1ed70 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f  te3FaultSim() */
1ed80 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c  .#endif.  int bL
1ed90 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20  ocaltimeFault;  
1eda0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1edb0 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61  rue to fail loca
1edc0 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f  ltime() calls */
1edd0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  .};../*.** This 
1ede0 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
1edf0 73 69 64 65 20 6f 66 20 61 73 73 65 72 74 28 29  side of assert()
1ee00 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69   statements to i
1ee10 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20  ndicate that.** 
1ee20 74 68 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e  the assert is on
1ee30 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65  ly valid on a we
1ee40 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61  ll-formed databa
1ee50 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a  se.  Instead of:
1ee60 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72  .**.**     asser
1ee70 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e  t( X );.**.** On
1ee80 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20  e writes:.**.** 
1ee90 20 20 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c      assert( X ||
1eea0 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a   CORRUPT_DB );.*
1eeb0 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20  *.** CORRUPT_DB 
1eec0 69 73 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e  is true during n
1eed0 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e  ormal operation.
1eee0 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65    CORRUPT_DB doe
1eef0 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a  s not indicate.*
1ef00 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61 62  * that the datab
1ef10 61 73 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c  ase is definitel
1ef20 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20  y corrupt, only 
1ef30 74 68 61 74 20 69 74 20 6d 69 67 68 74 20 62 65  that it might be
1ef40 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72   corrupt..** For
1ef50 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65 73   most test cases
1ef60 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20  , CORRUPT_DB is 
1ef70 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69  set to false usi
1ef80 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20  ng a special.** 
1ef90 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e  sqlite3_test_con
1efa0 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e  trol().  This en
1efb0 61 62 6c 65 73 20 61 73 73 65 72 74 28 29 20 73  ables assert() s
1efc0 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f  tatements to pro
1efd0 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61  ve.** things tha
1efe0 74 20 61 72 65 20 61 6c 77 61 79 73 20 74 72 75  t are always tru
1eff0 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65  e for well-forme
1f000 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a  d databases..*/.
1f010 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f  #define CORRUPT_
1f020 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66  DB  (sqlite3Conf
1f030 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d  ig.neverCorrupt=
1f040 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65  =0)../*.** Conte
1f050 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65  xt pointer passe
1f060 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74  d down through t
1f070 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f  he tree-walk..*/
1f080 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b  .struct Walker {
1f090 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61  .  int (*xExprCa
1f0a0 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
1f0b0 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20   Expr*);     /* 
1f0c0 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70  Callback for exp
1f0d0 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  ressions */.  in
1f0e0 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62  t (*xSelectCallb
1f0f0 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c  ack)(Walker*,Sel
1f100 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62  ect*);  /* Callb
1f110 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
1f120 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c  */.  void (*xSel
1f130 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61  ectCallback2)(Wa
1f140 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f  lker*,Select*);/
1f150 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63  * Second callbac
1f160 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f  k for SELECTs */
1f170 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
1f180 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f190 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f1a0 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  Parser context. 
1f1b0 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72   */.  int walker
1f1c0 44 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20  Depth;          
1f1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1e0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62  /* Number of sub
1f1f0 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 6e 69  queries */.  uni
1f200 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  on {            
1f210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f220 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20         /* Extra 
1f230 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63  data for callbac
1f240 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e  k */.    NameCon
1f250 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20  text *pNC;      
1f260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f270 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f      /* Naming co
1f280 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74  ntext */.    int
1f290 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
1f2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2b0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67          /* Integ
1f2c0 65 72 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20  er value */.    
1f2d0 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73  SrcList *pSrcLis
1f2e0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1f2f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52             /* FR
1f300 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  OM clause */.   
1f310 20 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74   struct SrcCount
1f320 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20   *pSrcCount;    
1f330 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1f340 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72  ounting column r
1f350 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d  eferences */.  }
1f360 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61   u;.};../* Forwa
1f370 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  rd declarations 
1f380 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  */.int sqlite3Wa
1f390 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  lkExpr(Walker*, 
1f3a0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
1f3b0 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28  te3WalkExprList(
1f3c0 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73  Walker*, ExprLis
1f3d0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1f3e0 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65  WalkSelect(Walke
1f3f0 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
1f400 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
1f410 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  ectExpr(Walker*,
1f420 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
1f430 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
1f440 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65  From(Walker*, Se
1f450 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52  lect*);../*.** R
1f460 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20  eturn code from 
1f470 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77  the parse-tree w
1f480 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65  alking primitive
1f490 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63  s and their.** c
1f4a0 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65  allbacks..*/.#de
1f4b0 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75  fine WRC_Continu
1f4c0 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74  e    0   /* Cont
1f4d0 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63  inue down into c
1f4e0 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69  hildren */.#defi
1f4f0 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20  ne WRC_Prune    
1f500 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63     1   /* Omit c
1f510 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74  hildren but cont
1f520 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62  inue walking sib
1f530 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65  lings */.#define
1f540 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20   WRC_Abort      
1f550 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20   2   /* Abandon 
1f560 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f  the tree walk */
1f570 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1f580 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
1f590 63 74 75 72 65 20 72 65 70 72 65 73 65 6e 74 73  cture represents
1f5a0 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72   a set of one or
1f5b0 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63   more CTEs.** (c
1f5c0 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
1f5d0 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64  essions) created
1f5e0 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54   by a single WIT
1f5f0 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72  H clause..*/.str
1f600 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74  uct With {.  int
1f610 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20 20   nCte;          
1f620 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f630 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69  Number of CTEs i
1f640 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73  n the WITH claus
1f650 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75  e */.  With *pOu
1f660 74 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ter;            
1f670 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69         /* Contai
1f680 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65  ning WITH clause
1f690 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73  , or NULL */.  s
1f6a0 74 72 75 63 74 20 43 74 65 20 7b 20 20 20 20 20  truct Cte {     
1f6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f6c0 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45 20 69  * For each CTE i
1f6d0 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73  n the WITH claus
1f6e0 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61  e.... */.    cha
1f6f0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
1f700 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f710 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45  Name of this CTE
1f720 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74   */.    ExprList
1f730 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20   *pCols;        
1f740 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
1f750 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75  of explicit colu
1f760 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c  mn names, or NUL
1f770 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  L */.    Select 
1f780 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20  *pSelect;       
1f790 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1f7a0 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68  definition of th
1f7b0 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f  is CTE */.    co
1f7c0 6e 73 74 20 63 68 61 72 20 2a 7a 45 72 72 3b 20  nst char *zErr; 
1f7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f7e0 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66   Error message f
1f7f0 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65 66 65  or circular refe
1f800 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b  rences */.  } a[
1f810 31 5d 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 73  1];.};../*.** As
1f820 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74  suming zIn point
1f830 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  s to the first b
1f840 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63  yte of a UTF-8 c
1f850 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76  haracter,.** adv
1f860 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e  ance zIn to poin
1f870 74 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  t to the first b
1f880 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20  yte of the next 
1f890 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e  UTF-8 character.
1f8a0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
1f8b0 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e  TE_SKIP_UTF8(zIn
1f8c0 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  ) {             
1f8d0 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69             \.  i
1f8e0 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30  f( (*(zIn++))>=0
1f8f0 78 63 30 20 29 7b 20 20 20 20 20 20 20 20 20 20  xc0 ){          
1f900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f910 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28      \.    while(
1f920 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d   (*zIn & 0xc0)==
1f930 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d  0x80 ){ zIn++; }
1f940 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
1f950 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20   }              
1f960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f980 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a        \.}../*.**
1f990 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b   The SQLITE_*_BK
1f9a0 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75  PT macros are su
1f9b0 62 73 74 69 74 75 74 65 73 20 66 6f 72 20 74 68  bstitutes for th
1f9c0 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69  e error codes wi
1f9d0 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e  th.** the same n
1f9e0 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74 20  ame but without 
1f9f0 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78  the _BKPT suffix
1fa00 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  .  These macros 
1fa10 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e  invoke.** routin
1fa20 65 73 20 74 68 61 74 20 72 65 70 6f 72 74 20 74  es that report t
1fa30 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f  he line-number o
1fa40 6e 20 77 68 69 63 68 20 74 68 65 20 65 72 72 6f  n which the erro
1fa50 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20  r originated.** 
1fa60 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f  using sqlite3_lo
1fa70 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e  g().  The routin
1fa80 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20  es also provide 
1fa90 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61  a convenient pla
1faa0 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64  ce.** to set a d
1fab0 65 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69  ebugger breakpoi
1fac0 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
1fad0 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69  e3CorruptError(i
1fae0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1faf0 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29  MisuseError(int)
1fb00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e  ;.int sqlite3Can
1fb10 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b  topenError(int);
1fb20 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
1fb30 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c  CORRUPT_BKPT sql
1fb40 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72  ite3CorruptError
1fb50 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69  (__LINE__).#defi
1fb60 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  ne SQLITE_MISUSE
1fb70 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73  _BKPT sqlite3Mis
1fb80 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  useError(__LINE_
1fb90 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  _).#define SQLIT
1fba0 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20  E_CANTOPEN_BKPT 
1fbb0 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45  sqlite3CantopenE
1fbc0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a  rror(__LINE__)..
1fbd0 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72  ./*.** FTS4 is r
1fbe0 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69  eally an extensi
1fbf0 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74  on for FTS3.  It
1fc00 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e   is enabled usin
1fc10 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f  g the.** SQLITE_
1fc20 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72  ENABLE_FTS3 macr
1fc30 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64  o.  But to avoid
1fc40 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c   confusion we al
1fc50 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53  so call.** the S
1fc60 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1fc70 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65  4 macro to serve
1fc80 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   as an alias for
1fc90 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
1fca0 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  TS3..*/.#if defi
1fcb0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
1fcc0 45 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69  E_FTS4) && !defi
1fcd0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
1fce0 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65  E_FTS3).# define
1fcf0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
1fd00 54 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  TS3.#endif../*.*
1fd10 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65  * The ctype.h he
1fd20 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66  ader is needed f
1fd30 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73  or non-ASCII sys
1fd40 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73  tems.  It is als
1fd50 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46  o.** needed by F
1fd60 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73  TS3 when FTS3 is
1fd70 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65   included in the
1fd80 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a   amalgamation..*
1fd90 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
1fda0 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20  QLITE_ASCII) || 
1fdb0 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53  \.    (defined(S
1fdc0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1fdd0 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  3) && defined(SQ
1fde0 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
1fdf0 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63  N)).# include <c
1fe00 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a  type.h>.#endif..
1fe10 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
1fe20 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63  ing macros mimic
1fe30 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69   the standard li
1fe40 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20  brary functions 
1fe50 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73  toupper(),.** is
1fe60 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d  space(), isalnum
1fe70 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e  (), isdigit() an
1fe80 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65  d isxdigit(), re
1fe90 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a  spectively. The.
1fea0 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f  ** sqlite versio
1feb0 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72  ns only work for
1fec0 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
1fed0 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  s, regardless of
1fee0 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64   locale..*/.#ifd
1fef0 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a  ef SQLITE_ASCII.
1ff00 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1ff10 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29  Toupper(x)  ((x)
1ff20 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d  &~(sqlite3CtypeM
1ff30 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
1ff40 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20  r)(x)]&0x20)).# 
1ff50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1ff60 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69  space(x)   (sqli
1ff70 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
1ff80 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
1ff90 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73  0x01).# define s
1ffa0 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29  qlite3Isalnum(x)
1ffb0 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
1ffc0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
1ffd0 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20  ar)(x)]&0x06).# 
1ffe0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1fff0 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69  alpha(x)   (sqli
20000 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
20010 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
20020 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73  0x02).# define s
20030 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
20040 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
20050 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
20060 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20  ar)(x)]&0x04).# 
20070 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
20080 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69  xdigit(x)  (sqli
20090 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
200a0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
200b0 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73  0x08).# define s
200c0 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29  qlite3Tolower(x)
200d0 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72     (sqlite3Upper
200e0 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65  ToLower[(unsigne
200f0 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65 6c  d char)(x)]).#el
20100 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
20110 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20  te3Toupper(x)   
20120 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65  toupper((unsigne
20130 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
20140 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
20150 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65  ace(x)   isspace
20160 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
20170 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
20180 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
20190 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67    isalnum((unsig
201a0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
201b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
201c0 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70  alpha(x)   isalp
201d0 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ha((unsigned cha
201e0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
201f0 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
20200 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73  )   isdigit((uns
20210 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
20220 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20230 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78  Isxdigit(x)  isx
20240 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20  digit((unsigned 
20250 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
20260 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  ne sqlite3Tolowe
20270 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28  r(x)   tolower((
20280 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
20290 29 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  )).#endif.int sq
202a0 6c 69 74 65 33 49 73 49 64 43 68 61 72 28 75 38  lite3IsIdChar(u8
202b0 29 3b 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e  );../*.** Intern
202c0 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74  al function prot
202d0 6f 74 79 70 65 73 0a 2a 2f 0a 23 64 65 66 69 6e  otypes.*/.#defin
202e0 65 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  e sqlite3StrICmp
202f0 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70   sqlite3_stricmp
20300 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c  .int sqlite3Strl
20310 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a  en30(const char*
20320 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  );.#define sqlit
20330 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74  e3StrNICmp sqlit
20340 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74  e3_strnicmp..int
20350 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e   sqlite3MallocIn
20360 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  it(void);.void s
20370 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28  qlite3MallocEnd(
20380 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  void);.void *sql
20390 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b  ite3Malloc(u64);
203a0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
203b0 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76  llocZero(u64);.v
203c0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
203d0 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33  llocZero(sqlite3
203e0 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
203f0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
20400 77 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  w(sqlite3*, u64)
20410 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
20420 62 53 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a  bStrDup(sqlite3*
20430 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63  ,const char*);.c
20440 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74  har *sqlite3DbSt
20450 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63  rNDup(sqlite3*,c
20460 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34 29  onst char*, u64)
20470 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52  ;.void *sqlite3R
20480 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36  ealloc(void*, u6
20490 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
204a0 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65  3DbReallocOrFree
204b0 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64  (sqlite3 *, void
204c0 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a   *, u64);.void *
204d0 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63  sqlite3DbRealloc
204e0 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64  (sqlite3 *, void
204f0 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 73   *, u64);.void s
20500 71 6c 69 74 65 33 44 62 46 72 65 65 28 73 71 6c  qlite3DbFree(sql
20510 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69  ite3*, void*);.i
20520 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  nt sqlite3Malloc
20530 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74  Size(void*);.int
20540 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
20550 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76  Size(sqlite3*, v
20560 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  oid*);.void *sql
20570 69 74 65 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f  ite3ScratchMallo
20580 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  c(int);.void sql
20590 69 74 65 33 53 63 72 61 74 63 68 46 72 65 65 28  ite3ScratchFree(
205a0 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71  void*);.void *sq
205b0 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28  lite3PageMalloc(
205c0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
205d0 65 33 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a  e3PageFree(void*
205e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
205f0 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69  emSetDefault(voi
20600 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
20610 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b  BenignMallocHook
20620 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29  s(void (*)(void)
20630 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29  , void (*)(void)
20640 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65  );.int sqlite3He
20650 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69  apNearlyFull(voi
20660 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79  d);../*.** On sy
20670 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65  stems with ample
20680 20 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64   stack space and
20690 20 74 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c   that support al
206a0 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20  loca(), make.** 
206b0 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20  use of alloca() 
206c0 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20  to obtain space 
206d0 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61  for large automa
206e0 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79  tic objects.  By
206f0 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74   default,.** obt
20700 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d  ain space from m
20710 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54  alloc()..**.** T
20720 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74  he alloca() rout
20730 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e  ine never return
20740 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69  s NULL.  This wi
20750 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70 61  ll cause code pa
20760 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c  ths.** that deal
20770 20 77 69 74 68 20 73 71 6c 69 74 65 33 53 74 61   with sqlite3Sta
20780 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72  ckAlloc() failur
20790 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68  es to be unreach
207a0 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  able..*/.#ifdef 
207b0 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43  SQLITE_USE_ALLOC
207c0 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  A.# define sqlit
207d0 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28  e3StackAllocRaw(
207e0 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29  D,N)   alloca(N)
207f0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20800 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28  3StackAllocZero(
20810 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c  D,N)  memset(all
20820 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20  oca(N), 0, N).# 
20830 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
20840 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20  ackFree(D,P)    
20850 20 20 20 0a 23 65 6c 73 65 0a 23 20 64 65 66 69     .#else.# defi
20860 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
20870 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73  llocRaw(D,N)   s
20880 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
20890 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  w(D,N).# define 
208a0 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
208b0 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69  cZero(D,N)  sqli
208c0 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
208d0 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  D,N).# define sq
208e0 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44  lite3StackFree(D
208f0 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69 74 65  ,P)       sqlite
20900 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e  3DbFree(D,P).#en
20910 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
20920 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
20930 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f  3.const sqlite3_
20940 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c  mem_methods *sql
20950 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73  ite3MemGetMemsys
20960 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  3(void);.#endif.
20970 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
20980 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e  ABLE_MEMSYS5.con
20990 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  st sqlite3_mem_m
209a0 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d  ethods *sqlite3M
209b0 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69  emGetMemsys5(voi
209c0 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66  d);.#endif...#if
209d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45  ndef SQLITE_MUTE
209e0 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33  X_OMIT.  sqlite3
209f0 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
20a00 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66  onst *sqlite3Def
20a10 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b  aultMutex(void);
20a20 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
20a30 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a  _methods const *
20a40 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78  sqlite3NoopMutex
20a50 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65  (void);.  sqlite
20a60 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33  3_mutex *sqlite3
20a70 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b  MutexAlloc(int);
20a80 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  .  int sqlite3Mu
20a90 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20  texInit(void);. 
20aa0 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65   int sqlite3Mute
20ab0 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64  xEnd(void);.#end
20ac0 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  if..int sqlite3S
20ad0 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b  tatusValue(int);
20ae0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
20af0 74 75 73 41 64 64 28 69 6e 74 2c 20 69 6e 74 29  tusAdd(int, int)
20b00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
20b10 61 74 75 73 53 65 74 28 69 6e 74 2c 20 69 6e 74  atusSet(int, int
20b20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
20b30 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
20b40 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c  _POINT.  int sql
20b50 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65  ite3IsNaN(double
20b60 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
20b70 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58  e sqlite3IsNaN(X
20b80 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  )  0.#endif../*.
20b90 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
20ba0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
20bb0 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
20bc0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
20bd0 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f  t SQL.** functio
20be0 6e 73 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61  ns arguments tha
20bf0 74 20 61 72 65 20 74 68 65 20 70 61 72 61 6d 65  t are the parame
20c00 74 65 72 73 20 74 6f 20 74 68 65 20 70 72 69 6e  ters to the prin
20c10 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  tf() function..*
20c20 2f 0a 73 74 72 75 63 74 20 50 72 69 6e 74 66 41  /.struct PrintfA
20c30 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74  rguments {.  int
20c40 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20   nArg;          
20c50 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e        /* Total n
20c60 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
20c70 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65  ts */.  int nUse
20c80 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
20c90 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
20ca0 67 75 6d 65 6e 74 73 20 75 73 65 64 20 73 6f 20  guments used so 
20cb0 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  far */.  sqlite3
20cc0 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20  _value **apArg; 
20cd0 20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e    /* The argumen
20ce0 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a  t values */.};..
20cf0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
20d00 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30  RINTF_INTERNAL 0
20d10 78 30 31 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  x01.#define SQLI
20d20 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e  TE_PRINTF_SQLFUN
20d30 43 20 20 30 78 30 32 0a 76 6f 69 64 20 73 71 6c  C  0x02.void sql
20d40 69 74 65 33 56 58 50 72 69 6e 74 66 28 53 74 72  ite3VXPrintf(Str
20d50 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e  Accum*, u32, con
20d60 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73  st char*, va_lis
20d70 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
20d80 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d  XPrintf(StrAccum
20d90 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68  *, u32, const ch
20da0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20  ar*, ...);.char 
20db0 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28  *sqlite3MPrintf(
20dc0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
20dd0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72  har*, ...);.char
20de0 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74   *sqlite3VMPrint
20df0 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
20e00 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29   char*, va_list)
20e10 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d  ;.char *sqlite3M
20e20 41 70 70 65 6e 64 66 28 73 71 6c 69 74 65 33 2a  Appendf(sqlite3*
20e30 2c 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61  ,char*,const cha
20e40 72 2a 2c 2e 2e 2e 29 3b 0a 23 69 66 20 64 65 66  r*,...);.#if def
20e50 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
20e60 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
20e70 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69  ITE_DEBUG).  voi
20e80 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72  d sqlite3DebugPr
20e90 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a  intf(const char*
20ea0 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23  , ...);.#endif.#
20eb0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
20ec0 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a  E_TEST).  void *
20ed0 73 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54  sqlite3TestTextT
20ee0 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a  oPtr(const char*
20ef0 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 75  );.#endif../* Ou
20f00 74 70 75 74 20 66 6f 72 6d 61 74 74 69 6e 67 20  tput formatting 
20f10 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 53 54 43  for SQLITE_TESTC
20f20 54 52 4c 5f 45 58 50 4c 41 49 4e 20 2a 2f 0a 23  TRL_EXPLAIN */.#
20f30 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
20f40 45 5f 45 4e 41 42 4c 45 5f 54 52 45 45 5f 45 58  E_ENABLE_TREE_EX
20f50 50 4c 41 49 4e 29 0a 20 20 76 6f 69 64 20 73 71  PLAIN).  void sq
20f60 6c 69 74 65 33 45 78 70 6c 61 69 6e 42 65 67 69  lite3ExplainBegi
20f70 6e 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64  n(Vdbe*);.  void
20f80 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50   sqlite3ExplainP
20f90 72 69 6e 74 66 28 56 64 62 65 2a 2c 20 63 6f 6e  rintf(Vdbe*, con
20fa0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
20fb0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
20fc0 70 6c 61 69 6e 4e 4c 28 56 64 62 65 2a 29 3b 0a  plainNL(Vdbe*);.
20fd0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
20fe0 70 6c 61 69 6e 50 75 73 68 28 56 64 62 65 2a 29  plainPush(Vdbe*)
20ff0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
21000 45 78 70 6c 61 69 6e 50 6f 70 28 56 64 62 65 2a  ExplainPop(Vdbe*
21010 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
21020 33 45 78 70 6c 61 69 6e 46 69 6e 69 73 68 28 56  3ExplainFinish(V
21030 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  dbe*);.  void sq
21040 6c 69 74 65 33 45 78 70 6c 61 69 6e 53 65 6c 65  lite3ExplainSele
21050 63 74 28 56 64 62 65 2a 2c 20 53 65 6c 65 63 74  ct(Vdbe*, Select
21060 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
21070 65 33 45 78 70 6c 61 69 6e 45 78 70 72 28 56 64  e3ExplainExpr(Vd
21080 62 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76  be*, Expr*);.  v
21090 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
210a0 69 6e 45 78 70 72 4c 69 73 74 28 56 64 62 65 2a  inExprList(Vdbe*
210b0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20  , ExprList*);.  
210c0 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
210d0 74 65 33 56 64 62 65 45 78 70 6c 61 6e 61 74 69  te3VdbeExplanati
210e0 6f 6e 28 56 64 62 65 2a 29 3b 0a 23 65 6c 73 65  on(Vdbe*);.#else
210f0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
21100 33 45 78 70 6c 61 69 6e 42 65 67 69 6e 28 58 29  3ExplainBegin(X)
21110 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
21120 33 45 78 70 6c 61 69 6e 53 65 6c 65 63 74 28 41  3ExplainSelect(A
21130 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
21140 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72 28  ite3ExplainExpr(
21150 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
21160 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72  lite3ExplainExpr
21170 4c 69 73 74 28 41 2c 42 29 0a 23 20 64 65 66 69  List(A,B).# defi
21180 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  ne sqlite3Explai
21190 6e 46 69 6e 69 73 68 28 58 29 0a 23 20 64 65 66  nFinish(X).# def
211a0 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 45  ine sqlite3VdbeE
211b0 78 70 6c 61 6e 61 74 69 6f 6e 28 58 29 20 30 0a  xplanation(X) 0.
211c0 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71  #endif...void sq
211d0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 63  lite3SetString(c
211e0 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a  har **, sqlite3*
211f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
21200 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
21210 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a  3ErrorMsg(Parse*
21220 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
21230 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..);.int sqlite3
21240 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a  Dequote(char*);.
21250 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f  int sqlite3Keywo
21260 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73  rdCode(const uns
21270 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74  igned char*, int
21280 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75  );.int sqlite3Ru
21290 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20  nParser(Parse*, 
212a0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61  const char*, cha
212b0 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  r **);.void sqli
212c0 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28  te3FinishCoding(
212d0 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
212e0 69 74 65 33 47 65 74 54 65 6d 70 52 65 67 28 50  ite3GetTempReg(P
212f0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
21300 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52  ite3ReleaseTempR
21310 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  eg(Parse*,int);.
21320 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65  int sqlite3GetTe
21330 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
21340 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21350 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67  3ReleaseTempRang
21360 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74  e(Parse*,int,int
21370 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
21380 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63 68 65  learTempRegCache
21390 28 50 61 72 73 65 2a 29 3b 0a 45 78 70 72 20 2a  (Parse*);.Expr *
213a0 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63  sqlite3ExprAlloc
213b0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
213c0 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  nst Token*,int);
213d0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
213e0 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  pr(sqlite3*,int,
213f0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
21400 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 74  id sqlite3ExprAt
21410 74 61 63 68 53 75 62 74 72 65 65 73 28 73 71 6c  tachSubtrees(sql
21420 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72  ite3*,Expr*,Expr
21430 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  *,Expr*);.Expr *
21440 73 71 6c 69 74 65 33 50 45 78 70 72 28 50 61 72  sqlite3PExpr(Par
21450 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c  se*, int, Expr*,
21460 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   Expr*, const To
21470 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ken*);.Expr *sql
21480 69 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69  ite3ExprAnd(sqli
21490 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72  te3*,Expr*, Expr
214a0 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
214b0 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61  3ExprFunction(Pa
214c0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  rse*,ExprList*, 
214d0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
214e0 6c 69 74 65 33 45 78 70 72 41 73 73 69 67 6e 56  lite3ExprAssignV
214f0 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c  arNumber(Parse*,
21500 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
21510 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28  lite3ExprDelete(
21520 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29  sqlite3*, Expr*)
21530 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
21540 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e  te3ExprListAppen
21550 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  d(Parse*,ExprLis
21560 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  t*,Expr*);.void 
21570 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
21580 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78  etName(Parse*,Ex
21590 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69  prList*,Token*,i
215a0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
215b0 33 45 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e  3ExprListSetSpan
215c0 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
215d0 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f  *,ExprSpan*);.vo
215e0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
215f0 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
21600 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  *, ExprList*);.i
21610 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73  nt sqlite3Init(s
21620 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29  qlite3*, char**)
21630 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69  ;.int sqlite3Ini
21640 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c  tCallback(void*,
21650 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68   int, char**, ch
21660 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar**);.void sqli
21670 74 65 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a  te3Pragma(Parse*
21680 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54  ,Token*,Token*,T
21690 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
216a0 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
216b0 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
216c0 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ion(sqlite3*);.v
216d0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74  oid sqlite3Reset
216e0 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65  OneSchema(sqlite
216f0 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
21700 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74  lite3CollapseDat
21710 61 62 61 73 65 41 72 72 61 79 28 73 71 6c 69 74  abaseArray(sqlit
21720 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
21730 65 33 42 65 67 69 6e 50 61 72 73 65 28 50 61 72  e3BeginParse(Par
21740 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  se*,int);.void s
21750 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65  qlite3CommitInte
21760 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69  rnalChanges(sqli
21770 74 65 33 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  te3*);.Table *sq
21780 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66  lite3ResultSetOf
21790 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65  Select(Parse*,Se
217a0 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  lect*);.void sql
217b0 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61  ite3OpenMasterTa
217c0 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74  ble(Parse *, int
217d0 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
217e0 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78  3PrimaryKeyIndex
217f0 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71  (Table*);.i16 sq
21800 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64  lite3ColumnOfInd
21810 65 78 28 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b  ex(Index*, i16);
21820 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
21830 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  rtTable(Parse*,T
21840 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
21850 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76  ,int,int,int);.v
21860 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
21870 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65  lumn(Parse*,Toke
21880 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
21890 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73  3AddNotNull(Pars
218a0 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
218b0 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72 79  qlite3AddPrimary
218c0 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Key(Parse*, Expr
218d0 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  List*, int, int,
218e0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
218f0 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74  te3AddCheckConst
21900 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78  raint(Parse*, Ex
21910 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
21920 65 33 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 28  e3AddColumnType(
21930 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a  Parse*,Token*);.
21940 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 44  void sqlite3AddD
21950 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73  efaultValue(Pars
21960 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76  e*,ExprSpan*);.v
21970 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
21980 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73 65 2a  llateType(Parse*
21990 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
219a0 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28  sqlite3EndTable(
219b0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
219c0 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29  ken*,u8,Select*)
219d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72  ;.int sqlite3Par
219e0 73 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72  seUri(const char
219f0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e  *,const char*,un
21a00 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20  signed int*,.   
21a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63   sqlite3_vfs**,c
21a30 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a  har**,char **);.
21a40 42 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62  Btree *sqlite3Db
21a50 4e 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69  NameToBtree(sqli
21a60 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
21a70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  );.int sqlite3Co
21a80 64 65 4f 6e 63 65 28 50 61 72 73 65 20 2a 29 3b  deOnce(Parse *);
21a90 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
21aa0 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
21ab0 54 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  T.# define sqlit
21ac0 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51  e3FaultSim(X) SQ
21ad0 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20  LITE_OK.#else.  
21ae0 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74  int sqlite3Fault
21af0 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66  Sim(int);.#endif
21b00 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65  ..Bitvec *sqlite
21b10 33 42 69 74 76 65 63 43 72 65 61 74 65 28 75 33  3BitvecCreate(u3
21b20 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
21b30 69 74 76 65 63 54 65 73 74 28 42 69 74 76 65 63  itvecTest(Bitvec
21b40 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  *, u32);.int sql
21b50 69 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69  ite3BitvecSet(Bi
21b60 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69  tvec*, u32);.voi
21b70 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43  d sqlite3BitvecC
21b80 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33  lear(Bitvec*, u3
21b90 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  2, void*);.void 
21ba0 73 71 6c 69 74 65 33 42 69 74 76 65 63 44 65 73  sqlite3BitvecDes
21bb0 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75  troy(Bitvec*);.u
21bc0 33 32 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  32 sqlite3Bitvec
21bd0 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 69  Size(Bitvec*);.i
21be0 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
21bf0 42 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c  BuiltinTest(int,
21c00 69 6e 74 2a 29 3b 0a 0a 52 6f 77 53 65 74 20 2a  int*);..RowSet *
21c10 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69  sqlite3RowSetIni
21c20 74 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  t(sqlite3*, void
21c30 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29  *, unsigned int)
21c40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
21c50 77 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74  wSetClear(RowSet
21c60 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21c70 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77  RowSetInsert(Row
21c80 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20  Set*, i64);.int 
21c90 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73  sqlite3RowSetTes
21ca0 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69  t(RowSet*, int i
21cb0 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74  Batch, i64);.int
21cc0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65   sqlite3RowSetNe
21cd0 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a  xt(RowSet*, i64*
21ce0 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
21cf0 43 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65  CreateView(Parse
21d00 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
21d10 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69  Token*,Select*,i
21d20 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64  nt,int);..#if !d
21d30 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
21d40 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66  IT_VIEW) || !def
21d50 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
21d60 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20  _VIRTUALTABLE). 
21d70 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77   int sqlite3View
21d80 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50  GetColumnNames(P
21d90 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23  arse*,Table*);.#
21da0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
21db0 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
21dc0 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23  mnNames(A,B) 0.#
21dd0 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54  endif..#if SQLIT
21de0 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33  E_MAX_ATTACHED>3
21df0 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44  0.  int sqlite3D
21e00 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62  bMaskAllZero(yDb
21e10 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  Mask);.#endif.vo
21e20 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61  id sqlite3DropTa
21e30 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
21e40 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
21e50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
21e60 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  eDropTable(Parse
21e70 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
21e80 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21e90 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  e3DeleteTable(sq
21ea0 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b  lite3*, Table*);
21eb0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
21ec0 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
21ed0 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  NT.  void sqlite
21ee0 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
21ef0 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  gin(Parse *pPars
21f00 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  e);.  void sqlit
21f10 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45  e3AutoincrementE
21f20 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  nd(Parse *pParse
21f30 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
21f40 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  e sqlite3Autoinc
21f50 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23  rementBegin(X).#
21f60 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
21f70 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
21f80 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  X).#endif.void s
21f90 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61 72  qlite3Insert(Par
21fa0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53  se*, SrcList*, S
21fb0 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c  elect*, IdList*,
21fc0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   int);.void *sql
21fd0 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74  ite3ArrayAllocat
21fe0 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a  e(sqlite3*,void*
21ff0 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b  ,int,int*,int*);
22000 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  .IdList *sqlite3
22010 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c  IdListAppend(sql
22020 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  ite3*, IdList*, 
22030 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
22040 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28  ite3IdListIndex(
22050 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  IdList*,const ch
22060 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  ar*);.SrcList *s
22070 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c  qlite3SrcListEnl
22080 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  arge(sqlite3*, S
22090 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  rcList*, int, in
220a0 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  t);.SrcList *sql
220b0 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
220c0 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  d(sqlite3*, SrcL
220d0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
220e0 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ken*);.SrcList *
220f0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70  sqlite3SrcListAp
22100 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72  pendFromTerm(Par
22110 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
22120 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20  oken*, Token*,. 
22130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22150 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c       Token*, Sel
22160 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c  ect*, Expr*, IdL
22170 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
22180 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65  te3SrcListIndexe
22190 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63  dBy(Parse *, Src
221a0 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29  List *, Token *)
221b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
221c0 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72  exedByLookup(Par
221d0 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63  se *, struct Src
221e0 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f  List_item *);.vo
221f0 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
22200 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53  tShiftJoinType(S
22210 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
22220 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73 73  qlite3SrcListAss
22230 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65  ignCursors(Parse
22240 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  *, SrcList*);.vo
22250 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74  id sqlite3IdList
22260 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
22270 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
22280 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65  sqlite3SrcListDe
22290 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  lete(sqlite3*, S
222a0 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20  rcList*);.Index 
222b0 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65  *sqlite3Allocate
222c0 49 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69  IndexObject(sqli
222d0 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61  te3*,i16,int,cha
222e0 72 2a 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  r**);.Index *sql
222f0 69 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28  ite3CreateIndex(
22300 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
22310 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  ken*,SrcList*,Ex
22320 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65  prList*,int,Toke
22330 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n*,.            
22340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
22350 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
22360 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
22370 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72  Index(Parse*, Sr
22380 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  cList*, int);.in
22390 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28  t sqlite3Select(
223a0 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
223b0 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53   SelectDest*);.S
223c0 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65  elect *sqlite3Se
223d0 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45  lectNew(Parse*,E
223e0 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74  xprList*,SrcList
223f0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
22400 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
22410 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
22420 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c  *,ExprList*,u16,
22430 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f  Expr*,Expr*);.vo
22440 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
22450 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
22460 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65   Select*);.Table
22470 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
22480 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53  Lookup(Parse*, S
22490 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
224a0 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28  lite3IsReadOnly(
224b0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
224c0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
224d0 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73  e3OpenTable(Pars
224e0 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e  e*, int iCur, in
224f0 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69  t iDb, Table*, i
22500 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  nt);.#if defined
22510 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55  (SQLITE_ENABLE_U
22520 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d  PDATE_DELETE_LIM
22530 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  IT) && !defined(
22540 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51  SQLITE_OMIT_SUBQ
22550 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69  UERY).Expr *sqli
22560 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61  te3LimitWhere(Pa
22570 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  rse*,SrcList*,Ex
22580 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  pr*,ExprList*,Ex
22590 70 72 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29  pr*,Expr*,char*)
225a0 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
225b0 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28  lite3DeleteFrom(
225c0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
225d0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
225e0 71 6c 69 74 65 33 55 70 64 61 74 65 28 50 61 72  qlite3Update(Par
225f0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
22600 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c  xprList*, Expr*,
22610 20 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f   int);.WhereInfo
22620 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42 65   *sqlite3WhereBe
22630 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69  gin(Parse*,SrcLi
22640 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
22650 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31  st*,ExprList*,u1
22660 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  6,int);.void sql
22670 69 74 65 33 57 68 65 72 65 45 6e 64 28 57 68 65  ite3WhereEnd(Whe
22680 72 65 49 6e 66 6f 2a 29 3b 0a 75 36 34 20 73 71  reInfo*);.u64 sq
22690 6c 69 74 65 33 57 68 65 72 65 4f 75 74 70 75 74  lite3WhereOutput
226a0 52 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e  RowCount(WhereIn
226b0 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
226c0 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74  3WhereIsDistinct
226d0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
226e0 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
226f0 4f 72 64 65 72 65 64 28 57 68 65 72 65 49 6e 66  Ordered(WhereInf
22700 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
22710 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 57 68  WhereIsSorted(Wh
22720 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
22730 71 6c 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69  qlite3WhereConti
22740 6e 75 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e  nueLabel(WhereIn
22750 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
22760 33 57 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c  3WhereBreakLabel
22770 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
22780 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b  t sqlite3WhereOk
22790 4f 6e 65 50 61 73 73 28 57 68 65 72 65 49 6e 66  OnePass(WhereInf
227a0 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  o*, int*);.int s
227b0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
227c0 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20  tColumn(Parse*, 
227d0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
227e0 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64  , int, u8);.void
227f0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
22800 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65  GetColumnOfTable
22810 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  (Vdbe*, Table*, 
22820 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
22830 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
22840 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c  CodeMove(Parse*,
22850 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
22860 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
22870 72 43 61 63 68 65 53 74 6f 72 65 28 50 61 72 73  rCacheStore(Pars
22880 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
22890 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
228a0 45 78 70 72 43 61 63 68 65 50 75 73 68 28 50 61  ExprCachePush(Pa
228b0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
228c0 74 65 33 45 78 70 72 43 61 63 68 65 50 6f 70 28  te3ExprCachePop(
228d0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
228e0 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 52 65  lite3ExprCacheRe
228f0 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  move(Parse*, int
22900 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
22910 69 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65  ite3ExprCacheCle
22920 61 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  ar(Parse*);.void
22930 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
22940 65 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28  eAffinityChange(
22950 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
22960 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
22970 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20  xprCode(Parse*, 
22980 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
22990 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
229a0 65 46 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73  eFactorable(Pars
229b0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
229c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
229d0 72 43 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73  rCodeAtInit(Pars
229e0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
229f0 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
22a00 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72  ExprCodeTemp(Par
22a10 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a  se*, Expr*, int*
22a20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
22a30 70 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72  prCodeTarget(Par
22a40 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
22a50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
22a60 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50  prCodeAndCache(P
22a70 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
22a80 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
22a90 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28  xprCodeExprList(
22aa0 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
22ab0 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65  *, int, u8);.#de
22ac0 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
22ad0 5f 44 55 50 20 20 20 20 20 20 30 78 30 31 20 20  _DUP      0x01  
22ae0 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61  /* Deep, not sha
22af0 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23  llow copies */.#
22b00 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
22b10 45 4c 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32  EL_FACTOR   0x02
22b20 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20    /* Factor out 
22b30 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a  constant terms *
22b40 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  /.void sqlite3Ex
22b50 70 72 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c  prIfTrue(Parse*,
22b60 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
22b70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
22b80 78 70 72 49 66 46 61 6c 73 65 28 50 61 72 73 65  xprIfFalse(Parse
22b90 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69  *, Expr*, int, i
22ba0 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  nt);.Table *sqli
22bb0 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c  te3FindTable(sql
22bc0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
22bd0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
22be0 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c  .Table *sqlite3L
22bf0 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72 73 65  ocateTable(Parse
22c00 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e  *,int isView,con
22c10 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
22c20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  char*);.Table *s
22c30 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
22c40 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 69 6e 74  eItem(Parse*,int
22c50 20 69 73 56 69 65 77 2c 73 74 72 75 63 74 20 53   isView,struct S
22c60 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a  rcList_item *);.
22c70 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69  Index *sqlite3Fi
22c80 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a  ndIndex(sqlite3*
22c90 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
22ca0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
22cb0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
22cc0 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c  dDeleteTable(sql
22cd0 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
22ce0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
22cf0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
22d00 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33  eteIndex(sqlite3
22d10 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
22d20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22d30 56 61 63 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a  Vacuum(Parse*);.
22d40 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61  int sqlite3RunVa
22d50 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c  cuum(char**, sql
22d60 69 74 65 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71  ite3*);.char *sq
22d70 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b  lite3NameFromTok
22d80 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b  en(sqlite3*, Tok
22d90 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
22da0 33 45 78 70 72 43 6f 6d 70 61 72 65 28 45 78 70  3ExprCompare(Exp
22db0 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  r*, Expr*, int);
22dc0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
22dd0 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72  ListCompare(Expr
22de0 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
22df0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
22e00 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78  te3ExprImpliesEx
22e10 70 72 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  pr(Expr*, Expr*,
22e20 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
22e30 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67  te3ExprAnalyzeAg
22e40 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e  gregates(NameCon
22e50 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  text*, Expr*);.v
22e60 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
22e70 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61  nalyzeAggList(Na
22e80 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c  meContext*,ExprL
22e90 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
22ea0 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68  e3FunctionUsesTh
22eb0 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63  isSrc(Expr*, Src
22ec0 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71  List*);.Vdbe *sq
22ed0 6c 69 74 65 33 47 65 74 56 64 62 65 28 50 61 72  lite3GetVdbe(Par
22ee0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
22ef0 65 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28  e3PrngSaveState(
22f00 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
22f10 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74  te3PrngRestoreSt
22f20 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ate(void);.void 
22f30 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
22f40 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ll(sqlite3*,int)
22f50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
22f60 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50  deVerifySchema(P
22f70 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
22f80 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
22f90 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50  ifyNamedSchema(P
22fa0 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
22fb0 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71  r *zDb);.void sq
22fc0 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61  lite3BeginTransa
22fd0 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ction(Parse*, in
22fe0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22ff0 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f  CommitTransactio
23000 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  n(Parse*);.void 
23010 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54  sqlite3RollbackT
23020 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
23030 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23040 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a  Savepoint(Parse*
23050 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  , int, Token*);.
23060 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
23070 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69  eSavepoints(sqli
23080 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  te3 *);.void sql
23090 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e  ite3LeaveMutexAn
230a0 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c  dCloseZombie(sql
230b0 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
230c0 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
230d0 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t(Expr*);.int sq
230e0 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
230f0 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a  antNotJoin(Expr*
23100 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
23110 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75  prIsConstantOrFu
23120 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38  nction(Expr*, u8
23130 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
23140 70 72 49 73 49 6e 74 65 67 65 72 28 45 78 70 72  prIsInteger(Expr
23150 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
23160 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75  lite3ExprCanBeNu
23170 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b  ll(const Expr*);
23180 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
23190 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43  NeedsNoAffinityC
231a0 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72  hange(const Expr
231b0 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71  *, char);.int sq
231c0 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e  lite3IsRowid(con
231d0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
231e0 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
231f0 6f 77 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c  owDelete(Parse*,
23200 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c  Table*,Trigger*,
23210 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c  int,int,int,i16,
23220 75 38 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20  u8,u8,u8);.void 
23230 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
23240 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61  owIndexDelete(Pa
23250 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
23260 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69  t, int, int*);.i
23270 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  nt sqlite3Genera
23280 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65  teIndexKey(Parse
23290 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20  *, Index*, int, 
232a0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49  int, int, int*,I
232b0 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ndex*,int);.void
232c0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50   sqlite3ResolveP
232d0 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73  artIdxLabel(Pars
232e0 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
232f0 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e  lite3GenerateCon
23300 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61  straintChecks(Pa
23310 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a  rse*,Table*,int*
23320 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
23330 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
23340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23350 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74         u8,u8,int
23360 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ,int*);.void sql
23370 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65  ite3CompleteInse
23380 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62  rtion(Parse*,Tab
23390 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  le*,int,int,int,
233a0 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
233b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
233c0 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65  enTableAndIndice
233d0 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
233e0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2a 2c  , int, int, u8*,
233f0 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f   int*, int*);.vo
23400 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57  id sqlite3BeginW
23410 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61  riteOperation(Pa
23420 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
23430 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c  .void sqlite3Mul
23440 74 69 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b  tiWrite(Parse*);
23450 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79  .void sqlite3May
23460 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76  Abort(Parse*);.v
23470 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43  oid sqlite3HaltC
23480 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
23490 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72  , int, int, char
234a0 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64  *, i8, u8);.void
234b0 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65 43 6f   sqlite3UniqueCo
234c0 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
234d0 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76   int, Index*);.v
234e0 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 69 64  oid sqlite3Rowid
234f0 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
23500 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b  *, int, Table*);
23510 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
23520 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45  prDup(sqlite3*,E
23530 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c  xpr*,int);.ExprL
23540 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
23550 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
23560 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b  ,ExprList*,int);
23570 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
23580 33 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69  3SrcListDup(sqli
23590 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e  te3*,SrcList*,in
235a0 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69  t);.IdList *sqli
235b0 74 65 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c  te3IdListDup(sql
235c0 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a  ite3*,IdList*);.
235d0 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53  Select *sqlite3S
235e0 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65 33  electDup(sqlite3
235f0 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a  *,Select*,int);.
23600 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f  #if SELECTTRACE_
23610 45 4e 41 42 4c 45 44 0a 76 6f 69 64 20 73 71 6c  ENABLED.void sql
23620 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d  ite3SelectSetNam
23630 65 28 53 65 6c 65 63 74 2a 2c 63 6f 6e 73 74 20  e(Select*,const 
23640 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  char*);.#else.# 
23650 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65  define sqlite3Se
23660 6c 65 63 74 53 65 74 4e 61 6d 65 28 41 2c 42 29  lectSetName(A,B)
23670 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
23680 69 74 65 33 46 75 6e 63 44 65 66 49 6e 73 65 72  ite3FuncDefInser
23690 74 28 46 75 6e 63 44 65 66 48 61 73 68 2a 2c 20  t(FuncDefHash*, 
236a0 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63 44  FuncDef*);.FuncD
236b0 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46  ef *sqlite3FindF
236c0 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  unction(sqlite3*
236d0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
236e0 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69  ,int,u8,u8);.voi
236f0 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
23700 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  rBuiltinFunction
23710 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  s(sqlite3*);.voi
23720 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
23730 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f  rDateTimeFunctio
23740 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
23750 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 47 6c  qlite3RegisterGl
23760 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28 76 6f  obalFunctions(vo
23770 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  id);.int sqlite3
23780 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71  SafetyCheckOk(sq
23790 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
237a0 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53  ite3SafetyCheckS
237b0 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a  ickOrOk(sqlite3*
237c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
237d0 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73  hangeCookie(Pars
237e0 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21  e*, int);..#if !
237f0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
23800 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21 64 65  MIT_VIEW) && !de
23810 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
23820 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20  T_TRIGGER).void 
23830 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69  sqlite3Materiali
23840 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54  zeView(Parse*, T
23850 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  able*, Expr*, in
23860 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  t);.#endif..#ifn
23870 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
23880 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73  TRIGGER.  void s
23890 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67 67  qlite3BeginTrigg
238a0 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  er(Parse*, Token
238b0 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
238c0 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74  ,IdList*,SrcList
238d0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
238e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
238f0 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  pr*,int, int);. 
23900 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e   void sqlite3Fin
23910 69 73 68 54 72 69 67 67 65 72 28 50 61 72 73 65  ishTrigger(Parse
23920 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c  *, TriggerStep*,
23930 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64   Token*);.  void
23940 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
23950 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ger(Parse*, SrcL
23960 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  ist*, int);.  vo
23970 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
23980 69 67 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c  iggerPtr(Parse*,
23990 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72   Trigger*);.  Tr
239a0 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72  igger *sqlite3Tr
239b0 69 67 67 65 72 73 45 78 69 73 74 28 50 61 72 73  iggersExist(Pars
239c0 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  e *, Table*, int
239d0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
239e0 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67   *pMask);.  Trig
239f0 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67  ger *sqlite3Trig
23a00 67 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c  gerList(Parse *,
23a10 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69   Table *);.  voi
23a20 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
23a30 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
23a40 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20  Trigger *, int, 
23a50 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
23a60 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20  Table *,.       
23a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a80 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69       int, int, i
23a90 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
23aa0 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
23ab0 72 44 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c  rDirect(Parse *,
23ac0 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c   Trigger *, Tabl
23ad0 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e *, int, int, i
23ae0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
23af0 74 65 56 69 65 77 54 72 69 67 67 65 72 73 28 50  teViewTriggers(P
23b00 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
23b10 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  xpr*, int, ExprL
23b20 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ist*);.  void sq
23b30 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
23b40 65 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  erStep(sqlite3*,
23b50 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a   TriggerStep*);.
23b60 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
23b70 71 6c 69 74 65 33 54 72 69 67 67 65 72 53 65 6c  qlite3TriggerSel
23b80 65 63 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ectStep(sqlite3*
23b90 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69  ,Select*);.  Tri
23ba0 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
23bb0 33 54 72 69 67 67 65 72 49 6e 73 65 72 74 53 74  3TriggerInsertSt
23bc0 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
23bd0 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20  n*, IdList*,.   
23be0 20 20 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 20 20 20                  
23c00 20 20 20 20 20 53 65 6c 65 63 74 2a 2c 75 38 29       Select*,u8)
23c10 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
23c20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55  *sqlite3TriggerU
23c30 70 64 61 74 65 53 74 65 70 28 73 71 6c 69 74 65  pdateStep(sqlite
23c40 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  3*,Token*,ExprLi
23c50 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b  st*, Expr*, u8);
23c60 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
23c70 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65  sqlite3TriggerDe
23c80 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74 65 33  leteStep(sqlite3
23c90 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29  *,Token*, Expr*)
23ca0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
23cb0 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71  DeleteTrigger(sq
23cc0 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a  lite3*, Trigger*
23cd0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
23ce0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
23cf0 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
23d00 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
23d10 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
23d20 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50  TriggerColmask(P
23d30 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45  arse*,Trigger*,E
23d40 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74  xprList*,int,int
23d50 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20  ,Table*,int);.# 
23d60 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61  define sqlite3Pa
23d70 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28  rseToplevel(p) (
23d80 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f  (p)->pToplevel ?
23d90 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20   (p)->pToplevel 
23da0 3a 20 28 70 29 29 0a 23 65 6c 73 65 0a 23 20 64  : (p)).#else.# d
23db0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
23dc0 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44  ggersExist(B,C,D
23dd0 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65  ,E,F) 0.# define
23de0 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
23df0 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66  igger(A,B).# def
23e00 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54  ine sqlite3DropT
23e10 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23  riggerPtr(A,B).#
23e20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55   define sqlite3U
23e30 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
23e40 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64  igger(A,B,C).# d
23e50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
23e60 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c  eRowTrigger(A,B,
23e70 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23  C,D,E,F,G,H,I).#
23e80 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
23e90 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
23ea0 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29  ect(A,B,C,D,E,F)
23eb0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23ec0 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20  3TriggerList(X, 
23ed0 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  Y) 0.# define sq
23ee0 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
23ef0 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65  el(p) p.# define
23f00 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
23f10 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45  olmask(A,B,C,D,E
23f20 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a  ,F,G) 0.#endif..
23f30 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54  int sqlite3JoinT
23f40 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
23f50 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
23f60 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
23f70 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65  3CreateForeignKe
23f80 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
23f90 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70  st*, Token*, Exp
23fa0 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  rList*, int);.vo
23fb0 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46  id sqlite3DeferF
23fc0 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
23fd0 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  , int);.#ifndef 
23fe0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
23ff0 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64  ORIZATION.  void
24000 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
24010 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63  (Parse*,Expr*,Sc
24020 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b  hema*,SrcList*);
24030 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
24040 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69  thCheck(Parse*,i
24050 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
24060 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
24070 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
24080 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
24090 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a  ntextPush(Parse*
240a0 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20  , AuthContext*, 
240b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
240c0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
240d0 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43  ContextPop(AuthC
240e0 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20  ontext*);.  int 
240f0 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43  sqlite3AuthReadC
24100 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ol(Parse*, const
24110 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63   char *, const c
24120 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  har *, int);.#el
24130 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
24140 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c  te3AuthRead(a,b,
24150 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71  c,d).# define sq
24160 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61  lite3AuthCheck(a
24170 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c  ,b,c,d,e)    SQL
24180 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20  ITE_OK.# define 
24190 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
241a0 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20  xtPush(a,b,c).# 
241b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
241c0 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20  thContextPop(a) 
241d0 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e   ((void)(a)).#en
241e0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
241f0 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Attach(Parse*, E
24200 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  xpr*, Expr*, Exp
24210 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
24220 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Detach(Parse*, 
24230 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
24240 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69  ite3FixInit(DbFi
24250 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e  xer*, Parse*, in
24260 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
24270 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69  const Token*);.i
24280 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63  nt sqlite3FixSrc
24290 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53  List(DbFixer*, S
242a0 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
242b0 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44  lite3FixSelect(D
242c0 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a  bFixer*, Select*
242d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
242e0 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20  xExpr(DbFixer*, 
242f0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
24300 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44  te3FixExprList(D
24310 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73  bFixer*, ExprLis
24320 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
24330 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44  FixTriggerStep(D
24340 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72  bFixer*, Trigger
24350 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Step*);.int sqli
24360 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68  te3AtoF(const ch
24370 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20  ar *z, double*, 
24380 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
24390 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f  lite3GetInt32(co
243a0 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a  nst char *, int*
243b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
243c0 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  oi(const char*);
243d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31  .int sqlite3Utf1
243e0 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76  6ByteLen(const v
243f0 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  oid *pData, int 
24400 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69  nChar);.int sqli
24410 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63  te3Utf8CharLen(c
24420 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61  onst char *pData
24430 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33  , int nByte);.u3
24440 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61  2 sqlite3Utf8Rea
24450 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c  d(const u8**);.L
24460 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
24470 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74  Est(u64);.LogEst
24480 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64   sqlite3LogEstAd
24490 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29  d(LogEst,LogEst)
244a0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
244b0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
244c0 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  LE.LogEst sqlite
244d0 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c  3LogEstFromDoubl
244e0 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69  e(double);.#endi
244f0 66 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f 67  f.u64 sqlite3Log
24500 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29  EstToInt(LogEst)
24510 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65  ;../*.** Routine
24520 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72  s to read and wr
24530 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e  ite variable-len
24540 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54  gth integers.  T
24550 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  hese used to.** 
24560 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c  be defined local
24570 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75  ly, but now we u
24580 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f  se the varint ro
24590 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74  utines in the ut
245a0 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f  il.c.** file..*/
245b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56  .int sqlite3PutV
245c0 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63  arint(unsigned c
245d0 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73  har*, u64);.u8 s
245e0 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28  qlite3GetVarint(
245f0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
24600 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75  har *, u64 *);.u
24610 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
24620 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67  nt32(const unsig
24630 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20  ned char *, u32 
24640 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
24650 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b  arintLen(u64 v);
24660 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d  ../*.** The comm
24670 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20 61  on case is for a
24680 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20   varint to be a 
24690 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68  single byte.  Th
246a0 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  ey following.** 
246b0 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68  macros handle th
246c0 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69  e common case wi
246d0 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72  thout a procedur
246e0 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e  e call, but then
246f0 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f   call.** the pro
24700 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65  cedure for large
24710 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64  r varints..*/.#d
24720 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33  efine getVarint3
24730 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
24740 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29  ((*(A)<(u8)0x80)
24750 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29  ?((B)=(u32)*(A))
24760 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72  ,1:sqlite3GetVar
24770 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a  int32((A),(u32 *
24780 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  )&(B))).#define 
24790 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29  putVarint32(A,B)
247a0 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32    \.  (u8)(((u32
247b0 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f  )(B)<(u32)0x80)?
247c0 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20  (*(A)=(unsigned 
247d0 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20  char)(B)),1:\.  
247e0 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
247f0 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69  ((A),(B))).#defi
24800 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20  ne getVarint    
24810 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
24820 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69  .#define putVari
24830 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74  nt    sqlite3Put
24840 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63  Varint...const c
24850 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65  har *sqlite3Inde
24860 78 41 66 66 69 6e 69 74 79 53 74 72 28 56 64 62  xAffinityStr(Vdb
24870 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 76  e *, Index *);.v
24880 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
24890 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20  Affinity(Vdbe*, 
248a0 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68  Table*, int);.ch
248b0 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72  ar sqlite3Compar
248c0 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  eAffinity(Expr *
248d0 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32  pExpr, char aff2
248e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
248f0 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78  dexAffinityOk(Ex
24900 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
24910 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63  idx_affinity);.c
24920 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41  har sqlite3ExprA
24930 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45  ffinity(Expr *pE
24940 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xpr);.int sqlite
24950 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68  3Atoi64(const ch
24960 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20  ar*, i64*, int, 
24970 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
24980 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f  DecOrHexToI64(co
24990 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29  nst char*, i64*)
249a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
249b0 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74  rorWithMsg(sqlit
249c0 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
249d0 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64  char*,...);.void
249e0 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71   sqlite3Error(sq
249f0 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
24a00 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42  d *sqlite3HexToB
24a10 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  lob(sqlite3*, co
24a20 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74  nst char *z, int
24a30 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48   n);.u8 sqlite3H
24a40 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a  exToInt(int h);.
24a50 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61  int sqlite3TwoPa
24a60 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20  rtName(Parse *, 
24a70 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
24a80 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69  , Token **);..#i
24a90 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
24aa0 5f 54 45 53 54 29 20 0a 63 6f 6e 73 74 20 63 68  _TEST) .const ch
24ab0 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61  ar *sqlite3ErrNa
24ac0 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  me(int);.#endif.
24ad0 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
24ae0 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b  ite3ErrStr(int);
24af0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64  .int sqlite3Read
24b00 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50  Schema(Parse *pP
24b10 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  arse);.CollSeq *
24b20 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53  sqlite3FindCollS
24b30 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65  eq(sqlite3*,u8 e
24b40 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nc, const char*,
24b50 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  int);.CollSeq *s
24b60 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c  qlite3LocateColl
24b70 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
24b80 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e  e, const char*zN
24b90 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ame);.CollSeq *s
24ba0 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65  qlite3ExprCollSe
24bb0 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
24bc0 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45   Expr *pExpr);.E
24bd0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
24be0 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28  AddCollateToken(
24bf0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
24c00 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  xpr*, const Toke
24c10 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  n*);.Expr *sqlit
24c20 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65  e3ExprAddCollate
24c30 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78  String(Parse*,Ex
24c40 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  pr*,const char*)
24c50 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
24c60 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45  xprSkipCollate(E
24c70 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
24c80 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50  e3CheckCollSeq(P
24c90 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20  arse *, CollSeq 
24ca0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
24cb0 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50  heckObjectName(P
24cc0 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68  arse *, const ch
24cd0 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar *);.void sqli
24ce0 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
24cf0 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  s(sqlite3 *, int
24d00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64  );.int sqlite3Ad
24d10 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  dInt64(i64*,i64)
24d20 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62  ;.int sqlite3Sub
24d30 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
24d40 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49  .int sqlite3MulI
24d50 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
24d60 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e  int sqlite3AbsIn
24d70 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66  t32(int);.#ifdef
24d80 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38   SQLITE_ENABLE_8
24d90 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71  _3_NAMES.void sq
24da0 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33  lite3FileSuffix3
24db0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68  (const char*, ch
24dc0 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ar*);.#else.# de
24dd0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65  fine sqlite3File
24de0 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e  Suffix3(X,Y).#en
24df0 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65  dif.u8 sqlite3Ge
24e00 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63  tBoolean(const c
24e10 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e  har *z,u8);..con
24e20 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  st void *sqlite3
24e30 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65  ValueText(sqlite
24e40 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69  3_value*, u8);.i
24e50 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42  nt sqlite3ValueB
24e60 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c  ytes(sqlite3_val
24e70 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  ue*, u8);.void s
24e80 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
24e90 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  r(sqlite3_value*
24ea0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
24eb0 64 20 2a 2c 75 38 2c 20 0a 20 20 20 20 20 20 20  d *,u8, .       
24ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ed0 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
24ee0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
24ef0 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74  lueSetNull(sqlit
24f00 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64  e3_value*);.void
24f10 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65   sqlite3ValueFre
24f20 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  e(sqlite3_value*
24f30 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  );.sqlite3_value
24f40 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65   *sqlite3ValueNe
24f50 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68  w(sqlite3 *);.ch
24f60 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36  ar *sqlite3Utf16
24f70 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  to8(sqlite3 *, c
24f80 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
24f90 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
24fa0 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73  3ValueFromExpr(s
24fb0 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a  qlite3 *, Expr *
24fc0 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65  , u8, u8, sqlite
24fd0 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69  3_value **);.voi
24fe0 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70  d sqlite3ValueAp
24ff0 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69  plyAffinity(sqli
25000 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c  te3_value *, u8,
25010 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51   u8);.#ifndef SQ
25020 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
25030 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  N.extern const u
25040 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
25050 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72  ite3OpcodeProper
25060 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  ty[];.extern con
25070 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
25080 20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c   sqlite3UpperToL
25090 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  ower[];.extern c
250a0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
250b0 61 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d  ar sqlite3CtypeM
250c0 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  ap[];.extern con
250d0 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33  st Token sqlite3
250e0 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74  IntTokens[];.ext
250f0 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73  ern SQLITE_WSD s
25100 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
25110 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  fig sqlite3Confi
25120 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45  g;.extern SQLITE
25130 5f 57 53 44 20 46 75 6e 63 44 65 66 48 61 73 68  _WSD FuncDefHash
25140 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75   sqlite3GlobalFu
25150 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66  nctions;.#ifndef
25160 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
25170 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69  .extern int sqli
25180 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a  te3PendingByte;.
25190 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f  #endif.#endif.vo
251a0 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61  id sqlite3RootPa
251b0 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a  geMoved(sqlite3*
251c0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
251d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
251e0 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f  index(Parse*, To
251f0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ken*, Token*);.v
25200 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
25210 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
25220 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
25230 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61  erRenameTable(Pa
25240 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
25250 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
25260 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e  ite3GetToken(con
25270 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
25280 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64   *, int *);.void
25290 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61   sqlite3NestedPa
252a0 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  rse(Parse*, cons
252b0 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76  t char*, ...);.v
252c0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 69 72  oid sqlite3Expir
252d0 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
252e0 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  nts(sqlite3*);.i
252f0 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75  nt sqlite3CodeSu
25300 62 73 65 6c 65 63 74 28 50 61 72 73 65 20 2a 2c  bselect(Parse *,
25310 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e   Expr *, int, in
25320 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25330 53 65 6c 65 63 74 50 72 65 70 28 50 61 72 73 65  SelectPrep(Parse
25340 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65  *, Select*, Name
25350 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73  Context*);.int s
25360 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e  qlite3MatchSpanN
25370 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ame(const char*,
25380 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
25390 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
253a0 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
253b0 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e  ite3ResolveExprN
253c0 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ames(NameContext
253d0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
253e0 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65  sqlite3ResolveSe
253f0 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a  lectNames(Parse*
25400 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43  , Select*, NameC
25410 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73  ontext*);.void s
25420 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c  qlite3ResolveSel
25430 66 52 65 66 65 72 65 6e 63 65 28 50 61 72 73 65  fReference(Parse
25440 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70  *,Table*,int,Exp
25450 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  r*,ExprList*);.i
25460 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  nt sqlite3Resolv
25470 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50 61  eOrderGroupBy(Pa
25480 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45  rse*, Select*, E
25490 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20  xprList*, const 
254a0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
254b0 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c  ite3ColumnDefaul
254c0 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20  t(Vdbe *, Table 
254d0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
254e0 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46  id sqlite3AlterF
254f0 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50  inishAddColumn(P
25500 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29  arse *, Token *)
25510 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
25520 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d  terBeginAddColum
25530 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69  n(Parse *, SrcLi
25540 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  st *);.CollSeq *
25550 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65  sqlite3GetCollSe
25560 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f  q(Parse*, u8, Co
25570 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63  llSeq *, const c
25580 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69  har*);.char sqli
25590 74 65 33 41 66 66 69 6e 69 74 79 54 79 70 65 28  te3AffinityType(
255a0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 38 2a  const char*, u8*
255b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
255c0 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54  nalyze(Parse*, T
255d0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
255e0 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b  int sqlite3Invok
255f0 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73  eBusyHandler(Bus
25600 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20  yHandler*);.int 
25610 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71  sqlite3FindDb(sq
25620 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
25630 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
25640 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a  DbName(sqlite3 *
25650 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
25660 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c  .int sqlite3Anal
25670 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33  ysisLoad(sqlite3
25680 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64  *,int iDB);.void
25690 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e   sqlite3DeleteIn
256a0 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74  dexSamples(sqlit
256b0 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  e3*,Index*);.voi
256c0 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74  d sqlite3Default
256d0 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a  RowEst(Index*);.
256e0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
256f0 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  sterLikeFunction
25700 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  s(sqlite3*, int)
25710 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c  ;.int sqlite3IsL
25720 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  ikeFunction(sqli
25730 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c  te3*,Expr*,int*,
25740 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
25750 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69 6c 65 46  ite3MinimumFileF
25760 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c 20 69 6e  ormat(Parse*, in
25770 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
25780 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72  lite3SchemaClear
25790 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61  (void *);.Schema
257a0 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47   *sqlite3SchemaG
257b0 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74  et(sqlite3 *, Bt
257c0 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ree *);.int sqli
257d0 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78  te3SchemaToIndex
257e0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63  (sqlite3 *db, Sc
257f0 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f  hema *);.KeyInfo
25800 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
25810 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69  Alloc(sqlite3*,i
25820 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
25830 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65  lite3KeyInfoUnre
25840 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79  f(KeyInfo*);.Key
25850 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
25860 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a  InfoRef(KeyInfo*
25870 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
25880 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65  te3KeyInfoOfInde
25890 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  x(Parse*, Index*
258a0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
258b0 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74  _DEBUG.int sqlit
258c0 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65  e3KeyInfoIsWrite
258d0 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  able(KeyInfo*);.
258e0 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
258f0 65 33 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c  e3CreateFunc(sql
25900 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
25910 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ar *, int, int, 
25920 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f 69 64 20  void *, .  void 
25930 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
25940 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
25950 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f  _value **),.  vo
25960 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
25970 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
25980 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76  te3_value **), v
25990 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
259a0 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e  context*),.  Fun
259b0 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65  cDestructor *pDe
259c0 73 74 72 75 63 74 6f 72 0a 29 3b 0a 69 6e 74 20  structor.);.int 
259d0 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 73  sqlite3ApiExit(s
259e0 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29  qlite3 *db, int)
259f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65  ;.int sqlite3Ope
25a00 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28 50 61  nTempDatabase(Pa
25a10 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71  rse *);..void sq
25a20 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69  lite3StrAccumIni
25a30 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 68 61  t(StrAccum*, cha
25a40 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
25a50 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
25a60 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63  cumAppend(StrAcc
25a70 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  um*,const char*,
25a80 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
25a90 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
25aa0 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f  All(StrAccum*,co
25ab0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
25ac0 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64 53 70   sqlite3AppendSp
25ad0 61 63 65 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e  ace(StrAccum*,in
25ae0 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  t);.char *sqlite
25af0 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28  3StrAccumFinish(
25b00 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64  StrAccum*);.void
25b10 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
25b20 52 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29  Reset(StrAccum*)
25b30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
25b40 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c  lectDestInit(Sel
25b50 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74  ectDest*,int,int
25b60 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
25b70 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72  CreateColumnExpr
25b80 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c  (sqlite3 *, SrcL
25b90 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ist *, int, int)
25ba0 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  ;..void sqlite3B
25bb0 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c  ackupRestart(sql
25bc0 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a  ite3_backup *);.
25bd0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b  void sqlite3Back
25be0 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33  upUpdate(sqlite3
25bf0 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c  _backup *, Pgno,
25c00 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23   const u8 *);..#
25c10 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
25c20 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
25c30 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  T4.void sqlite3A
25c40 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28  nalyzeFunctions(
25c50 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74  void);.int sqlit
25c60 65 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56  e3Stat4ProbeSetV
25c70 61 6c 75 65 28 50 61 72 73 65 2a 2c 49 6e 64 65  alue(Parse*,Inde
25c80 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  x*,UnpackedRecor
25c90 64 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c 69 6e 74  d**,Expr*,u8,int
25ca0 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ,int*);.int sqli
25cb0 74 65 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f  te3Stat4ValueFro
25cc0 6d 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78  mExpr(Parse*, Ex
25cd0 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33  pr*, u8, sqlite3
25ce0 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20  _value**);.void 
25cf0 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
25d00 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65  eFree(UnpackedRe
25d10 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  cord*);.int sqli
25d20 74 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73  te3Stat4Column(s
25d30 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76  qlite3*, const v
25d40 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  oid*, int, int, 
25d50 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
25d60 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
25d70 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f  The interface to
25d80 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72   the LEMON-gener
25d90 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76  ated parser.*/.v
25da0 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73  oid *sqlite3Pars
25db0 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29  erAlloc(void*(*)
25dc0 28 75 36 34 29 29 3b 0a 76 6f 69 64 20 73 71 6c  (u64));.void sql
25dd0 69 74 65 33 50 61 72 73 65 72 46 72 65 65 28 76  ite3ParserFree(v
25de0 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f  oid*, void(*)(vo
25df0 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  id*));.void sqli
25e00 74 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c  te3Parser(void*,
25e10 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72   int, Token, Par
25e20 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59 54  se*);.#ifdef YYT
25e30 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54  RACKMAXSTACKDEPT
25e40 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50  H.  int sqlite3P
25e50 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76  arserStackPeak(v
25e60 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76  oid*);.#endif..v
25e70 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c  oid sqlite3AutoL
25e80 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oadExtensions(sq
25e90 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66  lite3*);.#ifndef
25ea0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41   SQLITE_OMIT_LOA
25eb0 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f  D_EXTENSION.  vo
25ec0 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45  id sqlite3CloseE
25ed0 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
25ee0 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  3*);.#else.# def
25ef0 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  ine sqlite3Close
25f00 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65  Extensions(X).#e
25f10 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
25f20 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
25f30 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71  _CACHE.  void sq
25f40 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50  lite3TableLock(P
25f50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  arse *, int, int
25f60 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72  , u8, const char
25f70 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
25f80 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c  fine sqlite3Tabl
25f90 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29  eLock(v,w,x,y,z)
25fa0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
25fb0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e  SQLITE_TEST.  in
25fc0 74 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38  t sqlite3Utf8To8
25fd0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29  (unsigned char*)
25fe0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
25ff0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
26000 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
26010 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43  ine sqlite3VtabC
26020 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e  lear(Y).#  defin
26030 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  e sqlite3VtabSyn
26040 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b  c(X,Y) SQLITE_OK
26050 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
26060 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58  e3VtabRollback(X
26070 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
26080 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29  te3VtabCommit(X)
26090 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
260a0 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29  e3VtabInSync(db)
260b0 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c   0.#  define sql
260c0 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 20  ite3VtabLock(X) 
260d0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
260e0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a  e3VtabUnlock(X).
260f0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
26100 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
26110 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
26120 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
26130 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54  t(X, Y, Z) SQLIT
26140 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
26150 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28  qlite3GetVTable(
26160 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29  X,Y)  ((VTable*)
26170 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64  0).#else.   void
26180 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
26190 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  r(sqlite3 *db, T
261a0 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20  able*);.   void 
261b0 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f  sqlite3VtabDisco
261c0 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64  nnect(sqlite3 *d
261d0 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20  b, Table *p);.  
261e0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
261f0 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62  Sync(sqlite3 *db
26200 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74  , Vdbe*);.   int
26210 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
26220 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62  back(sqlite3 *db
26230 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
26240 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69  3VtabCommit(sqli
26250 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69  te3 *db);.   voi
26260 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63  d sqlite3VtabLoc
26270 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
26280 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
26290 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29  Unlock(VTable *)
262a0 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
262b0 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
262c0 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e  sqlite3*);.   in
262d0 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  t sqlite3VtabSav
262e0 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a  epoint(sqlite3 *
262f0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20  , int, int);.   
26300 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
26310 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64 62  ImportErrmsg(Vdb
26320 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62  e*, sqlite3_vtab
26330 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73  *);.   VTable *s
26340 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28  qlite3GetVTable(
26350 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a  sqlite3*, Table*
26360 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  );.#  define sql
26370 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64  ite3VtabInSync(d
26380 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e  b) ((db)->nVTran
26390 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54  s>0 && (db)->aVT
263a0 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a  rans==0).#endif.
263b0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
263c0 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72  MakeWritable(Par
263d0 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69  se*,Table*);.voi
263e0 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  d sqlite3VtabBeg
263f0 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  inParse(Parse*, 
26400 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
26410 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Token*, int);.vo
26420 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46 69  id sqlite3VtabFi
26430 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65 2a  nishParse(Parse*
26440 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
26450 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e  sqlite3VtabArgIn
26460 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  it(Parse*);.void
26470 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 45   sqlite3VtabArgE
26480 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f  xtend(Parse*, To
26490 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
264a0 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65  e3VtabCallCreate
264b0 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
264c0 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68  const char *, ch
264d0 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ar **);.int sqli
264e0 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65  te3VtabCallConne
264f0 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ct(Parse*, Table
26500 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
26510 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73  tabCallDestroy(s
26520 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
26530 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74  nst char *);.int
26540 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
26550 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61  n(sqlite3 *, VTa
26560 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20  ble *);.FuncDef 
26570 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72  *sqlite3VtabOver
26580 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  loadFunction(sql
26590 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c  ite3 *,FuncDef*,
265a0 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a   int nArg, Expr*
265b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
265c0 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73  nvalidFunction(s
265d0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
265e0 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
265f0 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e  e**);.sqlite3_in
26600 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43  t64 sqlite3StmtC
26610 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74  urrentTime(sqlit
26620 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e  e3_context*);.in
26630 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72  t sqlite3VdbePar
26640 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65  ameterIndex(Vdbe
26650 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
26660 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
26670 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67  3TransferBinding
26680 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  s(sqlite3_stmt *
26690 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  , sqlite3_stmt *
266a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
266b0 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73 65  arserReset(Parse
266c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
266d0 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b  eprepare(Vdbe*);
266e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
266f0 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68  rListCheckLength
26700 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
26710 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
26720 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
26730 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43  e3BinaryCompareC
26740 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
26750 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b  Expr *, Expr *);
26760 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70  .int sqlite3Temp
26770 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73  InMemory(const s
26780 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20  qlite3*);.const 
26790 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75  char *sqlite3Jou
267a0 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74  rnalModename(int
267b0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
267c0 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74  E_OMIT_WAL.  int
267d0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
267e0 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  nt(sqlite3*, int
267f0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
26800 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
26810 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28  3WalDefaultHook(
26820 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
26830 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
26840 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
26850 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a  SQLITE_OMIT_CTE.
26860 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57    With *sqlite3W
26870 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69  ithAdd(Parse*,Wi
26880 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  th*,Token*,ExprL
26890 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  ist*,Select*);. 
268a0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74   void sqlite3Wit
268b0 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  hDelete(sqlite3*
268c0 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20  ,With*);.  void 
268d0 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28  sqlite3WithPush(
268e0 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75  Parse*, With*, u
268f0 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  8);.#else.#defin
26900 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73  e sqlite3WithPus
26910 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65  h(x,y,z).#define
26920 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
26930 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a  te(x,y).#endif..
26940 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20  /* Declarations 
26950 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e  for functions in
26960 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20   fkey.c. All of 
26970 74 68 65 73 65 20 61 72 65 20 72 65 70 6c 61 63  these are replac
26980 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d  ed by.** no-op m
26990 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f  acros if OMIT_FO
269a0 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66  REIGN_KEY is def
269b0 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ined. In this ca
269c0 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a  se no foreign.**
269d0 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69   key functionali
269e0 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e  ty is available.
269f0 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52   If OMIT_TRIGGER
26a00 20 69 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a   is defined but.
26a10 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  ** OMIT_FOREIGN_
26a20 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79  KEY is not, only
26a30 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   some of the fun
26a40 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70  ctions are no-op
26a50 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63  ed. In.** this c
26a60 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ase foreign keys
26a70 20 61 72 65 20 70 61 72 73 65 64 2c 20 62 75 74   are parsed, but
26a80 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69   no other functi
26a90 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a 20 70  onality is .** p
26aa0 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65  rovided (enforce
26ab0 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74  ment of FK const
26ac0 72 61 69 6e 74 73 20 72 65 71 75 69 72 65 73 20  raints requires 
26ad0 74 68 65 20 74 72 69 67 67 65 72 73 20 73 75 62  the triggers sub
26ae0 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66  -system)..*/.#if
26af0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
26b00 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
26b10 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  Y) && !defined(S
26b20 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
26b30 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ER).  void sqlit
26b40 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a  e3FkCheck(Parse*
26b50 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
26b60 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
26b70 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
26b80 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
26b90 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62  , SrcList *, Tab
26ba0 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  le*);.  void sql
26bb0 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61  ite3FkActions(Pa
26bc0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
26bd0 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
26be0 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20  t*, int);.  int 
26bf0 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65  sqlite3FkRequire
26c00 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  d(Parse*, Table*
26c10 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
26c20 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64  u32 sqlite3FkOld
26c30 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  mask(Parse*, Tab
26c40 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71  le*);.  FKey *sq
26c50 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65  lite3FkReference
26c60 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73  s(Table *);.#els
26c70 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
26c80 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62  te3FkActions(a,b
26c90 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66  ,c,d,e,f).  #def
26ca0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65  ine sqlite3FkChe
26cb0 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a  ck(a,b,c,d,e,f).
26cc0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
26cd0 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62  3FkDropTable(a,b
26ce0 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,c).  #define sq
26cf0 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61  lite3FkOldmask(a
26d00 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a 20 20  ,b)         0.  
26d10 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
26d20 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c  kRequired(a,b,c,
26d30 64 29 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23  d)    0.#endif.#
26d40 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
26d50 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20  IT_FOREIGN_KEY. 
26d60 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
26d70 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c  elete(sqlite3 *,
26d80 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20   Table*);.  int 
26d90 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
26da0 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c  ndex(Parse*,Tabl
26db0 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a  e*,FKey*,Index**
26dc0 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20  ,int**);.#else. 
26dd0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
26de0 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20  FkDelete(a,b).  
26df0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
26e00 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62  kLocateIndex(a,b
26e10 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a  ,c,d,e).#endif..
26e20 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65  ./*.** Available
26e30 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73   fault injectors
26e40 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d  .  Should be num
26e50 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20  bered beginning 
26e60 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69  with 0..*/.#defi
26e70 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
26e80 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20  NJECTOR_MALLOC  
26e90 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c     0.#define SQL
26ea0 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f  ITE_FAULTINJECTO
26eb0 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a  R_COUNT      1..
26ec0 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
26ed0 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20  ace to the code 
26ee0 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20  in fault.c used 
26ef0 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20  for identifying 
26f00 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c  "benign".** mall
26f10 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69  oc failures. Thi
26f20 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e  s is only presen
26f30 74 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  t if SQLITE_OMIT
26f40 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a  _BUILTIN_TEST.**
26f50 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e   is not defined.
26f60 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
26f70 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
26f80 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  TEST.  void sqli
26f90 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
26fa0 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f  lloc(void);.  vo
26fb0 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  id sqlite3EndBen
26fc0 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
26fd0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
26fe0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
26ff0 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64  ignMalloc().  #d
27000 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64  efine sqlite3End
27010 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23  BenignMalloc().#
27020 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  endif../*.** All
27030 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75  owed return valu
27040 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46  es from sqlite3F
27050 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a  indInIndex().*/.
27060 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
27070 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20  _ROWID        1 
27080 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20    /* Search the 
27090 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
270a0 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  le */.#define IN
270b0 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20  _INDEX_EPH      
270c0 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63      2   /* Searc
270d0 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62  h an ephemeral b
270e0 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65  -tree */.#define
270f0 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
27100 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78  ASC    3   /* Ex
27110 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43  isting index ASC
27120 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e  ENDING */.#defin
27130 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
27140 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45  _DESC   4   /* E
27150 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45  xisting index DE
27160 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66  SCENDING */.#def
27170 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  ine IN_INDEX_NOO
27180 50 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a  P         5   /*
27190 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61   No table availa
271a0 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69  ble. Use compari
271b0 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c  sons */./*.** Al
271c0 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20  lowed flags for 
271d0 74 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65  the 3rd paramete
271e0 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64  r to sqlite3Find
271f0 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64  InIndex()..*/.#d
27200 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e  efine IN_INDEX_N
27210 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30  OOP_OK     0x000
27220 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75  1  /* OK to retu
27230 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  rn IN_INDEX_NOOP
27240 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
27250 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20  NDEX_MEMBERSHIP 
27260 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f   0x0002  /* IN o
27270 70 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72  perator used for
27280 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74   membership test
27290 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
272a0 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20  NDEX_LOOP       
272b0 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f   0x0004  /* IN o
272c0 70 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20  perator used as 
272d0 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71  a loop */.int sq
272e0 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
272f0 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
27300 2c 20 75 33 32 2c 20 69 6e 74 2a 29 3b 0a 0a 23  , u32, int*);..#
27310 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
27320 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  BLE_ATOMIC_WRITE
27330 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
27340 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
27350 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63  3_vfs *, const c
27360 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66  har *, sqlite3_f
27370 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ile *, int, int)
27380 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ;.  int sqlite3J
27390 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74  ournalSize(sqlit
273a0 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74  e3_vfs *);.  int
273b0 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43   sqlite3JournalC
273c0 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69  reate(sqlite3_fi
273d0 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  le *);.  int sql
273e0 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74  ite3JournalExist
273f0 73 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  s(sqlite3_file *
27400 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  p);.#else.  #def
27410 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  ine sqlite3Journ
27420 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28 70  alSize(pVfs) ((p
27430 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a  Vfs)->szOsFile).
27440 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
27450 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 70  3JournalExists(p
27460 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  ) 1.#endif..void
27470 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
27480 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66  alOpen(sqlite3_f
27490 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ile *);.int sqli
274a0 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a  te3MemJournalSiz
274b0 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  e(void);.int sql
274c0 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c  ite3IsMemJournal
274d0 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
274e0 3b 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  ;..#if SQLITE_MA
274f0 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
27500 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70   void sqlite3Exp
27510 72 53 65 74 48 65 69 67 68 74 28 50 61 72 73 65  rSetHeight(Parse
27520 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
27530 70 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  p);.  int sqlite
27540 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68  3SelectExprHeigh
27550 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69  t(Select *);.  i
27560 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  nt sqlite3ExprCh
27570 65 63 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a  eckHeight(Parse*
27580 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20  , int);.#else.  
27590 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45  #define sqlite3E
275a0 78 70 72 53 65 74 48 65 69 67 68 74 28 78 2c 79  xprSetHeight(x,y
275b0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
275c0 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69  te3SelectExprHei
275d0 67 68 74 28 78 29 20 30 0a 20 20 23 64 65 66 69  ght(x) 0.  #defi
275e0 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  ne sqlite3ExprCh
275f0 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23  eckHeight(x,y).#
27600 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74  endif..u32 sqlit
27610 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74  e3Get4byte(const
27620 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u8*);.void sqli
27630 74 65 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c  te3Put4byte(u8*,
27640 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53   u32);..#ifdef S
27650 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c  QLITE_ENABLE_UNL
27660 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69  OCK_NOTIFY.  voi
27670 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
27680 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74  ionBlocked(sqlit
27690 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29  e3 *, sqlite3 *)
276a0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
276b0 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b  ConnectionUnlock
276c0 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ed(sqlite3 *db);
276d0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
276e0 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28  onnectionClosed(
276f0 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65  sqlite3 *db);.#e
27700 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
27710 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42  lite3ConnectionB
27720 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64  locked(x,y).  #d
27730 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
27740 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28  nectionUnlocked(
27750 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  x).  #define sql
27760 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c  ite3ConnectionCl
27770 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a  osed(x).#endif..
27780 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
27790 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BUG.  void sqlit
277a0 65 33 50 61 72 73 65 72 54 72 61 63 65 28 46 49  e3ParserTrace(FI
277b0 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65  LE*, char *);.#e
277c0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74  ndif../*.** If t
277d0 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  he SQLITE_ENABLE
277e0 20 49 4f 54 52 41 43 45 20 65 78 69 73 74 73 20   IOTRACE exists 
277f0 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20  then the global 
27800 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69  variable.** sqli
27810 74 65 33 49 6f 54 72 61 63 65 20 69 73 20 61 20  te3IoTrace is a 
27820 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69  pointer to a pri
27830 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65  ntf-like routine
27840 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e   used to.** prin
27850 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65  t I/O tracing me
27860 73 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64  ssages. .*/.#ifd
27870 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
27880 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e  _IOTRACE.# defin
27890 65 20 49 4f 54 52 41 43 45 28 41 29 20 20 69 66  e IOTRACE(A)  if
278a0 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  ( sqlite3IoTrace
278b0 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61   ){ sqlite3IoTra
278c0 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73  ce A; }.  void s
278d0 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
278e0 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c  eSql(Vdbe*);.SQL
278f0 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20  ITE_EXTERN void 
27900 28 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  (*sqlite3IoTrace
27910 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  )(const char*,..
27920 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  .);.#else.# defi
27930 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20  ne IOTRACE(A).# 
27940 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64  define sqlite3Vd
27950 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a  beIOTraceSql(X).
27960 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
27970 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65  ese routines are
27980 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74   available for t
27990 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67  he mem2.c debugg
279a0 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ing memory alloc
279b0 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54  ator.** only.  T
279c0 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20  hey are used to 
279d0 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66  verify that diff
279e0 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66  erent "types" of
279f0 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63   memory.** alloc
27a00 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65  ations are prope
27a10 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74  rly tracked by t
27a20 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a  he system..**.**
27a30 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
27a40 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74  SetType() sets t
27a50 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20  he "type" of an 
27a60 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e  allocation to on
27a70 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54  e of.** the MEMT
27a80 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66  YPE_* macros def
27a90 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65  ined below.  The
27aa0 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20   type must be a 
27ab0 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20  bitmask with.** 
27ac0 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74  a single bit set
27ad0 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  ..**.** sqlite3M
27ae0 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
27af0 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
27b00 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73   any of the bits
27b10 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a   in its second.*
27b20 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68  * argument match
27b30 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79   the type set by
27b40 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71   the previous sq
27b50 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
27b60 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74  Type()..** sqlit
27b70 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
27b80 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20  e() is intended 
27b90 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61  for use inside a
27ba0 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
27bb0 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  ts..**.** sqlite
27bc0 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
27bd0 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
27be0 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69  f none of the bi
27bf0 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64  ts in its second
27c00 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74  .** argument mat
27c10 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20  ch the type set 
27c20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  by the previous 
27c30 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
27c40 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20  etType()..**.** 
27c50 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74  Perhaps the most
27c60 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74   important point
27c70 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e   is the differen
27c80 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59  ce between MEMTY
27c90 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d  PE_HEAP.** and M
27ca0 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
27cb0 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74  .  If an allocat
27cc0 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c  ion is MEMTYPE_L
27cd0 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d  OOKASIDE, that m
27ce0 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74  eans.** it might
27cf0 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63   have been alloc
27d00 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64  ated by lookasid
27d10 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c  e, except the al
27d20 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20  location was.** 
27d30 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f  too large or loo
27d40 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61  kaside was alrea
27d50 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20  dy full.  It is 
27d60 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72  important to ver
27d70 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f  ify.** that allo
27d80 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67  cations that mig
27d90 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74  ht have been sat
27da0 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73  isfied by lookas
27db0 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70  ide are not.** p
27dc0 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f  assed back to no
27dd0 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65  n-lookaside free
27de0 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73  () routines.  As
27df0 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68  serts such as th
27e00 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f  e.** example abo
27e10 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e  ve are placed on
27e20 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69   the non-lookasi
27e30 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e  de free() routin
27e40 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20  es to verify.** 
27e50 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e  this constraint.
27e60 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74   .**.** All of t
27e70 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72  his is no-op for
27e80 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75   a production bu
27e90 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f  ild.  It only co
27ea0 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79  mes into.** play
27eb0 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45   when the SQLITE
27ec0 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c  _MEMDEBUG compil
27ed0 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  e-time option is
27ee0 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66   used..*/.#ifdef
27ef0 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
27f00 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  .  void sqlite3M
27f10 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76  emdebugSetType(v
27f20 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
27f30 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
27f40 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  asType(void*,u8)
27f50 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
27f60 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f  emdebugNoType(vo
27f70 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23  id*,u8);.#else.#
27f80 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
27f90 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58  emdebugSetType(X
27fa0 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f  ,Y)  /* no-op */
27fb0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27fc0 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
27fd0 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e  (X,Y)  1.# defin
27fe0 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
27ff0 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31  gNoType(X,Y)   1
28000 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20  .#endif.#define 
28010 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20  MEMTYPE_HEAP    
28020 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65     0x01  /* Gene
28030 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74  ral heap allocat
28040 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
28050 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
28060 45 20 20 30 78 30 32 20 20 2f 2a 20 4d 69 67 68  E  0x02  /* Migh
28070 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b  t have been look
28080 61 73 69 64 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a  aside memory */.
28090 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
280a0 53 43 52 41 54 43 48 20 20 20 20 30 78 30 34 20  SCRATCH    0x04 
280b0 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c 6c 6f   /* Scratch allo
280c0 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  cations */.#defi
280d0 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48  ne MEMTYPE_PCACH
280e0 45 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20 50  E     0x08  /* P
280f0 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61  age cache alloca
28100 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
28110 20 4d 45 4d 54 59 50 45 5f 44 42 20 20 20 20 20   MEMTYPE_DB     
28120 20 20 20 20 30 78 31 30 20 20 2f 2a 20 55 73 65      0x10  /* Use
28130 73 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  s sqlite3DbMallo
28140 63 2c 20 6e 6f 74 20 73 71 6c 69 74 65 5f 6d 61  c, not sqlite_ma
28150 6c 6c 6f 63 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  lloc */../*.** T
28160 68 72 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61  hreading interfa
28170 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  ce.*/.#if SQLITE
28180 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
28190 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65  ADS>0.int sqlite
281a0 33 54 68 72 65 61 64 43 72 65 61 74 65 28 53 51  3ThreadCreate(SQ
281b0 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69  LiteThread**,voi
281c0 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69  d*(*)(void*),voi
281d0 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
281e0 54 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74  ThreadJoin(SQLit
281f0 65 54 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a  eThread*, void**
28200 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69  );.#endif..#endi
28210 66 20 2f 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f  f /* _SQLITEINT_
28220 48 5f 20 2a 2f 0a                                H_ */.