/ Hex Artifact Content
Login

Artifact 28049b803b74a7f73242a8226915ea00ebb1309f:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75 73  .** The previous
0540: 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20 77   paragraph was w
0550: 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e 20  ritten in 2005. 
0560: 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70 68   (This paragraph
0570: 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 6f   is written.** o
0580: 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20 54  n 2008-11-28.) T
0590: 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20 4c  hese days, all L
05a0: 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75 70  inux kernels sup
05b0: 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65 73  port large files
05c0: 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f 75  , so.** you shou
05d0: 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61 76  ld probably leav
05e0: 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20 20  e LFS enabled.  
05f0: 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64 65  But some embedde
0600: 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67 68  d platforms migh
0610: 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69 6e  t.** lack LFS in
0620: 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
0630: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0640: 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20 73  FS macro might s
0650: 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e 0a  till be useful..
0660: 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73  **.** Similar is
0670: 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53   true for Mac OS
0680: 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79   X.  LFS is only
0690: 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61   supported on Ma
06a0: 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74  c OS X 9 and lat
06b0: 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  er..*/.#ifndef S
06c0: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46  QLITE_DISABLE_LF
06d0: 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  S.# define _LARG
06e0: 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23  E_FILE       1.#
06f0: 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46   ifndef _FILE_OF
0700: 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65  FSET_BITS.#   de
0710: 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45  fine _FILE_OFFSE
0720: 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69  T_BITS 64.# endi
0730: 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  f.# define _LARG
0740: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23  EFILE_SOURCE 1.#
0750: 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65 65 64 65 64  endif../* Needed
0760: 20 66 6f 72 20 76 61 72 69 6f 75 73 20 64 65 66   for various def
0770: 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20 2a 2f 0a 23  initions... */.#
0780: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55  if defined(__GNU
0790: 43 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  C__) && !defined
07a0: 28 5f 47 4e 55 5f 53 4f 55 52 43 45 29 0a 23 20  (_GNU_SOURCE).# 
07b0: 64 65 66 69 6e 65 20 5f 47 4e 55 5f 53 4f 55 52  define _GNU_SOUR
07c0: 43 45 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  CE.#endif..#if d
07d0: 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44  efined(__OpenBSD
07e0: 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  __) && !defined(
07f0: 5f 42 53 44 5f 53 4f 55 52 43 45 29 0a 23 20 64  _BSD_SOURCE).# d
0800: 65 66 69 6e 65 20 5f 42 53 44 5f 53 4f 55 52 43  efine _BSD_SOURC
0810: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
0820: 46 6f 72 20 4d 69 6e 47 57 2c 20 63 68 65 63 6b  For MinGW, check
0830: 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 63 61   to see if we ca
0840: 6e 20 69 6e 63 6c 75 64 65 20 74 68 65 20 68 65  n include the he
0850: 61 64 65 72 20 66 69 6c 65 20 63 6f 6e 74 61 69  ader file contai
0860: 6e 69 6e 67 20 69 74 73 0a 2a 2a 20 76 65 72 73  ning its.** vers
0870: 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c  ion information,
0880: 20 61 6d 6f 6e 67 20 6f 74 68 65 72 20 74 68 69   among other thi
0890: 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20  ngs.  Normally, 
08a0: 74 68 69 73 20 69 6e 74 65 72 6e 61 6c 20 4d 69  this internal Mi
08b0: 6e 47 57 0a 2a 2a 20 68 65 61 64 65 72 20 66 69  nGW.** header fi
08c0: 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e 6c 79 5d 20  le would [only] 
08d0: 62 65 20 69 6e 63 6c 75 64 65 64 20 61 75 74 6f  be included auto
08e0: 6d 61 74 69 63 61 6c 6c 79 20 62 79 20 6f 74 68  matically by oth
08f0: 65 72 20 4d 69 6e 47 57 20 68 65 61 64 65 72 0a  er MinGW header.
0900: 2a 2a 20 66 69 6c 65 73 3b 20 68 6f 77 65 76 65  ** files; howeve
0910: 72 2c 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 64  r, the contained
0920: 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61   version informa
0930: 74 69 6f 6e 20 69 73 20 6e 6f 77 20 72 65 71 75  tion is now requ
0940: 69 72 65 64 20 62 79 20 74 68 69 73 0a 2a 2a 20  ired by this.** 
0950: 68 65 61 64 65 72 20 66 69 6c 65 20 74 6f 20 77  header file to w
0960: 6f 72 6b 20 61 72 6f 75 6e 64 20 62 69 6e 61 72  ork around binar
0970: 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  y compatibility 
0980: 69 73 73 75 65 73 20 28 73 65 65 20 62 65 6c 6f  issues (see belo
0990: 77 29 20 61 6e 64 0a 2a 2a 20 74 68 69 73 20 69  w) and.** this i
09a0: 73 20 74 68 65 20 6f 6e 6c 79 20 6b 6e 6f 77 6e  s the only known
09b0: 20 77 61 79 20 74 6f 20 72 65 6c 69 61 62 6c 79   way to reliably
09c0: 20 6f 62 74 61 69 6e 20 69 74 2e 20 20 54 68 69   obtain it.  Thi
09d0: 73 20 65 6e 74 69 72 65 20 23 69 66 20 62 6c 6f  s entire #if blo
09e0: 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20 62 65 20 63  ck.** would be c
09f0: 6f 6d 70 6c 65 74 65 6c 79 20 75 6e 6e 65 63 65  ompletely unnece
0a00: 73 73 61 72 79 20 69 66 20 74 68 65 72 65 20 77  ssary if there w
0a10: 61 73 20 61 6e 79 20 6f 74 68 65 72 20 77 61 79  as any other way
0a20: 20 6f 66 20 64 65 74 65 63 74 69 6e 67 0a 2a 2a   of detecting.**
0a30: 20 4d 69 6e 47 57 20 76 69 61 20 74 68 65 69 72   MinGW via their
0a40: 20 70 72 65 70 72 6f 63 65 73 73 6f 72 20 28 65   preprocessor (e
0a50: 2e 67 2e 20 69 66 20 74 68 65 79 20 63 75 73 74  .g. if they cust
0a60: 6f 6d 69 7a 65 64 20 74 68 65 69 72 20 47 43 43  omized their GCC
0a70: 20 74 6f 20 64 65 66 69 6e 65 0a 2a 2a 20 73 6f   to define.** so
0a80: 6d 65 20 4d 69 6e 47 57 2d 73 70 65 63 69 66 69  me MinGW-specifi
0a90: 63 20 6d 61 63 72 6f 73 29 2e 20 20 57 68 65 6e  c macros).  When
0aa0: 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 4d   compiling for M
0ab0: 69 6e 47 57 2c 20 65 69 74 68 65 72 20 74 68 65  inGW, either the
0ac0: 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49 4e 47 57 5f  .** _HAVE_MINGW_
0ad0: 48 20 6f 72 20 5f 48 41 56 45 5f 5f 4d 49 4e 47  H or _HAVE__MING
0ae0: 57 5f 48 20 28 6e 6f 74 65 20 74 68 65 20 65 78  W_H (note the ex
0af0: 74 72 61 20 75 6e 64 65 72 73 63 6f 72 65 29 20  tra underscore) 
0b00: 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 0a 2a 2a  macro must be.**
0b10: 20 64 65 66 69 6e 65 64 3b 20 6f 74 68 65 72 77   defined; otherw
0b20: 69 73 65 2c 20 64 65 74 65 63 74 69 6f 6e 20 6f  ise, detection o
0b30: 66 20 63 6f 6e 64 69 74 69 6f 6e 73 20 73 70 65  f conditions spe
0b40: 63 69 66 69 63 20 74 6f 20 4d 69 6e 47 57 20 77  cific to MinGW w
0b50: 69 6c 6c 20 62 65 0a 2a 2a 20 64 69 73 61 62 6c  ill be.** disabl
0b60: 65 64 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ed..*/.#if defin
0b70: 65 64 28 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48  ed(_HAVE_MINGW_H
0b80: 29 0a 23 20 69 6e 63 6c 75 64 65 20 22 6d 69 6e  ).# include "min
0b90: 67 77 2e 68 22 0a 23 65 6c 69 66 20 64 65 66 69  gw.h".#elif defi
0ba0: 6e 65 64 28 5f 48 41 56 45 5f 5f 4d 49 4e 47 57  ned(_HAVE__MINGW
0bb0: 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20 22 5f  _H).# include "_
0bc0: 6d 69 6e 67 77 2e 68 22 0a 23 65 6e 64 69 66 0a  mingw.h".#endif.
0bd0: 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57  ./*.** For MinGW
0be0: 20 76 65 72 73 69 6f 6e 20 34 2e 78 20 28 61 6e   version 4.x (an
0bf0: 64 20 68 69 67 68 65 72 29 2c 20 63 68 65 63 6b  d higher), check
0c00: 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 5f   to see if the _
0c10: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
0c20: 0a 2a 2a 20 64 65 66 69 6e 65 20 69 73 20 72 65  .** define is re
0c30: 71 75 69 72 65 64 20 74 6f 20 6d 61 69 6e 74 61  quired to mainta
0c40: 69 6e 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74  in binary compat
0c50: 69 62 69 6c 69 74 79 20 77 69 74 68 20 74 68 65  ibility with the
0c60: 20 4d 53 56 43 20 72 75 6e 74 69 6d 65 0a 2a 2a   MSVC runtime.**
0c70: 20 6c 69 62 72 61 72 79 20 69 6e 20 75 73 65 20   library in use 
0c80: 28 65 2e 67 2e 20 66 6f 72 20 57 69 6e 64 6f 77  (e.g. for Window
0c90: 73 20 58 50 29 2e 0a 2a 2f 0a 23 69 66 20 21 64  s XP)..*/.#if !d
0ca0: 65 66 69 6e 65 64 28 5f 55 53 45 5f 33 32 42 49  efined(_USE_32BI
0cb0: 54 5f 54 49 4d 45 5f 54 29 20 26 26 20 21 64 65  T_TIME_T) && !de
0cc0: 66 69 6e 65 64 28 5f 55 53 45 5f 36 34 42 49 54  fined(_USE_64BIT
0cd0: 5f 54 49 4d 45 5f 54 29 20 26 26 20 5c 0a 20 20  _TIME_T) && \.  
0ce0: 20 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32    defined(_WIN32
0cf0: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57  ) && !defined(_W
0d00: 49 4e 36 34 29 20 26 26 20 5c 0a 20 20 20 20 64  IN64) && \.    d
0d10: 65 66 69 6e 65 64 28 5f 5f 4d 49 4e 47 57 5f 4d  efined(__MINGW_M
0d20: 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 29 20 26 26  AJOR_VERSION) &&
0d30: 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56   __MINGW_MAJOR_V
0d40: 45 52 53 49 4f 4e 20 3e 3d 20 34 20 26 26 20 5c  ERSION >= 4 && \
0d50: 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d  .    defined(__M
0d60: 53 56 43 52 54 5f 5f 29 0a 23 20 64 65 66 69 6e  SVCRT__).# defin
0d70: 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49 4d  e _USE_32BIT_TIM
0d80: 45 5f 54 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54  E_T.#endif../* T
0d90: 68 65 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65  he public SQLite
0da0: 20 69 6e 74 65 72 66 61 63 65 2e 20 20 54 68 65   interface.  The
0db0: 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49   _FILE_OFFSET_BI
0dc0: 54 53 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70  TS macro must ap
0dd0: 70 65 61 72 0a 2a 2a 20 66 69 72 73 74 20 69 6e  pear.** first in
0de0: 20 51 4e 58 2e 20 20 41 6c 73 6f 2c 20 74 68 65   QNX.  Also, the
0df0: 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45   _USE_32BIT_TIME
0e00: 5f 54 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70  _T macro must ap
0e10: 70 65 61 72 20 66 69 72 73 74 20 66 6f 72 0a 2a  pear first for.*
0e20: 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a 23 69 6e 63  * MinGW..*/.#inc
0e30: 6c 75 64 65 20 22 73 71 6c 69 74 65 33 2e 68 22  lude "sqlite3.h"
0e40: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0e50: 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  the configuratio
0e60: 6e 20 68 65 61 64 65 72 20 6f 75 74 70 75 74 20  n header output 
0e70: 62 79 20 27 63 6f 6e 66 69 67 75 72 65 27 20 69  by 'configure' i
0e80: 66 20 77 65 27 72 65 20 75 73 69 6e 67 20 74 68  f we're using th
0e90: 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e 66 2d 62 61  e.** autoconf-ba
0ea0: 73 65 64 20 62 75 69 6c 64 0a 2a 2f 0a 23 69 66  sed build.*/.#if
0eb0: 64 65 66 20 5f 48 41 56 45 5f 53 51 4c 49 54 45  def _HAVE_SQLITE
0ec0: 5f 43 4f 4e 46 49 47 5f 48 0a 23 69 6e 63 6c 75  _CONFIG_H.#inclu
0ed0: 64 65 20 22 63 6f 6e 66 69 67 2e 68 22 0a 23 65  de "config.h".#e
0ee0: 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22  ndif..#include "
0ef0: 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a  sqliteLimit.h"..
0f00: 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61  /* Disable nuisa
0f10: 6e 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20  nce warnings on 
0f20: 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72  Borland compiler
0f30: 73 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  s */.#if defined
0f40: 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23  (__BORLANDC__).#
0f50: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68  pragma warn -rch
0f60: 20 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20   /* unreachable 
0f70: 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20  code */.#pragma 
0f80: 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e  warn -ccc /* Con
0f90: 64 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73  dition is always
0fa0: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a   true or false *
0fb0: 2f 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  /.#pragma warn -
0fc0: 61 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20  aus /* Assigned 
0fd0: 76 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75  value is never u
0fe0: 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  sed */.#pragma w
0ff0: 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70  arn -csu /* Comp
1000: 61 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64  aring signed and
1010: 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72   unsigned */.#pr
1020: 61 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f  agma warn -spa /
1030: 2a 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69  * Suspicious poi
1040: 6e 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20  nter arithmetic 
1050: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
1060: 20 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72   Include standar
1070: 64 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61  d header files a
1080: 73 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23  s necessary.*/.#
1090: 69 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e  ifdef HAVE_STDIN
10a0: 54 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  T_H.#include <st
10b0: 64 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23  dint.h>.#endif.#
10c0: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59  ifdef HAVE_INTTY
10d0: 50 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c  PES_H.#include <
10e0: 69 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64  inttypes.h>.#end
10f0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
1100: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61  llowing macros a
1110: 72 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20  re used to cast 
1120: 70 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65  pointers to inte
1130: 67 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65  gers and.** inte
1140: 67 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73  gers to pointers
1150: 2e 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64  .  The way you d
1160: 6f 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72  o this varies fr
1170: 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a  om one compiler.
1180: 2a 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20  ** to the next, 
1190: 73 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c  so we have devel
11a0: 6f 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69  oped the followi
11b0: 6e 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74  ng set of #if st
11c0: 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67  atements.** to g
11d0: 65 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69  enerate appropri
11e0: 61 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61  ate macros for a
11f0: 20 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63   wide range of c
1200: 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20  ompilers..**.** 
1210: 54 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53  The correct "ANS
1220: 49 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69  I" way to do thi
1230: 73 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20  s is to use the 
1240: 69 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 20 0a  intptr_t type. .
1250: 2a 2a 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79  ** Unfortunately
1260: 2c 20 74 68 61 74 20 74 79 70 65 64 65 66 20 69  , that typedef i
1270: 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20  s not available 
1280: 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73  on all compilers
1290: 2c 20 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73  , or.** if it is
12a0: 20 61 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72   available, it r
12b0: 65 71 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c  equires an #incl
12c0: 75 64 65 20 6f 66 20 73 70 65 63 69 66 69 63 20  ude of specific 
12d0: 68 65 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20  headers.** that 
12e0: 76 61 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61  vary from one ma
12f0: 63 68 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78  chine to the nex
1300: 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  t..**.** Ticket 
1310: 23 33 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d  #3860:  The llvm
1320: 2d 67 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65  -gcc-4.2 compile
1330: 72 20 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f  r from Apple cho
1340: 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28  kes on.** the ((
1350: 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30  void*)&((char*)0
1360: 29 5b 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e  )[X]) construct.
1370: 20 20 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65    But MSVC choke
1380: 73 20 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29  s on ((void*)(X)
1390: 29 2e 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65  )..** So we have
13a0: 20 74 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d   to define the m
13b0: 61 63 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65  acros in differe
13c0: 6e 74 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e  nt ways dependin
13d0: 67 20 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  g on the.** comp
13e0: 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  iler..*/.#if def
13f0: 69 6e 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54  ined(__PTRDIFF_T
1400: 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20  YPE__)  /* This 
1410: 63 61 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b  case should work
1420: 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65   for GCC */.# de
1430: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f  fine SQLITE_INT_
1440: 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69  TO_PTR(X)  ((voi
1450: 64 2a 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59  d*)(__PTRDIFF_TY
1460: 50 45 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69  PE__)(X)).# defi
1470: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
1480: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
1490: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
14a0: 29 28 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66  )(X)).#elif !def
14b0: 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20  ined(__GNUC__)  
14c0: 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f       /* Works fo
14d0: 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65  r compilers othe
14e0: 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23  r than LLVM */.#
14f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
1500: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
1510: 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30  void*)&((char*)0
1520: 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53  )[X]).# define S
1530: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
1540: 28 58 29 20 20 28 28 69 6e 74 29 28 28 28 63 68  (X)  ((int)(((ch
1550: 61 72 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29  ar*)X)-(char*)0)
1560: 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28  ).#elif defined(
1570: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20  HAVE_STDINT_H)  
1580: 20 2f 2a 20 55 73 65 20 74 68 69 73 20 63 61 73   /* Use this cas
1590: 65 20 69 66 20 77 65 20 68 61 76 65 20 41 4e 53  e if we have ANS
15a0: 49 20 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64  I headers */.# d
15b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
15c0: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
15d0: 69 64 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58  id*)(intptr_t)(X
15e0: 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  )).# define SQLI
15f0: 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29  TE_PTR_TO_INT(X)
1600: 20 20 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f    ((int)(intptr_
1610: 74 29 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20  t)(X)).#else    
1620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1630: 20 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74        /* Generat
1640: 65 73 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62  es a warning - b
1650: 75 74 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72  ut it always wor
1660: 6b 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  ks */.# define S
1670: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
1680: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29  (X)  ((void*)(X)
1690: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
16a0: 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20  E_PTR_TO_INT(X) 
16b0: 20 28 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64   ((int)(X)).#end
16c0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72  if../*.** A macr
16d0: 6f 20 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65  o to hint to the
16e0: 20 63 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61   compiler that a
16f0: 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64   function should
1700: 20 6e 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e   not be.** inlin
1710: 65 64 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ed..*/.#if defin
1720: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20  ed(__GNUC__).#  
1730: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
1740: 49 4e 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62  INLINE  __attrib
1750: 75 74 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29  ute__((noinline)
1760: 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28  ).#elif defined(
1770: 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53  _MSC_VER) && _MS
1780: 43 5f 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64  C_VER>=1310.#  d
1790: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49  efine SQLITE_NOI
17a0: 4e 4c 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65  NLINE  __declspe
17b0: 63 28 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73  c(noinline).#els
17c0: 65 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  e.#  define SQLI
17d0: 54 45 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64  TE_NOINLINE.#end
17e0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  if../*.** The SQ
17f0: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
1800: 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65  macro must be de
1810: 66 69 6e 65 64 20 61 73 20 30 2c 20 31 2c 20 6f  fined as 0, 1, o
1820: 72 20 32 2e 0a 2a 2a 20 30 20 6d 65 61 6e 73 20  r 2..** 0 means 
1830: 6d 75 74 65 78 65 73 20 61 72 65 20 70 65 72 6d  mutexes are perm
1840: 61 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c 65 20  anently disable 
1850: 61 6e 64 20 74 68 65 20 6c 69 62 72 61 72 79 20  and the library 
1860: 69 73 20 6e 65 76 65 72 0a 2a 2a 20 74 68 72 65  is never.** thre
1870: 61 64 73 61 66 65 2e 20 20 31 20 6d 65 61 6e 73  adsafe.  1 means
1880: 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20   the library is 
1890: 73 65 72 69 61 6c 69 7a 65 64 20 77 68 69 63 68  serialized which
18a0: 20 69 73 20 74 68 65 20 68 69 67 68 65 73 74 0a   is the highest.
18b0: 2a 2a 20 6c 65 76 65 6c 20 6f 66 20 74 68 72 65  ** level of thre
18c0: 61 64 73 61 66 65 74 79 2e 20 20 32 20 6d 65 61  adsafety.  2 mea
18d0: 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79 20 69  ns the library i
18e0: 73 20 6d 75 6c 74 69 74 68 72 65 61 64 65 64 20  s multithreaded 
18f0: 2d 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 74 68  - multiple.** th
1900: 72 65 61 64 73 20 63 61 6e 20 75 73 65 20 53 51  reads can use SQ
1910: 4c 69 74 65 20 61 73 20 6c 6f 6e 67 20 61 73 20  Lite as long as 
1920: 6e 6f 20 74 77 6f 20 74 68 72 65 61 64 73 20 74  no two threads t
1930: 72 79 20 74 6f 20 75 73 65 20 74 68 65 20 73 61  ry to use the sa
1940: 6d 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  me.** database c
1950: 6f 6e 6e 65 63 74 69 6f 6e 20 61 74 20 74 68 65  onnection at the
1960: 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a   same time..**.*
1970: 2a 20 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73  * Older versions
1980: 20 6f 66 20 53 51 4c 69 74 65 20 75 73 65 64 20   of SQLite used 
1990: 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 54 48 52 45  an optional THRE
19a0: 41 44 53 41 46 45 20 6d 61 63 72 6f 2e 0a 2a 2a  ADSAFE macro..**
19b0: 20 57 65 20 73 75 70 70 6f 72 74 20 74 68 61 74   We support that
19c0: 20 66 6f 72 20 6c 65 67 61 63 79 2e 0a 2a 2f 0a   for legacy..*/.
19d0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
19e0: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a  ITE_THREADSAFE).
19f0: 23 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52  # if defined(THR
1a00: 45 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66  EADSAFE).#   def
1a10: 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41  ine SQLITE_THREA
1a20: 44 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45  DSAFE THREADSAFE
1a30: 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69  .# else.#   defi
1a40: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
1a50: 53 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52  SAFE 1 /* IMP: R
1a60: 2d 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a  -07272-22309 */.
1a70: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a  # endif.#endif..
1a80: 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20  /*.** Powersafe 
1a90: 6f 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20  overwrite is on 
1aa0: 62 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74  by default.  But
1ab0: 20 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f   can be turned o
1ac0: 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20  ff using.** the 
1ad0: 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  -DSQLITE_POWERSA
1ae0: 46 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63  FE_OVERWRITE=0 c
1af0: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69  ommand-line opti
1b00: 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  on..*/.#ifndef S
1b10: 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f  QLITE_POWERSAFE_
1b20: 4f 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69  OVERWRITE.# defi
1b30: 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53  ne SQLITE_POWERS
1b40: 41 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a  AFE_OVERWRITE 1.
1b50: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56  #endif../*.** EV
1b60: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37  IDENCE-OF: R-257
1b70: 31 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20  15-37072 Memory 
1b80: 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69  allocation stati
1b90: 73 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65  stics are enable
1ba0: 64 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20  d by.** default 
1bb0: 75 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73  unless SQLite is
1bc0: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53   compiled with S
1bd0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45  QLITE_DEFAULT_ME
1be0: 4d 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20  MSTATUS=0 in.** 
1bf0: 77 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72  which case memor
1c00: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61  y allocation sta
1c10: 74 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61  tistics are disa
1c20: 62 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e  bled by default.
1c30: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
1c40: 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  (SQLITE_DEFAULT_
1c50: 4d 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66  MEMSTATUS).# def
1c60: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
1c70: 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23  LT_MEMSTATUS 1.#
1c80: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61  endif../*.** Exa
1c90: 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  ctly one of the 
1ca0: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
1cb0: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
1cc0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
1cd0: 73 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65  specify which me
1ce0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1cf0: 73 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65  subsystem to use
1d00: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49  ..**.**     SQLI
1d10: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
1d20: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65            // Use
1d30: 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d   normal system m
1d40: 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53  alloc().**     S
1d50: 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c  QLITE_WIN32_MALL
1d60: 4f 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  OC           // 
1d70: 55 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65  Use Win32 native
1d80: 20 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20   heap API.**    
1d90: 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c   SQLITE_ZERO_MAL
1da0: 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f  LOC            /
1db0: 2f 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c  / Use a stub all
1dc0: 6f 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61  ocator that alwa
1dd0: 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20  ys fails.**     
1de0: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20  SQLITE_MEMDEBUG 
1df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1e00: 20 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69   Debugging versi
1e10: 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c  on of system mal
1e20: 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57  loc().**.** On W
1e30: 69 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53  indows, if the S
1e40: 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c  QLITE_WIN32_MALL
1e50: 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72  OC_VALIDATE macr
1e60: 6f 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64  o is defined and
1e70: 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29   the.** assert()
1e80: 20 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65   macro is enable
1e90: 64 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74  d, each call int
1ea0: 6f 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69  o the Win32 nati
1eb0: 76 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65  ve heap subsyste
1ec0: 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20  m.** will cause 
1ed0: 48 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20  HeapValidate to 
1ee0: 62 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68  be called.  If h
1ef0: 65 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73  eap validation s
1f00: 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a  hould fail, an.*
1f10: 2a 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c  * assertion will
1f20: 20 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a   be triggered..*
1f30: 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20  *.** If none of 
1f40: 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65  the above are de
1f50: 66 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20  fined, then set 
1f60: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
1f70: 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64  LLOC as.** the d
1f80: 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64  efault..*/.#if d
1f90: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59  efined(SQLITE_SY
1fa0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  STEM_MALLOC) \. 
1fb0: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
1fc0: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20  E_WIN32_MALLOC) 
1fd0: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
1fe0: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
1ff0: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2000: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29  SQLITE_MEMDEBUG)
2010: 3e 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20  >1.# error "Two 
2020: 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66  or more of the f
2030: 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65  ollowing compile
2040: 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74  -time configurat
2050: 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72  ion options\. ar
2060: 65 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74  e defined but at
2070: 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c   most one is all
2080: 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53  owed:\. SQLITE_S
2090: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51  YSTEM_MALLOC, SQ
20a0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
20b0: 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  C, SQLITE_MEMDEB
20c0: 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52  UG,\. SQLITE_ZER
20d0: 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66  O_MALLOC".#endif
20e0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
20f0: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
2100: 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64  C) \.  + defined
2110: 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41  (SQLITE_WIN32_MA
2120: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
2130: 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f  ned(SQLITE_ZERO_
2140: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2150: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d  fined(SQLITE_MEM
2160: 44 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69  DEBUG)==0.# defi
2170: 6e 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d  ne SQLITE_SYSTEM
2180: 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66  _MALLOC 1.#endif
2190: 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54  ../*.** If SQLIT
21a0: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
21b0: 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c  MIT is not zero,
21c0: 20 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65   then try to kee
21d0: 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f  p the.** sizes o
21e0: 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  f memory allocat
21f0: 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20  ions below this 
2200: 76 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73  value where poss
2210: 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ible..*/.#if !de
2220: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c  fined(SQLITE_MAL
2230: 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a  LOC_SOFT_LIMIT).
2240: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
2250: 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49  MALLOC_SOFT_LIMI
2260: 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f  T 1024.#endif../
2270: 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20  *.** We need to 
2280: 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f  define _XOPEN_SO
2290: 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20  URCE as follows 
22a0: 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62  in order to enab
22b0: 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20  le.** recursive 
22c0: 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20  mutexes on most 
22d0: 55 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64  Unix systems and
22e0: 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65   fchmod() on Ope
22f0: 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f  nBSD..** But _XO
2300: 50 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e  PEN_SOURCE defin
2310: 65 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d  e causes problem
2320: 73 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20  s for Mac OS X, 
2330: 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a  so omit.** it..*
2340: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  /.#if !defined(_
2350: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26  XOPEN_SOURCE) &&
2360: 20 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57   !defined(__DARW
2370: 49 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65  IN__) && !define
2380: 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20  d(__APPLE__).#  
2390: 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f  define _XOPEN_SO
23a0: 55 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a  URCE 600.#endif.
23b0: 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e  ./*.** NDEBUG an
23c0: 64 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61  d SQLITE_DEBUG a
23d0: 72 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49  re opposites.  I
23e0: 74 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20  t should always 
23f0: 62 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20  be true that.** 
2400: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d  defined(NDEBUG)=
2410: 3d 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  =!defined(SQLITE
2420: 5f 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69  _DEBUG).  If thi
2430: 73 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74  s is not current
2440: 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65  ly true,.** make
2450: 20 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69   it true by defi
2460: 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69  ning or undefini
2470: 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a  ng NDEBUG..**.**
2480: 20 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20   Setting NDEBUG 
2490: 6d 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73  makes the code s
24a0: 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65  maller and faste
24b0: 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74  r by disabling t
24c0: 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73  he.** assert() s
24d0: 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65  tatements in the
24e0: 20 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61   code.  So we wa
24f0: 6e 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61  nt the default a
2500: 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66  ction.** to be f
2510: 6f 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20  or NDEBUG to be 
2520: 73 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74  set and NDEBUG t
2530: 6f 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f  o be undefined o
2540: 6e 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45  nly if SQLITE_DE
2550: 42 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20  BUG.** is set.  
2560: 54 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f  Thus NDEBUG beco
2570: 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61  mes an opt-in ra
2580: 74 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74  ther than an opt
2590: 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e  -out.** feature.
25a0: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
25b0: 28 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66  (NDEBUG) && !def
25c0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
25d0: 47 29 20 0a 23 20 64 65 66 69 6e 65 20 4e 44 45  G) .# define NDE
25e0: 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66  BUG 1.#endif.#if
25f0: 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29   defined(NDEBUG)
2600: 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
2610: 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65  TE_DEBUG).# unde
2620: 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a  f NDEBUG.#endif.
2630: 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51  ./*.** Enable SQ
2640: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
2650: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20  AIN_COMMENTS if 
2660: 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20  SQLITE_DEBUG is 
2670: 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69  turned on..*/.#i
2680: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2690: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
26a0: 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65  _COMMENTS) && de
26b0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
26c0: 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  UG).# define SQL
26d0: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
26e0: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65  IN_COMMENTS 1.#e
26f0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
2700: 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f  testcase() macro
2710: 20 69 73 20 75 73 65 64 20 74 6f 20 61 69 64 20   is used to aid 
2720: 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65 73 74  in coverage test
2730: 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a 2a 20 64  ing.  When .** d
2740: 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65  oing coverage te
2750: 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69  sting, the condi
2760: 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65 20  tion inside the 
2770: 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74  argument to.** t
2780: 65 73 74 63 61 73 65 28 29 20 6d 75 73 74 20 62  estcase() must b
2790: 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74 68  e evaluated both
27a0: 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20   true and false 
27b0: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67  in order to.** g
27c0: 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20 63  et full branch c
27d0: 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20 74 65  overage.  The te
27e0: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
27f0: 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f  s inserted.** to
2800: 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64 65   help ensure ade
2810: 71 75 61 74 65 20 74 65 73 74 20 63 6f 76 65 72  quate test cover
2820: 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77 68  age in places wh
2830: 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f  ere simple.** co
2840: 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e  ndition/decision
2850: 20 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e 61   coverage is ina
2860: 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65 78  dequate.  For ex
2870: 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65 28  ample, testcase(
2880: 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  ).** can be used
2890: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62 6f   to make sure bo
28a0: 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61 72  undary values ar
28b0: 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a  e tested.  For.*
28c0: 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73 2c  * bitmask tests,
28d0: 20 74 65 73 74 63 61 73 65 28 29 20 63 61 6e 20   testcase() can 
28e0: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
28f0: 73 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a 2a  sure each bit.**
2900: 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74 20   is significant 
2910: 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61 73  and used at leas
2920: 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74  t once.  On swit
2930: 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  ch statements.**
2940: 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65 20   where multiple 
2950: 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65 20  cases go to the 
2960: 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f  same block of co
2970: 64 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  de, testcase().*
2980: 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68 61  * can insure tha
2990: 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65 20  t all cases are 
29a0: 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f  evaluated..**.*/
29b0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43  .#ifdef SQLITE_C
29c0: 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20 76  OVERAGE_TEST.  v
29d0: 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65 72  oid sqlite3Cover
29e0: 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66 69  age(int);.# defi
29f0: 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 20 20  ne testcase(X)  
2a00: 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65 33  if( X ){ sqlite3
2a10: 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f  Coverage(__LINE_
2a20: 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65  _); }.#else.# de
2a30: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
2a40: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2a50: 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72  he TESTONLY macr
2a60: 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e 63  o is used to enc
2a70: 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64 65  lose variable de
2a80: 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a  clarations or.**
2a90: 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20 63   other bits of c
2aa0: 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e 65 65  ode that are nee
2ab0: 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 74  ded to support t
2ac0: 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20  he arguments.** 
2ad0: 77 69 74 68 69 6e 20 74 65 73 74 63 61 73 65 28  within testcase(
2ae0: 29 20 61 6e 64 20 61 73 73 65 72 74 28 29 20 6d  ) and assert() m
2af0: 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64  acros..*/.#if !d
2b00: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 7c  efined(NDEBUG) |
2b10: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
2b20: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a  _COVERAGE_TEST).
2b30: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
2b40: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
2b50: 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28  define TESTONLY(
2b60: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2b70: 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e 65   Sometimes we ne
2b80: 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e  ed a small amoun
2b90: 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20 61  t of code such a
2ba0: 73 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e 69  s a variable ini
2bb0: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74  tialization.** t
2bc0: 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c 61  o setup for a la
2bd0: 74 65 72 20 61 73 73 65 72 74 28 29 20 73 74 61  ter assert() sta
2be0: 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e  tement.  We do n
2bf0: 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f 64  ot want this cod
2c00: 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77  e to.** appear w
2c10: 68 65 6e 20 61 73 73 65 72 74 28 29 20 69 73 20  hen assert() is 
2c20: 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20 66  disabled.  The f
2c30: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69  ollowing macro i
2c40: 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75  s therefore.** u
2c50: 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  sed to contain t
2c60: 68 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e 20  hat setup code. 
2c70: 20 54 68 65 20 22 56 56 41 22 20 61 63 72 6f 6e   The "VVA" acron
2c80: 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ym stands for.**
2c90: 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20   "Verification, 
2ca0: 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20  Validation, and 
2cb0: 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e 20  Accreditation". 
2cc0: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2cd0: 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74   the.** code wit
2ce0: 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77  hin VVA_ONLY() w
2cf0: 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72  ill only run dur
2d00: 69 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f 6e  ing verification
2d10: 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23   processes..*/.#
2d20: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 20  ifndef NDEBUG.# 
2d30: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
2d40: 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65  X)  X.#else.# de
2d50: 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29  fine VVA_ONLY(X)
2d60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2d70: 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  he ALWAYS and NE
2d80: 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72 6f  VER macros surro
2d90: 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72  und boolean expr
2da0: 65 73 73 69 6f 6e 73 20 77 68 69 63 68 20 0a 2a  essions which .*
2db0: 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74  * are intended t
2dc0: 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65  o always be true
2dd0: 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65   or false, respe
2de0: 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a  ctively.  Such.*
2df0: 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f  * expressions co
2e00: 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66  uld be omitted f
2e10: 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d  rom the code com
2e20: 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68  pletely.  But th
2e30: 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64  ey.** are includ
2e40: 65 64 20 69 6e 20 61 20 66 65 77 20 63 61 73 65  ed in a few case
2e50: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
2e60: 68 61 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69  hance the resili
2e70: 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74  ence.** of SQLit
2e80: 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20  e to unexpected 
2e90: 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61  behavior - to ma
2ea0: 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c  ke the code "sel
2eb0: 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72  f-healing".** or
2ec0: 20 22 64 75 63 74 69 6c 65 22 20 72 61 74 68 65   "ductile" rathe
2ed0: 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72  r than being "br
2ee0: 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68  ittle" and crash
2ef0: 69 6e 67 20 61 74 20 74 68 65 20 66 69 72 73 74  ing at the first
2f00: 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c  .** hint of unpl
2f10: 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a  anned behavior..
2f20: 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  **.** In other w
2f30: 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64  ords, ALWAYS and
2f40: 20 4e 45 56 45 52 20 61 72 65 20 61 64 64 65 64   NEVER are added
2f50: 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63   for defensive c
2f60: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ode..**.** When 
2f70: 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74  doing coverage t
2f80: 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e  esting ALWAYS an
2f90: 64 20 4e 45 56 45 52 20 61 72 65 20 68 61 72 64  d NEVER are hard
2fa0: 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20  -coded to.** be 
2fb0: 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73  true and false s
2fc0: 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72 65 61  o that the unrea
2fd0: 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68 65 79  chable code they
2fe0: 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a   specify will.**
2ff0: 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20   not be counted 
3000: 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65  as untested code
3010: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
3020: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
3030: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
3040: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
3050: 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  1).# define NEVE
3060: 52 28 58 29 20 20 20 20 20 20 20 28 30 29 0a 23  R(X)       (0).#
3070: 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  elif !defined(ND
3080: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 41  EBUG).# define A
3090: 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28 28  LWAYS(X)      ((
30a0: 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29 2c  X)?1:(assert(0),
30b0: 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  0)).# define NEV
30c0: 45 52 28 58 29 20 20 20 20 20 20 20 28 28 58 29  ER(X)       ((X)
30d0: 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30  ?(assert(0),1):0
30e0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
30f0: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
3100: 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  (X).# define NEV
3110: 45 52 28 58 29 20 20 20 20 20 20 20 28 58 29 0a  ER(X)       (X).
3120: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
3130: 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a  turn true (non-z
3140: 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e 70 75  ero) if the inpu
3150: 74 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  t is an integer 
3160: 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67  that is too larg
3170: 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20 33  e.** to fit in 3
3180: 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20 6d 61  2-bits.  This ma
3190: 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69  cro is used insi
31a0: 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20 74 65  de of various te
31b0: 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72  stcase().** macr
31c0: 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  os to verify tha
31d0: 74 20 77 65 20 68 61 76 65 20 74 65 73 74 65 64  t we have tested
31e0: 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61 72 67   SQLite for larg
31f0: 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a  e-file support..
3200: 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f 42 49  */.#define IS_BI
3210: 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58 29 26  G_INT(X)  (((X)&
3220: 7e 28 69 36 34 29 30 78 66 66 66 66 66 66 66 66  ~(i64)0xffffffff
3230: 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )!=0)../*.** The
3240: 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28   macro unlikely(
3250: 29 20 69 73 20 61 20 68 69 6e 74 20 74 68 61 74  ) is a hint that
3260: 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f   surrounds a boo
3270: 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69  lean.** expressi
3280: 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  on that is usual
3290: 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f  ly false.  Macro
32a0: 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72 6f 75   likely() surrou
32b0: 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e  nds.** a boolean
32c0: 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
32d0: 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65   is usually true
32e0: 2e 20 20 54 68 65 73 65 20 68 69 6e 74 73 20 63  .  These hints c
32f0: 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f  ould,.** in theo
3300: 72 79 2c 20 62 65 20 75 73 65 64 20 62 79 20 74  ry, be used by t
3310: 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67  he compiler to g
3320: 65 6e 65 72 61 74 65 20 62 65 74 74 65 72 20 63  enerate better c
3330: 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72  ode, but.** curr
3340: 65 6e 74 6c 79 20 74 68 65 79 20 61 72 65 20 6a  ently they are j
3350: 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72  ust comments for
3360: 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a   human readers..
3370: 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c  */.#define likel
3380: 79 28 58 29 20 20 20 20 28 58 29 0a 23 64 65 66  y(X)    (X).#def
3390: 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20  ine unlikely(X) 
33a0: 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22   (X)..#include "
33b0: 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65  hash.h".#include
33c0: 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c   "parse.h".#incl
33d0: 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69  ude <stdio.h>.#i
33e0: 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68  nclude <stdlib.h
33f0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69  >.#include <stri
3400: 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ng.h>.#include <
3410: 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75  assert.h>.#inclu
3420: 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f  de <stddef.h>../
3430: 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c 69 6e  *.** If compilin
3440: 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73 73 6f  g for a processo
3450: 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66 6c 6f  r that lacks flo
3460: 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75 70 70  ating point supp
3470: 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69 74 75  ort,.** substitu
3480: 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72 20 66  te integer for f
3490: 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f  loating-point.*/
34a0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
34b0: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
34c0: 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f 75 62  NT.# define doub
34d0: 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a  le sqlite_int64.
34e0: 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74 20 73  # define float s
34f0: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65  qlite_int64.# de
3500: 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f  fine LONGDOUBLE_
3510: 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e 74 36  TYPE sqlite_int6
3520: 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c 49 54  4.# ifndef SQLIT
3530: 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20 64 65  E_BIG_DBL.#   de
3540: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f  fine SQLITE_BIG_
3550: 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33 5f 69  DBL (((sqlite3_i
3560: 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23 20 65  nt64)1)<<50).# e
3570: 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51  ndif.# define SQ
3580: 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49  LITE_OMIT_DATETI
3590: 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64 65 66  ME_FUNCS 1.# def
35a0: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ine SQLITE_OMIT_
35b0: 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65 66 20  TRACE 1.# undef 
35c0: 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45 4e 44  SQLITE_MIXED_END
35d0: 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41 54 0a  IAN_64BIT_FLOAT.
35e0: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 48  # undef SQLITE_H
35f0: 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64 69 66  AVE_ISNAN.#endif
3600: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
3610: 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69 6e 65  BIG_DBL.# define
3620: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20   SQLITE_BIG_DBL 
3630: 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a 0a 2f  (1e99).#endif../
3640: 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50 44 42  *.** OMIT_TEMPDB
3650: 20 69 73 20 73 65 74 20 74 6f 20 31 20 69 66 20   is set to 1 if 
3660: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50  SQLITE_OMIT_TEMP
3670: 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c 20 6f  DB is defined, o
3680: 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61 72 64  r 0.** afterward
3690: 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20 6d 61  . Having this ma
36a0: 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f  cro allows us to
36b0: 20 63 61 75 73 65 20 74 68 65 20 43 20 63 6f 6d   cause the C com
36c0: 70 69 6c 65 72 20 0a 2a 2a 20 74 6f 20 6f 6d 69  piler .** to omi
36d0: 74 20 63 6f 64 65 20 75 73 65 64 20 62 79 20 54  t code used by T
36e0: 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74 68 6f  EMP tables witho
36f0: 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64 65 66  ut messy #ifndef
3700: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a   statements..*/.
3710: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
3720: 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66 69 6e  IT_TEMPDB.#defin
3730: 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 31 0a  e OMIT_TEMPDB 1.
3740: 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 4d  #else.#define OM
3750: 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65 6e 64  IT_TEMPDB 0.#end
3760: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22 66  if../*.** The "f
3770: 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75 6d 62  ile format" numb
3780: 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  er is an integer
3790: 20 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d 65   that is increme
37a0: 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a 2a 2a  nted whenever.**
37b0: 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65 6c 20   the VDBE-level 
37c0: 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68 61 6e  file format chan
37d0: 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ges.  The follow
37e0: 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66 69 6e  ing macros defin
37f0: 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64 65 66  e the.** the def
3800: 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d 61 74  ault file format
3810: 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62 61 73   for new databas
3820: 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78 69 6d  es and the maxim
3830: 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 2a  um file format.*
3840: 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62 72 61  * that the libra
3850: 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a  ry can read..*/.
3860: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
3870: 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34  AX_FILE_FORMAT 4
3880: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
3890: 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52  DEFAULT_FILE_FOR
38a0: 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  MAT.# define SQL
38b0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45  ITE_DEFAULT_FILE
38c0: 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64 69 66  _FORMAT 4.#endif
38d0: 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e  ../*.** Determin
38e0: 65 20 77 68 65 74 68 65 72 20 74 72 69 67 67 65  e whether trigge
38f0: 72 73 20 61 72 65 20 72 65 63 75 72 73 69 76 65  rs are recursive
3900: 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54 68   by default.  Th
3910: 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63 68 61  is can be.** cha
3920: 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65  nged at run-time
3930: 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d 61 2e   using a pragma.
3940: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
3950: 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52  TE_DEFAULT_RECUR
3960: 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a 23 20  SIVE_TRIGGERS.# 
3970: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
3980: 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f  FAULT_RECURSIVE_
3990: 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e 64 69  TRIGGERS 0.#endi
39a0: 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64 65  f../*.** Provide
39b0: 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65   a default value
39c0: 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 4d 50   for SQLITE_TEMP
39d0: 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65 20 69  _STORE in case i
39e0: 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69  t is not specifi
39f0: 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d  ed.** on the com
3a00: 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66  mand-line.*/.#if
3a10: 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45 4d 50  ndef SQLITE_TEMP
3a20: 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e 65 20  _STORE.# define 
3a30: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
3a40: 45 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  E 1.# define SQL
3a50: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 78  ITE_TEMP_STORE_x
3a60: 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20  c 1  /* Exclude 
3a70: 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a  from ctime.c */.
3a80: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
3a90: 20 6e 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65   no value has be
3aa0: 65 6e 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20  en provided for 
3ab0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
3ac0: 52 5f 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66  R_THREADS, or if
3ad0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  .** SQLITE_TEMP_
3ae0: 53 54 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20  STORE is set to 
3af0: 33 20 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d  3 (never use tem
3b00: 70 6f 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73  porary files), s
3b10: 65 74 20 69 74 20 0a 2a 2a 20 74 6f 20 7a 65 72  et it .** to zer
3b20: 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  o..*/.#if SQLITE
3b30: 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c  _TEMP_STORE==3 |
3b40: 7c 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  | SQLITE_THREADS
3b50: 41 46 45 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53  AFE==0.# undef S
3b60: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
3b70: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
3b80: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  e SQLITE_MAX_WOR
3b90: 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65  KER_THREADS 0.#e
3ba0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
3bb0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
3bc0: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
3bd0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
3be0: 52 5f 54 48 52 45 41 44 53 20 38 0a 23 65 6e 64  R_THREADS 8.#end
3bf0: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
3c00: 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52  E_DEFAULT_WORKER
3c10: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
3c20: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
3c30: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20  _WORKER_THREADS 
3c40: 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  0.#endif.#if SQL
3c50: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
3c60: 45 52 5f 54 48 52 45 41 44 53 3e 53 51 4c 49 54  ER_THREADS>SQLIT
3c70: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
3c80: 45 41 44 53 0a 23 20 75 6e 64 65 66 20 53 51 4c  EADS.# undef SQL
3c90: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
3ca0: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
3cb0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
3cc0: 52 5f 54 48 52 45 41 44 53 20 53 51 4c 49 54 45  R_THREADS SQLITE
3cd0: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
3ce0: 54 48 52 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a  THREADS.#endif..
3cf0: 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20  ./*.** GCC does 
3d00: 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20 6f  not define the o
3d10: 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f 20  ffsetof() macro 
3d20: 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74 6f  so we'll have to
3d30: 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c   do it.** oursel
3d40: 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ves..*/.#ifndef 
3d50: 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e 65  offsetof.#define
3d60: 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43 54   offsetof(STRUCT
3d70: 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e 74  URE,FIELD) ((int
3d80: 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52 55  )((char*)&((STRU
3d90: 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44  CTURE*)0)->FIELD
3da0: 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
3db0: 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70 75   Macros to compu
3dc0: 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20 6d  te minimum and m
3dd0: 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e 75  aximum of two nu
3de0: 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  mbers..*/.#defin
3df0: 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c  e MIN(A,B) ((A)<
3e00: 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 64 65  (B)?(A):(B)).#de
3e10: 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20 28 28  fine MAX(A,B) ((
3e20: 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29 29 0a  A)>(B)?(A):(B)).
3e30: 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20 74 77 6f 20  ./*.** Swap two 
3e40: 6f 62 6a 65 63 74 73 20 6f 66 20 74 79 70 65 20  objects of type 
3e50: 54 59 50 45 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  TYPE..*/.#define
3e60: 20 53 57 41 50 28 54 59 50 45 2c 41 2c 42 29 20   SWAP(TYPE,A,B) 
3e70: 7b 54 59 50 45 20 74 3d 41 3b 20 41 3d 42 3b 20  {TYPE t=A; A=B; 
3e80: 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65  B=t;}../*.** Che
3e90: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68 69  ck to see if thi
3ea0: 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73 20 45  s machine uses E
3eb0: 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20 62 65  BCDIC.  (Yes, be
3ec0: 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20 6e  lieve it or.** n
3ed0: 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20 73 74  ot, there are st
3ee0: 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75 74  ill machines out
3ef0: 20 74 68 65 72 65 20 74 68 61 74 20 75 73 65 20   there that use 
3f00: 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66 20  EBCDIC.).*/.#if 
3f10: 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23 20  'A' == '\301'.# 
3f20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 42  define SQLITE_EB
3f30: 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23 20 64  CDIC 1.#else.# d
3f40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 53 43  efine SQLITE_ASC
3f50: 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  II 1.#endif../*.
3f60: 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66 20 6b  ** Integers of k
3f70: 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54 68 65  nown sizes.  The
3f80: 73 65 20 74 79 70 65 64 65 66 73 20 6d 69 67 68  se typedefs migh
3f90: 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61 72 63  t change for arc
3fa0: 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20 77 68  hitectures.** wh
3fb0: 65 72 65 20 74 68 65 20 73 69 7a 65 73 20 76 65  ere the sizes ve
3fc0: 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73 73 6f  ry.  Preprocesso
3fd0: 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61 76 61  r macros are ava
3fe0: 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74 20 74  ilable so that t
3ff0: 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e 20  he.** types can 
4000: 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79 20  be conveniently 
4010: 72 65 64 65 66 69 6e 65 64 20 61 74 20 63 6f 6d  redefined at com
4020: 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b 65  pile-type.  Like
4030: 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20   this:.**.**    
4040: 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e 54 50       cc '-DUINTP
4050: 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e  TR_TYPE=long lon
4060: 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69  g int' ....*/.#i
4070: 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50  fndef UINT32_TYP
4080: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55  E.# ifdef HAVE_U
4090: 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66 69 6e  INT32_T.#  defin
40a0: 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 69  e UINT32_TYPE ui
40b0: 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23 20  nt32_t.# else.# 
40c0: 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54   define UINT32_T
40d0: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  YPE unsigned int
40e0: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
40f0: 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36 5f 54  #ifndef UINT16_T
4100: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
4110: 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66  _UINT16_T.#  def
4120: 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20  ine UINT16_TYPE 
4130: 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a  uint16_t.# else.
4140: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36  #  define UINT16
4150: 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 73  _TYPE unsigned s
4160: 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66  hort int.# endif
4170: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
4180: 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64  INT16_TYPE.# ifd
4190: 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f 54 0a  ef HAVE_INT16_T.
41a0: 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f  #  define INT16_
41b0: 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23 20 65  TYPE int16_t.# e
41c0: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e  lse.#  define IN
41d0: 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74 20 69  T16_TYPE short i
41e0: 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  nt.# endif.#endi
41f0: 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 38 5f  f.#ifndef UINT8_
4200: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
4210: 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64 65 66  E_UINT8_T.#  def
4220: 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75  ine UINT8_TYPE u
4230: 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20  int8_t.# else.# 
4240: 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59   define UINT8_TY
4250: 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  PE unsigned char
4260: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
4270: 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54 59 50  #ifndef INT8_TYP
4280: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49  E.# ifdef HAVE_I
4290: 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  NT8_T.#  define 
42a0: 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38 5f 74  INT8_TYPE int8_t
42b0: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
42c0: 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69 67 6e  e INT8_TYPE sign
42d0: 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a  ed char.# endif.
42e0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4c  #endif.#ifndef L
42f0: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a 23  ONGDOUBLE_TYPE.#
4300: 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42   define LONGDOUB
4310: 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f 75  LE_TYPE long dou
4320: 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70 65 64  ble.#endif.typed
4330: 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  ef sqlite_int64 
4340: 69 36 34 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  i64;          /*
4350: 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69   8-byte signed i
4360: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
4370: 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34 20  f sqlite_uint64 
4380: 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  u64;         /* 
4390: 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20  8-byte unsigned 
43a0: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
43b0: 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ef UINT32_TYPE u
43c0: 33 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  32;           /*
43d0: 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   4-byte unsigned
43e0: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
43f0: 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 20  def UINT16_TYPE 
4400: 75 31 36 3b 20 20 20 20 20 20 20 20 20 20 20 2f  u16;           /
4410: 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 2-byte unsigne
4420: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
4430: 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20  edef INT16_TYPE 
4440: 69 31 36 3b 20 20 20 20 20 20 20 20 20 20 20 20  i16;            
4450: 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e 65 64  /* 2-byte signed
4460: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
4470: 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 20 75  def UINT8_TYPE u
4480: 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  8;             /
4490: 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 1-byte unsigne
44a0: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
44b0: 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45 20 69  edef INT8_TYPE i
44c0: 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  8;              
44d0: 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e 65 64  /* 1-byte signed
44e0: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a   integer */../*.
44f0: 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33  ** SQLITE_MAX_U3
4500: 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e 73 74  2 is a u64 const
4510: 61 6e 74 20 74 68 61 74 20 69 73 20 74 68 65 20  ant that is the 
4520: 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61 6c 75  maximum u64 valu
4530: 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20 62 65  e.** that can be
4540: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75 33 32   stored in a u32
4550: 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66   without loss of
4560: 20 64 61 74 61 2e 20 20 54 68 65 20 76 61 6c 75   data.  The valu
4570: 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30 30 30  e.** is 0x000000
4580: 30 30 66 66 66 66 66 66 66 66 2e 20 20 42 75 74  00ffffffff.  But
4590: 20 62 65 63 61 75 73 65 20 6f 66 20 71 75 69 72   because of quir
45a0: 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70 69  ks of some compi
45b0: 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76 65  lers, we.** have
45c0: 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65 20   to specify the 
45d0: 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c 65 73  value in the les
45e0: 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61 6e 6e  s intuitive mann
45f0: 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65  er shown:.*/.#de
4600: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
4610: 55 33 32 20 20 28 28 28 28 75 36 34 29 31 29 3c  U32  ((((u64)1)<
4620: 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54  <32)-1)../*.** T
4630: 68 65 20 64 61 74 61 74 79 70 65 20 75 73 65 64  he datatype used
4640: 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69 6d 61   to store estima
4650: 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d 62 65  tes of the numbe
4660: 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a 2a  r of rows in a.*
4670: 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
4680: 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 75 6e  .  This is an un
4690: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 74  signed integer t
46a0: 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39 25 20  ype.  For 99.9% 
46b0: 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64 2c  of.** the world,
46c0: 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65   a 32-bit intege
46d0: 72 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 2e  r is sufficient.
46e0: 20 20 42 75 74 20 61 20 36 34 2d 62 69 74 20 69    But a 64-bit i
46f0: 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62 65  nteger.** can be
4700: 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69 6c 65   used at compile
4710: 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72 65 64  -time if desired
4720: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
4730: 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53 0a 20  TE_64BIT_STATS. 
4740: 74 79 70 65 64 65 66 20 75 36 34 20 74 52 6f 77  typedef u64 tRow
4750: 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62 69  cnt;    /* 64-bi
4760: 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75 65 73  t only if reques
4770: 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ted at compile-t
4780: 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74 79  ime */.#else. ty
4790: 70 65 64 65 66 20 75 33 32 20 74 52 6f 77 63 6e  pedef u32 tRowcn
47a0: 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69 74 20  t;    /* 32-bit 
47b0: 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a  is the default *
47c0: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
47d0: 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e 74 69  Estimated quanti
47e0: 74 69 65 73 20 75 73 65 64 20 66 6f 72 20 71 75  ties used for qu
47f0: 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72 65  ery planning are
4800: 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d 62 69   stored as 16-bi
4810: 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73 2e  t.** logarithms.
4820: 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79 20 58    For quantity X
4830: 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  , the value stor
4840: 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28 58 29  ed is 10*log2(X)
4850: 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76 65 73  .  This.** gives
4860: 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61 6e 67   a possible rang
4870: 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66 20 61  e of values of a
4880: 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e 30  pproximately 1.0
4890: 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36 2e 0a  e986 to 1e-986..
48a0: 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c 6f 77  ** But the allow
48b0: 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 22 67  ed values are "g
48c0: 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76 65  rainy".  Not eve
48d0: 72 79 20 76 61 6c 75 65 20 69 73 20 72 65 70 72  ry value is repr
48e0: 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f  esentable..** Fo
48f0: 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e 74  r example, quant
4900: 69 74 69 65 73 20 31 36 20 61 6e 64 20 31 37 20  ities 16 and 17 
4910: 61 72 65 20 62 6f 74 68 20 72 65 70 72 65 73 65  are both represe
4920: 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45 73 74  nted by a LogEst
4930: 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77 65  .** of 40.  Howe
4940: 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45 73  ver, since LogEs
4950: 74 20 71 75 61 6e 74 69 74 69 65 73 20 61 72 65  t quantities are
4960: 20 73 75 70 70 6f 73 65 20 74 6f 20 62 65 20 65   suppose to be e
4970: 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f 74  stimates,.** not
4980: 20 65 78 61 63 74 20 76 61 6c 75 65 73 2c 20 74   exact values, t
4990: 68 69 73 20 69 6d 70 72 65 63 69 73 69 6f 6e 20  his imprecision 
49a0: 69 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65 6d  is not a problem
49b0: 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74 22  ..**.** "LogEst"
49c0: 20 69 73 20 73 68 6f 72 74 20 66 6f 72 20 22 4c   is short for "L
49d0: 6f 67 61 72 69 74 68 6d 69 63 20 45 73 74 69 6d  ogarithmic Estim
49e0: 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d  ate"..**.** Exam
49f0: 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31 20  ples:.**      1 
4a00: 2d 3e 20 30 20 20 20 20 20 20 20 20 20 20 20 20  -> 0            
4a10: 20 20 32 30 20 2d 3e 20 34 33 20 20 20 20 20 20    20 -> 43      
4a20: 20 20 20 20 31 30 30 30 30 20 2d 3e 20 31 33 32      10000 -> 132
4a30: 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20 31 30  .**      2 -> 10
4a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 32 35 20               25 
4a50: 2d 3e 20 34 36 20 20 20 20 20 20 20 20 20 20 32  -> 46          2
4a60: 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20 20  5000 -> 146.**  
4a70: 20 20 20 20 33 20 2d 3e 20 31 36 20 20 20 20 20      3 -> 16     
4a80: 20 20 20 20 20 20 20 31 30 30 20 2d 3e 20 36 36         100 -> 66
4a90: 20 20 20 20 20 20 20 20 31 30 30 30 30 30 30 20          1000000 
4aa0: 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20 20 34  -> 199.**      4
4ab0: 20 2d 3e 20 32 30 20 20 20 20 20 20 20 20 20 20   -> 20          
4ac0: 20 31 30 30 30 20 2d 3e 20 39 39 20 20 20 20 20   1000 -> 99     
4ad0: 20 20 20 31 30 34 38 35 37 36 20 2d 3e 20 32 30     1048576 -> 20
4ae0: 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20 33  0.**     10 -> 3
4af0: 33 20 20 20 20 20 20 20 20 20 20 20 31 30 32 34  3           1024
4b00: 20 2d 3e 20 31 30 30 20 20 20 20 34 32 39 34 39   -> 100    42949
4b10: 36 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a 0a  67296 -> 320.**.
4b20: 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74 20 63 61  ** The LogEst ca
4b30: 6e 20 62 65 20 6e 65 67 61 74 69 76 65 20 74 6f  n be negative to
4b40: 20 69 6e 64 69 63 61 74 65 20 66 72 61 63 74 69   indicate fracti
4b50: 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 20 0a 2a 2a  onal values. .**
4b60: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a   Examples:.**.**
4b70: 20 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20      0.5 -> -10  
4b80: 20 20 20 20 20 20 20 20 20 30 2e 31 20 2d 3e 20           0.1 -> 
4b90: 2d 33 33 20 20 20 20 20 20 20 20 30 2e 30 36 32  -33        0.062
4ba0: 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65  5 -> -40.*/.type
4bb0: 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 4c  def INT16_TYPE L
4bc0: 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 4d 61  ogEst;../*.** Ma
4bd0: 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
4be0: 65 20 77 68 65 74 68 65 72 20 74 68 65 20 6d 61  e whether the ma
4bf0: 63 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20  chine is big or 
4c00: 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a  little endian,.*
4c10: 2a 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72  * and whether or
4c20: 20 6e 6f 74 20 74 68 61 74 20 64 65 74 65 72 6d   not that determ
4c30: 69 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d 74  ination is run-t
4c40: 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d 74  ime or compile-t
4c50: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62  ime..**.** For b
4c60: 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c  est performance,
4c70: 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   an attempt is m
4c80: 61 64 65 20 74 6f 20 67 75 65 73 73 20 61 74 20  ade to guess at 
4c90: 74 68 65 20 62 79 74 65 2d 6f 72 64 65 72 0a 2a  the byte-order.*
4ca0: 2a 20 75 73 69 6e 67 20 43 2d 70 72 65 70 72 6f  * using C-prepro
4cb0: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20 20  cessor macros.  
4cc0: 49 66 20 74 68 61 74 20 69 73 20 75 6e 73 75 63  If that is unsuc
4cd0: 63 65 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a 2a  cessful, or if.*
4ce0: 2a 20 2d 44 53 51 4c 49 54 45 5f 52 55 4e 54 49  * -DSQLITE_RUNTI
4cf0: 4d 45 5f 42 59 54 45 4f 52 44 45 52 3d 31 20 69  ME_BYTEORDER=1 i
4d00: 73 20 73 65 74 2c 20 74 68 65 6e 20 62 79 74 65  s set, then byte
4d10: 2d 6f 72 64 65 72 20 69 73 20 64 65 74 65 72 6d  -order is determ
4d20: 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75 6e 2d 74  ined.** at run-t
4d30: 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ime..*/.#ifdef S
4d40: 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
4d50: 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  ON.const int sql
4d60: 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 65 6c  ite3one = 1;.#el
4d70: 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  se.extern const 
4d80: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a  int sqlite3one;.
4d90: 23 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69  #endif.#if (defi
4da0: 6e 65 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c  ned(i386)     ||
4db0: 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f   defined(__i386_
4dc0: 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  _)   || defined(
4dd0: 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c  _M_IX86) ||    \
4de0: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f  .     defined(__
4df0: 78 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e  x86_64) || defin
4e00: 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c  ed(__x86_64__) |
4e10: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34  | defined(_M_X64
4e20: 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  )  ||    \.     
4e30: 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34  defined(_M_AMD64
4e40: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f  ) || defined(_M_
4e50: 41 52 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69  ARM)     || defi
4e60: 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20  ned(__x86)   || 
4e70: 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65     \.     define
4e80: 64 28 5f 5f 61 72 6d 5f 5f 29 29 20 26 26 20 21  d(__arm__)) && !
4e90: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 52  defined(SQLITE_R
4ea0: 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52  UNTIME_BYTEORDER
4eb0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
4ec0: 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 31  E_BYTEORDER    1
4ed0: 32 33 34 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  234.# define SQL
4ee0: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20  ITE_BIGENDIAN   
4ef0: 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   0.# define SQLI
4f00: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
4f10: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
4f20: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53  E_UTF16NATIVE  S
4f30: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65  QLITE_UTF16LE.#e
4f40: 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69 6e 65  ndif.#if (define
4f50: 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64  d(sparc)    || d
4f60: 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 29  efined(__ppc__))
4f70: 20 20 5c 0a 20 20 20 20 26 26 20 21 64 65 66 69    \.    && !defi
4f80: 6e 65 64 28 53 51 4c 49 54 45 5f 52 55 4e 54 49  ned(SQLITE_RUNTI
4f90: 4d 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20  ME_BYTEORDER).# 
4fa0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
4fb0: 54 45 4f 52 44 45 52 20 20 20 20 34 33 32 31 0a  TEORDER    4321.
4fc0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4fd0: 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31 0a 23  BIGENDIAN    1.#
4fe0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c   define SQLITE_L
4ff0: 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23 20  ITTLEENDIAN 0.# 
5000: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54  define SQLITE_UT
5010: 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54  F16NATIVE  SQLIT
5020: 45 5f 55 54 46 31 36 42 45 0a 23 65 6e 64 69 66  E_UTF16BE.#endif
5030: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
5040: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 29 0a  LITE_BYTEORDER).
5050: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5060: 42 59 54 45 4f 52 44 45 52 20 20 20 20 30 20 20  BYTEORDER    0  
5070: 20 20 20 2f 2a 20 30 20 6d 65 61 6e 73 20 22 75     /* 0 means "u
5080: 6e 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d 70 69 6c  nknown at compil
5090: 65 2d 74 69 6d 65 22 20 2a 2f 0a 23 20 64 65 66  e-time" */.# def
50a0: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
50b0: 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72 20  DIAN    (*(char 
50c0: 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d  *)(&sqlite3one)=
50d0: 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  =0).# define SQL
50e0: 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e  ITE_LITTLEENDIAN
50f0: 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c   (*(char *)(&sql
5100: 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64  ite3one)==1).# d
5110: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46  efine SQLITE_UTF
5120: 31 36 4e 41 54 49 56 45 20 20 28 53 51 4c 49 54  16NATIVE  (SQLIT
5130: 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49  E_BIGENDIAN?SQLI
5140: 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49 54  TE_UTF16BE:SQLIT
5150: 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64 69  E_UTF16LE).#endi
5160: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e  f../*.** Constan
5170: 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67 65  ts for the large
5180: 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20  st and smallest 
5190: 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74 20  possible 64-bit 
51a0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 2e  signed integers.
51b0: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
51c0: 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f   are designed to
51d0: 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20   work correctly 
51e0: 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61  on both 32-bit a
51f0: 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d  nd 64-bit.** com
5200: 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  pilers..*/.#defi
5210: 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34  ne LARGEST_INT64
5220: 20 20 28 30 78 66 66 66 66 66 66 66 66 7c 28 28    (0xffffffff|((
5230: 28 69 36 34 29 30 78 37 66 66 66 66 66 66 66 29  (i64)0x7fffffff)
5240: 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20 53  <<32)).#define S
5250: 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28 28  MALLEST_INT64 ((
5260: 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47 45  (i64)-1) - LARGE
5270: 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20 0a 2a  ST_INT64)../* .*
5280: 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d  * Round up a num
5290: 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ber to the next 
52a0: 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20  larger multiple 
52b0: 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73 20 75  of 8.  This is u
52c0: 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20  sed.** to force 
52d0: 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  8-byte alignment
52e0: 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69   on 64-bit archi
52f0: 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65  tectures..*/.#de
5300: 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20  fine ROUND8(x)  
5310: 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a     (((x)+7)&~7).
5320: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77  ./*.** Round dow
5330: 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74  n to the nearest
5340: 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a   multiple of 8.*
5350: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44  /.#define ROUNDD
5360: 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29  OWN8(x) ((x)&~7)
5370: 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74  ../*.** Assert t
5380: 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20  hat the pointer 
5390: 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20  X is aligned to 
53a0: 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61  an 8-byte bounda
53b0: 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63  ry.  This.** mac
53c0: 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  ro is used only 
53d0: 77 69 74 68 69 6e 20 61 73 73 65 72 74 28 29 20  within assert() 
53e0: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
53f0: 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20  he code gets.** 
5400: 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65  all alignment re
5410: 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65  strictions corre
5420: 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74  ct..**.** Except
5430: 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  , if SQLITE_4_BY
5440: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
5450: 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68  C is defined, th
5460: 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c  en the.** underl
5470: 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d  ying malloc() im
5480: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67  plementation mig
5490: 68 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62  ht return us 4-b
54a0: 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70  yte aligned.** p
54b0: 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61  ointers.  In tha
54c0: 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72  t case, only ver
54d0: 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e  ify 4-byte align
54e0: 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ment..*/.#ifdef 
54f0: 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c  SQLITE_4_BYTE_AL
5500: 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64  IGNED_MALLOC.# d
5510: 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45  efine EIGHT_BYTE
5520: 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20  _ALIGNMENT(X)   
5530: 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20  ((((char*)(X) - 
5540: 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29  (char*)0)&3)==0)
5550: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
5560: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
5570: 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68  MENT(X)   ((((ch
5580: 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a  ar*)(X) - (char*
5590: 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69  )0)&7)==0).#endi
55a0: 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65  f../*.** Disable
55b0: 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72   MMAP on platfor
55c0: 6d 73 20 77 68 65 72 65 20 69 74 20 69 73 20 6b  ms where it is k
55d0: 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b  nown to not work
55e0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
55f0: 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20  __OpenBSD__) || 
5600: 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f  defined(__QNXNTO
5610: 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  __).# undef SQLI
5620: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
5630: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5640: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
5650: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
5660: 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73  efault maximum s
5670: 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73  ize of memory us
5680: 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70  ed by memory-map
5690: 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56  ped I/O in the V
56a0: 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41  FS.*/.#ifdef __A
56b0: 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65  PPLE__.# include
56c0: 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f   <TargetConditio
56d0: 6e 61 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41 52  nals.h>.# if TAR
56e0: 47 45 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23 20  GET_OS_IPHONE.# 
56f0: 20 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d    undef SQLITE_M
5700: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 20  AX_MMAP_SIZE.#  
5710: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
5720: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
5730: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
5740: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  fndef SQLITE_MAX
5750: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20  _MMAP_SIZE.# if 
5760: 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f  defined(__linux_
5770: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
5780: 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c  d(_WIN32) \.  ||
5790: 20 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c   (defined(__APPL
57a0: 45 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28  E__) && defined(
57b0: 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c  __MACH__)) \.  |
57c0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29  | defined(__sun)
57d0: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
57e0: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
57f0: 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20   0x7fff0000  /* 
5800: 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20  2147418112 */.# 
5810: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
5820: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
5830: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
5840: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
5850: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20  AX_MMAP_SIZE_xc 
5860: 31 20 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f  1 /* exclude fro
5870: 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e  m ctime.c */.#en
5880: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  dif../*.** The d
5890: 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45  efault MMAP_SIZE
58a0: 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20   is zero on all 
58b0: 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20  platforms.  Or, 
58c0: 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72  even if a larger
58d0: 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  .** default MMAP
58e0: 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66 69  _SIZE is specifi
58f0: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
5900: 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68  me, make sure th
5910: 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f  at it does.** no
5920: 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61 78  t exceed the max
5930: 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a  imum mmap size..
5940: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5950: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
5960: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
5970: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
5980: 5f 53 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65  _SIZE 0.# define
5990: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
59a0: 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20  MMAP_SIZE_xc 1  
59b0: 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* Exclude from 
59c0: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
59d0: 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46  f.#if SQLITE_DEF
59e0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53  AULT_MMAP_SIZE>S
59f0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
5a00: 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  IZE.# undef SQLI
5a10: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
5a20: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
5a30: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
5a40: 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41  P_SIZE SQLITE_MA
5a50: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64  X_MMAP_SIZE.#end
5a60: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f  if../*.** Only o
5a70: 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41  ne of SQLITE_ENA
5a80: 42 4c 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c  BLE_STAT3 or SQL
5a90: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
5aa0: 20 63 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e   can be defined.
5ab0: 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20  .** Priority is 
5ac0: 67 69 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f  given to SQLITE_
5ad0: 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49  ENABLE_STAT4.  I
5ae0: 66 20 65 69 74 68 65 72 20 61 72 65 20 64 65 66  f either are def
5af0: 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65  ined, also.** de
5b00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
5b10: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
5b20: 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  4.*/.#ifdef SQLI
5b30: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a  TE_ENABLE_STAT4.
5b40: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
5b50: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
5b60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
5b70: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
5b80: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
5b90: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20  _ENABLE_STAT3.# 
5ba0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
5bb0: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
5bc0: 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49  AT4 1.#elif SQLI
5bd0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
5be0: 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66  OR_STAT4.# undef
5bf0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
5c00: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65  TAT3_OR_STAT4.#e
5c10: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45  ndif../*.** SELE
5c20: 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20  CTTRACE_ENABLED 
5c30: 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31  will be either 1
5c40: 20 6f 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20   or 0 depending 
5c50: 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  on whether or no
5c60: 74 0a 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20  t.** the Select 
5c70: 71 75 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20  query generator 
5c80: 74 72 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73  tracing logic is
5c90: 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23   turned on..*/.#
5ca0: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
5cb0: 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
5cc0: 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
5cd0: 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a 23  E_SELECTTRACE).#
5ce0: 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52   define SELECTTR
5cf0: 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65  ACE_ENABLED 1.#e
5d00: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 45 4c  lse.# define SEL
5d10: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
5d20: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
5d30: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
5d40: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
5d50: 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
5d60: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75 73  to store the bus
5d70: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
5d80: 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65  lback for a give
5d90: 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e  n sqlite handle.
5da0: 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69   .**.** The sqli
5db0: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
5dc0: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
5dd0: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
5de0: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
5df0: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
5e00: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
5e10: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
5e20: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
5e30: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
5e40: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
5e50: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
5e60: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
5e70: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
5e80: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
5e90: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
5ea0: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
5eb0: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
5ec0: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
5ed0: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
5ee0: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
5ef0: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e  r {.  int (*xFun
5f00: 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20  c)(void *,int); 
5f10: 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c   /* The busy cal
5f20: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
5f30: 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  *pArg;          
5f40: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
5f50: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
5f60: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
5f70: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
5f80: 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74      /* Increment
5f90: 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75 73  ed with each bus
5fa0: 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  y call */.};../*
5fb0: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
5fc0: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
5fd0: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
5fe0: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
5ff0: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
6000: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
6010: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
6020: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
6030: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
6040: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
6050: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
6060: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
6070: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
6080: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
6090: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
60a0: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
60b0: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
60c0: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
60d0: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
60e0: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
60f0: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
6100: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
6110: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
6120: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
6130: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
6140: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
6150: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
6160: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
6170: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
6180: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
6190: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
61a0: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
61b0: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
61c0: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
61d0: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
61e0: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
61f0: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
6200: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
6210: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
6220: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
6230: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
6240: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
6250: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
6260: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
6270: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
6280: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
6290: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
62a0: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
62b0: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
62c0: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
62d0: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
62e0: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a 2a  nstead of the .*
62f0: 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20  * one parameter 
6300: 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73  that destructors
6310: 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20   normally want. 
6320: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69   So we have to i
6330: 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68 69  ntroduce .** thi
6340: 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68  s magic value th
6350: 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77  at the code know
6360: 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66  s to handle diff
6370: 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a 2a  erently.  Any .*
6380: 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77  * pointer will w
6390: 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67  ork here as long
63a0: 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69 6e   as it is distin
63b0: 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53  ct from SQLITE_S
63c0: 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c  TATIC.** and SQL
63d0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a  ITE_TRANSIENT..*
63e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
63f0: 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c  _DYNAMIC   ((sql
6400: 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f  ite3_destructor_
6410: 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c  type)sqlite3Mall
6420: 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57  ocSize)../*.** W
6430: 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  hen SQLITE_OMIT_
6440: 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20  WSD is defined, 
6450: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
6460: 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72  e target platfor
6470: 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75  m does.** not su
6480: 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53  pport Writable S
6490: 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44 29  tatic Data (WSD)
64a0: 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20   such as global 
64b0: 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69 61  and static varia
64c0: 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72  bles..** All var
64d0: 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68  iables must eith
64e0: 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61  er be on the sta
64f0: 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c  ck or dynamicall
6500: 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d  y allocated from
6510: 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57  .** the heap.  W
6520: 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70  hen WSD is unsup
6530: 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72 69  ported, the vari
6540: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
6550: 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74  s scattered.** t
6560: 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51  hroughout the SQ
6570: 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62  Lite code must b
6580: 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20  ecome constants 
6590: 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53 51  instead.  The SQ
65a0: 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72  LITE_WSD.** macr
65b0: 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68  o is used for th
65c0: 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64  is purpose.  And
65d0: 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65   instead of refe
65e0: 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69  rencing the vari
65f0: 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79  able.** directly
6600: 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e  , we use its con
6610: 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74  stant as a key t
6620: 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e  o lookup the run
6630: 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a  -time allocated.
6640: 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20 68  ** buffer that h
6650: 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61 62  olds real variab
6660: 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e  le.  The constan
6670: 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e  t is also the in
6680: 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72  itializer.** for
6690: 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c   the run-time al
66a0: 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a  located buffer..
66b0: 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75  **.** In the usu
66c0: 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57 53  al case where WS
66d0: 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20  D is supported, 
66e0: 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61  the SQLITE_WSD a
66f0: 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63  nd GLOBAL.** mac
6700: 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70  ros become no-op
6710: 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20  s and have zero 
6720: 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61  performance impa
6730: 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ct..*/.#ifdef SQ
6740: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
6750: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
6760: 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69  SD const.  #defi
6770: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28  ne GLOBAL(t,v) (
6780: 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64  *(t*)sqlite3_wsd
6790: 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76  _find((void*)&(v
67a0: 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20  ), sizeof(v))). 
67b0: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
67c0: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f  GlobalConfig GLO
67d0: 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74  BAL(struct Sqlit
67e0: 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65  e3Config, sqlite
67f0: 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73  3Config).  int s
6800: 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28  qlite3_wsd_init(
6810: 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20  int N, int J);. 
6820: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77   void *sqlite3_w
6830: 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c  sd_find(void *K,
6840: 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20   int L);.#else. 
6850: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
6860: 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20 47  WSD .  #define G
6870: 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23  LOBAL(t,v) v.  #
6880: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
6890: 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74  obalConfig sqlit
68a0: 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a  e3Config.#endif.
68b0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
68c0: 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20  wing macros are 
68d0: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
68e0: 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
68f0: 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b  gs and to.** mak
6900: 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75  e it clear to hu
6910: 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e  man readers when
6920: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
6930: 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72  meter is deliber
6940: 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20 75  ately .** left u
6950: 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65  nused within the
6960: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
6970: 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c  ion. This usuall
6980: 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a  y happens when.*
6990: 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  * a function is 
69a0: 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e  called via a fun
69b0: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46  ction pointer. F
69c0: 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20 0a  or example the .
69d0: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
69e0: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72  n of an SQL aggr
69f0: 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62  egate step callb
6a00: 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20  ack may not use 
6a10: 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  the.** parameter
6a20: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
6a30: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
6a40: 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  nts passed to th
6a50: 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20  e aggregate,.** 
6a60: 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74  if it knows that
6a70: 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65   this is enforce
6a80: 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a  d elsewhere..**.
6a90: 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69  ** When a functi
6aa0: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
6ab0: 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20  not used at all 
6ac0: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
6ad0: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a  of a function,.*
6ae0: 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c  * it is generall
6af0: 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64  y named "NotUsed
6b00: 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20  " or "NotUsed2" 
6b10: 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65  to make things e
6b20: 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20  ven clearer..** 
6b30: 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d  However, these m
6b40: 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62  acros may also b
6b50: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
6b60: 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61  ss warnings rela
6b70: 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65  ted to.** parame
6b80: 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72  ters that may or
6b90: 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64   may not be used
6ba0: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f   depending on co
6bb0: 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
6bc0: 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c  s..** For exampl
6bd0: 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65  e those paramete
6be0: 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20  rs only used in 
6bf0: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
6c00: 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a  nts. In these.**
6c10: 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61 6d   cases the param
6c20: 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20  eters are named 
6c30: 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61 6c  as per the usual
6c40: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f   conventions..*/
6c50: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
6c60: 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f  PARAMETER(x) (vo
6c70: 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55  id)(x).#define U
6c80: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32  NUSED_PARAMETER2
6c90: 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52  (x,y) UNUSED_PAR
6ca0: 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44  AMETER(x),UNUSED
6cb0: 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f  _PARAMETER(y)../
6cc0: 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66  *.** Forward ref
6cd0: 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63  erences to struc
6ce0: 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66  tures.*/.typedef
6cf0: 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20   struct AggInfo 
6d00: 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  AggInfo;.typedef
6d10: 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74   struct AuthCont
6d20: 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b  ext AuthContext;
6d30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6d40: 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f  AutoincInfo Auto
6d50: 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  incInfo;.typedef
6d60: 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20 42   struct Bitvec B
6d70: 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73  itvec;.typedef s
6d80: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f  truct CollSeq Co
6d90: 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73  llSeq;.typedef s
6da0: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c  truct Column Col
6db0: 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  umn;.typedef str
6dc0: 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64  uct Db Db;.typed
6dd0: 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61  ef struct Schema
6de0: 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66   Schema;.typedef
6df0: 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78 70   struct Expr Exp
6e00: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
6e10: 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c  t ExprList ExprL
6e20: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
6e30: 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78 70  uct ExprSpan Exp
6e40: 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20 73  rSpan;.typedef s
6e50: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
6e60: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6e70: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
6e80: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
6e90: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
6ea0: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
6eb0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
6ec0: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
6ed0: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
6ee0: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
6ef0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
6f00: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
6f10: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6f20: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
6f30: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
6f40: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
6f50: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
6f60: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
6f70: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
6f80: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
6f90: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
6fa0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
6fb0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
6fc0: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
6fd0: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
6fe0: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
6ff0: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
7000: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
7010: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7020: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
7030: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 69 6e  edef struct Prin
7040: 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e  tfArguments Prin
7050: 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70  tfArguments;.typ
7060: 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77 53  edef struct RowS
7070: 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64  et RowSet;.typed
7080: 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70 6f  ef struct Savepo
7090: 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74  int Savepoint;.t
70a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
70b0: 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70  lect Select;.typ
70c0: 65 64 65 66 20 73 74 72 75 63 74 20 53 51 4c 69  edef struct SQLi
70d0: 74 65 54 68 72 65 61 64 20 53 51 4c 69 74 65 54  teThread SQLiteT
70e0: 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66 20 73  hread;.typedef s
70f0: 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
7100: 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79 70   SelectDest;.typ
7110: 65 64 65 66 20 73 74 72 75 63 74 20 53 72 63 4c  edef struct SrcL
7120: 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70  ist SrcList;.typ
7130: 65 64 65 66 20 73 74 72 75 63 74 20 53 74 72 41  edef struct StrA
7140: 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74  ccum StrAccum;.t
7150: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61  ypedef struct Ta
7160: 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65 64  ble Table;.typed
7170: 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 4c  ef struct TableL
7180: 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74  ock TableLock;.t
7190: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 6f  ypedef struct To
71a0: 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64  ken Token;.typed
71b0: 65 66 20 73 74 72 75 63 74 20 54 72 65 65 56 69  ef struct TreeVi
71c0: 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74 79 70  ew TreeView;.typ
71d0: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
71e0: 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79 70  ger Trigger;.typ
71f0: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
7200: 67 65 72 50 72 67 20 54 72 69 67 67 65 72 50 72  gerPrg TriggerPr
7210: 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  g;.typedef struc
7220: 74 20 54 72 69 67 67 65 72 53 74 65 70 20 54 72  t TriggerStep Tr
7230: 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65 64  iggerStep;.typed
7240: 65 66 20 73 74 72 75 63 74 20 55 6e 70 61 63 6b  ef struct Unpack
7250: 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63 6b 65  edRecord Unpacke
7260: 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64 65 66  dRecord;.typedef
7270: 20 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 56   struct VTable V
7280: 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  Table;.typedef s
7290: 74 72 75 63 74 20 56 74 61 62 43 74 78 20 56 74  truct VtabCtx Vt
72a0: 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20 73  abCtx;.typedef s
72b0: 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61 6c  truct Walker Wal
72c0: 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ker;.typedef str
72d0: 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68  uct WhereInfo Wh
72e0: 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  ereInfo;.typedef
72f0: 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74   struct With Wit
7300: 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20  h;../*.** Defer 
7310: 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68 20  sourcing vdbe.h 
7320: 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74 69  and btree.h unti
7330: 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38 22  l after the "u8"
7340: 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73 79 48 61   and .** "BusyHa
7350: 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e  ndler" typedefs.
7360: 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71   vdbe.h also req
7370: 75 69 72 65 73 20 61 20 66 65 77 20 6f 66 20 74  uires a few of t
7380: 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69  he opaque.** poi
7390: 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e  nter types (i.e.
73a0: 20 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65   FuncDef) define
73b0: 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63  d above..*/.#inc
73c0: 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23  lude "btree.h".#
73d0: 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22  include "vdbe.h"
73e0: 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72  .#include "pager
73f0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63  .h".#include "pc
7400: 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63 6c 75 64  ache.h"..#includ
7410: 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64  e "os.h".#includ
7420: 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 0a 2f 2a  e "mutex.h".../*
7430: 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73  .** Each databas
7440: 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63 63  e file to be acc
7450: 65 73 73 65 64 20 62 79 20 74 68 65 20 73 79 73  essed by the sys
7460: 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  tem is an instan
7470: 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f 6c  ce.** of the fol
7480: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
7490: 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f 72  .  There are nor
74a0: 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68 65  mally two of the
74b0: 73 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2a  se structures.**
74c0: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61   in the sqlite.a
74d0: 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44 62  Db[] array.  aDb
74e0: 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e 20  [0] is the main 
74f0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
7500: 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20 74  d.** aDb[1] is t
7510: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
7520: 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 65   used to hold te
7530: 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20  mporary tables. 
7540: 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64   Additional.** d
7550: 61 74 61 62 61 73 65 73 20 6d 61 79 20 62 65 20  atabases may be 
7560: 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74 72  attached..*/.str
7570: 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72 20  uct Db {.  char 
7580: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
7590: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
75a0: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 42 74  database */.  Bt
75b0: 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20  ree *pBt;       
75c0: 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65     /* The B*Tree
75d0: 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 74   structure for t
75e0: 68 69 73 20 64 61 74 61 62 61 73 65 20 66 69 6c  his database fil
75f0: 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79  e */.  u8 safety
7600: 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48  _level;     /* H
7610: 6f 77 20 61 67 67 72 65 73 73 69 76 65 20 61 74  ow aggressive at
7620: 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f   syncing data to
7630: 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63 68 65 6d   disk */.  Schem
7640: 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
7650: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64 61  /* Pointer to da
7660: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28 70  tabase schema (p
7670: 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64 29 20  ossibly shared) 
7680: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
7690: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
76a0: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
76b0: 75 72 65 20 73 74 6f 72 65 73 20 61 20 64 61 74  ure stores a dat
76c0: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a  abase schema..**
76d0: 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61 20  .** Most Schema 
76e0: 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73 73 6f  objects are asso
76f0: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 42 74  ciated with a Bt
7700: 72 65 65 2e 20 20 54 68 65 20 65 78 63 65 70 74  ree.  The except
7710: 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53 63  ion is.** the Sc
7720: 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45 4d  hema for the TEM
7730: 50 20 64 61 74 61 62 61 65 73 20 28 73 71 6c 69  P databaes (sqli
7740: 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69 63  te3.aDb[1]) whic
7750: 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64 69  h is free-standi
7760: 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65 64  ng..** In shared
7770: 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20 73   cache mode, a s
7780: 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62 6a  ingle Schema obj
7790: 65 63 74 20 63 61 6e 20 62 65 20 73 68 61 72 65  ect can be share
77a0: 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a  d by multiple.**
77b0: 20 42 74 72 65 65 73 20 74 68 61 74 20 72 65 66   Btrees that ref
77c0: 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20 75  er to the same u
77d0: 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61 72  nderlying BtShar
77e0: 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 0a 2a  ed object..** .*
77f0: 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  * Schema objects
7800: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
7810: 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 77  ly deallocated w
7820: 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74 72  hen the last Btr
7830: 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65 72  ee that.** refer
7840: 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64 65  ences them is de
7850: 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20 54  stroyed.   The T
7860: 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d 61  EMP Schema is ma
7870: 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79 0a  nually freed by.
7880: 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  ** sqlite3_close
7890: 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61  ()..*.** A threa
78a0: 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69 6e  d must be holdin
78b0: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
78c0: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 42   corresponding B
78d0: 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a  tree in order.**
78e0: 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65 6d   to access Schem
78f0: 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73  a content.  This
7900: 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68   implies that th
7910: 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61 6c  e thread must al
7920: 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67  so be.** holding
7930: 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20   a mutex on the 
7940: 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74 69  sqlite3 connecti
7950: 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20  on pointer that 
7960: 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e 0a  owns the Btree..
7970: 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53 63  ** For a TEMP Sc
7980: 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63  hema, only the c
7990: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20  onnection mutex 
79a0: 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a  is required..*/.
79b0: 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b 0a  struct Schema {.
79c0: 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f    int schema_coo
79d0: 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62 61  kie;   /* Databa
79e0: 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  se schema versio
79f0: 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69  n number for thi
7a00: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  s file */.  int 
7a10: 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20  iGeneration;    
7a20: 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20 63   /* Generation c
7a30: 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d 65  ounter.  Increme
7a40: 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20 63  nted with each c
7a50: 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68 20  hange */.  Hash 
7a60: 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20 20  tblHash;        
7a70: 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e  /* All tables in
7a80: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
7a90: 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68 3b  .  Hash idxHash;
7aa0: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28          /* All (
7ab0: 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20 69  named) indices i
7ac0: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
7ad0: 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61 73  /.  Hash trigHas
7ae0: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
7af0: 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65 64  triggers indexed
7b00: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
7b10: 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20 20  sh fkeyHash;    
7b20: 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67     /* All foreig
7b30: 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72 65  n keys by refere
7b40: 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 20  nced table name 
7b50: 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65 71  */.  Table *pSeq
7b60: 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  Tab;      /* The
7b70: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
7b80: 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 41   table used by A
7b90: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
7ba0: 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74    u8 file_format
7bb0: 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  ;      /* Schema
7bc0: 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20   format version 
7bd0: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
7be0: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
7bf0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
7c00: 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79  encoding used by
7c10: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
7c20: 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46 6c  /.  u16 schemaFl
7c30: 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67  ags;     /* Flag
7c40: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
7c50: 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  h this schema */
7c60: 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69 7a  .  int cache_siz
7c70: 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  e;      /* Numbe
7c80: 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75 73  r of pages to us
7c90: 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20 2a  e in the cache *
7ca0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  /.};../*.** Thes
7cb0: 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
7cc0: 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
7cd0: 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
7ce0: 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44 62 2e 70   in the .** Db.p
7cf0: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
7d00: 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
7d10: 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c  DbHasProperty(D,
7d20: 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e  I,P)     (((D)->
7d30: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
7d40: 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29  schemaFlags&(P))
7d50: 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44  ==(P)).#define D
7d60: 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28  bHasAnyProperty(
7d70: 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61  D,I,P)  (((D)->a
7d80: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
7d90: 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21  chemaFlags&(P))!
7da0: 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65  =0).#define DbSe
7db0: 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  tProperty(D,I,P)
7dc0: 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d       (D)->aDb[I]
7dd0: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
7de0: 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  Flags|=(P).#defi
7df0: 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72  ne DbClearProper
7e00: 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d  ty(D,I,P)   (D)-
7e10: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
7e20: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28  >schemaFlags&=~(
7e30: 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  P)../*.** Allowe
7e40: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
7e50: 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   DB.pSchema->fla
7e60: 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
7e70: 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  The DB_SchemaLoa
7e80: 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ded flag is set 
7e90: 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61  after the databa
7ea0: 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  se schema has be
7eb0: 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20  en.** read into 
7ec0: 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61  internal hash ta
7ed0: 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55  bles..**.** DB_U
7ee0: 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e  nresetViews mean
7ef0: 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f  s that one or mo
7f00: 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f  re views have co
7f10: 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a  lumn names that.
7f20: 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c  ** have been fil
7f30: 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65  led out.  If the
7f40: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c   schema changes,
7f50: 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61   these column na
7f60: 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61  mes might.** cha
7f70: 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20  nges and so the 
7f80: 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74  view will need t
7f90: 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23  o be reset..*/.#
7fa0: 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61  define DB_Schema
7fb0: 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31  Loaded    0x0001
7fc0: 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20    /* The schema 
7fd0: 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20  has been loaded 
7fe0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e  */.#define DB_Un
7ff0: 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78  resetViews    0x
8000: 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69  0002  /* Some vi
8010: 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64  ews have defined
8020: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f   column names */
8030: 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74  .#define DB_Empt
8040: 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30  y           0x00
8050: 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20  04  /* The file 
8060: 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68  is empty (length
8070: 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a   0 bytes) */../*
8080: 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  .** The number o
8090: 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64  f different kind
80a0: 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74  s of things that
80b0: 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a   can be limited.
80c0: 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c  ** using the sql
80d0: 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74  ite3_limit() int
80e0: 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69  erface..*/.#defi
80f0: 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49  ne SQLITE_N_LIMI
8100: 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  T (SQLITE_LIMIT_
8110: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2b 31  WORKER_THREADS+1
8120: 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69  )../*.** Lookasi
8130: 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73  de malloc is a s
8140: 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65  et of fixed-size
8150: 20 62 75 66 66 65 72 73 20 74 68 61 74 20 63 61   buffers that ca
8160: 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20  n be used.** to 
8170: 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72  satisfy small tr
8180: 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61  ansient memory a
8190: 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73  llocation reques
81a0: 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a  ts for objects.*
81b0: 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  * associated wit
81c0: 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64  h a particular d
81d0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
81e0: 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a  on.  The use of.
81f0: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** lookaside mal
8200: 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20 73  loc provides a s
8210: 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f  ignificant perfo
8220: 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65  rmance enhanceme
8230: 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30  nt.** (approx 10
8240: 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e  %) by avoiding n
8250: 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66  umerous malloc/f
8260: 72 65 65 20 72 65 71 75 65 73 74 73 20 77 68 69  ree requests whi
8270: 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51  le parsing.** SQ
8280: 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  L statements..**
8290: 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64  .** The Lookasid
82a0: 65 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  e structure hold
82b0: 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  s configuration 
82c0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
82d0: 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69  t the.** lookasi
82e0: 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73  de malloc subsys
82f0: 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c  tem.  Each avail
8300: 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  able memory allo
8310: 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65  cation in.** the
8320: 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79   lookaside subsy
8330: 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f  stem is stored o
8340: 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
8350: 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  of LookasideSlot
8360: 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a  .** objects..**.
8370: 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ** Lookaside all
8380: 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c  ocations are onl
8390: 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62  y allowed for ob
83a0: 6a 65 63 74 73 20 74 68 61 74 20 61 72 65 20 61  jects that are a
83b0: 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74  ssociated.** wit
83c0: 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64  h a particular d
83d0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
83e0: 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65  on.  Hence, sche
83f0: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63  ma information c
8400: 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72  annot.** be stor
8410: 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20  ed in lookaside 
8420: 62 65 63 61 75 73 65 20 69 6e 20 73 68 61 72 65  because in share
8430: 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65  d cache mode the
8440: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
8450: 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64  ion.** is shared
8460: 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74   by multiple dat
8470: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
8480: 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77  s.  Therefore, w
8490: 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20  hile parsing.** 
84a0: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
84b0: 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64  on, the Lookasid
84c0: 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20  e.bEnabled flag 
84d0: 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68  is cleared so th
84e0: 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  at.** lookaside 
84f0: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
8500: 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73  not used to cons
8510: 74 72 75 63 74 20 74 68 65 20 73 63 68 65 6d 61  truct the schema
8520: 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72   objects..*/.str
8530: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a  uct Lookaside {.
8540: 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20    u16 sz;       
8550: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
8560: 65 20 6f 66 20 65 61 63 68 20 62 75 66 66 65 72  e of each buffer
8570: 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75   in bytes */.  u
8580: 38 20 62 45 6e 61 62 6c 65 64 3b 20 20 20 20 20  8 bEnabled;     
8590: 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 73 65 20         /* False 
85a0: 74 6f 20 64 69 73 61 62 6c 65 20 6e 65 77 20 6c  to disable new l
85b0: 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74  ookaside allocat
85c0: 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61  ions */.  u8 bMa
85d0: 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20  lloced;         
85e0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74    /* True if pSt
85f0: 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  art obtained fro
8600: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
8610: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74  () */.  int nOut
8620: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8630: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75 66  /* Number of buf
8640: 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20 63  fers currently c
8650: 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20  hecked out */.  
8660: 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20 20  int mxOut;      
8670: 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68 77          /* Highw
8680: 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f  ater mark for nO
8690: 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74  ut */.  int anSt
86a0: 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  at[3];          
86b0: 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20  /* 0: hits.  1: 
86c0: 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a  size misses.  2:
86d0: 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a   full misses */.
86e0: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
86f0: 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73  *pFree;   /* Lis
8700: 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62  t of available b
8710: 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
8720: 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
8730: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
8740: 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d  e of available m
8750: 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20  emory space */. 
8760: 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20   void *pEnd;    
8770: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
8780: 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20  t byte past end 
8790: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61  of available spa
87a0: 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20  ce */.};.struct 
87b0: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a  LookasideSlot {.
87c0: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
87d0: 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65  *pNext;    /* Ne
87e0: 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65  xt buffer in the
87f0: 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75   list of free bu
8800: 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ffers */.};../*.
8810: 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20  ** A hash table 
8820: 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  for function def
8830: 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  initions..**.** 
8840: 48 61 73 68 20 65 61 63 68 20 46 75 6e 63 44 65  Hash each FuncDe
8850: 66 20 73 74 72 75 63 74 75 72 65 20 69 6e 74 6f  f structure into
8860: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
8870: 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74  DefHash.a[] slot
8880: 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73  s..** Collisions
8890: 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e 63   are on the Func
88a0: 44 65 66 2e 70 48 61 73 68 20 63 68 61 69 6e 2e  Def.pHash chain.
88b0: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
88c0: 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63 44  efHash {.  FuncD
88d0: 65 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20 20 20  ef *a[23];      
88e0: 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66   /* Hash table f
88f0: 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  or functions */.
8900: 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  };..#ifdef SQLIT
8910: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
8920: 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f  ATION./*.** Info
8930: 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e 20  rmation held in 
8940: 74 68 65 20 22 73 71 6c 69 74 65 33 22 20 64 61  the "sqlite3" da
8950: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
8960: 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73 65  n object and use
8970: 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20 75  d.** to manage u
8980: 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69  ser authenticati
8990: 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  on..*/.typedef s
89a0: 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73  truct sqlite3_us
89b0: 65 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f 75  erauth sqlite3_u
89c0: 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74 20  serauth;.struct 
89d0: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
89e0: 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76 65   {.  u8 authLeve
89f0: 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
8a00: 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 75     /* Current au
8a10: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65 76  thentication lev
8a20: 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75 74  el */.  int nAut
8a30: 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20  hPW;            
8a40: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
8a50: 20 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e 20   the zAuthPW in 
8a60: 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72 20  bytes */.  char 
8a70: 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20 20  *zAuthPW;       
8a80: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73 73           /* Pass
8a90: 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75 74  word used to aut
8aa0: 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20 63  henticate */.  c
8ab0: 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b 20  har *zAuthUser; 
8ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8ad0: 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20 74  User name used t
8ae0: 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a  o authenticate *
8af0: 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  /.};../* Allowed
8b00: 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69   values for sqli
8b10: 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75 74  te3_userauth.aut
8b20: 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69 6e  hLevel */.#defin
8b30: 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20  e UAUTH_Unknown 
8b40: 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75 74      0     /* Aut
8b50: 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74 20  hentication not 
8b60: 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a 23  yet checked */.#
8b70: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61 69  define UAUTH_Fai
8b80: 6c 20 20 20 20 20 20 20 20 31 20 20 20 20 20 2f  l        1     /
8b90: 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63  * User authentic
8ba0: 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f 0a  ation failed */.
8bb0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 73  #define UAUTH_Us
8bc0: 65 72 20 20 20 20 20 20 20 20 32 20 20 20 20 20  er        2     
8bd0: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64  /* Authenticated
8be0: 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73 65   as a normal use
8bf0: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  r */.#define UAU
8c00: 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20 33  TH_Admin       3
8c10: 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69       /* Authenti
8c20: 63 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d 69  cated as an admi
8c30: 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a  nistrator */../*
8c40: 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64 20   Functions used 
8c50: 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75 74  only by user aut
8c60: 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69 63  horization logic
8c70: 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 55   */.int sqlite3U
8c80: 73 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f 6e  serAuthTable(con
8c90: 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
8ca0: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 43 68  qlite3UserAuthCh
8cb0: 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65 33  eckLogin(sqlite3
8cc0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 38  *,const char*,u8
8cd0: 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
8ce0: 55 73 65 72 41 75 74 68 49 6e 69 74 28 73 71 6c  UserAuthInit(sql
8cf0: 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
8d00: 69 74 65 33 43 72 79 70 74 46 75 6e 63 28 73 71  ite3CryptFunc(sq
8d10: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
8d20: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
8d30: 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  **);..#endif /* 
8d40: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
8d50: 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f  ENTICATION */../
8d60: 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f 72  *.** typedef for
8d70: 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69   the authorizati
8d80: 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63  on callback func
8d90: 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  tion..*/.#ifdef 
8da0: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
8db0: 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79 70  ENTICATION.  typ
8dc0: 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74  edef int (*sqlit
8dd0: 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c  e3_xauth)(void*,
8de0: 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  int,const char*,
8df0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
8e00: 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20  t char*,.       
8e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e20: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
8e30: 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
8e40: 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  );.#else.  typed
8e50: 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33  ef int (*sqlite3
8e60: 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e  _xauth)(void*,in
8e70: 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  t,const char*,co
8e80: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
8e90: 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20  char*,.         
8ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8eb0: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
8ec0: 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  *);.#endif.../*.
8ed0: 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65  ** Each database
8ee0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61   connection is a
8ef0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
8f00: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
8f10: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
8f20: 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c   sqlite3 {.  sql
8f30: 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20  ite3_vfs *pVfs; 
8f40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53             /* OS
8f50: 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   Interface */.  
8f60: 73 74 72 75 63 74 20 56 64 62 65 20 2a 70 56 64  struct Vdbe *pVd
8f70: 62 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  be;           /*
8f80: 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20   List of active 
8f90: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73  virtual machines
8fa0: 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70   */.  CollSeq *p
8fb0: 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20  DfltColl;       
8fc0: 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75      /* The defau
8fd0: 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  lt collating seq
8fe0: 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a  uence (BINARY) *
8ff0: 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
9000: 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20  x *mutex;       
9010: 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20    /* Connection 
9020: 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61  mutex */.  Db *a
9030: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
9040: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20           /* All 
9050: 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e  backends */.  in
9060: 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20  t nDb;          
9070: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
9080: 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64  umber of backend
9090: 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75  s currently in u
90a0: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67  se */.  int flag
90b0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
90c0: 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c 6c        /* Miscell
90d0: 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53 65  aneous flags. Se
90e0: 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34  e below */.  i64
90f0: 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20   lastRowid;     
9100: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f             /* RO
9110: 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65  WID of most rece
9120: 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20 61  nt insert (see a
9130: 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73  bove) */.  i64 s
9140: 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  zMmap;          
9150: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
9160: 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65  ult mmap_size se
9170: 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69 67  tting */.  unsig
9180: 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67  ned int openFlag
9190: 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67  s;       /* Flag
91a0: 73 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69  s passed to sqli
91b0: 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20  te3_vfs.xOpen() 
91c0: 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65  */.  int errCode
91d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
91e0: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
91f0: 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51  t error code (SQ
9200: 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74  LITE_*) */.  int
9210: 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20   errMask;       
9220: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20             /* & 
9230: 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74  result codes wit
9240: 68 20 74 68 69 73 20 62 65 66 6f 72 65 20 72 65  h this before re
9250: 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75 31 36  turning */.  u16
9260: 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20   dbOptFlags;    
9270: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c             /* Fl
9280: 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69  ags to enable/di
9290: 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69  sable optimizati
92a0: 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f  ons */.  u8 auto
92b0: 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20  Commit;         
92c0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75         /* The au
92d0: 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20  to-commit flag. 
92e0: 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f  */.  u8 temp_sto
92f0: 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  re;             
9300: 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a     /* 1: file 2:
9310: 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75   memory 0: defau
9320: 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f  lt */.  u8 mallo
9330: 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20  cFailed;        
9340: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
9350: 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61 20   we have seen a 
9360: 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a  malloc failure *
9370: 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d  /.  u8 dfltLockM
9380: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
9390: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63    /* Default loc
93a0: 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74  king-mode for at
93b0: 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20  tached dbs */.  
93c0: 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78 74  signed char next
93d0: 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a  Autovac;      /*
93e0: 20 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e 67   Autovac setting
93f0: 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66   after VACUUM if
9400: 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75 70   >=0 */.  u8 sup
9410: 70 72 65 73 73 45 72 72 3b 20 20 20 20 20 20 20  pressErr;       
9420: 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f          /* Do no
9430: 74 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d 65  t issue error me
9440: 73 73 61 67 65 73 20 69 66 20 74 72 75 65 20 2a  ssages if true *
9450: 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e  /.  u8 vtabOnCon
9460: 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20 20  flict;          
9470: 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
9480: 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61 62  turn for s3_vtab
9490: 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a  _on_conflict() *
94a0: 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61 63  /.  u8 isTransac
94b0: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20  tionSavepoint;  
94c0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
94d0: 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70   outermost savep
94e0: 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f 0a  oint is a TS */.
94f0: 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69    int nextPagesi
9500: 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ze;             
9510: 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65  /* Pagesize afte
9520: 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a  r VACUUM if >0 *
9530: 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20  /.  u32 magic;  
9540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9550: 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65    /* Magic numbe
9560: 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62  r for detect lib
9570: 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20  rary misuse */. 
9580: 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20   int nChange;   
9590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
95a0: 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64  * Value returned
95b0: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e   by sqlite3_chan
95c0: 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  ges() */.  int n
95d0: 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20  TotalChange;    
95e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
95f0: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
9600: 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e  lite3_total_chan
9610: 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61  ges() */.  int a
9620: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c  Limit[SQLITE_N_L
9630: 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69  IMIT];   /* Limi
9640: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78  ts */.  int nMax
9650: 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20 20 20  SorterMmap;     
9660: 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
9670: 20 73 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e 73   size of regions
9680: 20 6d 61 70 70 65 64 20 62 79 20 73 6f 72 74 65   mapped by sorte
9690: 72 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71  r */.  struct sq
96a0: 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20  lite3InitInfo { 
96b0: 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
96c0: 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20  ion used during 
96d0: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a  initialization *
96e0: 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75  /.    int newTnu
96f0: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
9700: 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66    /* Rootpage of
9710: 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69   table being ini
9720: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
9730: 75 38 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  u8 iDb;         
9740: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
9750: 68 69 63 68 20 64 62 20 66 69 6c 65 20 69 73 20  hich db file is 
9760: 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
9770: 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79  d */.    u8 busy
9780: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9790: 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20       /* TRUE if 
97a0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61  currently initia
97b0: 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38  lizing */.    u8
97c0: 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 3b 20   orphanTrigger; 
97d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
97e0: 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f  t statement is o
97f0: 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69  rphaned TEMP tri
9800: 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69 6e 69 74  gger */.  } init
9810: 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63 74  ;.  int nVdbeAct
9820: 69 76 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ive;            
9830: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56    /* Number of V
9840: 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 72  DBEs currently r
9850: 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  unning */.  int 
9860: 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20 20 20  nVdbeRead;      
9870: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
9880: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44  ber of active VD
9890: 42 45 73 20 74 68 61 74 20 72 65 61 64 20 6f 72  BEs that read or
98a0: 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20   write */.  int 
98b0: 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20 20 20  nVdbeWrite;     
98c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
98d0: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44  ber of active VD
98e0: 42 45 73 20 74 68 61 74 20 72 65 61 64 20 61 6e  BEs that read an
98f0: 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74  d write */.  int
9900: 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20 20   nVdbeExec;     
9910: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
9920: 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63  mber of nested c
9930: 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63  alls to VdbeExec
9940: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74  () */.  int nExt
9950: 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ension;         
9960: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
9970: 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73  of loaded extens
9980: 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  ions */.  void *
9990: 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20  *aExtension;    
99a0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79          /* Array
99b0: 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61   of shared libra
99c0: 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20  ry handles */.  
99d0: 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29 28 76  void (*xTrace)(v
99e0: 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  oid*,const char*
99f0: 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 72 61  );        /* Tra
9a00: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
9a10: 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67   void *pTraceArg
9a20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9a30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
9a40: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72  gument to the tr
9a50: 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ace function */.
9a60: 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c    void (*xProfil
9a70: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
9a80: 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50  har*,u64);  /* P
9a90: 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f  rofiling functio
9aa0: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72  n */.  void *pPr
9ab0: 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20  ofileArg;       
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ad0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
9ae0: 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e  profile function
9af0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d   */.  void *pCom
9b00: 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20  mitArg;         
9b10: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
9b20: 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61  ent to xCommitCa
9b30: 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20  llback() */   . 
9b40: 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61   int (*xCommitCa
9b50: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20  llback)(void*); 
9b60: 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74     /* Invoked at
9b70: 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a   every commit. *
9b80: 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62  /.  void *pRollb
9b90: 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20  ackArg;         
9ba0: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
9bb0: 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61  t to xRollbackCa
9bc0: 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20  llback() */   . 
9bd0: 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63   void (*xRollbac
9be0: 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a  kCallback)(void*
9bf0: 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74  ); /* Invoked at
9c00: 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a   every commit. *
9c10: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74  /.  void *pUpdat
9c20: 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78  eArg;.  void (*x
9c30: 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28  UpdateCallback)(
9c40: 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  void*,int, const
9c50: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
9c60: 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29  r*,sqlite_int64)
9c70: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
9c80: 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20  _OMIT_WAL.  int 
9c90: 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28  (*xWalCallback)(
9ca0: 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20  void *, sqlite3 
9cb0: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
9cc0: 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
9cd0: 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20  WalArg;.#endif. 
9ce0: 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64   void(*xCollNeed
9cf0: 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  ed)(void*,sqlite
9d00: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
9d10: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
9d20: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
9d30: 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  d16)(void*,sqlit
9d40: 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70  e3*,int eTextRep
9d50: 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20  ,const void*);. 
9d60: 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64   void *pCollNeed
9d70: 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33  edArg;.  sqlite3
9d80: 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20  _value *pErr;   
9d90: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
9da0: 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73  ecent error mess
9db0: 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  age */.  union {
9dc0: 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e  .    volatile in
9dd0: 74 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b  t isInterrupted;
9de0: 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69   /* True if sqli
9df0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61  te3_interrupt ha
9e00: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
9e10: 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55  .    double notU
9e20: 73 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20  sed1;           
9e30: 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20   /* Spacer */.  
9e40: 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64  } u1;.  Lookasid
9e50: 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  e lookaside;    
9e60: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69        /* Lookasi
9e70: 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67  de malloc config
9e80: 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64  uration */.#ifnd
9e90: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
9ea0: 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73  UTHORIZATION.  s
9eb0: 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78 41 75  qlite3_xauth xAu
9ec0: 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  th;          /* 
9ed0: 41 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61  Access authoriza
9ee0: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  tion function */
9ef0: 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72  .  void *pAuthAr
9f00: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
9f10: 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74   /* 1st argument
9f20: 20 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61   to the access a
9f30: 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  uth function */.
9f40: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
9f50: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
9f60: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69  ESS_CALLBACK.  i
9f70: 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28  nt (*xProgress)(
9f80: 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20  void *);     /* 
9f90: 54 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  The progress cal
9fa0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
9fb0: 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20  *pProgressArg;  
9fc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
9fd0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67  ment to the prog
9fe0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
9ff0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f  .  unsigned nPro
a000: 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20  gressOps;       
a010: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70   /* Number of op
a020: 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65  codes for progre
a030: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23  ss callback */.#
a040: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
a050: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
a060: 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54  LTABLE.  int nVT
a070: 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
a080: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61         /* Alloca
a090: 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72  ted size of aVTr
a0a0: 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d  ans */.  Hash aM
a0b0: 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20  odule;          
a0c0: 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61         /* popula
a0d0: 74 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ted by sqlite3_c
a0e0: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
a0f0: 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74  /.  VtabCtx *pVt
a100: 61 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20  abCtx;          
a110: 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72    /* Context for
a120: 20 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e   active vtab con
a130: 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20  nect/create */. 
a140: 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e   VTable **aVTran
a150: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
a160: 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73  * Virtual tables
a170: 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73   with open trans
a180: 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61  actions */.  VTa
a190: 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74  ble *pDisconnect
a1a0: 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65  ;    /* Disconne
a1b0: 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74  ct these in next
a1c0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
a1d0: 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46  () */.#endif.  F
a1e0: 75 6e 63 44 65 66 48 61 73 68 20 61 46 75 6e 63  uncDefHash aFunc
a1f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
a200: 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f  Hash table of co
a210: 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f  nnection functio
a220: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f  ns */.  Hash aCo
a230: 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20 20  llSeq;          
a240: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c        /* All col
a250: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
a260: 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65   */.  BusyHandle
a270: 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20  r busyHandler;  
a280: 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c      /* Busy call
a290: 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62  back */.  Db aDb
a2a0: 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20  Static[2];      
a2b0: 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69          /* Stati
a2c0: 63 20 73 70 61 63 65 20 66 6f 72 20 74 68 65 20  c space for the 
a2d0: 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e  2 default backen
a2e0: 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e  ds */.  Savepoin
a2f0: 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20  t *pSavepoint;  
a300: 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
a310: 20 61 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e   active savepoin
a320: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79  ts */.  int busy
a330: 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20  Timeout;        
a340: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61        /* Busy ha
a350: 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69  ndler timeout, i
a360: 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20  n msec */.  int 
a370: 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  nSavepoint;     
a380: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
a390: 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73  ber of non-trans
a3a0: 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
a3b0: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74  s */.  int nStat
a3c0: 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20  ement;          
a3d0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
a3e0: 66 20 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65  f nested stateme
a3f0: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  nt-transactions 
a400: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
a410: 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  redCons;        
a420: 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72      /* Net defer
a430: 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  red constraints 
a440: 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  this transaction
a450: 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  . */.  i64 nDefe
a460: 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20  rredImmCons;    
a470: 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65       /* Net defe
a480: 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63  rred immediate c
a490: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20  onstraints */.  
a4a0: 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65  int *pnBytesFree
a4b0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
a4c0: 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e   If not NULL, in
a4d0: 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20  crement this in 
a4e0: 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69 66 64  DbFree() */.#ifd
a4f0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
a500: 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20  _UNLOCK_NOTIFY. 
a510: 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
a520: 67 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  g variables are 
a530: 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79  all protected by
a540: 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54   the STATIC_MAST
a550: 45 52 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20  ER .  ** mutex, 
a560: 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d  not by sqlite3.m
a570: 75 74 65 78 2e 20 54 68 65 79 20 61 72 65 20 75  utex. They are u
a580: 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e  sed by code in n
a590: 6f 74 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20  otify.c. .  **. 
a5a0: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f   ** When X.pUnlo
a5b0: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ckConnection==Y,
a5c0: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
a5d0: 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f   X is waiting fo
a5e0: 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f  r Y to.  ** unlo
a5f0: 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ck so that it ca
a600: 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a  n proceed..  **.
a610: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f    ** When X.pBlo
a620: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d  ckingConnection=
a630: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
a640: 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68  hat something th
a650: 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20  at X tried.  ** 
a660: 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65  tried to do rece
a670: 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68  ntly failed with
a680: 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   an SQLITE_LOCKE
a690: 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c  D error due to l
a6a0: 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62  ocks.  ** held b
a6b0: 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  y Y..  */.  sqli
a6c0: 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f  te3 *pBlockingCo
a6d0: 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e  nnection; /* Con
a6e0: 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75  nection that cau
a6f0: 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  sed SQLITE_LOCKE
a700: 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  D */.  sqlite3 *
a710: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
a720: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
a730: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61  Connection to wa
a740: 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a  tch for unlock *
a750: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63  /.  void *pUnloc
a760: 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  kArg;           
a770: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
a780: 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b  ument to xUnlock
a790: 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64  Notify */.  void
a7a0: 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79   (*xUnlockNotify
a7b0: 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b  )(void **, int);
a7c0: 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69    /* Unlock noti
a7d0: 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  fy callback */. 
a7e0: 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42   sqlite3 *pNextB
a7f0: 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f  locked;        /
a800: 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f  * Next in list o
a810: 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f  f all blocked co
a820: 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e  nnections */.#en
a830: 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
a840: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
a850: 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f  ATION.  sqlite3_
a860: 75 73 65 72 61 75 74 68 20 61 75 74 68 3b 20 20  userauth auth;  
a870: 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75        /* User au
a880: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66  thentication inf
a890: 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  ormation */.#end
a8a0: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d  if.};../*.** A m
a8b0: 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72  acro to discover
a8c0: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
a8d0: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a   a database..*/.
a8e0: 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20  #define ENC(db) 
a8f0: 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53  ((db)->aDb[0].pS
a900: 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a  chema->enc)../*.
a910: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
a920: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
a930: 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65  e3.flags..*/.#de
a940: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
a950: 54 72 61 63 65 20 20 20 20 20 20 30 78 30 30 30  Trace      0x000
a960: 30 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74  00001  /* True t
a970: 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65  o trace VDBE exe
a980: 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  cution */.#defin
a990: 65 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  e SQLITE_InternC
a9a0: 68 61 6e 67 65 73 20 20 30 78 30 30 30 30 30 30  hanges  0x000000
a9b0: 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74  02  /* Uncommitt
a9c0: 65 64 20 48 61 73 68 20 74 61 62 6c 65 20 63 68  ed Hash table ch
a9d0: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
a9e0: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e   SQLITE_FullFSyn
a9f0: 63 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30  c      0x0000000
aa00: 34 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66  4  /* Use full f
aa10: 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b  sync on the back
aa20: 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  end */.#define S
aa30: 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53  QLITE_CkptFullFS
aa40: 79 6e 63 20 20 30 78 30 30 30 30 30 30 30 38 20  ync  0x00000008 
aa50: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
aa60: 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e  nc for checkpoin
aa70: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
aa80: 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20  ITE_CacheSpill  
aa90: 20 20 20 30 78 30 30 30 30 30 30 31 30 20 20 2f     0x00000010  /
aaa0: 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61  * OK to spill pa
aab0: 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65  ger cache */.#de
aac0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
aad0: 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30  ColNames   0x000
aae0: 30 30 30 32 30 20 20 2f 2a 20 53 68 6f 77 20 66  00020  /* Show f
aaf0: 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ull column names
ab00: 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64   on SELECT */.#d
ab10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f  efine SQLITE_Sho
ab20: 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30  rtColNames  0x00
ab30: 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20  000040  /* Show 
ab40: 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61  short columns na
ab50: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  mes */.#define S
ab60: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
ab70: 20 20 20 20 20 30 78 30 30 30 30 30 30 38 30 20       0x00000080 
ab80: 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63   /* Count rows c
ab90: 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54  hanged by INSERT
aba0: 2c 20 2a 2f 0a 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 20 20 20 20 20 20 20 20 20 2f                 /
abd0: 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  *   DELETE, or U
abe0: 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e  PDATE and return
abf0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
ac00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ac20: 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69     the count usi
ac30: 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ng a callback. *
ac40: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ac50: 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20  _NullCallback   
ac60: 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49  0x00000100  /* I
ac70: 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61  nvoke the callba
ac80: 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a  ck once if the *
ac90: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
aca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
acb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
acc0: 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
acd0: 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
ace0: 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20  SQLITE_SqlTrace 
acf0: 20 20 20 20 20 20 30 78 30 30 30 30 30 32 30 30        0x00000200
ad00: 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74    /* Debug print
ad10: 20 53 51 4c 20 61 73 20 69 74 20 65 78 65 63 75   SQL as it execu
ad20: 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  tes */.#define S
ad30: 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e  QLITE_VdbeListin
ad40: 67 20 20 20 20 30 78 30 30 30 30 30 34 30 30 20  g    0x00000400 
ad50: 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e   /* Debug listin
ad60: 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72  gs of VDBE progr
ad70: 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ams */.#define S
ad80: 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d  QLITE_WriteSchem
ad90: 61 20 20 20 20 30 78 30 30 30 30 30 38 30 30 20  a    0x00000800 
ada0: 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65   /* OK to update
adb0: 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a   SQLITE_MASTER *
adc0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
add0: 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65 20  _VdbeAddopTrace 
ade0: 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 54  0x00001000  /* T
adf0: 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62 65  race sqlite3Vdbe
ae00: 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f  AddOp() calls */
ae10: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ae20: 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30  IgnoreChecks   0
ae30: 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20 44 6f  x00002000  /* Do
ae40: 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65   not enforce che
ae50: 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ck constraints *
ae60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ae70: 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64  _ReadUncommitted
ae80: 20 30 78 30 30 30 34 30 30 30 20 20 2f 2a 20 46   0x0004000  /* F
ae90: 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
aea0: 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mode */.#define 
aeb0: 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c  SQLITE_LegacyFil
aec0: 65 46 6d 74 20 20 30 78 30 30 30 30 38 30 30 30  eFmt  0x00008000
aed0: 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20    /* Create new 
aee0: 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72  databases in for
aef0: 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65  mat 1 */.#define
af00: 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79   SQLITE_Recovery
af10: 4d 6f 64 65 20 20 20 30 78 30 30 30 31 30 30 30  Mode   0x0001000
af20: 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68  0  /* Ignore sch
af30: 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64  ema errors */.#d
af40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76  efine SQLITE_Rev
af50: 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30  erseOrder   0x00
af60: 30 32 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72  020000  /* Rever
af70: 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c  se unordered SEL
af80: 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ECTs */.#define 
af90: 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65  SQLITE_RecTrigge
afa0: 72 73 20 20 20 20 30 78 30 30 30 34 30 30 30 30  rs    0x00040000
afb0: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75    /* Enable recu
afc0: 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a  rsive triggers *
afd0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
afe0: 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20  _ForeignKeys    
aff0: 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45  0x00080000  /* E
b000: 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b  nforce foreign k
b010: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20  ey constraints  
b020: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b030: 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20  E_AutoIndex     
b040: 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20   0x00100000  /* 
b050: 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63  Enable automatic
b060: 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66   indexes */.#def
b070: 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65  ine SQLITE_Prefe
b080: 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30 32 30  rBuiltin  0x0020
b090: 30 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65  0000  /* Prefere
b0a0: 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20  nce to built-in 
b0b0: 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65  funcs */.#define
b0c0: 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65   SQLITE_LoadExte
b0d0: 6e 73 69 6f 6e 20 20 30 78 30 30 34 30 30 30 30  nsion  0x0040000
b0e0: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61  0  /* Enable loa
b0f0: 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23  d_extension */.#
b100: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
b110: 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 30  ableTrigger  0x0
b120: 30 38 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65  0800000  /* True
b130: 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67   to enable trigg
b140: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
b150: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20  QLITE_DeferFKs  
b160: 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30 20       0x01000000 
b170: 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b   /* Defer all FK
b180: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
b190: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
b1a0: 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78  ueryOnly      0x
b1b0: 30 32 30 30 30 30 30 30 20 20 2f 2a 20 44 69 73  02000000  /* Dis
b1c0: 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63 68  able database ch
b1d0: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
b1e0: 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20   SQLITE_VdbeEQP 
b1f0: 20 20 20 20 20 20 20 30 78 30 34 30 30 30 30 30         0x0400000
b200: 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c  0  /* Debug EXPL
b210: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a  AIN QUERY PLAN *
b220: 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f  /.../*.** Bits o
b230: 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62  f the sqlite3.db
b240: 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74  OptFlags field t
b250: 68 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20  hat are used by 
b260: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74  the.** sqlite3_t
b270: 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
b280: 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49  TE_TESTCTRL_OPTI
b290: 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69  MIZATIONS,...) i
b2a0: 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73  nterface to.** s
b2b0: 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62  electively disab
b2c0: 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d  le various optim
b2d0: 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65  izations..*/.#de
b2e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
b2f0: 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30  yFlattener 0x000
b300: 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61  1   /* Query fla
b310: 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69  ttening */.#defi
b320: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e  ne SQLITE_Column
b330: 43 61 63 68 65 20 20 20 20 30 78 30 30 30 32 20  Cache    0x0002 
b340: 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68    /* Column cach
b350: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
b360: 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72  ITE_GroupByOrder
b370: 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47     0x0004   /* G
b380: 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20  ROUPBY cover of 
b390: 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69  ORDERBY */.#defi
b3a0: 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72  ne SQLITE_Factor
b3b0: 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20  OutConst 0x0008 
b3c0: 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61    /* Constant fa
b3d0: 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20  ctoring */./*   
b3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 74               not
b3f0: 20 75 73 65 64 20 20 20 20 30 78 30 30 31 30 20   used    0x0010 
b400: 20 20 2f 2f 20 57 61 73 3a 20 53 51 4c 49 54 45    // Was: SQLITE
b410: 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20 2a 2f  _IdxRealAsInt */
b420: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b430: 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30  DistinctOpt    0
b440: 78 30 30 32 30 20 20 20 2f 2a 20 44 49 53 54 49  x0020   /* DISTI
b450: 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65  NCT using indexe
b460: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b470: 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e  ITE_CoverIdxScan
b480: 20 20 20 30 78 30 30 34 30 20 20 20 2f 2a 20 43     0x0040   /* C
b490: 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63  overing index sc
b4a0: 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ans */.#define S
b4b0: 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78  QLITE_OrderByIdx
b4c0: 4a 6f 69 6e 20 30 78 30 30 38 30 20 20 20 2f 2a  Join 0x0080   /*
b4d0: 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69   ORDER BY of joi
b4e0: 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a  ns via index */.
b4f0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
b500: 75 62 71 43 6f 72 6f 75 74 69 6e 65 20 20 30 78  ubqCoroutine  0x
b510: 30 31 30 30 20 20 20 2f 2a 20 45 76 61 6c 75 61  0100   /* Evalua
b520: 74 65 20 73 75 62 71 75 65 72 69 65 73 20 61 73  te subqueries as
b530: 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23   coroutines */.#
b540: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72  define SQLITE_Tr
b550: 61 6e 73 69 74 69 76 65 20 20 20 20 20 30 78 30  ansitive     0x0
b560: 32 30 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74  200   /* Transit
b570: 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ive constraints 
b580: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b590: 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20  E_OmitNoopJoin  
b5a0: 20 30 78 30 34 30 30 20 20 20 2f 2a 20 4f 6d 69   0x0400   /* Omi
b5b0: 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20  t unused tables 
b5c0: 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66  in joins */.#def
b5d0: 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61 74 33  ine SQLITE_Stat3
b5e0: 34 20 20 20 20 20 20 20 20 20 30 78 30 38 30 30  4         0x0800
b5f0: 20 20 20 2f 2a 20 55 73 65 20 53 54 41 54 33 20     /* Use STAT3 
b600: 6f 72 20 53 54 41 54 34 20 64 61 74 61 20 2a 2f  or STAT4 data */
b610: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b620: 41 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30  AllOpts        0
b630: 78 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f  xffff   /* All o
b640: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a  ptimizations */.
b650: 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f  ./*.** Macros fo
b660: 72 20 74 65 73 74 69 6e 67 20 77 68 65 74 68 65  r testing whethe
b670: 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a  r or not optimiz
b680: 61 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c  ations are enabl
b690: 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a  ed or disabled..
b6a0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
b6b0: 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
b6c0: 45 53 54 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  EST.#define Opti
b6d0: 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64  mizationDisabled
b6e0: 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64  (db, mask)  (((d
b6f0: 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28  b)->dbOptFlags&(
b700: 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69  mask))!=0).#defi
b710: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45  ne OptimizationE
b720: 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  nabled(db, mask)
b730: 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74     (((db)->dbOpt
b740: 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30  Flags&(mask))==0
b750: 29 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  ).#else.#define 
b760: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61  OptimizationDisa
b770: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
b780: 30 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  0.#define Optimi
b790: 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62  zationEnabled(db
b7a0: 2c 20 6d 61 73 6b 29 20 20 20 31 0a 23 65 6e 64  , mask)   1.#end
b7b0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  if../*.** Return
b7c0: 20 74 72 75 65 20 69 66 20 69 74 20 4f 4b 20 74   true if it OK t
b7d0: 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e  o factor constan
b7e0: 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e  t expressions in
b7f0: 74 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  to the initializ
b800: 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54  ation.** code. T
b810: 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  he argument is a
b820: 20 50 61 72 73 65 20 6f 62 6a 65 63 74 20 66 6f   Parse object fo
b830: 72 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  r the code gener
b840: 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ator..*/.#define
b850: 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50   ConstFactorOk(P
b860: 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46  ) ((P)->okConstF
b870: 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f  actor)../*.** Po
b880: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f  ssible values fo
b890: 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67  r the sqlite.mag
b8a0: 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65  ic field..** The
b8b0: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62 74   numbers are obt
b8c0: 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d 20  ained at random 
b8d0: 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65 63  and have no spec
b8e0: 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68  ial meaning, oth
b8f0: 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67  er.** than being
b900: 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f   distinct from o
b910: 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23  ne another..*/.#
b920: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
b930: 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78 61  GIC_OPEN     0xa
b940: 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74 61  029a697  /* Data
b950: 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a  base is open */.
b960: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
b970: 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30 78  AGIC_CLOSED   0x
b980: 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61 74  9f3c2d33  /* Dat
b990: 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20  abase is closed 
b9a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b9b0: 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20 20  E_MAGIC_SICK    
b9c0: 20 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a 20   0x4b771290  /* 
b9d0: 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74 69  Error and awaiti
b9e0: 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66  ng close */.#def
b9f0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
ba00: 5f 42 55 53 59 20 20 20 20 20 30 78 66 30 33 62  _BUSY     0xf03b
ba10: 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61 73  7906  /* Databas
ba20: 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75  e currently in u
ba30: 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  se */.#define SQ
ba40: 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52  LITE_MAGIC_ERROR
ba50: 20 20 20 20 30 78 62 35 33 35 37 39 33 30 20 20      0xb5357930  
ba60: 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53  /* An SQLITE_MIS
ba70: 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72 72  USE error occurr
ba80: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
ba90: 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49  LITE_MAGIC_ZOMBI
baa0: 45 20 20 20 30 78 36 34 63 66 66 63 37 66 20 20  E   0x64cffc7f  
bab0: 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c 61  /* Close with la
bac0: 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f  st statement clo
bad0: 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  se */../*.** Eac
bae0: 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69  h SQL function i
baf0: 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20  s defined by an 
bb00: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
bb10: 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72  following.** str
bb20: 75 63 74 75 72 65 2e 20 20 41 20 70 6f 69 6e 74  ucture.  A point
bb30: 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  er to this struc
bb40: 74 75 72 65 20 69 73 20 73 74 6f 72 65 64 20 69  ture is stored i
bb50: 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61 46 75  n the sqlite.aFu
bb60: 6e 63 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65  nc.** hash table
bb70: 2e 20 20 57 68 65 6e 20 6d 75 6c 74 69 70 6c 65  .  When multiple
bb80: 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20   functions have 
bb90: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c 20 74  the same name, t
bba0: 68 65 20 68 61 73 68 20 74 61 62 6c 65 0a 2a 2a  he hash table.**
bbb0: 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6c 69 6e   points to a lin
bbc0: 6b 65 64 20 6c 69 73 74 20 6f 66 20 74 68 65 73  ked list of thes
bbd0: 65 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2f  e structures..*/
bbe0: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20  .struct FuncDef 
bbf0: 7b 0a 20 20 69 31 36 20 6e 41 72 67 3b 20 20 20  {.  i16 nArg;   
bc00: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
bc10: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e  er of arguments.
bc20: 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d    -1 means unlim
bc30: 69 74 65 64 20 2a 2f 0a 20 20 75 31 36 20 66 75  ited */.  u16 fu
bc40: 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f  ncFlags;       /
bc50: 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69  * Some combinati
bc60: 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e  on of SQLITE_FUN
bc70: 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  C_* */.  void *p
bc80: 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2a  UserData;     /*
bc90: 20 55 73 65 72 20 64 61 74 61 20 70 61 72 61 6d   User data param
bca0: 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65  eter */.  FuncDe
bcb0: 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f  f *pNext;      /
bcc0: 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e 20  * Next function 
bcd0: 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a  with same name *
bce0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e 63  /.  void (*xFunc
bcf0: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
bd00: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
bd10: 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 52 65 67 75  alue**); /* Regu
bd20: 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  lar function */.
bd30: 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29 28    void (*xStep)(
bd40: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
bd50: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
bd60: 75 65 2a 2a 29 3b 20 2f 2a 20 41 67 67 72 65 67  ue**); /* Aggreg
bd70: 61 74 65 20 73 74 65 70 20 2a 2f 0a 20 20 76 6f  ate step */.  vo
bd80: 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28  id (*xFinalize)(
bd90: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
bda0: 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  );              
bdb0: 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66    /* Aggregate f
bdc0: 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63 68  inalizer */.  ch
bdd0: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
bde0: 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f     /* SQL name o
bdf0: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  f the function. 
be00: 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 48  */.  FuncDef *pH
be10: 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ash;      /* Nex
be20: 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72 65  t with a differe
be30: 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20  nt name but the 
be40: 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 46  same hash */.  F
be50: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70  uncDestructor *p
be60: 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a  Destructor;   /*
be70: 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74   Reference count
be80: 65 64 20 64 65 73 74 72 75 63 74 6f 72 20 66 75  ed destructor fu
be90: 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  nction */.};../*
bea0: 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75  .** This structu
beb0: 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73 20  re encapsulates 
bec0: 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20  a user-function 
bed0: 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c 62  destructor callb
bee0: 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69  ack (as.** confi
bef0: 67 75 72 65 64 20 75 73 69 6e 67 20 63 72 65 61  gured using crea
bf00: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29  te_function_v2()
bf10: 29 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e 63  ) and a referenc
bf20: 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a  e counter. When.
bf30: 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69  ** create_functi
bf40: 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c 65  on_v2() is calle
bf50: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 66 75  d to create a fu
bf60: 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64 65  nction with a de
bf70: 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73  structor,.** a s
bf80: 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20  ingle object of 
bf90: 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 6c  this type is all
bfa0: 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73 74  ocated. FuncDest
bfb0: 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20 73  ructor.nRef is s
bfc0: 65 74 20 74 6f 20 0a 2a 2a 20 74 68 65 20 6e 75  et to .** the nu
bfd0: 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66 20  mber of FuncDef 
bfe0: 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65 64 20  objects created 
bff0: 28 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c 20  (either 1 or 3, 
c000: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
c010: 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74  ther.** or not t
c020: 68 65 20 73 70 65 63 69 66 69 65 64 20 65 6e 63  he specified enc
c030: 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45 5f  oding is SQLITE_
c040: 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44 65  ANY). The FuncDe
c050: 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a  f.pDestructor.**
c060: 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68 20   member of each 
c070: 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63 44  of the new FuncD
c080: 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73 65  ef objects is se
c090: 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  t to point to th
c0a0: 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46  e allocated.** F
c0b0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a  uncDestructor..*
c0c0: 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72 2c  *.** Thereafter,
c0d0: 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65   when one of the
c0e0: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
c0f0: 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68 65   is deleted, the
c100: 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f   reference.** co
c110: 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65  unt on this obje
c120: 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74 65  ct is decremente
c130: 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63 68  d. When it reach
c140: 65 73 20 30 2c 20 74 68 65 20 64 65 73 74 72 75  es 0, the destru
c150: 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b  ctor.** is invok
c160: 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63 44  ed and the FuncD
c170: 65 73 74 72 75 63 74 6f 72 20 73 74 72 75 63 74  estructor struct
c180: 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74  ure freed..*/.st
c190: 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63  ruct FuncDestruc
c1a0: 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66  tor {.  int nRef
c1b0: 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74  ;.  void (*xDest
c1c0: 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20  roy)(void *);.  
c1d0: 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b  void *pUserData;
c1e0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  .};../*.** Possi
c1f0: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 46  ble values for F
c200: 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e  uncDef.flags.  N
c210: 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f 4c 45  ote that the _LE
c220: 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45 4f 46  NGTH and _TYPEOF
c230: 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73 74 20  .** values must 
c240: 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50  correspond to OP
c250: 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61  FLAG_LENGTHARG a
c260: 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  nd OPFLAG_TYPEOF
c270: 41 52 47 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61  ARG.  There.** a
c280: 72 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74  re assert() stat
c290: 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f  ements in the co
c2a0: 64 65 20 74 6f 20 76 65 72 69 66 79 20 74 68 69  de to verify thi
c2b0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  s..*/.#define SQ
c2c0: 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53  LITE_FUNC_ENCMAS
c2d0: 4b 20 20 30 78 30 30 33 20 2f 2a 20 53 51 4c 49  K  0x003 /* SQLI
c2e0: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
c2f0: 55 54 46 31 36 42 45 20 6f 72 20 55 54 46 31 36  UTF16BE or UTF16
c300: 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LE */.#define SQ
c310: 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20  LITE_FUNC_LIKE  
c320: 20 20 20 30 78 30 30 34 20 2f 2a 20 43 61 6e 64     0x004 /* Cand
c330: 69 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49  idate for the LI
c340: 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  KE optimization 
c350: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c360: 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20  E_FUNC_CASE     
c370: 30 78 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65  0x008 /* Case-se
c380: 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70  nsitive LIKE-typ
c390: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  e function */.#d
c3a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
c3b0: 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30 31 30  C_EPHEM    0x010
c3c0: 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20   /* Ephemeral.  
c3d0: 44 65 6c 65 74 65 20 77 69 74 68 20 56 44 42 45  Delete with VDBE
c3e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c3f0: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
c400: 20 30 78 30 32 30 20 2f 2a 20 73 71 6c 69 74 65   0x020 /* sqlite
c410: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
c420: 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65  ) might be calle
c430: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
c440: 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20  ITE_FUNC_LENGTH 
c450: 20 20 30 78 30 34 30 20 2f 2a 20 42 75 69 6c 74    0x040 /* Built
c460: 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75 6e  -in length() fun
c470: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
c480: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50   SQLITE_FUNC_TYP
c490: 45 4f 46 20 20 20 30 78 30 38 30 20 2f 2a 20 42  EOF   0x080 /* B
c4a0: 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28 29  uilt-in typeof()
c4b0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
c4c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
c4d0: 5f 43 4f 55 4e 54 20 20 20 20 30 78 31 30 30 20  _COUNT    0x100 
c4e0: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e  /* Built-in coun
c4f0: 74 28 2a 29 20 61 67 67 72 65 67 61 74 65 20 2a  t(*) aggregate *
c500: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c510: 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30  _FUNC_COALESCE 0
c520: 78 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  x200 /* Built-in
c530: 20 63 6f 61 6c 65 73 63 65 28 29 20 6f 72 20 69   coalesce() or i
c540: 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69  fnull() */.#defi
c550: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55  ne SQLITE_FUNC_U
c560: 4e 4c 49 4b 45 4c 59 20 30 78 34 30 30 20 2f 2a  NLIKELY 0x400 /*
c570: 20 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65   Built-in unlike
c580: 6c 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ly() function */
c590: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c5a0: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78  FUNC_CONSTANT 0x
c5b0: 38 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  800 /* Constant 
c5c0: 69 6e 70 75 74 73 20 67 69 76 65 20 61 20 63 6f  inputs give a co
c5d0: 6e 73 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f  nstant output */
c5e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c5f0: 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 30 78 31  FUNC_MINMAX  0x1
c600: 30 30 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  000 /* True for 
c610: 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20  min() and max() 
c620: 61 67 67 72 65 67 61 74 65 73 20 2a 2f 0a 0a 2f  aggregates */../
c630: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
c640: 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c  ng three macros,
c650: 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b   FUNCTION(), LIK
c660: 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52  EFUNC() and AGGR
c670: 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75  EGATE() are.** u
c680: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68  sed to create th
c690: 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66  e initializers f
c6a0: 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73  or the FuncDef s
c6b0: 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a  tructures..**.**
c6c0: 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d     FUNCTION(zNam
c6d0: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
c6e0: 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
c6f0: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
c700: 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69   a scalar functi
c710: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  on definition of
c720: 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d   a function zNam
c730: 65 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d  e .**     implem
c740: 65 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74  ented by C funct
c750: 69 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61  ion xFunc that a
c760: 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75  ccepts nArg argu
c770: 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20  ments. The.**   
c780: 20 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61    value passed a
c790: 73 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74  s iArg is cast t
c7a0: 6f 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20  o a (void*) and 
c7b0: 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a  made available.*
c7c0: 2a 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65  *     as the use
c7d0: 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f  r-data (sqlite3_
c7e0: 75 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72  user_data()) for
c7f0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49   the function. I
c800: 66 20 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65  f .**     argume
c810: 6e 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20  nt bNC is true, 
c820: 74 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  then the SQLITE_
c830: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c  FUNC_NEEDCOLL fl
c840: 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  ag is set..**.**
c850: 20 20 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61     VFUNCTION(zNa
c860: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
c870: 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20  bNC, xFunc).**  
c880: 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e     Like FUNCTION
c890: 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73   except it omits
c8a0: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
c8b0: 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a  _CONSTANT flag..
c8c0: 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54  **.**   AGGREGAT
c8d0: 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  E(zName, nArg, i
c8e0: 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c  Arg, bNC, xStep,
c8f0: 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20   xFinal).**     
c900: 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
c910: 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  n aggregate func
c920: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
c930: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a  implemented by.*
c940: 2a 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63  *     the C func
c950: 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20  tions xStep and 
c960: 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73  xFinal. The firs
c970: 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72  t four parameter
c980: 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74  s.**     are int
c990: 65 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20  erpreted in the 
c9a0: 73 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20  same way as the 
c9b0: 66 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65  first 4 paramete
c9c0: 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e  rs to.**     FUN
c9d0: 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20  CTION()..**.**  
c9e0: 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
c9f0: 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61   nArg, pArg, fla
ca00: 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  gs).**     Used 
ca10: 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c  to create a scal
ca20: 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  ar function defi
ca30: 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63  nition of a func
ca40: 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20  tion zName .**  
ca50: 20 20 20 74 68 61 74 20 61 63 63 65 70 74 73 20     that accepts 
ca60: 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61  nArg arguments a
ca70: 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  nd is implemente
ca80: 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43  d by a call to C
ca90: 20 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f   .**     functio
caa0: 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75  n likeFunc. Argu
cab0: 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73  ment pArg is cas
cac0: 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20  t to a (void *) 
cad0: 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20  and made.**     
cae0: 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65  available as the
caf0: 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64   function user-d
cb00: 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65  ata (sqlite3_use
cb10: 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a  r_data()). The.*
cb20: 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c  *     FuncDef.fl
cb30: 61 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20  ags variable is 
cb40: 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
cb50: 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
cb60: 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61  lags.**     para
cb70: 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  meter..*/.#defin
cb80: 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  e FUNCTION(zName
cb90: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
cba0: 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
cbb0: 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
cbc0: 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
cbd0: 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
cbe0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
cbf0: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
cc00: 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
cc10: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
cc20: 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64  #zName, 0, 0}.#d
cc30: 65 66 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28  efine VFUNCTION(
cc40: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
cc50: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
cc60: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
cc70: 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
cc80: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
cc90: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
cca0: 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
ccb0: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
ccc0: 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64  #zName, 0, 0}.#d
ccd0: 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28  efine FUNCTION2(
cce0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
ccf0: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65  g, bNC, xFunc, e
cd00: 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b  xtraFlags) \.  {
cd10: 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43  nArg,SQLITE_FUNC
cd20: 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
cd30: 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
cd40: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
cd50: 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20  |extraFlags,\.  
cd60: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
cd70: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
cd80: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
cd90: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
cda0: 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  STR_FUNCTION(zNa
cdb0: 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20  me, nArg, pArg, 
cdc0: 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
cdd0: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
cde0: 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
cdf0: 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
ce00: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
ce10: 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30  L), \.   pArg, 0
ce20: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  , xFunc, 0, 0, #
ce30: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
ce40: 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e  fine LIKEFUNC(zN
ce50: 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20  ame, nArg, arg, 
ce60: 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  flags) \.  {nArg
ce70: 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  , SQLITE_FUNC_CO
ce80: 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
ce90: 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28  F8|flags, \.   (
cea0: 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c  void *)arg, 0, l
ceb0: 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  ikeFunc, 0, 0, #
cec0: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
ced0: 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a  fine AGGREGATE(z
cee0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
cef0: 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e   nc, xStep, xFin
cf00: 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  al) \.  {nArg, S
cf10: 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53  QLITE_UTF8|(nc*S
cf20: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
cf30: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
cf40: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67  E_INT_TO_PTR(arg
cf50: 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70 2c 78  ), 0, 0, xStep,x
cf60: 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30  Final,#zName,0,0
cf70: 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
cf80: 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ATE2(zName, nArg
cf90: 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70  , arg, nc, xStep
cfa0: 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72 61 46  , xFinal, extraF
cfb0: 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
cfc0: 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
cfd0: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
cfe0: 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67  DCOLL)|extraFlag
cff0: 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  s, \.   SQLITE_I
d000: 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20  NT_TO_PTR(arg), 
d010: 30 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e  0, 0, xStep,xFin
d020: 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a  al,#zName,0,0}..
d030: 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e  /*.** All curren
d040: 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65  t savepoints are
d050: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e   stored in a lin
d060: 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e  ked list startin
d070: 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e  g at.** sqlite3.
d080: 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20  pSavepoint. The 
d090: 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e  first element in
d0a0: 20 74 68 65 20 6c 69 73 74 20 69 73 20 74 68 65   the list is the
d0b0: 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a   most recently.*
d0c0: 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69  * opened savepoi
d0d0: 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61  nt. Savepoints a
d0e0: 72 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  re added to the 
d0f0: 6c 69 73 74 20 62 79 20 74 68 65 20 76 64 62 65  list by the vdbe
d100: 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74  .** OP_Savepoint
d110: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
d120: 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e  .struct Savepoin
d130: 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  t {.  char *zNam
d140: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
d150: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76            /* Sav
d160: 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c  epoint name (nul
d170: 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a  -terminated) */.
d180: 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43    i64 nDeferredC
d190: 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ons;            
d1a0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
d1b0: 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b 20 76  of deferred fk v
d1c0: 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69  iolations */.  i
d1d0: 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  64 nDeferredImmC
d1e0: 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ons;            
d1f0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
d200: 64 65 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e  deferred imm fk.
d210: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
d220: 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
d230: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
d240: 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69  ent savepoint (i
d250: 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  f any) */.};../*
d260: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
d270: 67 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68  g are used as th
d280: 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74  e second paramet
d290: 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76  er to sqlite3Sav
d2a0: 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64  epoint(),.** and
d2b0: 20 61 73 20 74 68 65 20 50 31 20 61 72 67 75 6d   as the P1 argum
d2c0: 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61  ent to the OP_Sa
d2d0: 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
d2e0: 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ion..*/.#define 
d2f0: 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20  SAVEPOINT_BEGIN 
d300: 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53       0.#define S
d310: 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
d320: 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41      1.#define SA
d330: 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
d340: 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63     2.../*.** Eac
d350: 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20  h SQLite module 
d360: 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64  (virtual table d
d370: 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65  efinition) is de
d380: 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69  fined by an.** i
d390: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
d3a0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
d3b0: 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68  re, stored in th
d3c0: 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c  e sqlite3.aModul
d3d0: 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e  e.** hash table.
d3e0: 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c  .*/.struct Modul
d3f0: 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  e {.  const sqli
d400: 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
d410: 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61  ule;       /* Ca
d420: 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20  llback pointers 
d430: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
d440: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
d450: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
d460: 65 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  e passed to crea
d470: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
d480: 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20   void *pAux;    
d490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4a0: 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61        /* pAux pa
d4b0: 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d  ssed to create_m
d4c0: 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69  odule() */.  voi
d4d0: 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f  d (*xDestroy)(vo
d4e0: 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20  id *);          
d4f0: 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74    /* Module dest
d500: 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ructor function 
d510: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66  */.};../*.** inf
d520: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
d530: 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e  ach column of an
d540: 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65   SQL table is he
d550: 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63  ld in an instanc
d560: 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  e.** of this str
d570: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
d580: 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61  t Column {.  cha
d590: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a  r *zName;     /*
d5a0: 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f   Name of this co
d5b0: 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a  lumn */.  Expr *
d5c0: 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65  pDflt;     /* De
d5d0: 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74  fault value of t
d5e0: 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  his column */.  
d5f0: 63 68 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20  char *zDflt;    
d600: 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78   /* Original tex
d610: 74 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74  t of the default
d620: 20 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72   value */.  char
d630: 20 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a 20   *zType;     /* 
d640: 44 61 74 61 20 74 79 70 65 20 66 6f 72 20 74 68  Data type for th
d650: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63  is column */.  c
d660: 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20  har *zColl;     
d670: 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
d680: 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c  uence.  If NULL,
d690: 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   use the default
d6a0: 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c   */.  u8 notNull
d6b0: 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f  ;      /* An OE_
d6c0: 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69   code for handli
d6d0: 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  ng a NOT NULL co
d6e0: 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68  nstraint */.  ch
d6f0: 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f  ar affinity;   /
d700: 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  * One of the SQL
d710: 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75  ITE_AFF_... valu
d720: 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74  es */.  u8 szEst
d730: 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69  ;        /* Esti
d740: 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 74 68  mated size of th
d750: 69 73 20 63 6f 6c 75 6d 6e 2e 20 20 49 4e 54 3d  is column.  INT=
d760: 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c  =1 */.  u8 colFl
d770: 61 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c  ags;     /* Bool
d780: 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20  ean properties. 
d790: 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65   See COLFLAG_ de
d7a0: 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d  fines below */.}
d7b0: 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61  ;../* Allowed va
d7c0: 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e  lues for Column.
d7d0: 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65  colFlags:.*/.#de
d7e0: 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49  fine COLFLAG_PRI
d7f0: 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20  MKEY  0x0001    
d800: 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72  /* Column is par
d810: 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79  t of the primary
d820: 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
d830: 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20  COLFLAG_HIDDEN  
d840: 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20   0x0002    /* A 
d850: 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e  hidden column in
d860: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
d870: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f   */../*.** A "Co
d880: 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65  llating Sequence
d890: 22 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  " is defined by 
d8a0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
d8b0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  he following.** 
d8c0: 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65  structure. Conce
d8d0: 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61  ptually, a colla
d8e0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f  ting sequence co
d8f0: 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65  nsists of a name
d900: 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72   and.** a compar
d910: 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61  ison routine tha
d920: 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72  t defines the or
d930: 64 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75  der of that sequ
d940: 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43  ence..**.** If C
d950: 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e  ollSeq.xCmp is N
d960: 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ULL, it means th
d970: 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74  at the.** collat
d980: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20  ing sequence is 
d990: 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69  undefined.  Indi
d9a0: 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20  ces built on an 
d9b0: 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c  undefined.** col
d9c0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
d9d0: 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20  may not be read 
d9e0: 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73  or written..*/.s
d9f0: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a  truct CollSeq {.
da00: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
da10: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
da20: 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67  of the collating
da30: 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38   sequence, UTF-8
da40: 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38   encoded */.  u8
da50: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
da60: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
da70: 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20  ding handled by 
da80: 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64  xCmp() */.  void
da90: 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20   *pUser;        
daa0: 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
dab0: 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f  ent to xCmp() */
dac0: 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76  .  int (*xCmp)(v
dad0: 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  oid*,int, const 
dae0: 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  void*, int, cons
daf0: 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64  t void*);.  void
db00: 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b   (*xDel)(void*);
db10: 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20    /* Destructor 
db20: 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a  for pUser */.};.
db30: 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72  ./*.** A sort or
db40: 64 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65  der can be eithe
db50: 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a  r ASC or DESC..*
db60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
db70: 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20  _SO_ASC       0 
db80: 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65   /* Sort in asce
db90: 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23  nding order */.#
dba0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
dbb0: 5f 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a  _DESC      1  /*
dbc0: 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
dbd0: 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a  ng order */../*.
dbe0: 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  ** Column affini
dbf0: 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20  ty types..**.** 
dc00: 54 68 65 73 65 20 75 73 65 64 20 74 6f 20 68 61  These used to ha
dc10: 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65  ve mnemonic name
dc20: 20 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51   like 'i' for SQ
dc30: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
dc40: 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20   and.** 't' for 
dc50: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e  SQLITE_AFF_TEXT.
dc60: 20 20 42 75 74 20 77 65 20 63 61 6e 20 73 61 76    But we can sav
dc70: 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65  e a little space
dc80: 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20   and improve.** 
dc90: 74 68 65 20 73 70 65 65 64 20 61 20 6c 69 74 74  the speed a litt
dca0: 6c 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20  le by numbering 
dcb0: 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65  the values conse
dcc0: 63 75 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a  cutively.  .**.*
dcd0: 2a 20 42 75 74 20 72 61 74 68 65 72 20 74 68 61  * But rather tha
dce0: 6e 20 73 74 61 72 74 20 77 69 74 68 20 30 20 6f  n start with 0 o
dcf0: 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69  r 1, we begin wi
dd00: 74 68 20 27 41 27 2e 20 20 54 68 61 74 20 77 61  th 'A'.  That wa
dd10: 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69  y,.** when multi
dd20: 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79 70  ple affinity typ
dd30: 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61  es are concatena
dd40: 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ted into a strin
dd50: 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73  g and.** used as
dd60: 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c   the P4 operand,
dd70: 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f   they will be mo
dd80: 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a  re readable..**.
dd90: 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61  ** Note also tha
dda0: 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79  t the numeric ty
ddb0: 70 65 73 20 61 72 65 20 67 72 6f 75 70 65 64 20  pes are grouped 
ddc0: 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61 74  together so that
ddd0: 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20   testing.** for 
dde0: 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69  a numeric type i
ddf0: 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61  s a single compa
de00: 72 69 73 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20  rison.  And the 
de10: 4e 4f 4e 45 20 74 79 70 65 20 69 73 20 66 69 72  NONE type is fir
de20: 73 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  st..*/.#define S
de30: 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 20  QLITE_AFF_NONE  
de40: 20 20 20 27 41 27 0a 23 64 65 66 69 6e 65 20 53     'A'.#define S
de50: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20  QLITE_AFF_TEXT  
de60: 20 20 20 27 42 27 0a 23 64 65 66 69 6e 65 20 53     'B'.#define S
de70: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
de80: 43 20 20 27 43 27 0a 23 64 65 66 69 6e 65 20 53  C  'C'.#define S
de90: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
dea0: 52 20 20 27 44 27 0a 23 64 65 66 69 6e 65 20 53  R  'D'.#define S
deb0: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20  QLITE_AFF_REAL  
dec0: 20 20 20 27 45 27 0a 0a 23 64 65 66 69 6e 65 20     'E'..#define 
ded0: 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63  sqlite3IsNumeric
dee0: 41 66 66 69 6e 69 74 79 28 58 29 20 20 28 28 58  Affinity(X)  ((X
def0: 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  )>=SQLITE_AFF_NU
df00: 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  MERIC)../*.** Th
df10: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
df20: 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f  K values masks o
df30: 66 66 20 74 68 65 20 73 69 67 6e 69 66 69 63 61  ff the significa
df40: 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a  nt bits of an.**
df50: 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e   affinity value.
df60: 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c   .*/.#define SQL
df70: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20  ITE_AFF_MASK    
df80: 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64   0x47../*.** Add
df90: 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75  itional bit valu
dfa0: 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f  es that can be O
dfb0: 52 65 64 20 77 69 74 68 20 61 6e 20 61 66 66 69  Red with an affi
dfc0: 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20  nity without.** 
dfd0: 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66  changing the aff
dfe0: 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  inity..**.** The
dff0: 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20   SQLITE_NOTNULL 
e000: 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e  flag is a combin
e010: 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20  ation of NULLEQ 
e020: 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a  and JUMPIFNULL..
e030: 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e 20  ** It causes an 
e040: 61 73 73 65 72 74 28 29 20 74 6f 20 66 69 72 65  assert() to fire
e050: 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
e060: 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73  nd to a comparis
e070: 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69  on.** operator i
e080: 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61  s NULL.  It is a
e090: 64 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20  dded to certain 
e0a0: 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61  comparison opera
e0b0: 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65  tors to.** prove
e0c0: 20 74 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e   that the operan
e0d0: 64 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f  ds are always NO
e0e0: 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69  T NULL..*/.#defi
e0f0: 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  ne SQLITE_JUMPIF
e100: 4e 55 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a 20  NULL   0x10  /* 
e110: 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65 72 20  jumps if either 
e120: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
e130: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e140: 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20 30  E_STOREP2      0
e150: 78 32 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65  x20  /* Store re
e160: 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20  sult in reg[P2] 
e170: 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70  rather than jump
e180: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e190: 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20  TE_NULLEQ       
e1a0: 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55  0x80  /* NULL=NU
e1b0: 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL */.#define SQ
e1c0: 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20  LITE_NOTNULL    
e1d0: 20 20 30 78 39 30 20 20 2f 2a 20 41 73 73 65 72    0x90  /* Asser
e1e0: 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20  t that operands 
e1f0: 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a  are never NULL *
e200: 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65  /../*.** An obje
e210: 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ct of this type 
e220: 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65  is created for e
e230: 61 63 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ach virtual tabl
e240: 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20  e present in.** 
e250: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
e260: 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ema. .**.** If t
e270: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
e280: 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 74 68  ma is shared, th
e290: 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20  en there is one 
e2a0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
e2b0: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f  .** structure fo
e2c0: 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  r each database 
e2d0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69  connection (sqli
e2e0: 74 65 33 2a 29 20 74 68 61 74 20 75 73 65 73 20  te3*) that uses 
e2f0: 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63  the shared.** sc
e300: 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65  hema. This is be
e310: 63 61 75 73 65 20 65 61 63 68 20 64 61 74 61 62  cause each datab
e320: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72  ase connection r
e330: 65 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20  equires its own 
e340: 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e  unique.** instan
e350: 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ce of the sqlite
e360: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75  3_vtab* handle u
e370: 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  sed to access th
e380: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
e390: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
e3a0: 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62  on. sqlite3_vtab
e3b0: 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f  * handles can no
e3c0: 74 20 62 65 20 73 68 61 72 65 64 20 62 65 74 77  t be shared betw
e3d0: 65 65 6e 20 0a 2a 2a 20 64 61 74 61 62 61 73 65  een .** database
e3e0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76   connections, ev
e3f0: 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74  en when the rest
e400: 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72   of the in-memor
e410: 79 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 73  y database .** s
e420: 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c  chema is shared,
e430: 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   as the implemen
e440: 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f  tation often sto
e450: 72 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  res the database
e460: 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  .** connection h
e470: 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20  andle passed to 
e480: 69 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e  it via the xConn
e490: 65 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65  ect() or xCreate
e4a0: 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72  () method.** dur
e4b0: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
e4c0: 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54  on internally. T
e4d0: 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e  his database con
e4e0: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d  nection handle m
e4f0: 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73  ay.** then be us
e500: 65 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61  ed by the virtua
e510: 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e  l table implemen
e520: 74 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73  tation to access
e530: 20 72 65 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a   real tables .**
e540: 20 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61   within the data
e550: 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68  base. So that th
e560: 65 79 20 61 70 70 65 61 72 20 61 73 20 70 61 72  ey appear as par
e570: 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73  t of the callers
e580: 20 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e   .** transaction
e590: 2c 20 74 68 65 73 65 20 61 63 63 65 73 73 65 73  , these accesses
e5a0: 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65   need to be made
e5b0: 20 76 69 61 20 74 68 65 20 73 61 6d 65 20 64 61   via the same da
e5c0: 74 61 62 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65  tabase .** conne
e5d0: 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73  ction as that us
e5e0: 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 53 51  ed to execute SQ
e5f0: 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20  L operations on 
e600: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
e610: 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61  e..**.** All VTa
e620: 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74  ble objects that
e630: 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61   correspond to a
e640: 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e   single table in
e650: 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74   a shared.** dat
e660: 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 72 65  abase schema are
e670: 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65   initially store
e680: 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69  d in a linked-li
e690: 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  st pointed to by
e6a0: 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56  .** the Table.pV
e6b0: 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72  Table member var
e6c0: 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72  iable of the cor
e6d0: 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65  responding Table
e6e0: 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e   object..** When
e6f0: 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70   an sqlite3_prep
e700: 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20  are() operation 
e710: 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 61  is required to a
e720: 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61  ccess the virtua
e730: 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73  l.** table, it s
e740: 65 61 72 63 68 65 73 20 74 68 65 20 6c 69 73 74  earches the list
e750: 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20   for the VTable 
e760: 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
e770: 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   to the.** datab
e780: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64  ase connection d
e790: 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61 72 69  oing the prepari
e7a0: 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20  ng so as to use 
e7b0: 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73  the correct.** s
e7c0: 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
e7d0: 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69  dle in the compi
e7e0: 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a  led query..**.**
e7f0: 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f   When an in-memo
e800: 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20  ry Table object 
e810: 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20  is deleted (for 
e820: 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65  example when the
e830: 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65  .** schema is be
e840: 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72  ing reloaded for
e850: 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74   some reason), t
e860: 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  he VTable object
e870: 73 20 61 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65  s are not .** de
e880: 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71  leted and the sq
e890: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
e8a0: 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73  les are not xDis
e8b0: 63 6f 6e 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20  connect()ed .** 
e8c0: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73  immediately. Ins
e8d0: 74 65 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d  tead, they are m
e8e0: 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61  oved from the Ta
e8f0: 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74  ble.pVTable list
e900: 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c   to.** another l
e910: 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65  inked list heade
e920: 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33  d by the sqlite3
e930: 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d  .pDisconnect mem
e940: 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f  ber of the.** co
e950: 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69  rresponding sqli
e960: 74 65 33 20 73 74 72 75 63 74 75 72 65 2e 20 54  te3 structure. T
e970: 68 65 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c  hey are then del
e980: 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74  eted/xDisconnect
e990: 65 64 20 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65  ed .** next time
e9a0: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20   a statement is 
e9b0: 70 72 65 70 61 72 65 64 20 75 73 69 6e 67 20 73  prepared using s
e9c0: 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68  aid sqlite3*. Th
e9d0: 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f  is is done.** to
e9e0: 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20   avoid deadlock 
e9f0: 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67  issues involving
ea00: 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65   multiple sqlite
ea10: 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e  3.mutex mutexes.
ea20: 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d  .** Refer to com
ea30: 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63  ments above func
ea40: 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62  tion sqlite3Vtab
ea50: 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72  UnlockList() for
ea60: 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69   an.** explanati
ea70: 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74 20  on as to why it 
ea80: 69 73 20 73 61 66 65 20 74 6f 20 61 64 64 20 61  is safe to add a
ea90: 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71  n entry to an sq
eaa0: 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63  lite3.pDisconnec
eab0: 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75  t.** list withou
eac0: 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f  t holding the co
ead0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69  rresponding sqli
eae0: 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e  te3.mutex mutex.
eaf0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72  .**.** The memor
eb00: 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66  y for objects of
eb10: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c   this type is al
eb20: 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62  ways allocated b
eb30: 79 20 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d  y .** sqlite3DbM
eb40: 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74  alloc(), using t
eb50: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  he connection ha
eb60: 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56  ndle stored in V
eb70: 54 61 62 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20  Table.db as .** 
eb80: 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  the first argume
eb90: 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54  nt..*/.struct VT
eba0: 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33  able {.  sqlite3
ebb0: 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20   *db;           
ebc0: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63     /* Database c
ebd0: 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69  onnection associ
ebe0: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 74  ated with this t
ebf0: 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65  able */.  Module
ec00: 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20   *pMod;         
ec10: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
ec20: 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  o module impleme
ec30: 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c  ntation */.  sql
ec40: 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
ec50: 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  ;      /* Pointe
ec60: 72 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e  r to vtab instan
ec70: 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  ce */.  int nRef
ec80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ec90: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
eca0: 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20  ointers to this 
ecb0: 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75  structure */.  u
ecc0: 38 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20  8 bConstraint;  
ecd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
ece0: 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   if constraints 
ecf0: 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f  are supported */
ed00: 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e  .  int iSavepoin
ed10: 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
ed20: 44 65 70 74 68 20 6f 66 20 74 68 65 20 53 41 56  Depth of the SAV
ed30: 45 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a  EPOINT stack */.
ed40: 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b    VTable *pNext;
ed50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
ed60: 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69  ext in linked li
ed70: 73 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a  st (see above) *
ed80: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  /.};../*.** Each
ed90: 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 72 65   SQL table is re
eda0: 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
edb0: 6f 72 79 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ory by an instan
edc0: 63 65 20 6f 66 20 74 68 65 0a 2a 2a 20 66 6f 6c  ce of the.** fol
edd0: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
ede0: 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e  ..**.** Table.zN
edf0: 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20  ame is the name 
ee00: 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54  of the table.  T
ee10: 68 65 20 63 61 73 65 20 6f 66 20 74 68 65 20 6f  he case of the o
ee20: 72 69 67 69 6e 61 6c 0a 2a 2a 20 43 52 45 41 54  riginal.** CREAT
ee30: 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
ee40: 74 20 69 73 20 73 74 6f 72 65 64 2c 20 62 75 74  t is stored, but
ee50: 20 63 61 73 65 20 69 73 20 6e 6f 74 20 73 69 67   case is not sig
ee60: 6e 69 66 69 63 61 6e 74 20 66 6f 72 0a 2a 2a 20  nificant for.** 
ee70: 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a  comparisons..**.
ee80: 2a 2a 20 54 61 62 6c 65 2e 6e 43 6f 6c 20 69 73  ** Table.nCol is
ee90: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
eea0: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74  olumns in this t
eeb0: 61 62 6c 65 2e 20 20 54 61 62 6c 65 2e 61 43 6f  able.  Table.aCo
eec0: 6c 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65  l is a.** pointe
eed0: 72 20 74 6f 20 61 6e 20 61 72 72 61 79 20 6f 66  r to an array of
eee0: 20 43 6f 6c 75 6d 6e 20 73 74 72 75 63 74 75 72   Column structur
eef0: 65 73 2c 20 6f 6e 65 20 66 6f 72 20 65 61 63 68  es, one for each
ef00: 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49   column..**.** I
ef10: 66 20 74 68 65 20 74 61 62 6c 65 20 68 61 73 20  f the table has 
ef20: 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  an INTEGER PRIMA
ef30: 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 54 61 62  RY KEY, then Tab
ef40: 6c 65 2e 69 50 4b 65 79 20 69 73 20 74 68 65 20  le.iPKey is the 
ef50: 69 6e 64 65 78 20 6f 66 0a 2a 2a 20 74 68 65 20  index of.** the 
ef60: 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69 73 20 74  column that is t
ef70: 68 61 74 20 6b 65 79 2e 20 20 20 4f 74 68 65 72  hat key.   Other
ef80: 77 69 73 65 20 54 61 62 6c 65 2e 69 50 4b 65 79  wise Table.iPKey
ef90: 20 69 73 20 6e 65 67 61 74 69 76 65 2e 20 20 4e   is negative.  N
efa0: 6f 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20  ote.** that the 
efb0: 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20  datatype of the 
efc0: 50 52 49 4d 41 52 59 20 4b 45 59 20 6d 75 73 74  PRIMARY KEY must
efd0: 20 62 65 20 49 4e 54 45 47 45 52 20 66 6f 72 20   be INTEGER for 
efe0: 74 68 69 73 20 66 69 65 6c 64 20 74 6f 0a 2a 2a  this field to.**
eff0: 20 62 65 20 73 65 74 2e 20 20 41 6e 20 49 4e 54   be set.  An INT
f000: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
f010: 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20   is used as the 
f020: 72 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20 72  rowid for each r
f030: 6f 77 20 6f 66 0a 2a 2a 20 74 68 65 20 74 61 62  ow of.** the tab
f040: 6c 65 2e 20 20 49 66 20 61 20 74 61 62 6c 65 20  le.  If a table 
f050: 68 61 73 20 6e 6f 20 49 4e 54 45 47 45 52 20 50  has no INTEGER P
f060: 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e  RIMARY KEY, then
f070: 20 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 0a   a random rowid.
f080: 2a 2a 20 69 73 20 67 65 6e 65 72 61 74 65 64 20  ** is generated 
f090: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20  for each row of 
f0a0: 74 68 65 20 74 61 62 6c 65 2e 20 20 54 46 5f 48  the table.  TF_H
f0b0: 61 73 50 72 69 6d 61 72 79 4b 65 79 20 69 73 20  asPrimaryKey is 
f0c0: 73 65 74 20 69 66 0a 2a 2a 20 74 68 65 20 74 61  set if.** the ta
f0d0: 62 6c 65 20 68 61 73 20 61 6e 79 20 50 52 49 4d  ble has any PRIM
f0e0: 41 52 59 20 4b 45 59 2c 20 49 4e 54 45 47 45 52  ARY KEY, INTEGER
f0f0: 20 6f 72 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a   or otherwise..*
f100: 2a 0a 2a 2a 20 54 61 62 6c 65 2e 74 6e 75 6d 20  *.** Table.tnum 
f110: 69 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62  is the page numb
f120: 65 72 20 66 6f 72 20 74 68 65 20 72 6f 6f 74 20  er for the root 
f130: 42 54 72 65 65 20 70 61 67 65 20 6f 66 20 74 68  BTree page of th
f140: 65 20 74 61 62 6c 65 20 69 6e 20 74 68 65 0a 2a  e table in the.*
f150: 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  * database file.
f160: 20 20 49 66 20 54 61 62 6c 65 2e 69 44 62 20 69    If Table.iDb i
f170: 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  s the index of t
f180: 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
f190: 65 20 62 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20  e backend.** in 
f1a0: 73 71 6c 69 74 65 2e 61 44 62 5b 5d 2e 20 20 30  sqlite.aDb[].  0
f1b0: 20 69 73 20 66 6f 72 20 74 68 65 20 6d 61 69 6e   is for the main
f1c0: 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 31 20   database and 1 
f1d0: 69 73 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20  is for the file 
f1e0: 74 68 61 74 0a 2a 2a 20 68 6f 6c 64 73 20 74 65  that.** holds te
f1f0: 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61  mporary tables a
f200: 6e 64 20 69 6e 64 69 63 65 73 2e 20 20 49 66 20  nd indices.  If 
f210: 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 69 73 20  TF_Ephemeral is 
f220: 73 65 74 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  set.** then the 
f230: 74 61 62 6c 65 20 69 73 20 73 74 6f 72 65 64 20  table is stored 
f240: 69 6e 20 61 20 66 69 6c 65 20 74 68 61 74 20 69  in a file that i
f250: 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  s automatically 
f260: 64 65 6c 65 74 65 64 0a 2a 2a 20 77 68 65 6e 20  deleted.** when 
f270: 74 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  the VDBE cursor 
f280: 74 6f 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  to the table is 
f290: 63 6c 6f 73 65 64 2e 20 20 49 6e 20 74 68 69 73  closed.  In this
f2a0: 20 63 61 73 65 20 54 61 62 6c 65 2e 74 6e 75 6d   case Table.tnum
f2b0: 20 0a 2a 2a 20 72 65 66 65 72 73 20 56 44 42 45   .** refers VDBE
f2c0: 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 74   cursor number t
f2d0: 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 74 61  hat holds the ta
f2e0: 62 6c 65 20 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f  ble open, not to
f2f0: 20 74 68 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67   the root.** pag
f300: 65 20 6e 75 6d 62 65 72 2e 20 20 54 72 61 6e 73  e number.  Trans
f310: 69 65 6e 74 20 74 61 62 6c 65 73 20 61 72 65 20  ient tables are 
f320: 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65  used to hold the
f330: 20 72 65 73 75 6c 74 73 20 6f 66 20 61 0a 2a 2a   results of a.**
f340: 20 73 75 62 2d 71 75 65 72 79 20 74 68 61 74 20   sub-query that 
f350: 61 70 70 65 61 72 73 20 69 6e 73 74 65 61 64 20  appears instead 
f360: 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20  of a real table 
f370: 6e 61 6d 65 20 69 6e 20 74 68 65 20 46 52 4f 4d  name in the FROM
f380: 20 63 6c 61 75 73 65 20 0a 2a 2a 20 6f 66 20 61   clause .** of a
f390: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
f3a0: 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62  t..*/.struct Tab
f3b0: 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  le {.  char *zNa
f3c0: 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  me;         /* N
f3d0: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
f3e0: 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f   or view */.  Co
f3f0: 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20  lumn *aCol;     
f400: 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
f410: 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c  n about each col
f420: 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a  umn */.  Index *
f430: 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a  pIndex;       /*
f440: 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64   List of SQL ind
f450: 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62  exes on this tab
f460: 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  le. */.  Select 
f470: 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
f480: 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73   NULL for tables
f490: 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66  .  Points to def
f4a0: 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65  inition if a vie
f4b0: 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46  w. */.  FKey *pF
f4c0: 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Key;         /* 
f4d0: 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61  Linked list of a
f4e0: 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  ll foreign keys 
f4f0: 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
f500: 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66  .  char *zColAff
f510: 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e  ;       /* Strin
f520: 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
f530: 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
f540: 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64 65  column */.#ifnde
f550: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48  f SQLITE_OMIT_CH
f560: 45 43 4b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a  ECK.  ExprList *
f570: 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c  pCheck;    /* Al
f580: 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  l CHECK constrai
f590: 6e 74 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  nts */.#endif.  
f5a0: 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73  LogEst nRowLogEs
f5b0: 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65  t;   /* Estimate
f5c0: 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20  d rows in table 
f5d0: 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74  - from sqlite_st
f5e0: 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  at1 table */.  i
f5f0: 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20  nt tnum;        
f600: 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65      /* Root BTre
f610: 65 20 6e 6f 64 65 20 66 6f 72 20 74 68 69 73 20  e node for this 
f620: 74 61 62 6c 65 20 28 73 65 65 20 6e 6f 74 65 20  table (see note 
f630: 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 31 36 20  above) */.  i16 
f640: 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20  iPKey;          
f650: 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74   /* If not negat
f660: 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50  ive, use aCol[iP
f670: 4b 65 79 5d 20 61 73 20 74 68 65 20 70 72 69 6d  Key] as the prim
f680: 61 72 79 20 6b 65 79 20 2a 2f 0a 20 20 69 31 36  ary key */.  i16
f690: 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20   nCol;          
f6a0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
f6b0: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74  olumns in this t
f6c0: 61 62 6c 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52  able */.  u16 nR
f6d0: 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ef;            /
f6e0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
f6f0: 74 65 72 73 20 74 6f 20 74 68 69 73 20 54 61 62  ters to this Tab
f700: 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73  le */.  LogEst s
f710: 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20  zTabRow;     /* 
f720: 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f  Estimated size o
f730: 66 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77  f each table row
f740: 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66   in bytes */.#if
f750: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
f760: 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67  E_COSTMULT.  Log
f770: 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20  Est costMult;   
f780: 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70    /* Cost multip
f790: 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74  lier for using t
f7a0: 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e  his table */.#en
f7b0: 64 69 66 0a 20 20 75 38 20 74 61 62 46 6c 61 67  dif.  u8 tabFlag
f7c0: 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  s;         /* Ma
f7d0: 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65  sk of TF_* value
f7e0: 73 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e  s */.  u8 keyCon
f7f0: 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  f;          /* W
f800: 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73  hat to do in cas
f810: 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20  e of uniqueness 
f820: 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65  conflict on iPKe
f830: 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  y */.#ifndef SQL
f840: 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41  ITE_OMIT_ALTERTA
f850: 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c  BLE.  int addCol
f860: 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66  Offset;    /* Of
f870: 66 73 65 74 20 69 6e 20 43 52 45 41 54 45 20 54  fset in CREATE T
f880: 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64  ABLE stmt to add
f890: 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f   a new column */
f8a0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
f8b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
f8c0: 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
f8d0: 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20  ModuleArg;      
f8e0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
f8f0: 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f  uments to the mo
f900: 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  dule */.  char *
f910: 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f  *azModuleArg;  /
f920: 2a 20 54 65 78 74 20 6f 66 20 61 6c 6c 20 6d 6f  * Text of all mo
f930: 64 75 6c 65 20 61 72 67 73 2e 20 5b 30 5d 20 69  dule args. [0] i
f940: 73 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 20 2a 2f  s module name */
f950: 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62  .  VTable *pVTab
f960: 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  le;     /* List 
f970: 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  of VTable object
f980: 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54  s. */.#endif.  T
f990: 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72  rigger *pTrigger
f9a0: 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74  ;   /* List of t
f9b0: 72 69 67 67 65 72 73 20 73 74 6f 72 65 64 20 69  riggers stored i
f9c0: 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53  n pSchema */.  S
f9d0: 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
f9e0: 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68      /* Schema th
f9f0: 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73  at contains this
fa00: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c   table */.  Tabl
fa10: 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20  e *pNextZombie; 
fa20: 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20   /* Next on the 
fa30: 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62  Parse.pZombieTab
fa40: 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
fa50: 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
fa60: 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46  s for Table.tabF
fa70: 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  lags..*/.#define
fa80: 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20   TF_Readonly    
fa90: 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 52      0x01    /* R
faa0: 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20  ead-only system 
fab0: 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
fac0: 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20   TF_Ephemeral   
fad0: 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 41      0x02    /* A
fae0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  n ephemeral tabl
faf0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
fb00: 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20  HasPrimaryKey   
fb10: 30 78 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65  0x04    /* Table
fb20: 20 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b   has a primary k
fb30: 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ey */.#define TF
fb40: 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20  _Autoincrement  
fb50: 20 30 78 30 38 20 20 20 20 2f 2a 20 49 6e 74 65   0x08    /* Inte
fb60: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20  ger primary key 
fb70: 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  is autoincrement
fb80: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 56   */.#define TF_V
fb90: 69 72 74 75 61 6c 20 20 20 20 20 20 20 20 20 30  irtual         0
fba0: 78 31 30 20 20 20 20 2f 2a 20 49 73 20 61 20 76  x10    /* Is a v
fbb0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  irtual table */.
fbc0: 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f  #define TF_Witho
fbd0: 75 74 52 6f 77 69 64 20 20 20 20 30 78 32 30 20  utRowid    0x20 
fbe0: 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 20 75     /* No rowid u
fbf0: 73 65 64 2e 20 50 52 49 4d 41 52 59 20 4b 45 59  sed. PRIMARY KEY
fc00: 20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 0a   is the key */..
fc10: 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73  ./*.** Test to s
fc20: 65 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ee whether or no
fc30: 74 20 61 20 74 61 62 6c 65 20 69 73 20 61 20 76  t a table is a v
fc40: 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54  irtual table.  T
fc50: 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61  his is.** done a
fc60: 73 20 61 20 6d 61 63 72 6f 20 73 6f 20 74 68 61  s a macro so tha
fc70: 74 20 69 74 20 77 69 6c 6c 20 62 65 20 6f 70 74  t it will be opt
fc80: 69 6d 69 7a 65 64 20 6f 75 74 20 77 68 65 6e 20  imized out when 
fc90: 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
fca0: 20 73 75 70 70 6f 72 74 20 69 73 20 6f 6d 69 74   support is omit
fcb0: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69  ted from the bui
fcc0: 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ld..*/.#ifndef S
fcd0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
fce0: 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e  ALTABLE.#  defin
fcf0: 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20  e IsVirtual(X)  
fd00: 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c      (((X)->tabFl
fd10: 61 67 73 20 26 20 54 46 5f 56 69 72 74 75 61 6c  ags & TF_Virtual
fd20: 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20  )!=0).#  define 
fd30: 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
fd40: 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67  ) (((X)->colFlag
fd50: 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  s & COLFLAG_HIDD
fd60: 45 4e 29 21 3d 30 29 0a 23 65 6c 73 65 0a 23 20  EN)!=0).#else.# 
fd70: 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61   define IsVirtua
fd80: 6c 28 58 29 20 20 20 20 20 20 30 0a 23 20 20 64  l(X)      0.#  d
fd90: 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
fda0: 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66  lumn(X) 0.#endif
fdb0: 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74 61  ../* Does the ta
fdc0: 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69 64  ble have a rowid
fdd0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73 52   */.#define HasR
fde0: 6f 77 69 64 28 58 29 20 20 20 20 20 28 28 28 58  owid(X)     (((X
fdf0: 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46  )->tabFlags & TF
fe00: 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d  _WithoutRowid)==
fe10: 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66  0)../*.** Each f
fe20: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
fe30: 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74  raint is an inst
fe40: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
fe50: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
fe60: 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e  .**.** A foreign
fe70: 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61 74   key is associat
fe80: 65 64 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c  ed with two tabl
fe90: 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20  es.  The "from" 
fea0: 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  table is.** the 
feb0: 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61  table that conta
fec0: 69 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e 43  ins the REFERENC
fed0: 45 53 20 63 6c 61 75 73 65 20 74 68 61 74 20 63  ES clause that c
fee0: 72 65 61 74 65 73 20 74 68 65 20 66 6f 72 65 69  reates the forei
fef0: 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20  gn.** key.  The 
ff00: 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68  "to" table is th
ff10: 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  e table that is 
ff20: 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46  named in the REF
ff30: 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a  ERENCES clause..
ff40: 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73  ** Consider this
ff50: 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20   example:.**.** 
ff60: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
ff70: 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61   ex1(.**       a
ff80: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
ff90: 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62   KEY,.**       b
ffa0: 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41   INTEGER CONSTRA
ffb0: 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43  INT fk1 REFERENC
ffc0: 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20  ES ex2(x).**    
ffd0: 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f   );.**.** For fo
ffe0: 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c  reign key "fk1",
fff0: 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20   the from-table 
10000 69 73 20 22 65 78 31 22 20 61 6e 64 20 74 68 65  is "ex1" and the
10010 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78   to-table is "ex
10020 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e  2"..** Equivalen
10030 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20  t names:.**.**  
10040 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d     from-table ==
10050 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20   child-table.** 
10060 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d        to-table =
10070 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a  = parent-table.*
10080 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45  *.** Each REFERE
10090 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65  NCES clause gene
100a0 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63  rates an instanc
100b0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
100c0 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  ng structure.** 
100d0 77 68 69 63 68 20 69 73 20 61 74 74 61 63 68 65  which is attache
100e0 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61  d to the from-ta
100f0 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62  ble.  The to-tab
10100 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73  le need not exis
10110 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72  t when.** the fr
10120 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61  om-table is crea
10130 74 65 64 2e 20 20 54 68 65 20 65 78 69 73 74 65  ted.  The existe
10140 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61  nce of the to-ta
10150 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b  ble is not check
10160 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69  ed..**.** The li
10170 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74  st of all parent
10180 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61 62 6c  s for child Tabl
10190 65 20 58 20 69 73 20 68 65 6c 64 20 61 74 20 58  e X is held at X
101a0 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20  .pFKey..**.** A 
101b0 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c  list of all chil
101c0 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62 6c 65  dren for a table
101d0 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63 68 20   named Z (which 
101e0 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e 20 65  might not even e
101f0 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64  xist).** is held
10200 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79 48   in Schema.fkeyH
10210 61 73 68 20 77 69 74 68 20 61 20 68 61 73 68 20  ash with a hash 
10220 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72  key of Z..*/.str
10230 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62  uct FKey {.  Tab
10240 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f  le *pFrom;     /
10250 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69  * Table containi
10260 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  ng the REFERENCE
10270 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43  S clause (aka: C
10280 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20  hild) */.  FKey 
10290 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20  *pNextFrom;  /* 
102a0 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68 20 74  Next FKey with t
102b0 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d  he same in pFrom
102c0 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20 6f 66  . Next parent of
102d0 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72   pFrom */.  char
102e0 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a   *zTo;        /*
102f0 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74   Name of table t
10300 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e  hat the key poin
10310 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65  ts to (aka: Pare
10320 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  nt) */.  FKey *p
10330 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65  NextTo;    /* Ne
10340 78 74 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  xt with the same
10350 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64   zTo. Next child
10360 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b   of zTo. */.  FK
10370 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20  ey *pPrevTo;    
10380 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69 74 68  /* Previous with
10390 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f   the same zTo */
103a0 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20  .  int nCol;    
103b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
103c0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69  f columns in thi
103d0 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56  s key */.  /* EV
103e0 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20  : R-30323-21917 
103f0 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72 72  */.  u8 isDeferr
10400 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ed;       /* Tru
10410 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20  e if constraint 
10420 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65  checking is defe
10430 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54  rred till COMMIT
10440 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e   */.  u8 aAction
10450 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  [2];        /* O
10460 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20  N DELETE and ON 
10470 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20  UPDATE actions, 
10480 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a  respectively */.
10490 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72 69    Trigger *apTri
104a0 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67  gger[2];/* Trigg
104b0 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b  ers for aAction[
104c0 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73  ] actions */.  s
104d0 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20  truct sColMap { 
104e0 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20       /* Mapping 
104f0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46  of columns in pF
10500 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69  rom to columns i
10510 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74  n zTo */.    int
10520 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20   iFrom;         
10530 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63     /* Index of c
10540 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a  olumn in pFrom *
10550 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c  /.    char *zCol
10560 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
10570 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  ame of column in
10580 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75   zTo.  If NULL u
10590 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  se PRIMARY KEY *
105a0 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20  /.  } aCol[1];  
105b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
105c0 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
105d0 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20  of nCol columns 
105e0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c  */.};../*.** SQL
105f0 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e  ite supports man
10600 79 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73  y different ways
10610 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f   to resolve a co
10620 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
10630 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f  r.  ROLLBACK pro
10640 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
10650 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  at a constraint 
10660 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75  violation.** cau
10670 73 65 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ses the operatio
10680 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20  n in process to 
10690 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65  fail and for the
106a0 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
106b0 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f  tion.** to be ro
106c0 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52  lled back.  ABOR
106d0 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  T processing mea
106e0 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ns the operation
106f0 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66   in process.** f
10700 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69  ails and any pri
10710 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20  or changes from 
10720 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69  that one operati
10730 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75  on are backed ou
10740 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72  t,.** but the tr
10750 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74  ansaction is not
10760 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46   rolled back.  F
10770 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  AIL processing m
10780 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65  eans that.** the
10790 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
107a0 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64  ogress stops and
107b0 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f   returns an erro
107c0 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69  r code.  But pri
107d0 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75  or.** changes du
107e0 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70  e to the same op
107f0 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20  eration are not 
10800 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e  backed out and n
10810 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63  o rollback.** oc
10820 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65  curs.  IGNORE me
10830 61 6e 73 20 74 68 61 74 20 74 68 65 20 70 61 72  ans that the par
10840 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74  ticular row that
10850 20 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73   caused the cons
10860 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20  traint.** error 
10870 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20  is not inserted 
10880 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f  or updated.  Pro
10890 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65  cessing continue
108a0 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a  s and no error.*
108b0 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20  * is returned.  
108c0 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68  REPLACE means th
108d0 61 74 20 70 72 65 65 78 69 73 74 69 6e 67 20 64  at preexisting d
108e0 61 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61  atabase rows tha
108f0 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e  t caused.** a UN
10900 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
10910 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65  violation are re
10920 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74 68  moved so that th
10930 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a  e new insert or.
10940 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70 72  ** update can pr
10950 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69  oceed.  Processi
10960 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64  ng continues and
10970 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70   no error is rep
10980 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53  orted..**.** RES
10990 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20  TRICT, SETNULL, 
109a0 61 6e 64 20 43 41 53 43 41 44 45 20 61 63 74 69  and CASCADE acti
109b0 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74  ons apply only t
109c0 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a  o foreign keys..
109d0 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73 20 74  ** RESTRICT is t
109e0 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54  he same as ABORT
109f0 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66   for IMMEDIATE f
10a00 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20  oreign keys and 
10a10 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52  the.** same as R
10a20 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45  OLLBACK for DEFE
10a30 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e  RRED keys.  SETN
10a40 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ULL means that t
10a50 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  he foreign.** ke
10a60 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c  y is set to NULL
10a70 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73  .  CASCADE means
10a80 20 74 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f   that a DELETE o
10a90 72 20 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a  r UPDATE of the.
10aa0 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74 61  ** referenced ta
10ab0 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61  ble row is propa
10ac0 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72  gated into the r
10ad0 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  ow that holds th
10ae0 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79  e.** foreign key
10af0 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20 66 6f 6c  ..** .** The fol
10b00 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20  lowing symbolic 
10b10 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20  values are used 
10b20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68 20  to record which 
10b30 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f  type.** of actio
10b40 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64  n to take..*/.#d
10b50 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20  efine OE_None   
10b60 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69    0   /* There i
10b70 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20  s no constraint 
10b80 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66  to check */.#def
10b90 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  ine OE_Rollback 
10ba0 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20  1   /* Fail the 
10bb0 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f  operation and ro
10bc0 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73  llback the trans
10bd0 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
10be0 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20  e OE_Abort    2 
10bf0 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68    /* Back out ch
10c00 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20  anges but do no 
10c10 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63  rollback transac
10c20 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
10c30 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20  OE_Fail     3   
10c40 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72  /* Stop the oper
10c50 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20  ation but leave 
10c60 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65  all prior change
10c70 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  s */.#define OE_
10c80 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20  Ignore   4   /* 
10c90 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72  Ignore the error
10ca0 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20  . Do not do the 
10cb0 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
10cc0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52   */.#define OE_R
10cd0 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44  eplace  5   /* D
10ce0 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 72  elete existing r
10cf0 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49  ecord, then do I
10d00 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20  NSERT or UPDATE 
10d10 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52  */..#define OE_R
10d20 65 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20 4f  estrict 6   /* O
10d30 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45  E_Abort for IMME
10d40 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61  DIATE, OE_Rollba
10d50 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20  ck for DEFERRED 
10d60 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65  */.#define OE_Se
10d70 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65  tNull  7   /* Se
10d80 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65  t the foreign ke
10d90 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20  y value to NULL 
10da0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65  */.#define OE_Se
10db0 74 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53 65  tDflt  8   /* Se
10dc0 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65  t the foreign ke
10dd0 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64  y value to its d
10de0 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  efault */.#defin
10df0 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39 20  e OE_Cascade  9 
10e00 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65    /* Cascade the
10e10 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65   changes */..#de
10e20 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20  fine OE_Default 
10e30 20 31 30 20 20 2f 2a 20 44 6f 20 77 68 61 74 65   10  /* Do whate
10e40 76 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20  ver the default 
10e50 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f  action is */.../
10e60 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
10e70 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
10e80 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70  g structure is p
10e90 61 73 73 65 64 20 61 73 20 74 68 65 20 66 69 72  assed as the fir
10ea0 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74  st.** argument t
10eb0 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79  o sqlite3VdbeKey
10ec0 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75  Compare and is u
10ed0 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74  sed to control t
10ee0 68 65 20 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  he .** compariso
10ef0 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64  n of the two ind
10f00 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e  ex keys..**.** N
10f10 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72  ote that aSortOr
10f20 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b  der[] and aColl[
10f30 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20  ] have nField+1 
10f40 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a  slots.  There.**
10f50 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74   are nField slot
10f60 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  s for the column
10f70 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68  s of an index th
10f80 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f  en one extra slo
10f90 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77  t.** for the row
10fa0 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  id at the end..*
10fb0 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f  /.struct KeyInfo
10fc0 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20   {.  u32 nRef;  
10fd0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
10fe0 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73  er of references
10ff0 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f   to this KeyInfo
11000 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20   object */.  u8 
11010 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
11020 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
11030 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53  g - one of the S
11040 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65  QLITE_UTF* value
11050 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c  s */.  u16 nFiel
11060 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
11070 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75  mber of key colu
11080 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  mns in the index
11090 20 2a 2f 0a 20 20 75 31 36 20 6e 58 46 69 65 6c   */.  u16 nXFiel
110a0 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  d;        /* Num
110b0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 62  ber of columns b
110c0 65 79 6f 6e 64 20 74 68 65 20 6b 65 79 20 63 6f  eyond the key co
110d0 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74  lumns */.  sqlit
110e0 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
110f0 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63  * The database c
11100 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75  onnection */.  u
11110 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20  8 *aSortOrder;  
11120 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72     /* Sort order
11130 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
11140 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  . */.  CollSeq *
11150 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f  aColl[1];  /* Co
11160 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
11170 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f   for each term o
11180 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a  f the key */.};.
11190 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
111a0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
111b0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 68 6f  ing structure ho
111c0 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  lds information 
111d0 61 62 6f 75 74 20 61 0a 2a 2a 20 73 69 6e 67 6c  about a.** singl
111e0 65 20 69 6e 64 65 78 20 72 65 63 6f 72 64 20 74  e index record t
111f0 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79 20  hat has already 
11200 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20  been parsed out 
11210 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a  into individual.
11220 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a  ** values..**.**
11230 20 41 20 72 65 63 6f 72 64 20 69 73 20 61 6e 20   A record is an 
11240 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f 6e 74  object that cont
11250 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
11260 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74 61 2e   fields of data.
11270 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72 65 20  .** Records are 
11280 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
11290 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74  e content of a t
112a0 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f 20  able row and to 
112b0 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79  store.** the key
112c0 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20 20 41   of an index.  A
112d0 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f   blob encoding o
112e0 66 20 61 20 72 65 63 6f 72 64 20 69 73 20 63 72  f a record is cr
112f0 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  eated by.** the 
11300 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70  OP_MakeRecord op
11310 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44 42 45  code of the VDBE
11320 20 61 6e 64 20 69 73 20 64 69 73 61 73 73 65 6d   and is disassem
11330 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f  bled by the.** O
11340 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e  P_Column opcode.
11350 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75  .**.** This stru
11360 63 74 75 72 65 20 68 6f 6c 64 73 20 61 20 72 65  cture holds a re
11370 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61 6c  cord that has al
11380 72 65 61 64 79 20 62 65 65 6e 20 64 69 73 61 73  ready been disas
11390 73 65 6d 62 6c 65 64 0a 2a 2a 20 69 6e 74 6f 20  sembled.** into 
113a0 69 74 73 20 63 6f 6e 73 74 69 74 75 65 6e 74 20  its constituent 
113b0 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  fields..**.** Th
113c0 65 20 72 31 20 61 6e 64 20 72 32 20 6d 65 6d 62  e r1 and r2 memb
113d0 65 72 20 76 61 72 69 61 62 6c 65 73 20 61 72 65  er variables are
113e0 20 6f 6e 6c 79 20 75 73 65 64 20 62 79 20 74 68   only used by th
113f0 65 20 6f 70 74 69 6d 69 7a 65 64 20 63 6f 6d 70  e optimized comp
11400 61 72 69 73 6f 6e 0a 2a 2a 20 66 75 6e 63 74 69  arison.** functi
11410 6f 6e 73 20 76 64 62 65 52 65 63 6f 72 64 43 6f  ons vdbeRecordCo
11420 6d 70 61 72 65 49 6e 74 28 29 20 61 6e 64 20 76  mpareInt() and v
11430 64 62 65 52 65 63 6f 72 64 43 6f 6d 70 61 72 65  dbeRecordCompare
11440 53 74 72 69 6e 67 28 29 2e 0a 2a 2f 0a 73 74 72  String()..*/.str
11450 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
11460 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  rd {.  KeyInfo *
11470 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f  pKeyInfo;  /* Co
11480 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74  llation and sort
11490 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69  -order informati
114a0 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65  on */.  u16 nFie
114b0 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ld;         /* N
114c0 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
114d0 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20   in apMem[] */. 
114e0 20 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20   i8 default_rc; 
114f0 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73       /* Comparis
11500 6f 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79  on result if key
11510 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20  s are equal */. 
11520 20 75 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20   u8 errCode;    
11530 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65       /* Error de
11540 74 65 63 74 65 64 20 62 79 20 78 52 65 63 6f 72  tected by xRecor
11550 64 43 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50  dCompare (CORRUP
11560 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20  T or NOMEM) */. 
11570 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20   Mem *aMem;     
11580 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a       /* Values *
11590 2f 0a 20 20 69 6e 74 20 72 31 3b 20 20 20 20 20  /.  int r1;     
115a0 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
115b0 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c   to return if (l
115c0 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20 69  hs > rhs) */.  i
115d0 6e 74 20 72 32 3b 20 20 20 20 20 20 20 20 20 20  nt r2;          
115e0 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
115f0 65 74 75 72 6e 20 69 66 20 28 72 68 73 20 3c 20  eturn if (rhs < 
11600 6c 68 73 29 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a  lhs) */.};.../*.
11610 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65  ** Each SQL inde
11620 78 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  x is represented
11630 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e   in memory by an
11640 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
11650 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
11660 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54  ructure..**.** T
11670 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
11680 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65  e table that are
11690 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61   to be indexed a
116a0 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20  re described.** 
116b0 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b  by the aiColumn[
116c0 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20  ] field of this 
116d0 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20  structure.  For 
116e0 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65  example, suppose
116f0 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65 20  .** we have the 
11700 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20  following table 
11710 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a  and index:.**.**
11720 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
11730 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32  E Ex1(c1 int, c2
11740 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a   int, c3 text);.
11750 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 49 4e  **     CREATE IN
11760 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63  DEX Ex2 ON Ex1(c
11770 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20  3,c1);.**.** In 
11780 74 68 65 20 54 61 62 6c 65 20 73 74 72 75 63 74  the Table struct
11790 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 20 45  ure describing E
117a0 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61  x1, nCol==3 beca
117b0 75 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a  use there are.**
117c0 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69   three columns i
117d0 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e  n the table.  In
117e0 20 74 68 65 20 49 6e 64 65 78 20 73 74 72 75 63   the Index struc
117f0 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a  ture describing.
11800 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d  ** Ex2, nColumn=
11810 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68  =2 since 2 of th
11820 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45  e 3 columns of E
11830 78 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a  x1 are indexed..
11840 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ** The value of 
11850 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20  aiColumn is {2, 
11860 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d  0}.  aiColumn[0]
11870 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68 65 20  ==2 because the 
11880 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e  .** first column
11890 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28   to be indexed (
118a0 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78  c3) has an index
118b0 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f   of 2 in Ex1.aCo
118c0 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f  l[]..** The seco
118d0 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20  nd column to be 
118e0 69 6e 64 65 78 65 64 20 28 63 31 29 20 68 61 73  indexed (c1) has
118f0 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69   an index of 0 i
11900 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c  n.** Ex1.aCol[],
11910 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c   hence Ex2.aiCol
11920 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a  umn[1]==0..**.**
11930 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72   The Index.onErr
11940 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69  or field determi
11950 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e  nes whether or n
11960 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64 20 63  ot the indexed c
11970 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62  olumns.** must b
11980 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61  e unique and wha
11990 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20  t to do if they 
119a0 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49  are not.  When I
119b0 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f  ndex.onError=OE_
119c0 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e  None,.** it mean
119d0 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20  s this is not a 
119e0 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f  unique index.  O
119f0 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20 61  therwise it is a
11a00 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a   unique index.**
11a10 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f   and the value o
11a20 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20  f Index.onError 
11a30 69 6e 64 69 63 61 74 65 20 74 68 65 20 77 68 69  indicate the whi
11a40 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  ch conflict reso
11a50 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72  lution .** algor
11a60 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77  ithm to employ w
11a70 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d  henever an attem
11a80 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e  pt is made to in
11a90 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75  sert a non-uniqu
11aa0 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2f  e.** element..*/
11ab0 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a  .struct Index {.
11ac0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
11ad0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
11ae0 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78  me of this index
11af0 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c   */.  i16 *aiCol
11b00 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  umn;           /
11b10 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20  * Which columns 
11b20 61 72 65 20 75 73 65 64 20 62 79 20 74 68 69 73  are used by this
11b30 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20   index.  1st is 
11b40 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61  0 */.  LogEst *a
11b50 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20 20  iRowLogEst;     
11b60 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a  /* From ANALYZE:
11b70 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63   Est. rows selec
11b80 74 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75  ted by each colu
11b90 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  mn */.  Table *p
11ba0 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
11bb0 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c   /* The SQL tabl
11bc0 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20  e being indexed 
11bd0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41  */.  char *zColA
11be0 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ff;           /*
11bf0 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67   String defining
11c00 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   the affinity of
11c10 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
11c20 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20    Index *pNext; 
11c30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
11c40 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73  e next index ass
11c50 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
11c60 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20   same table */. 
11c70 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
11c80 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68  ;         /* Sch
11c90 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
11ca0 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  his index */.  u
11cb0 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20  8 *aSortOrder;  
11cc0 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65          /* for e
11cd0 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65  ach column: True
11ce0 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41  ==DESC, False==A
11cf0 53 43 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  SC */.  char **a
11d00 7a 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20  zColl;          
11d10 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c   /* Array of col
11d20 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
11d30 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20  names for index 
11d40 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74  */.  Expr *pPart
11d50 49 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a  IdxWhere;     /*
11d60 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
11d70 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65  r partial indice
11d80 73 20 2a 2f 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  s */.  KeyInfo *
11d90 70 4b 65 79 49 6e 66 6f 3b 20 20 20 20 20 20 20  pKeyInfo;       
11da0 2f 2a 20 41 20 4b 65 79 49 6e 66 6f 20 6f 62 6a  /* A KeyInfo obj
11db0 65 63 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72  ect suitable for
11dc0 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
11dd0 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
11de0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20            /* DB 
11df0 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  Page containing 
11e00 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64  root of this ind
11e10 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73  ex */.  LogEst s
11e20 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20  zIdxRow;        
11e30 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76   /* Estimated av
11e40 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69  erage row size i
11e50 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36  n bytes */.  u16
11e60 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20   nKeyCol;       
11e70 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
11e80 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69  of columns formi
11e90 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20  ng the key */.  
11ea0 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  u16 nColumn;    
11eb0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
11ec0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74  er of columns st
11ed0 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65  ored in the inde
11ee0 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f  x */.  u8 onErro
11ef0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
11f00 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f  /* OE_Abort, OE_
11f10 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61  Ignore, OE_Repla
11f20 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a  ce, or OE_None *
11f30 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 64 78  /.  unsigned idx
11f40 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20  Type:2;      /* 
11f50 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52  1==UNIQUE, 2==PR
11f60 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52  IMARY KEY, 0==CR
11f70 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20  EATE INDEX */.  
11f80 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65  unsigned bUnorde
11f90 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20  red:1;   /* Use 
11fa0 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d  this index for =
11fb0 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20  = or IN queries 
11fc0 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  only */.  unsign
11fd0 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31  ed uniqNotNull:1
11fe0 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e  ;  /* True if UN
11ff0 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c  IQUE and NOT NUL
12000 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e  L for all column
12010 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  s */.  unsigned 
12020 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20  isResized:1;    
12030 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 69 7a  /* True if resiz
12040 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68  eIndexObject() h
12050 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a  as been called *
12060 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43  /.  unsigned isC
12070 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20  overing:1;   /* 
12080 54 72 75 65 20 69 66 20 74 68 69 73 20 69 73 20  True if this is 
12090 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  a covering index
120a0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
120b0 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f  oSkipScan:1;   /
120c0 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20  * Do not try to 
120d0 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20 69 66  use skip-scan if
120e0 20 74 72 75 65 20 2a 2f 0a 23 69 66 64 65 66 20   true */.#ifdef 
120f0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
12100 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69  AT3_OR_STAT4.  i
12110 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20  nt nSample;     
12120 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
12130 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
12140 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20   aSample[] */.  
12150 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20  int nSampleCol; 
12160 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
12170 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e   of IndexSample.
12180 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e  anEq[] and so on
12190 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
121a0 41 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f  AvgEq;         /
121b0 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61  * Average nEq va
121c0 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f  lues for keys no
121d0 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a  t in aSample */.
121e0 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61    IndexSample *a
121f0 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61  Sample;    /* Sa
12200 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66  mples of the lef
12210 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20  t-most key */.  
12220 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73  tRowcnt *aiRowEs
12230 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d  t;       /* Non-
12240 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61 74  logarithmic stat
12250 31 20 64 61 74 61 20 66 6f 72 20 74 68 69 73 20  1 data for this 
12260 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63  index */.  tRowc
12270 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20 20  nt nRowEst0;    
12280 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72      /* Non-logar
12290 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66  ithmic number of
122a0 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64   rows in the ind
122b0 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  ex */.#endif.};.
122c0 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
122d0 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e  alues for Index.
122e0 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69  idxType.*/.#defi
122f0 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
12300 45 5f 41 50 50 44 45 46 20 20 20 20 20 20 30 20  E_APPDEF      0 
12310 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69    /* Created usi
12320 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  ng CREATE INDEX 
12330 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
12340 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45  E_IDXTYPE_UNIQUE
12350 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70        1   /* Imp
12360 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45  lements a UNIQUE
12370 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23   constraint */.#
12380 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
12390 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59  XTYPE_PRIMARYKEY
123a0 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20    2   /* Is the 
123b0 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20  PRIMARY KEY for 
123c0 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a  the table */../*
123d0 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
123e0 69 6e 64 65 78 20 58 20 69 73 20 61 20 50 52 49  index X is a PRI
123f0 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a  MARY KEY index *
12400 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d  /.#define IsPrim
12410 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20  aryKeyIndex(X)  
12420 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53  ((X)->idxType==S
12430 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52  QLITE_IDXTYPE_PR
12440 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65  IMARYKEY)../* Re
12450 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64  turn true if ind
12460 65 78 20 58 20 69 73 20 61 20 55 4e 49 51 55 45  ex X is a UNIQUE
12470 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
12480 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28  e IsUniqueIndex(
12490 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e  X)      ((X)->on
124a0 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a  Error!=OE_None).
124b0 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70  ./*.** Each samp
124c0 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  le stored in the
124d0 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61   sqlite_stat3 ta
124e0 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e 74  ble is represent
124f0 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a  ed in memory .**
12500 20 75 73 69 6e 67 20 61 20 73 74 72 75 63 74 75   using a structu
12510 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e  re of this type.
12520 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74    See documentat
12530 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f  ion at the top o
12540 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65  f the.** analyze
12550 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66  .c source file f
12560 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
12570 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
12580 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65  ruct IndexSample
12590 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20 20   {.  void *p;   
125a0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
125b0 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65 63  r to sampled rec
125c0 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20  ord */.  int n; 
125d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
125e0 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e 20  ze of record in 
125f0 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63  bytes */.  tRowc
12600 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20  nt *anEq;    /* 
12610 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
12620 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b 65  ows where the ke
12630 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73 61  y equals this sa
12640 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  mple */.  tRowcn
12650 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45  t *anLt;    /* E
12660 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  st. number of ro
12670 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73 20  ws where key is 
12680 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73  less than this s
12690 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
126a0 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20  nt *anDLt;   /* 
126b0 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64  Est. number of d
126c0 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73  istinct keys les
126d0 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70  s than this samp
126e0 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
126f0 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e  Each token comin
12700 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78  g out of the lex
12710 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  er is an instanc
12720 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72  e of.** this str
12730 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20  ucture.  Tokens 
12740 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73  are also used as
12750 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72   part of an expr
12760 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  ession..**.** No
12770 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30  te if Token.z==0
12780 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20   then Token.dyn 
12790 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20  and Token.n are 
127a0 75 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a  undefined and.**
127b0 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e   may contain ran
127c0 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20  dom values.  Do 
127d0 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73  not make any ass
127e0 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54  umptions about T
127f0 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20  oken.dyn.** and 
12800 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b  Token.n when Tok
12810 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75  en.z==0..*/.stru
12820 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e  ct Token {.  con
12830 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  st char *z;     
12840 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74  /* Text of the t
12850 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d  oken.  Not NULL-
12860 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20  terminated! */. 
12870 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b   unsigned int n;
12880 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
12890 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74   characters in t
128a0 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a  his token */.};.
128b0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
128c0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
128d0 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
128e0 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
128f0 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
12900 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43  code for a SELEC
12910 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  T that contains 
12920 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
12930 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78  ons..**.** If Ex
12940 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f  pr.op==TK_AGG_CO
12950 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46  LUMN or TK_AGG_F
12960 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70  UNCTION then Exp
12970 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a  r.pAggInfo is a.
12980 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ** pointer to th
12990 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
129a0 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  he Expr.iColumn 
129b0 66 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64  field is the ind
129c0 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f  ex in.** AggInfo
129d0 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e  .aCol[] or AggIn
129e0 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e  fo.aFunc[] of in
129f0 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
12a00 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
12a10 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f  code for that no
12a20 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66  de..**.** AggInf
12a30 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41  o.pGroupBy and A
12a40 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78  ggInfo.aFunc.pEx
12a50 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c  pr point to fiel
12a60 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a  ds within the.**
12a70 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74   original Select
12a80 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
12a90 64 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45  describes the SE
12aa0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
12ab0 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73   These.** fields
12ac0 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20   do not need to 
12ad0 62 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65  be freed when de
12ae0 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41  allocating the A
12af0 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  ggInfo structure
12b00 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49  ..*/.struct AggI
12b10 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63  nfo {.  u8 direc
12b20 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  tMode;          
12b30 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72  /* Direct render
12b40 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74  ing mode means t
12b50 61 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c  ake data directl
12b60 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y.              
12b70 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66              ** f
12b80 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65  rom source table
12b90 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72  s rather than fr
12ba0 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20  om accumulators 
12bb0 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69  */.  u8 useSorti
12bc0 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20  ngIdx;       /* 
12bd0 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20  In direct mode, 
12be0 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f  reference the so
12bf0 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68  rting index rath
12c00 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  er.             
12c10 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
12c20 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20  than the source 
12c30 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73  table */.  int s
12c40 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
12c50 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
12c60 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69  ber of the sorti
12c70 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  ng index */.  in
12c80 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62  t sortingIdxPTab
12c90 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20  ;     /* Cursor 
12ca0 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f  number of pseudo
12cb0 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  -table */.  int 
12cc0 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20  nSortingColumn; 
12cd0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
12ce0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
12cf0 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
12d00 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78  .  int mnReg, mx
12d10 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61  Reg;       /* Ra
12d20 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65 72 73  nge of registers
12d30 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61   allocated for a
12d40 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f  Col and aFunc */
12d50 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
12d60 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68  oupBy;     /* Th
12d70 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73  e group by claus
12d80 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  e */.  struct Ag
12d90 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f  gInfo_col {    /
12da0 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * For each colum
12db0 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65  n used in source
12dc0 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54   tables */.    T
12dd0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
12de0 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63          /* Sourc
12df0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
12e00 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
12e10 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
12e20 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
12e30 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
12e40 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b      int iColumn;
12e50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12e60 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69  Column number wi
12e70 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20  thin the source 
12e80 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
12e90 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20   iSorterColumn; 
12ea0 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
12eb0 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f  number in the so
12ec0 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
12ed0 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20     int iMem;    
12ee0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
12ef0 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
12f00 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75  hat acts as accu
12f10 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45  mulator */.    E
12f20 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
12f30 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f          /* The o
12f40 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69  riginal expressi
12f50 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b  on */.  } *aCol;
12f60 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20  .  int nColumn; 
12f70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
12f80 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74  mber of used ent
12f90 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a  ries in aCol[] *
12fa0 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c  /.  int nAccumul
12fb0 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e  ator;       /* N
12fc0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
12fd0 20 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75   that show throu
12fe0 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  gh to the output
12ff0 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13000 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41              ** A
13010 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e  dditional column
13020 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20  s are used only 
13030 61 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  as parameters to
13040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13050 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67             ** ag
13060 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
13070 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  s */.  struct Ag
13080 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f  gInfo_func {   /
13090 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65  * For each aggre
130a0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  gate function */
130b0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
130c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
130d0 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f   Expression enco
130e0 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f  ding the functio
130f0 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66  n */.    FuncDef
13100 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20   *pFunc;        
13110 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61    /* The aggrega
13120 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c  te function impl
13130 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
13140 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
13150 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
13160 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
13170 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
13180 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e  ulator */.    in
13190 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20  t iDistinct;    
131a0 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65         /* Epheme
131b0 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74  ral table used t
131c0 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e  o enforce DISTIN
131d0 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63  CT */.  } *aFunc
131e0 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20  ;.  int nFunc;  
131f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
13200 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
13210 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d   in aFunc[] */.}
13220 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74  ;../*.** The dat
13230 61 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61  atype ynVar is a
13240 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c   signed integer,
13250 20 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f   either 16-bit o
13260 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75  r 32-bit..** Usu
13270 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69  ally it is 16-bi
13280 74 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49  ts.  But if SQLI
13290 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
132a0 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65  NUMBER is greate
132b0 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20  r.** than 32767 
132c0 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20  we have to make 
132d0 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62  it 32-bit.  16-b
132e0 69 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20  it is preferred 
132f0 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73  because.** it us
13300 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69  es less memory i
13310 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63  n the Expr objec
13320 74 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69  t, which is a bi
13330 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a  g memory user.**
13340 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   in systems with
13350 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65   lots of prepare
13360 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41  d statements.  A
13370 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69  nd few applicati
13380 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65  ons.** need more
13390 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f   than about 10 o
133a0 72 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20  r 20 variables. 
133b0 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d   But some extrem
133c0 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20  e users want.** 
133d0 74 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64  to have prepared
133e0 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
133f0 20 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69   over 32767 vari
13400 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74  ables, and for t
13410 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f  hem.** the optio
13420 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28  n is available (
13430 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29  at compile-time)
13440 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
13450 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
13460 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64  BER<=32767.typed
13470 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65  ef i16 ynVar;.#e
13480 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20  lse.typedef int 
13490 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ynVar;.#endif../
134a0 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f  *.** Each node o
134b0 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  f an expression 
134c0 69 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65  in the parse tre
134d0 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  e is an instance
134e0 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
134f0 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70  cture..**.** Exp
13500 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f  r.op is the opco
13510 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20  de. The integer 
13520 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64  parser token cod
13530 65 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a  es are reused.**
13540 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65   as opcodes here
13550 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74  . For example, t
13560 68 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65  he parser define
13570 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e  s TK_GE to be an
13580 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65   integer.** code
13590 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
135a0 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e  e ">=" operator.
135b0 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67   This same integ
135c0 65 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65  er code is reuse
135d0 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e  d.** to represen
135e0 74 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68  t the greater-th
135f0 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f  an-or-equal-to o
13600 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65  perator in the e
13610 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65  xpression.** tre
13620 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
13630 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
13640 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b   SQL literal (TK
13650 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f  _INTEGER, TK_FLO
13660 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a  AT, TK_BLOB, .**
13670 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20   or TK_STRING), 
13680 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
13690 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78  contains the tex
136a0 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74  t of the SQL lit
136b0 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20  eral. If.** the 
136c0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
136d0 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52  variable (TK_VAR
136e0 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70  IABLE), then Exp
136f0 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
13700 20 74 68 65 20 0a 2a 2a 20 76 61 72 69 61 62 6c   the .** variabl
13710 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c  e name. Finally,
13720 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
13730 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e  on is an SQL fun
13740 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49  ction (TK_FUNCTI
13750 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70  ON),.** then Exp
13760 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
13770 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
13780 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a   function..**.**
13790 20 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64   Expr.pRight and
137a0 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20   Expr.pLeft are 
137b0 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67  the left and rig
137c0 68 74 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e  ht subexpression
137d0 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79  s of a.** binary
137e0 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65   operator. Eithe
137f0 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65  r or both may be
13800 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70   NULL..**.** Exp
13810 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c  r.x.pList is a l
13820 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ist of arguments
13830 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
13840 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e  on is an SQL fun
13850 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45  ction,.** a CASE
13860 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61   expression or a
13870 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20  n IN expression 
13880 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68  of the form "<lh
13890 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e  s> IN (<y>, <z>.
138a0 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e  ..)"..** Expr.x.
138b0 70 53 65 6c 65 63 74 20 69 73 20 75 73 65 64 20  pSelect is used 
138c0 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
138d0 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63  n is a sub-selec
138e0 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69  t or an expressi
138f0 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72  on of.** the for
13900 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c  m "<lhs> IN (SEL
13910 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68  ECT ...)". If th
13920 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62  e EP_xIsSelect b
13930 69 74 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  it is set in the
13940 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  .** Expr.flags m
13950 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78  ask, then Expr.x
13960 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
13970 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78  d. Otherwise, Ex
13980 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 0a 2a  pr.x.pList is .*
13990 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41  * valid..**.** A
139a0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  n expression of 
139b0 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49  the form ID or I
139c0 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20 61  D.ID refers to a
139d0 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62   column in a tab
139e0 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20  le..** For such 
139f0 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70  expressions, Exp
13a00 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54  r.op is set to T
13a10 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70  K_COLUMN and Exp
13a20 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74  r.iTable is.** t
13a30 68 65 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f  he integer curso
13a40 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44  r number of a VD
13a50 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  BE cursor pointi
13a60 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65  ng to that table
13a70 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f   and.** Expr.iCo
13a80 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75  lumn is the colu
13a90 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  mn number for th
13aa0 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d  e specific colum
13ab0 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78  n.  If the.** ex
13ac0 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64  pression is used
13ad0 20 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20   as a result in 
13ae0 61 6e 20 61 67 67 72 65 67 61 74 65 20 53 45 4c  an aggregate SEL
13af0 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ECT, then the.**
13b00 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73   value is also s
13b10 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78 70  tored in the Exp
13b20 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e  r.iAgg column in
13b30 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73   the aggregate s
13b40 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e  o that.** it can
13b50 20 62 65 20 61 63 63 65 73 73 65 64 20 61 66 74   be accessed aft
13b60 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65  er all aggregate
13b70 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a  s are computed..
13b80 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
13b90 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e  ression is an un
13ba0 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d  bound variable m
13bb0 61 72 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f  arker (a questio
13bc0 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63 68 61 72 61  n mark .** chara
13bd0 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20  cter '?' in the 
13be0 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68  original SQL) th
13bf0 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61 62  en the Expr.iTab
13c00 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64  le holds the ind
13c10 65 78 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f  ex .** number fo
13c20 72 20 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e  r that variable.
13c30 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
13c40 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75  pression is a su
13c50 62 71 75 65 72 79 20 74 68 65 6e 20 45 78 70 72  bquery then Expr
13c60 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61  .iColumn holds a
13c70 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67  n integer.** reg
13c80 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e  ister number con
13c90 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75  taining the resu
13ca0 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71 75 65  lt of the subque
13cb0 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73  ry.  If the.** s
13cc0 75 62 71 75 65 72 79 20 67 69 76 65 73 20 61 20  ubquery gives a 
13cd0 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c  constant result,
13ce0 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20   then iTable is 
13cf0 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75 62 71  -1.  If the subq
13d00 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20  uery.** gives a 
13d10 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72  different answer
13d20 20 61 74 20 64 69 66 66 65 72 65 6e 74 20 74 69   at different ti
13d30 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61 74 65  mes during state
13d40 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a  ment processing.
13d50 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69  ** then iTable i
13d60 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  s the address of
13d70 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68   a subroutine th
13d80 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20  at computes the 
13d90 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20  subquery..**.** 
13da0 49 66 20 74 68 65 20 45 78 70 72 20 69 73 20 6f  If the Expr is o
13db0 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e  f type OP_Column
13dc0 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20  , and the table 
13dd0 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20  it is selecting 
13de0 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73  from.** is a dis
13df0 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22  k table or the "
13e00 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61  old.*" pseudo-ta
13e10 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70  ble, then pTab p
13e20 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20  oints to the.** 
13e30 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61  corresponding ta
13e40 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a  ble definition..
13e50 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e  **.** ALLOCATION
13e60 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78   NOTES:.**.** Ex
13e70 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75  pr objects can u
13e80 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f  se a lot of memo
13e90 72 79 20 73 70 61 63 65 20 69 6e 20 64 61 74 61  ry space in data
13ea0 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f  base schema.  To
13eb0 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20  .** help reduce 
13ec0 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65  memory requireme
13ed0 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61  nts, sometimes a
13ee0 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69  n Expr object wi
13ef0 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74  ll be.** truncat
13f00 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75  ed.  And to redu
13f10 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ce the number of
13f20 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
13f30 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a  ons, sometimes.*
13f40 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78  * two or more Ex
13f50 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20  pr objects will 
13f60 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73  be stored in a s
13f70 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  ingle memory all
13f80 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65  ocation,.** toge
13f90 74 68 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a  ther with Expr.z
13fa0 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a  Token strings..*
13fb0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52  *.** If the EP_R
13fc0 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f  educed and EP_To
13fd0 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72  kenOnly flags ar
13fe0 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e  e set when.** an
13ff0 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20   Expr object is 
14000 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e  truncated.  When
14010 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73   EP_Reduced is s
14020 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20  et, then all.** 
14030 74 68 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f  the child Expr o
14040 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45 78  bjects in the Ex
14050 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70  pr.pLeft and Exp
14060 72 2e 70 52 69 67 68 74 20 73 75 62 74 72 65 65  r.pRight subtree
14070 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e  s.** are contain
14080 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 73 61  ed within the sa
14090 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  me memory alloca
140a0 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77  tion.  Note, how
140b0 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68  ever, that.** th
140c0 65 20 73 75 62 74 72 65 65 73 20 69 6e 20 45 78  e subtrees in Ex
140d0 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78  pr.x.pList or Ex
140e0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65  pr.x.pSelect are
140f0 20 61 6c 77 61 79 73 20 73 65 70 61 72 61 74 65   always separate
14100 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c  ly.** allocated,
14110 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   regardless of w
14120 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50  hether or not EP
14130 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2e  _Reduced is set.
14140 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20  .*/.struct Expr 
14150 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  {.  u8 op;      
14160 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70             /* Op
14170 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65  eration performe
14180 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a  d by this node *
14190 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
141a0 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  y;         /* Th
141b0 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68  e affinity of th
141c0 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66  e column or 0 if
141d0 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f   not a column */
141e0 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20  .  u32 flags;   
141f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72            /* Var
14200 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f  ious flags.  EP_
14210 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20  * See below */. 
14220 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61   union {.    cha
14230 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20  r *zToken;      
14240 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c      /* Token val
14250 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61  ue. Zero termina
14260 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64  ted and dequoted
14270 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c   */.    int iVal
14280 75 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ue;            /
14290 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69  * Non-negative i
142a0 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20  nteger value if 
142b0 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20  EP_IntValue */. 
142c0 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74   } u;..  /* If t
142d0 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  he EP_TokenOnly 
142e0 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74  flag is set in t
142f0 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  he Expr.flags ma
14300 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a  sk, then no.  **
14310 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61   space is alloca
14320 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c  ted for the fiel
14330 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f  ds below this po
14340 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  int. An attempt 
14350 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74  to.  ** access t
14360 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  hem will result 
14370 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72  in a segfault or
14380 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a 20   malfunction. . 
14390 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
143a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
143b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
143c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
143d0 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20  ******/..  Expr 
143e0 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20  *pLeft;         
143f0 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64    /* Left subnod
14400 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69  e */.  Expr *pRi
14410 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ght;          /*
14420 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a   Right subnode *
14430 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
14440 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b  ExprList *pList;
14450 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c       /* op = IN,
14460 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c   EXISTS, SELECT,
14470 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c   CASE, FUNCTION,
14480 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20   BETWEEN */.    
14490 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
144a0 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65       /* EP_xIsSe
144b0 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e  lect and op = IN
144c0 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
144d0 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a   */.  } x;..  /*
144e0 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63   If the EP_Reduc
144f0 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ed flag is set i
14500 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
14510 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
14520 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
14530 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
14540 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
14550 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
14560 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
14570 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
14580 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
14590 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
145a0 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
145b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
145c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
145d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
145e0 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53  ********/..#if S
145f0 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
14600 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65  EPTH>0.  int nHe
14610 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
14620 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68 65  /* Height of the
14630 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79 20   tree headed by 
14640 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e  this node */.#en
14650 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65  dif.  int iTable
14660 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
14670 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f  TK_COLUMN: curso
14680 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  r number of tabl
14690 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e  e holding column
146a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
146b0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
146c0 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73 74  REGISTER: regist
146d0 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20  er number.      
146e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146f0 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52     ** TK_TRIGGER
14700 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e  : 1 -> new, 0 ->
14710 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20   old.           
14720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
14730 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31   EP_Unlikely:  1
14740 33 34 32 31 37 37 32 38 20 74 69 6d 65 73 20 6c  34217728 times l
14750 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f 0a 20 20 79  ikelihood */.  y
14760 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20  nVar iColumn;   
14770 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55        /* TK_COLU
14780 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78  MN: column index
14790 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e  .  -1 for rowid.
147a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
147b0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
147c0 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62  VARIABLE: variab
147d0 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79  le number (alway
147e0 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20 69 31  s >= 1). */.  i1
147f0 36 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20  6 iAgg;         
14800 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e       /* Which en
14810 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d  try in pAggInfo-
14820 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75  >aCol[] or ->aFu
14830 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52  nc[] */.  i16 iR
14840 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20  ightJoinTable;  
14850 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f   /* If EP_FromJo
14860 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61  in, the right ta
14870 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20  ble of the join 
14880 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20  */.  u8 op2;    
14890 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
148a0 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67  K_REGISTER: orig
148b0 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78  inal value of Ex
148c0 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20  pr.op.          
148d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
148e0 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65  * TK_COLUMN: the
148f0 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72   value of p5 for
14900 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20   OP_Column.     
14910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14920 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55      ** TK_AGG_FU
14930 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20  NCTION: nesting 
14940 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e  depth */.  AggIn
14950 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20  fo *pAggInfo;   
14960 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f    /* Used by TK_
14970 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54  AGG_COLUMN and T
14980 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a  K_AGG_FUNCTION *
14990 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
149a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61             /* Ta
149b0 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d  ble for TK_COLUM
149c0 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a  N expressions. *
149d0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
149e0 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68  following are th
149f0 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69  e meanings of bi
14a00 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  ts in the Expr.f
14a10 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
14a20 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f  define EP_FromJo
14a30 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20  in  0x000001 /* 
14a40 4f 72 69 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e  Originates in ON
14a50 2f 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66  /USING clause of
14a60 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
14a70 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20  define EP_Agg   
14a80 20 20 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20      0x000002 /* 
14a90 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  Contains one or 
14aa0 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
14ab0 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
14ac0 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65 64 20  ine EP_Resolved 
14ad0 20 30 78 30 30 30 30 30 34 20 2f 2a 20 49 44 73   0x000004 /* IDs
14ae0 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c   have been resol
14af0 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a  ved to COLUMNs *
14b00 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 45 72 72  /.#define EP_Err
14b10 6f 72 20 20 20 20 20 30 78 30 30 30 30 30 38 20  or     0x000008 
14b20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 63 6f  /* Expression co
14b30 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
14b40 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65  re errors */.#de
14b50 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74  fine EP_Distinct
14b60 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20 41 67    0x000010 /* Ag
14b70 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
14b80 20 77 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b   with DISTINCT k
14b90 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e  eyword */.#defin
14ba0 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30  e EP_VarSelect 0
14bb0 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65  x000020 /* pSele
14bc0 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64  ct is correlated
14bd0 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a  , not constant *
14be0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c  /.#define EP_Dbl
14bf0 51 75 6f 74 65 64 20 30 78 30 30 30 30 34 30 20  Quoted 0x000040 
14c00 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f  /* token.z was o
14c10 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e  riginally in "..
14c20 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ." */.#define EP
14c30 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30  _InfixFunc 0x000
14c40 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  080 /* True for 
14c50 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f  an infix functio
14c60 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65  n: LIKE, GLOB, e
14c70 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  tc */.#define EP
14c80 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30  _Collate   0x000
14c90 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74  100 /* Tree cont
14ca0 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54  ains a TK_COLLAT
14cb0 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64  E operator */.#d
14cc0 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69 63  efine EP_Generic
14cd0 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20 49     0x000200 /* I
14ce0 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72  gnore COLLATE or
14cf0 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68 69   affinity on thi
14d00 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e  s tree */.#defin
14d10 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 30  e EP_IntValue  0
14d20 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67  x000400 /* Integ
14d30 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e  er value contain
14d40 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a  ed in u.iValue *
14d50 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73  /.#define EP_xIs
14d60 53 65 6c 65 63 74 20 30 78 30 30 30 38 30 30 20  Select 0x000800 
14d70 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20  /* x.pSelect is 
14d80 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65  valid (otherwise
14d90 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a   x.pList is) */.
14da0 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20  #define EP_Skip 
14db0 20 20 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a       0x001000 /*
14dc0 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72   COLLATE, AS, or
14dd0 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65   UNLIKELY */.#de
14de0 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20  fine EP_Reduced 
14df0 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78    0x002000 /* Ex
14e00 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 52  pr struct EXPR_R
14e10 45 44 55 43 45 44 53 49 5a 45 20 62 79 74 65 73  EDUCEDSIZE bytes
14e20 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
14e30 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78   EP_TokenOnly 0x
14e40 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73  004000 /* Expr s
14e50 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e  truct EXPR_TOKEN
14e60 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f  ONLYSIZE bytes o
14e70 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
14e80 50 5f 53 74 61 74 69 63 20 20 20 20 30 78 30 30  P_Static    0x00
14e90 38 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20  8000 /* Held in 
14ea0 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69  memory not obtai
14eb0 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ned from malloc(
14ec0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ) */.#define EP_
14ed0 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30 30  MemToken  0x0100
14ee0 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71  00 /* Need to sq
14ef0 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45 78  lite3DbFree() Ex
14f00 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65  pr.zToken */.#de
14f10 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65  fine EP_NoReduce
14f20 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61    0x020000 /* Ca
14f30 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44  nnot EXPRDUP_RED
14f40 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f  UCE this Expr */
14f50 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69  .#define EP_Unli
14f60 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30 20 2f  kely  0x040000 /
14f70 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20  * unlikely() or 
14f80 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e  likelihood() fun
14f90 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
14fa0 20 45 50 5f 43 6f 6e 73 74 61 6e 74 20 20 30 78   EP_Constant  0x
14fb0 30 38 30 30 30 30 20 2f 2a 20 4e 6f 64 65 20 69  080000 /* Node i
14fc0 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a  s a constant */.
14fd0 23 64 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65  #define EP_CanBe
14fe0 4e 75 6c 6c 20 30 78 31 30 30 30 30 30 20 2f 2a  Null 0x100000 /*
14ff0 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73   Can be null des
15000 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  pite NOT NULL co
15010 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 0a 2f 2a 0a  nstraint */../*.
15020 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
15030 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
15040 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
15050 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a  ar bits in the .
15060 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  ** Expr.flags fi
15070 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
15080 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28  ExprHasProperty(
15090 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e  E,P)     (((E)->
150a0 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  flags&(P))!=0).#
150b0 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c  define ExprHasAl
150c0 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  lProperty(E,P)  
150d0 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
150e0 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
150f0 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
15100 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c  E,P)     (E)->fl
15110 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65  ags|=(P).#define
15120 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72   ExprClearProper
15130 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66  ty(E,P)   (E)->f
15140 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54  lags&=~(P)../* T
15150 68 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  he ExprSetVVAPro
15160 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73  perty() macro is
15170 20 75 73 65 64 20 66 6f 72 20 56 65 72 69 66 69   used for Verifi
15180 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69  cation, Validati
15190 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65  on,.** and Accre
151a0 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20  ditation only.  
151b0 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78  It works like Ex
151c0 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 29 20  prSetProperty() 
151d0 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72  during VVA.** pr
151e0 6f 63 65 73 73 65 73 20 62 75 74 20 69 73 20 61  ocesses but is a
151f0 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76   no-op for deliv
15200 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ery..*/.#ifdef S
15210 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65  QLITE_DEBUG.# de
15220 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50  fine ExprSetVVAP
15230 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 45  roperty(E,P)  (E
15240 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65  )->flags|=(P).#e
15250 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70  lse.# define Exp
15260 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
15270 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E,P).#endif../*.
15280 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
15290 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65  ermine the numbe
152a0 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69  r of bytes requi
152b0 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20  red by a normal 
152c0 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c  Expr .** struct,
152d0 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
152e0 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75  with the EP_Redu
152f0 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20  ced flag set in 
15300 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61  Expr.flags .** a
15310 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  nd an Expr struc
15320 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f  t with the EP_To
15330 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74  kenOnly flag set
15340 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
15350 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20  R_FULLSIZE      
15360 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72       sizeof(Expr
15370 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  )           /* F
15380 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66  ull size */.#def
15390 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44  ine EXPR_REDUCED
153a0 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73  SIZE        offs
153b0 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65  etof(Expr,iTable
153c0 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61  )  /* Common fea
153d0 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tures */.#define
153e0 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
153f0 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f  IZE      offseto
15400 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20  f(Expr,pLeft)   
15410 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65  /* Fewer feature
15420 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67  s */../*.** Flag
15430 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
15440 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
15450 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74   function. See t
15460 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e  he header commen
15470 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69  t .** above sqli
15480 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72  te3ExprDup() for
15490 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65   details..*/.#de
154a0 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44  fine EXPRDUP_RED
154b0 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30  UCE         0x00
154c0 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75  01  /* Used redu
154d0 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f  ced-size Expr no
154e0 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  des */../*.** A 
154f0 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
15500 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65  ons.  Each expre
15510 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e  ssion may option
15520 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e  ally have a.** n
15530 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61  ame.  An expr/na
15540 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63  me combination c
15550 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65  an be used in se
15560 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68  veral ways, such
15570 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20  .** as the list 
15580 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20  of "expr AS ID" 
15590 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67  fields following
155a0 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69   a "SELECT" or i
155b0 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66  n the.** list of
155c0 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65   "ID = expr" ite
155d0 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e  ms in an UPDATE.
155e0 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72    A list of expr
155f0 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61  essions can.** a
15600 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74  lso be used as t
15610 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61  he argument to a
15620 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68   function, in wh
15630 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a  ich case the a.z
15640 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73  Name.** field is
15650 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
15660 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20   By default the 
15670 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64  Expr.zSpan field
15680 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72   holds a human-r
15690 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74  eadable descript
156a0 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78  ion of.** the ex
156b0 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
156c0 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
156d0 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72  eration of error
156e0 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a   messages and.**
156f0 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20   column labels. 
15700 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45   In this case, E
15710 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70  xpr.zSpan is typ
15720 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20  ically the text 
15730 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65  of a.** column e
15740 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20  xpression as it 
15750 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45  exists in a SELE
15760 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48  CT statement.  H
15770 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68  owever, if.** th
15780 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61  e bSpanIsTab fla
15790 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a  g is set, then z
157a0 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64  Span is overload
157b0 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e  ed to mean the n
157c0 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65  ame.** of the re
157d0 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  sult column in t
157e0 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53  he form: DATABAS
157f0 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20  E.TABLE.COLUMN. 
15800 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66   This later.** f
15810 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20  orm is used for 
15820 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20  name resolution 
15830 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d  with nested FROM
15840 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72   clauses..*/.str
15850 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20  uct ExprList {. 
15860 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20   int nExpr;     
15870 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15880 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  r of expressions
15890 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
158a0 20 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73    struct ExprLis
158b0 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20  t_item { /* For 
158c0 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
158d0 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20  in the list */. 
158e0 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
158f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
15900 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  e list of expres
15910 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61  sions */.    cha
15920 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
15930 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73       /* Token as
15940 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
15950 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  is expression */
15960 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e  .    char *zSpan
15970 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
15980 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66  Original text of
15990 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
159a0 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72  */.    u8 sortOr
159b0 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  der;           /
159c0 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20  * 1 for DESC or 
159d0 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20  0 for ASC */.   
159e0 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a   unsigned done :
159f0 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c  1;       /* A fl
15a00 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77  ag to indicate w
15a10 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69  hen processing i
15a20 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20  s finished */.  
15a30 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e    unsigned bSpan
15a40 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70  IsTab :1; /* zSp
15a50 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c  an holds DB.TABL
15a60 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20  E.COLUMN */.    
15a70 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c  unsigned reusabl
15a80 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74  e :1;   /* Const
15a90 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ant expression i
15aa0 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20  s reusable */.  
15ab0 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20    union {.      
15ac0 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20  struct {.       
15ad0 20 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c   u16 iOrderByCol
15ae0 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52  ;      /* For OR
15af0 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e  DER BY, column n
15b00 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20  umber in result 
15b10 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 75  set */.        u
15b20 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20  16 iAlias;      
15b30 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
15b40 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b  to Parse.aAlias[
15b50 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20  ] for zName */. 
15b60 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20 20 20       } x;.      
15b70 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72 52 65  int iConstExprRe
15b80 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73  g;      /* Regis
15b90 74 65 72 20 69 6e 20 77 68 69 63 68 20 45 78 70  ter in which Exp
15ba0 72 20 76 61 6c 75 65 20 69 73 20 63 61 63 68 65  r value is cache
15bb0 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20  d */.    } u;.  
15bc0 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20 20 20  } *a;           
15bd0 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20         /* Alloc 
15be0 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 67  a power of two g
15bf0 72 65 61 74 65 72 20 6f 72 20 65 71 75 61 6c 20  reater or equal 
15c00 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a  to nExpr */.};..
15c10 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
15c20 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
15c30 75 72 65 20 69 73 20 75 73 65 64 20 62 79 20 74  ure is used by t
15c40 68 65 20 70 61 72 73 65 72 20 74 6f 20 72 65 63  he parser to rec
15c50 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20  ord both.** the 
15c60 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 61  parse tree for a
15c70 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  n expression and
15c80 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69 6e 70   the span of inp
15c90 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a  ut text for an.*
15ca0 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f  * expression..*/
15cb0 0a 73 74 72 75 63 74 20 45 78 70 72 53 70 61 6e  .struct ExprSpan
15cc0 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72   {.  Expr *pExpr
15cd0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
15ce0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61 72  e expression par
15cf0 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e  se tree */.  con
15d00 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b  st char *zStart;
15d10 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68 61 72     /* First char
15d20 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74 20 74  acter of input t
15d30 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ext */.  const c
15d40 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f  har *zEnd;     /
15d50 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65 72 20  * One character 
15d60 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20  past the end of 
15d70 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b  input text */.};
15d80 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
15d90 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
15da0 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61  cture can hold a
15db0 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20   simple list of 
15dc0 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20  identifiers,.** 
15dd0 73 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74  such as the list
15de0 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20   "a,b,c" in the 
15df0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d  following statem
15e00 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ents:.**.**     
15e10 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
15e20 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e  ,b,c) VALUES ...
15e30 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45  ;.**      CREATE
15e40 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28   INDEX idx ON t(
15e50 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20  a,b,c);.**      
15e60 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74  CREATE TRIGGER t
15e70 72 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54  rig BEFORE UPDAT
15e80 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e  E ON t(a,b,c) ..
15e90 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c  .;.**.** The IdL
15ea0 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20  ist.a.idx field 
15eb0 69 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65  is used when the
15ec0 20 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e   IdList represen
15ed0 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a  ts the list of.*
15ee0 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61  * column names a
15ef0 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d  fter a table nam
15f00 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73  e in an INSERT s
15f10 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68  tatement.  In th
15f20 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a  e statement.**.*
15f30 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  *     INSERT INT
15f40 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a  O t(a,b,c) ....*
15f50 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74  *.** If "a" is t
15f60 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f  he k-th column o
15f70 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65  f table "t", the
15f80 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64  n IdList.a[0].id
15f90 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  x==k..*/.struct 
15fa0 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63  IdList {.  struc
15fb0 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a  t IdList_item {.
15fc0 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
15fd0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
15fe0 20 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20   the identifier 
15ff0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20  */.    int idx; 
16000 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
16010 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e  x in some Table.
16020 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75  aCol[] of a colu
16030 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a  mn named zName *
16040 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20  /.  } *a;.  int 
16050 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  nId;         /* 
16060 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69  Number of identi
16070 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73  fiers on the lis
16080 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  t */.};../*.** T
16090 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74  he bitmask datat
160a0 79 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ype defined belo
160b0 77 20 69 73 20 75 73 65 64 20 66 6f 72 20 76 61  w is used for va
160c0 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69  rious optimizati
160d0 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67  ons..**.** Chang
160e0 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20  ing this from a 
160f0 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62  64-bit to a 32-b
16100 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74  it type limits t
16110 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20  he number of.** 
16120 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e  tables in a join
16130 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f   to 32 instead o
16140 66 20 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c  f 64.  But it al
16150 73 6f 20 72 65 64 75 63 65 73 20 74 68 65 20 73  so reduces the s
16160 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69  ize.** of the li
16170 62 72 61 72 79 20 62 79 20 37 33 38 20 62 79 74  brary by 738 byt
16180 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74  es on ix86..*/.t
16190 79 70 65 64 65 66 20 75 36 34 20 42 69 74 6d 61  ypedef u64 Bitma
161a0 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e  sk;../*.** The n
161b0 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e  umber of bits in
161c0 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d   a Bitmask.  "BM
161d0 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73  S" means "BitMas
161e0 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66  k Size"..*/.#def
161f0 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28  ine BMS  ((int)(
16200 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a  sizeof(Bitmask)*
16210 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74  8))../*.** A bit
16220 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f   in a Bitmask.*/
16230 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54  .#define MASKBIT
16240 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b  (n)   (((Bitmask
16250 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e  )1)<<(n)).#defin
16260 65 20 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28  e MASKBIT32(n) (
16270 28 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31  ((unsigned int)1
16280 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54  )<<(n))../*.** T
16290 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
162a0 75 63 74 75 72 65 20 64 65 73 63 72 69 62 65 73  ucture describes
162b0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
162c0 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
162d0 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20  tement..** Each 
162e0 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72  table or subquer
162f0 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  y in the FROM cl
16300 61 75 73 65 20 69 73 20 61 20 73 65 70 61 72 61  ause is a separa
16310 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a  te element of.**
16320 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d   the SrcList.a[]
16330 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69   array..**.** Wi
16340 74 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20  th the addition 
16350 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61  of multiple data
16360 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68  base support, th
16370 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
16380 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73  cture.** can als
16390 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 73  o be used to des
163a0 63 72 69 62 65 20 61 20 70 61 72 74 69 63 75 6c  cribe a particul
163b0 61 72 20 74 61 62 6c 65 20 73 75 63 68 20 61 73  ar table such as
163c0 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a   the table that.
163d0 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62  ** is modified b
163e0 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c  y an INSERT, DEL
163f0 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73  ETE, or UPDATE s
16400 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74  tatement.  In st
16410 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73  andard SQL,.** s
16420 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74  uch a table must
16430 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d   be a simple nam
16440 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53  e: ID.  But in S
16450 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65  QLite, the table
16460 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69   can.** now be i
16470 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 64  dentified by a d
16480 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20  atabase name, a 
16490 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61  dot, then the ta
164a0 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e  ble name: ID.ID.
164b0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74  .**.** The joint
164c0 79 70 65 20 73 74 61 72 74 73 20 6f 75 74 20 73  ype starts out s
164d0 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20  howing the join 
164e0 74 79 70 65 20 62 65 74 77 65 65 6e 20 74 68 65  type between the
164f0 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a   current table.*
16500 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74  * and the next t
16510 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74  able on the list
16520 2e 20 20 54 68 65 20 70 61 72 73 65 72 20 62 75  .  The parser bu
16530 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74 68  ilds the list th
16540 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73  is way..** But s
16550 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
16560 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74  ftJoinType() lat
16570 65 72 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f  er shifts the jo
16580 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74 20  intypes so that 
16590 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65  each.** jointype
165a0 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6a   expresses the j
165b0 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20  oin between the 
165c0 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72  table and the pr
165d0 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a  evious table..**
165e0 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73  .** In the colUs
165f0 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69  ed field, the hi
16600 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69  gh-order bit (bi
16610 74 20 36 33 29 20 69 73 20 73 65 74 20 69 66 20  t 63) is set if 
16620 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e  the table.** con
16630 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20  tains more than 
16640 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74  63 columns and t
16650 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65  he 64-th or late
16660 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64  r column is used
16670 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c  ..*/.struct SrcL
16680 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63  ist {.  int nSrc
16690 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
166a0 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20  er of tables or 
166b0 73 75 62 71 75 65 72 69 65 73 20 69 6e 20 74 68  subqueries in th
166c0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
166d0 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20  .  u32 nAlloc;  
166e0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
166f0 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74   entries allocat
16700 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20  ed in a[] below 
16710 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c  */.  struct SrcL
16720 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53  ist_item {.    S
16730 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
16740 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68   /* Schema to wh
16750 69 63 68 20 74 68 69 73 20 69 74 65 6d 20 69 73  ich this item is
16760 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68   fixed */.    ch
16770 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20  ar *zDatabase;  
16780 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62  /* Name of datab
16790 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73  ase holding this
167a0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
167b0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
167c0 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
167d0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
167e0 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a   *zAlias;     /*
167f0 20 54 68 65 20 22 42 22 20 70 61 72 74 20 6f 66   The "B" part of
16800 20 61 20 22 41 20 41 53 20 42 22 20 70 68 72 61   a "A AS B" phra
16810 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68  se.  zName is th
16820 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62  e "A" */.    Tab
16830 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f  le *pTab;      /
16840 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63  * An SQL table c
16850 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
16860 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c  zName */.    Sel
16870 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f  ect *pSelect;  /
16880 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61 74 65  * A SELECT state
16890 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61  ment used in pla
168a0 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61  ce of a table na
168b0 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64  me */.    int ad
168c0 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41  drFillSub;  /* A
168d0 64 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75  ddress of subrou
168e0 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74  tine to manifest
168f0 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20   a subquery */. 
16900 20 20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e     int regReturn
16910 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  ;    /* Register
16920 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20   holding return 
16930 61 64 64 72 65 73 73 20 6f 66 20 61 64 64 72 46  address of addrF
16940 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e  illSub */.    in
16950 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20  t regResult;    
16960 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c  /* Registers hol
16970 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20  ding results of 
16980 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a  a co-routine */.
16990 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b      u8 jointype;
169a0 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66        /* Type of
169b0 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
169c0 69 73 20 61 62 6c 65 20 61 6e 64 20 74 68 65 20  is able and the 
169d0 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20  previous */.    
169e0 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65  unsigned notInde
169f0 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72  xed :1;    /* Tr
16a00 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ue if there is a
16a10 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
16a20 75 73 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  use */.    unsig
16a30 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64  ned isCorrelated
16a40 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66   :1;  /* True if
16a50 20 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f   sub-query is co
16a60 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20  rrelated */.    
16a70 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f  unsigned viaCoro
16a80 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d  utine :1;  /* Im
16a90 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63  plemented as a c
16aa0 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20  o-routine */.   
16ab0 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75   unsigned isRecu
16ac0 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54  rsive :1;   /* T
16ad0 72 75 65 20 66 6f 72 20 72 65 63 75 72 73 69 76  rue for recursiv
16ae0 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57  e reference in W
16af0 49 54 48 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ITH */.#ifndef S
16b00 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
16b10 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c 65 63  IN.    u8 iSelec
16b20 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66 20 70  tId;     /* If p
16b30 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65 20 69  Select!=0, the i
16b40 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c  d of the sub-sel
16b50 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65  ect in EQP */.#e
16b60 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69 43 75  ndif.    int iCu
16b70 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68  rsor;      /* Th
16b80 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75  e VDBE cursor nu
16b90 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61 63 63  mber used to acc
16ba0 65 73 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ess this table *
16bb0 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b  /.    Expr *pOn;
16bc0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f          /* The O
16bd0 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  N clause of a jo
16be0 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74  in */.    IdList
16bf0 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54   *pUsing;   /* T
16c00 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  he USING clause 
16c10 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20  of a join */.   
16c20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64   Bitmask colUsed
16c30 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c  ;  /* Bit N (1<<
16c40 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e  N) set if column
16c50 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75 73   N of pTab is us
16c60 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  ed */.    char *
16c70 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f 2a 20 49  zIndex;     /* I
16c80 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22  dentifier from "
16c90 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64  INDEXED BY <zInd
16ca0 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20  ex>" clause */. 
16cb0 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78     Index *pIndex
16cc0 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 73 74  ;    /* Index st
16cd0 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f  ructure correspo
16ce0 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64 65 78 2c  nding to zIndex,
16cf0 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 7d 20 61   if any */.  } a
16d00 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
16d10 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
16d20 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69 65  r each identifie
16d30 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  r on the list */
16d40 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69  .};../*.** Permi
16d50 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74  tted values of t
16d60 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69  he SrcList.a.joi
16d70 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23  ntype field.*/.#
16d80 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20  define JT_INNER 
16d90 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a      0x0001    /*
16da0 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e   Any kind of inn
16db0 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e  er or cross join
16dc0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43   */.#define JT_C
16dd0 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32 20  ROSS     0x0002 
16de0 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75     /* Explicit u
16df0 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20  se of the CROSS 
16e00 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
16e10 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20  ne JT_NATURAL   
16e20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75  0x0004    /* Tru
16e30 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c  e for a "natural
16e40 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  " join */.#defin
16e50 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30  e JT_LEFT      0
16e60 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74  x0008    /* Left
16e70 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
16e80 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20  define JT_RIGHT 
16e90 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a      0x0010    /*
16ea0 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69   Right outer joi
16eb0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
16ec0 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32 30  OUTER     0x0020
16ed0 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45      /* The "OUTE
16ee0 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72  R" keyword is pr
16ef0 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esent */.#define
16f00 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78   JT_ERROR     0x
16f10 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f  0040    /* unkno
16f20 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65  wn or unsupporte
16f30 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a  d join type */..
16f40 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70  ./*.** Flags app
16f50 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65  ropriate for the
16f60 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61   wctrlFlags para
16f70 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33  meter of sqlite3
16f80 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20  WhereBegin().** 
16f90 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e 66  and the WhereInf
16fa0 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d  o.wctrlFlags mem
16fb0 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ber..*/.#define 
16fc0 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f  WHERE_ORDERBY_NO
16fd0 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a  RMAL   0x0000 /*
16fe0 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e   No-op */.#defin
16ff0 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
17000 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30 31 20  MIN      0x0001 
17010 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63  /* ORDER BY proc
17020 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29  essing for min()
17030 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
17040 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d   WHERE_ORDERBY_M
17050 41 58 20 20 20 20 20 20 30 78 30 30 30 32 20 2f  AX      0x0002 /
17060 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65  * ORDER BY proce
17070 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20  ssing for max() 
17080 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
17090 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45  WHERE_ONEPASS_DE
170a0 53 49 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a  SIRED  0x0004 /*
170b0 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d   Want to do one-
170c0 70 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45  pass UPDATE/DELE
170d0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  TE */.#define WH
170e0 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f  ERE_DUPLICATES_O
170f0 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 4f  K    0x0008 /* O
17100 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f  k to return a ro
17110 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65  w more than once
17120 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
17130 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53  E_OMIT_OPEN_CLOS
17140 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54 61 62  E  0x0010 /* Tab
17150 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65 20 61  le cursors are a
17160 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23  lready open */.#
17170 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46 4f 52  define WHERE_FOR
17180 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20 30 78  CE_TABLE      0x
17190 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75  0020 /* Do not u
171a0 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79  se an index-only
171b0 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65 66 69   search */.#defi
171c0 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c  ne WHERE_ONETABL
171d0 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30 34 30  E_ONLY    0x0040
171e0 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68   /* Only code th
171f0 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e 20 70  e 1st table in p
17200 54 61 62 4c 69 73 74 20 2a 2f 0a 20 20 20 20 20  TabList */.     
17210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17220 20 20 20 20 20 2f 2a 20 20 20 30 78 30 30 38 30       /*   0x0080
17230 20 2f 2f 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   // not currentl
17240 79 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  y used */.#defin
17250 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20  e WHERE_GROUPBY 
17260 20 20 20 20 20 20 20 20 20 30 78 30 31 30 30 20           0x0100 
17270 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20 72  /* pOrderBy is r
17280 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59  eally a GROUP BY
17290 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
172a0 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20 20  E_DISTINCTBY    
172b0 20 20 20 30 78 30 32 30 30 20 2f 2a 20 70 4f 72     0x0200 /* pOr
172c0 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20  derby is really 
172d0 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73  a DISTINCT claus
172e0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
172f0 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54  RE_WANT_DISTINCT
17300 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20 41 6c      0x0400 /* Al
17310 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74  l output needs t
17320 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f  o be distinct */
17330 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53  .#define WHERE_S
17340 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20 20 20  ORTBYGROUP      
17350 30 78 30 38 30 30 20 2f 2a 20 53 75 70 70 6f 72  0x0800 /* Suppor
17360 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
17370 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66  Sorted() */.#def
17380 69 6e 65 20 57 48 45 52 45 5f 52 45 4f 50 45 4e  ine WHERE_REOPEN
17390 5f 49 44 58 20 20 20 20 20 20 20 30 78 31 30 30  _IDX       0x100
173a0 30 20 2f 2a 20 54 72 79 20 74 6f 20 75 73 65 20  0 /* Try to use 
173b0 4f 50 5f 52 65 6f 70 65 6e 49 64 78 20 2a 2f 0a  OP_ReopenIdx */.
173c0 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75  ./* Allowed retu
173d0 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73  rn values from s
173e0 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73  qlite3WhereIsDis
173f0 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69  tinct().*/.#defi
17400 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
17410 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f  T_NOOP      0  /
17420 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  * DISTINCT keywo
17430 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23  rd not used */.#
17440 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
17450 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20  TINCT_UNIQUE    
17460 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61  1  /* No duplica
17470 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  tes */.#define W
17480 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52  HERE_DISTINCT_OR
17490 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c  DERED   2  /* Al
174a0 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65  l duplicates are
174b0 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65   adjacent */.#de
174c0 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
174d0 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20  NCT_UNORDERED 3 
174e0 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61   /* Duplicates a
174f0 72 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a  re scattered */.
17500 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e  ./*.** A NameCon
17510 74 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63  text defines a c
17520 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20  ontext in which 
17530 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65  to resolve table
17540 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e   and column.** n
17550 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65  ames.  The conte
17560 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  xt consists of a
17570 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20   list of tables 
17580 28 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66  (the pSrcList) f
17590 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69  ield and.** a li
175a0 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72  st of named expr
175b0 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e  ession (pEList).
175c0 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72    The named expr
175d0 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a  ession list may.
175e0 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65  ** be NULL.  The
175f0 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64   pSrc correspond
17600 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c  s to the FROM cl
17610 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
17620 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61   or.** to the ta
17630 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74  ble being operat
17640 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c  ed on by INSERT,
17650 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45   UPDATE, or DELE
17660 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69  TE.  The.** pELi
17670 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  st corresponds t
17680 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  o the result set
17690 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64   of a SELECT and
176a0 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20   is NULL for.** 
176b0 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73  other statements
176c0 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74  ..**.** NameCont
176d0 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74  exts can be nest
176e0 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76  ed.  When resolv
176f0 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69  ing names, the i
17700 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f  nner-most .** co
17710 6e 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65  ntext is searche
17720 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20  d first.  If no 
17730 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
17740 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a  the next outer.*
17750 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65  * context is che
17760 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20  cked.  If there 
17770 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63  is still no matc
17780 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74  h, the next cont
17790 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65  ext.** is checke
177a0 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73  d.  This process
177b0 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c   continues until
177c0 20 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20   either a match 
177d0 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61  is found.** or a
177e0 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20  ll contexts are 
177f0 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d  check.  When a m
17800 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
17810 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f  he nRef member o
17820 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74  f.** the context
17830 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
17840 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65  match is increme
17850 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63  nted. .**.** Eac
17860 68 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20  h subquery gets 
17870 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78  a new NameContex
17880 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69  t.  The pNext fi
17890 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  eld points to th
178a0 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  e.** NameContext
178b0 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71   in the parent q
178c0 75 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20  uery.  Thus the 
178d0 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e  process of scann
178e0 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43  ing the.** NameC
178f0 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72  ontext list corr
17900 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63  esponds to searc
17910 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63  hing through suc
17920 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a  cessively outer.
17930 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f  ** subqueries lo
17940 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63  oking for a matc
17950 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d  h..*/.struct Nam
17960 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72  eContext {.  Par
17970 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
17980 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20    /* The parser 
17990 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53  */.  SrcList *pS
179a0 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65  rcList;   /* One
179b0 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20   or more tables 
179c0 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20  used to resolve 
179d0 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c  names */.  ExprL
179e0 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20  ist *pEList;    
179f0 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74  /* Optional list
17a00 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63   of result-set c
17a10 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49  olumns */.  AggI
17a20 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20  nfo *pAggInfo;  
17a30 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
17a40 61 62 6f 75 74 20 61 67 67 72 65 67 61 74 65 73  about aggregates
17a50 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a   at this level *
17a60 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  /.  NameContext 
17a70 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74  *pNext;  /* Next
17a80 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74   outer name cont
17a90 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f  ext.  NULL for o
17aa0 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e  utermost */.  in
17ab0 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  t nRef;         
17ac0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17ad0 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62  names resolved b
17ae0 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a  y this context *
17af0 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
17b00 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
17b10 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63  er of errors enc
17b20 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72  ountered while r
17b30 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a  esolving names *
17b40 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61 67 73 3b  /.  u16 ncFlags;
17b50 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f           /* Zero
17b60 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c   or more NC_* fl
17b70 61 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ags defined belo
17b80 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  w */.};../*.** A
17b90 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
17ba0 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78  r the NameContex
17bb0 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64  t, ncFlags field
17bc0 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 3a 20 20 4e  ..**.** Note:  N
17bd0 43 5f 4d 69 6e 4d 61 78 41 67 67 20 6d 75 73 74  C_MinMaxAgg must
17be0 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 76   have the same v
17bf0 61 6c 75 65 20 61 73 20 53 46 5f 4d 69 6e 4d 61  alue as SF_MinMa
17c00 78 41 67 67 20 61 6e 64 0a 2a 2a 20 53 51 4c 49  xAgg and.** SQLI
17c10 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 2e 0a  TE_FUNC_MINMAX..
17c20 2a 2a 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ** .*/.#define N
17c30 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 30  C_AllowAgg  0x00
17c40 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65  01  /* Aggregate
17c50 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61   functions are a
17c60 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23  llowed here */.#
17c70 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67 67  define NC_HasAgg
17c80 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 4f      0x0002  /* O
17c90 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65  ne or more aggre
17ca0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73  gate functions s
17cb0 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  een */.#define N
17cc0 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30 30  C_IsCheck   0x00
17cd0 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72  04  /* True if r
17ce0 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69  esolving names i
17cf0 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  n a CHECK constr
17d00 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
17d10 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30  NC_InAggFunc 0x0
17d20 30 30 38 20 20 2f 2a 20 54 72 75 65 20 69 66 20  008  /* True if 
17d30 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65  analyzing argume
17d40 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75  nts to an agg fu
17d50 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  nc */.#define NC
17d60 5f 50 61 72 74 49 64 78 20 20 20 30 78 30 30 31  _PartIdx   0x001
17d70 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65  0  /* True if re
17d80 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69 61  solving a partia
17d90 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a 2f  l index WHERE */
17da0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d  .#define NC_MinM
17db0 61 78 41 67 67 20 30 78 31 30 30 30 20 20 2f 2a  axAgg 0x1000  /*
17dc0 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67 61   min/max aggrega
17dd0 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20 6e  tes seen.  See n
17de0 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f 2a  ote above */../*
17df0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
17e00 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
17e10 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
17e20 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74  ins all informat
17e30 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f  ion.** needed to
17e40 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66   generate code f
17e50 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45  or a single SELE
17e60 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  CT statement..**
17e70 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65  .** nLimit is se
17e80 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65  t to -1 if there
17e90 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61   is no LIMIT cla
17ea0 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73  use.  nOffset is
17eb0 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66   set to 0..** If
17ec0 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49   there is a LIMI
17ed0 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61  T clause, the pa
17ee0 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74  rser sets nLimit
17ef0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
17f00 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e   the.** limit an
17f10 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65  d nOffset to the
17f20 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66   value of the of
17f30 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74 68  fset (or 0 if th
17f40 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66  ere is not.** of
17f50 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65  fset).  But late
17f60 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64  r on, nLimit and
17f70 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20   nOffset become 
17f80 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  the memory locat
17f90 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56  ions.** in the V
17fa0 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64 20  DBE that record 
17fb0 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66  the limit and of
17fc0 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a  fset counters..*
17fd0 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68  *.** addrOpenEph
17fe0 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74  m[] entries cont
17ff0 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20  ain the address 
18000 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  of OP_OpenEpheme
18010 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20  ral opcodes..** 
18020 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20  These addresses 
18030 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73  must be stored s
18040 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f  o that we can go
18050 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69   back and fill i
18060 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49  n.** the P4_KEYI
18070 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d  NFO and P2 param
18080 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65  eters later.  Ne
18090 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66  ither the KeyInf
180a0 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d  o nor.** the num
180b0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
180c0 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70  n P2 can be comp
180d0 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65  uted at the same
180e0 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20   time.** as the 
180f0 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74  OP_OpenEphm inst
18100 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64  ruction is coded
18110 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20   because not.** 
18120 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69  enough informati
18130 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d  on about the com
18140 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b  pound query is k
18150 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69  nown at that poi
18160 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e  nt..** The KeyIn
18170 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54  fo for addrOpenT
18180 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63  ran[0] and [1] c
18190 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e  ontains collatin
181a0 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66  g sequences.** f
181b0 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  or the result se
181c0 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  t.  The KeyInfo 
181d0 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  for addrOpenEphm
181e0 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [2] contains col
181f0 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e  lating.** sequen
18200 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45  ces for the ORDE
18210 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a  R BY clause..*/.
18220 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a  struct Select {.
18230 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69    ExprList *pELi
18240 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  st;      /* The 
18250 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65  fields of the re
18260 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b  sult */.  u8 op;
18270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18280 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55   /* One of: TK_U
18290 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49  NION TK_ALL TK_I
182a0 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45  NTERSECT TK_EXCE
182b0 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46  PT */.  u16 selF
182c0 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f  lags;          /
182d0 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76  * Various SF_* v
182e0 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69  alues */.  int i
182f0 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20  Limit, iOffset; 
18300 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
18310 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49  sters holding LI
18320 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75  MIT & OFFSET cou
18330 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20 53 45 4c  nters */.#if SEL
18340 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
18350 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e 61 6d 65  .  char zSelName
18360 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53 79 6d  [12];     /* Sym
18370 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20 74 68  bolic name of th
18380 69 73 20 53 45 4c 45 43 54 20 75 73 65 20 66 6f  is SELECT use fo
18390 72 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23  r debugging */.#
183a0 65 6e 64 69 66 0a 20 20 69 6e 74 20 61 64 64 72  endif.  int addr
183b0 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f  OpenEphm[2];   /
183c0 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f  * OP_OpenEphem o
183d0 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74  pcodes related t
183e0 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f  o this select */
183f0 0a 20 20 75 36 34 20 6e 53 65 6c 65 63 74 52 6f  .  u64 nSelectRo
18400 77 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74  w;        /* Est
18410 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66  imated number of
18420 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a   result rows */.
18430 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b    SrcList *pSrc;
18440 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
18450 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
18460 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20   Expr *pWhere;  
18470 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
18480 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20  HERE clause */. 
18490 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
184a0 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47  pBy;    /* The G
184b0 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a  ROUP BY clause *
184c0 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e  /.  Expr *pHavin
184d0 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  g;         /* Th
184e0 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  e HAVING clause 
184f0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
18500 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54  OrderBy;    /* T
18510 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
18520 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  se */.  Select *
18530 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f  pPrior;        /
18540 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69  * Prior select i
18550 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c  n a compound sel
18560 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  ect statement */
18570 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74  .  Select *pNext
18580 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  ;         /* Nex
18590 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20  t select to the 
185a0 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  left in a compou
185b0 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c  nd */.  Expr *pL
185c0 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f  imit;          /
185d0 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  * LIMIT expressi
185e0 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e  on. NULL means n
185f0 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78  ot used. */.  Ex
18600 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20  pr *pOffset;    
18610 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65       /* OFFSET e
18620 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20  xpression. NULL 
18630 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20  means not used. 
18640 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
18650 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  ;           /* W
18660 49 54 48 20 63 6c 61 75 73 65 20 61 74 74 61 63  ITH clause attac
18670 68 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  hed to this sele
18680 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a  ct. Or NULL. */.
18690 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
186a0 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c  d values for Sel
186b0 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54  ect.selFlags.  T
186c0 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20 73  he "SF" prefix s
186d0 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65  tands for.** "Se
186e0 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a 23  lect Flag"..*/.#
186f0 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e  define SF_Distin
18700 63 74 20 20 20 20 20 20 20 20 30 78 30 30 30 31  ct        0x0001
18710 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75    /* Output shou
18720 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a  ld be DISTINCT *
18730 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73  /.#define SF_Res
18740 6f 6c 76 65 64 20 20 20 20 20 20 20 20 30 78 30  olved        0x0
18750 30 30 32 20 20 2f 2a 20 49 64 65 6e 74 69 66 69  002  /* Identifi
18760 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  ers have been re
18770 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e  solved */.#defin
18780 65 20 53 46 5f 41 67 67 72 65 67 61 74 65 20 20  e SF_Aggregate  
18790 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
187a0 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61  Contains aggrega
187b0 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
187c0 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73 45  #define SF_UsesE
187d0 70 68 65 6d 65 72 61 6c 20 20 20 30 78 30 30 30  phemeral   0x000
187e0 38 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20 4f  8  /* Uses the O
187f0 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63  penEphemeral opc
18800 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ode */.#define S
18810 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20 20  F_Expanded      
18820 20 20 30 78 30 30 31 30 20 20 2f 2a 20 73 71 6c    0x0010  /* sql
18830 69 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e 64  ite3SelectExpand
18840 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69  () called on thi
18850 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
18860 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20 20  HasTypeInfo     
18870 30 78 30 30 32 30 20 20 2f 2a 20 46 52 4f 4d 20  0x0020  /* FROM 
18880 73 75 62 71 75 65 72 69 65 73 20 68 61 76 65 20  subqueries have 
18890 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20 2a  Table metadata *
188a0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d  /.#define SF_Com
188b0 70 6f 75 6e 64 20 20 20 20 20 20 20 20 30 78 30  pound        0x0
188c0 30 34 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  040  /* Part of 
188d0 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79  a compound query
188e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56   */.#define SF_V
188f0 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 20 30  alues          0
18900 78 30 30 38 30 20 20 2f 2a 20 53 79 6e 74 68 65  x0080  /* Synthe
18910 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45  sized from VALUE
18920 53 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  S clause */.    
18930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18940 2f 2a 20 20 20 20 20 30 78 30 31 30 30 20 20 4e  /*     0x0100  N
18950 4f 54 20 55 53 45 44 20 2a 2f 0a 23 64 65 66 69  OT USED */.#defi
18960 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d  ne SF_NestedFrom
18970 20 20 20 20 20 20 30 78 30 32 30 30 20 20 2f 2a        0x0200  /*
18980 20 50 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e   Part of a paren
18990 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c  thesized FROM cl
189a0 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
189b0 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20  SF_MaybeConvert 
189c0 20 20 20 30 78 30 34 30 30 20 20 2f 2a 20 4e 65     0x0400  /* Ne
189d0 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ed convertCompou
189e0 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
189f0 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ry() */.#define 
18a00 53 46 5f 52 65 63 75 72 73 69 76 65 20 20 20 20  SF_Recursive    
18a10 20 20 20 30 78 30 38 30 30 20 20 2f 2a 20 54 68     0x0800  /* Th
18a20 65 20 72 65 63 75 72 73 69 76 65 20 70 61 72 74  e recursive part
18a30 20 6f 66 20 61 20 72 65 63 75 72 73 69 76 65 20   of a recursive 
18a40 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTE */.#define S
18a50 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20  F_MinMaxAgg     
18a60 20 20 30 78 31 30 30 30 20 20 2f 2a 20 41 67 67    0x1000  /* Agg
18a70 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e  regate containin
18a80 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28 29  g min() or max()
18a90 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   */.../*.** The 
18aa0 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c  results of a SEL
18ab0 45 43 54 20 63 61 6e 20 62 65 20 64 69 73 74 72  ECT can be distr
18ac0 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72 61  ibuted in severa
18ad0 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e  l ways, as defin
18ae0 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20  ed.** by one of 
18af0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  the following ma
18b00 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22  cros.  The "SRT"
18b10 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53   prefix means "S
18b20 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20  ELECT Result.** 
18b30 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  Type"..**.**    
18b40 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
18b50 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61   Store results a
18b60 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d  s a key in a tem
18b70 70 6f 72 61 72 79 20 69 6e 64 65 78 20 0a 2a 2a  porary index .**
18b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b90 20 20 20 20 20 69 64 65 6e 74 69 66 69 65 64 20       identified 
18ba0 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  by pDest->iSDPar
18bb0 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  m..**.**     SRT
18bc0 5f 45 78 63 65 70 74 20 20 20 20 20 20 52 65 6d  _Except      Rem
18bd0 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d  ove results from
18be0 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69   the temporary i
18bf0 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50  ndex pDest->iSDP
18c00 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  arm..**.**     S
18c10 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 53  RT_Exists      S
18c20 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f  tore a 1 in memo
18c30 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69  ry cell pDest->i
18c40 53 44 50 61 72 6d 20 69 66 20 74 68 65 20 72 65  SDParm if the re
18c50 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  sult.**         
18c60 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
18c70 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a  is not empty..**
18c80 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63  .**     SRT_Disc
18c90 61 72 64 20 20 20 20 20 54 68 72 6f 77 20 74 68  ard     Throw th
18ca0 65 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20  e results away. 
18cb0 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
18cc0 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20   SELECT.**      
18cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
18ce0 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
18cf0 20 74 72 69 67 67 65 72 73 20 77 68 6f 73 65 20   triggers whose 
18d00 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a  only purpose is.
18d10 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18d20 20 20 20 20 20 20 20 74 68 65 20 73 69 64 65 2d         the side-
18d30 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74  effects of funct
18d40 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  ions..**.** All 
18d50 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65  of the above are
18d60 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20   free to ignore 
18d70 74 68 65 69 72 20 4f 52 44 45 52 20 42 59 20 63  their ORDER BY c
18d80 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61  lause. Those tha
18d90 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74  t.** follow must
18da0 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52   honor the ORDER
18db0 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a   BY clause..**.*
18dc0 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74  *     SRT_Output
18dd0 20 20 20 20 20 20 47 65 6e 65 72 61 74 65 20 61        Generate a
18de0 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28   row of output (
18df0 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73  using the OP_Res
18e00 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20  ultRow.**       
18e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70                op
18e20 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20 72  code) for each r
18e30 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ow in the result
18e40 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20   set..**.**     
18e50 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20  SRT_Mem         
18e60 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68  Only valid if th
18e70 65 20 72 65 73 75 6c 74 20 69 73 20 61 20 73 69  e result is a si
18e80 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20  ngle column..** 
18e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ea0 20 20 20 20 53 74 6f 72 65 20 74 68 65 20 66 69      Store the fi
18eb0 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  rst column of th
18ec0 65 20 66 69 72 73 74 20 72 65 73 75 6c 74 20 72  e first result r
18ed0 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ow.**           
18ee0 20 20 20 20 20 20 20 20 20 20 69 6e 20 72 65 67            in reg
18ef0 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44  ister pDest->iSD
18f00 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f  Parm then abando
18f10 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20  n the rest.**   
18f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f30 20 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20    of the query. 
18f40 20 54 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f   This destinatio
18f50 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54  n implies "LIMIT
18f60 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53   1"..**.**     S
18f70 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 54  RT_Set         T
18f80 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62  he result must b
18f90 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  e a single colum
18fa0 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a  n.  Store each.*
18fb0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
18fc0 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73        row of res
18fd0 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20 69  ult as the key i
18fe0 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  n table pDest->i
18ff0 53 44 50 61 72 6d 2e 20 0a 2a 2a 20 20 20 20 20  SDParm. .**     
19000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19010 41 70 70 6c 79 20 74 68 65 20 61 66 66 69 6e 69  Apply the affini
19020 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53 64 73  ty pDest->affSds
19030 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69 6e 67  t before storing
19040 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19050 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e          results.
19060 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d    Used to implem
19070 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43 54 20  ent "IN (SELECT 
19080 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  ...)"..**.**    
19090 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20   SRT_EphemTab   
190a0 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d 70 6f   Create an tempo
190b0 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
190c0 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20 73 74  ->iSDParm and st
190d0 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ore.**          
190e0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 72             the r
190f0 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54 68 65  esult there. The
19100 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20   cursor is left 
19110 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20  open after.**   
19120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19130 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20 54 68    returning.  Th
19140 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 54  is is like SRT_T
19150 61 62 6c 65 20 65 78 63 65 70 74 20 74 68 61 74  able except that
19160 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19170 20 20 20 20 20 20 20 20 74 68 69 73 20 64 65 73          this des
19180 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f 50  tination uses OP
19190 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 74  _OpenEphemeral t
191a0 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20 20 20  o create.**     
191b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191c0 74 68 65 20 74 61 62 6c 65 20 66 69 72 73 74 2e  the table first.
191d0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43  .**.**     SRT_C
191e0 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e 65 72  oroutine   Gener
191f0 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65  ate a co-routine
19200 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 61 20   that returns a 
19210 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20  new row of.**   
19220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19230 20 20 72 65 73 75 6c 74 73 20 65 61 63 68 20 74    results each t
19240 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f 6b 65  ime it is invoke
19250 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20 70 6f  d.  The entry po
19260 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  int.**          
19270 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68             of th
19280 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20  e co-routine is 
19290 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
192a0 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  er pDest->iSDPar
192b0 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  m.**            
192c0 20 20 20 20 20 20 20 20 20 61 6e 64 20 74 68 65           and the
192d0 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 73   result row is s
192e0 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74 2d 3e  tored in pDest->
192f0 6e 44 65 73 74 20 72 65 67 69 73 74 65 72 73 0a  nDest registers.
19300 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19310 20 20 20 20 20 20 20 73 74 61 72 74 69 6e 67 20         starting 
19320 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53 64 73  with pDest->iSds
19330 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
19340 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53 74 6f  _Table       Sto
19350 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 74 65  re results in te
19360 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
19370 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
19380 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20 20 20       SRT_Fifo   
19390 20 20 20 20 20 54 68 69 73 20 69 73 20 6c 69 6b       This is lik
193a0 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 65  e SRT_EphemTab e
193b0 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 74  xcept that the t
193c0 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  able.**         
193d0 20 20 20 20 20 20 20 20 20 20 20 20 69 73 20 61              is a
193e0 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65 61 64  ssumed to alread
193f0 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f  y be open.  SRT_
19400 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20  Fifo has.**     
19410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19420 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 70  the additional p
19430 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69 6e 67  roperty of being
19440 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a   able to ignore.
19450 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19460 20 20 20 20 20 20 20 74 68 65 20 4f 52 44 45 52         the ORDER
19470 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a   BY clause..**.*
19480 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 46 69  *     SRT_DistFi
19490 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65 73 75  fo    Store resu
194a0 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f 72 61  lts in a tempora
194b0 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
194c0 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20  iSDParm..**     
194d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194e0 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74 65 6d  But also use tem
194f0 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
19500 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61 73  st->iSDParm+1 as
19510 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19520 20 20 20 20 20 20 20 20 61 20 72 65 63 6f 72 64          a record
19530 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20 72 65   of all prior re
19540 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72 65  sults and ignore
19550 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65 0a 2a   any duplicate.*
19560 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19570 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d        rows.  Nam
19580 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73 74 69  e means:  "Disti
19590 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a  nct Fifo"..**.**
195a0 20 20 20 20 20 53 52 54 5f 51 75 65 75 65 20 20       SRT_Queue  
195b0 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
195c0 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71  ts in priority q
195d0 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50  ueue pDest->iSDP
195e0 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20  arm (really.**  
195f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19600 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20 20 41     an index).  A
19610 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e 63 65  ppend a sequence
19620 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61 74 20   number so that 
19630 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20  all entries.**  
19640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19650 20 20 20 61 72 65 20 64 69 73 74 69 6e 63 74 2e     are distinct.
19660 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44  .**.**     SRT_D
19670 69 73 74 51 75 65 75 65 20 20 20 53 74 6f 72 65  istQueue   Store
19680 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f   results in prio
19690 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74  rity queue pDest
196a0 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69  ->iSDParm only i
196b0 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  f.**            
196c0 20 20 20 20 20 20 20 20 20 74 68 65 20 73 61 6d           the sam
196d0 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e 65 76  e record has nev
196e0 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64 20 62  er been stored b
196f0 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20  efore.  The.**  
19700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19710 20 20 20 69 6e 64 65 78 20 61 74 20 70 44 65 73     index at pDes
19720 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c  t->iSDParm+1 hol
19730 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72  d all prior stor
19740 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  es..*/.#define S
19750 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20  RT_Union        
19760 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  1  /* Store resu
19770 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  lt as keys in an
19780 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
19790 65 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20  e SRT_Except    
197a0 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20     2  /* Remove 
197b0 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e  result from a UN
197c0 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  ION index */.#de
197d0 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20  fine SRT_Exists 
197e0 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72        3  /* Stor
197f0 65 20 31 20 69 66 20 74 68 65 20 72 65 73 75 6c  e 1 if the resul
19800 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a  t is not empty *
19810 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
19820 73 63 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a  scard      4  /*
19830 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65   Do not save the
19840 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72   results anywher
19850 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
19860 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20 35 20  _Fifo         5 
19870 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
19880 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e   as data with an
19890 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64   automatic rowid
198a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
198b0 44 69 73 74 46 69 66 6f 20 20 20 20 20 36 20 20  DistFifo     6  
198c0 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f  /* Like SRT_Fifo
198d0 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73  , but unique res
198e0 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ults only */.#de
198f0 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65 20 20  fine SRT_Queue  
19900 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72        7  /* Stor
19910 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 71  e result in an q
19920 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ueue */.#define 
19930 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20  SRT_DistQueue   
19940 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f   8  /* Like SRT_
19950 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69 71 75  Queue, but uniqu
19960 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a  e results only *
19970 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20  /../* The ORDER 
19980 42 59 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e  BY clause is ign
19990 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20  ored for all of 
199a0 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65  the above */.#de
199b0 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72  fine IgnorableOr
199c0 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65 44  derby(X) ((X->eD
199d0 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74 51 75  est)<=SRT_DistQu
199e0 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20 53 52  eue)..#define SR
199f0 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20 39  T_Output       9
19a00 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68    /* Output each
19a10 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a   row of result *
19a20 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65  /.#define SRT_Me
19a30 6d 20 20 20 20 20 20 20 20 20 31 30 20 20 2f 2a  m         10  /*
19a40 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
19a50 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a   a memory cell *
19a60 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65  /.#define SRT_Se
19a70 74 20 20 20 20 20 20 20 20 20 31 31 20 20 2f 2a  t         11  /*
19a80 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61   Store results a
19a90 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  s keys in an ind
19aa0 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
19ab0 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 31 32  T_EphemTab    12
19ac0 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e    /* Create tran
19ad0 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74  sient tab and st
19ae0 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62  ore like SRT_Tab
19af0 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  le */.#define SR
19b00 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 33  T_Coroutine   13
19b10 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20    /* Generate a 
19b20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65  single row of re
19b30 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sult */.#define 
19b40 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20  SRT_Table       
19b50 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  14  /* Store res
19b60 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68  ult as data with
19b70 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f   an automatic ro
19b80 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  wid */../*.** An
19b90 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
19ba0 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62  s object describ
19bb0 65 73 20 77 68 65 72 65 20 74 6f 20 70 75 74 20  es where to put 
19bc0 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  of the results o
19bd0 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74  f.** a SELECT st
19be0 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  atement..*/.stru
19bf0 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a  ct SelectDest {.
19c00 20 20 75 38 20 65 44 65 73 74 3b 20 20 20 20 20    u8 eDest;     
19c10 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f         /* How to
19c20 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20   dispose of the 
19c30 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20  results.  On of 
19c40 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a  SRT_* above. */.
19c50 20 20 63 68 61 72 20 61 66 66 53 64 73 74 3b 20    char affSdst; 
19c60 20 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69         /* Affini
19c70 74 79 20 75 73 65 64 20 77 68 65 6e 20 65 44 65  ty used when eDe
19c80 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20  st==SRT_Set */. 
19c90 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20   int iSDParm;   
19ca0 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d        /* A param
19cb0 65 74 65 72 20 75 73 65 64 20 62 79 20 74 68 65  eter used by the
19cc0 20 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20   eDest disposal 
19cd0 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20  method */.  int 
19ce0 69 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20  iSdst;          
19cf0 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65   /* Base registe
19d00 72 20 77 68 65 72 65 20 72 65 73 75 6c 74 73 20  r where results 
19d10 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20  are written */. 
19d20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20   int nSdst;     
19d30 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
19d40 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c  of registers all
19d50 6f 63 61 74 65 64 20 2a 2f 0a 20 20 45 78 70 72  ocated */.  Expr
19d60 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20  List *pOrderBy; 
19d70 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20   /* Key columns 
19d80 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20 61 6e  for SRT_Queue an
19d90 64 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20  d SRT_DistQueue 
19da0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72  */.};../*.** Dur
19db0 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74  ing code generat
19dc0 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74  ion of statement
19dd0 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74  s that do insert
19de0 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45  s into AUTOINCRE
19df0 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c 65 73 2c  MENT .** tables,
19e00 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
19e10 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61 74  nformation is at
19e20 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 54 61  tached to the Ta
19e30 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a  ble.u.autoInc.p.
19e40 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65 61  ** pointer of ea
19e50 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  ch autoincrement
19e60 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72 64   table to record
19e70 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f 72   some side infor
19e80 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74  mation that.** t
19e90 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
19ea0 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61 76  r needs.  We hav
19eb0 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74 61  e to keep per-ta
19ec0 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e  ble autoincremen
19ed0 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  t.** information
19ee0 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74 73   in case inserts
19ef0 20 61 72 65 20 64 6f 77 6e 20 77 69 74 68 69 6e   are down within
19f00 20 74 72 69 67 67 65 72 73 2e 20 20 54 72 69 67   triggers.  Trig
19f10 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e  gers do not.** n
19f20 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61  ormally coordina
19f30 74 65 20 74 68 65 69 72 20 61 63 74 69 76 69 74  te their activit
19f40 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20 6e  ies, but we do n
19f50 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74  eed to coordinat
19f60 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67  e the.** loading
19f70 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20 61   and saving of a
19f80 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66  utoincrement inf
19f90 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  ormation..*/.str
19fa0 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20  uct AutoincInfo 
19fb0 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20  {.  AutoincInfo 
19fc0 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78  *pNext;   /* Nex
19fd0 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20  t info block in 
19fe0 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20 61  a list of them a
19ff0 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ll */.  Table *p
1a000 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Tab;          /*
1a010 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66 6f   Table this info
1a020 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74 6f   block refers to
1a030 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20   */.  int iDb;  
1a040 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1a050 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33 2e  ndex in sqlite3.
1a060 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61 73  aDb[] of databas
1a070 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a  e holding pTab *
1a080 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b 20  /.  int regCtr; 
1a090 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
1a0a0 6f 72 79 20 72 65 67 69 73 74 65 72 20 68 6f 6c  ory register hol
1a0b0 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20 63  ding the rowid c
1a0c0 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ounter */.};../*
1a0d0 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20  .** Size of the 
1a0e0 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a  column cache.*/.
1a0f0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e  #ifndef SQLITE_N
1a100 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65 66 69  _COLCACHE.# defi
1a110 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  ne SQLITE_N_COLC
1a120 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a  ACHE 10.#endif..
1a130 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f  /*.** At least o
1a140 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ne instance of t
1a150 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1a160 75 63 74 75 72 65 20 69 73 20 63 72 65 61 74 65  ucture is create
1a170 64 20 66 6f 72 20 65 61 63 68 20 0a 2a 2a 20 74  d for each .** t
1a180 72 69 67 67 65 72 20 74 68 61 74 20 6d 61 79 20  rigger that may 
1a190 62 65 20 66 69 72 65 64 20 77 68 69 6c 65 20 70  be fired while p
1a1a0 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52 54  arsing an INSERT
1a1b0 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45  , UPDATE or DELE
1a1c0 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e  TE.** statement.
1a1d0 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63 74   All such object
1a1e0 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
1a1f0 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  the linked list 
1a200 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61 72  headed at.** Par
1a210 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 61  se.pTriggerPrg a
1a220 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65 20  nd deleted once 
1a230 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c  statement compil
1a240 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a  ation has been.*
1a250 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a  * completed..**.
1a260 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70 72  ** A Vdbe sub-pr
1a270 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c 65  ogram that imple
1a280 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20 61  ments the body a
1a290 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  nd WHEN clause o
1a2a0 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72 69  f trigger.** Tri
1a2b0 67 67 65 72 50 72 67 2e 70 54 72 69 67 67 65 72  ggerPrg.pTrigger
1a2c0 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65 66  , assuming a def
1a2d0 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
1a2e0 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72   clause of.** Tr
1a2f0 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c  iggerPrg.orconf,
1a300 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
1a310 65 20 54 72 69 67 67 65 72 50 72 67 2e 70 50 72  e TriggerPrg.pPr
1a320 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a  ogram variable..
1a330 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54 72  ** The Parse.pTr
1a340 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e 65  iggerPrg list ne
1a350 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f  ver contains two
1a360 20 65 6e 74 72 69 65 73 20 77 69 74 68 20 74 68   entries with th
1a370 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73  e same.** values
1a380 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67 67   for both pTrigg
1a390 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a  er and orconf..*
1a3a0 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65 72  *.** The Trigger
1a3b0 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20  Prg.aColmask[0] 
1a3c0 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
1a3d0 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64  to a mask of old
1a3e0 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63  .* columns.** ac
1a3f0 63 65 73 73 65 64 20 28 6f 72 20 73 65 74 20 74  cessed (or set t
1a400 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65 72 73  o 0 for triggers
1a410 20 66 69 72 65 64 20 61 73 20 61 20 72 65 73 75   fired as a resu
1a420 6c 74 20 6f 66 20 49 4e 53 45 52 54 20 0a 2a 2a  lt of INSERT .**
1a430 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69   statements). Si
1a440 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69  milarly, the Tri
1a450 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b  ggerPrg.aColmask
1a460 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20  [1] variable is 
1a470 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b  set to.** a mask
1a480 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e   of new.* column
1a490 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72  s used by the pr
1a4a0 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74  ogram..*/.struct
1a4b0 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20   TriggerPrg {.  
1a4c0 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65  Trigger *pTrigge
1a4d0 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67  r;      /* Trigg
1a4e0 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20  er this program 
1a4f0 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a  was coded from *
1a500 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a  /.  TriggerPrg *
1a510 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e  pNext;      /* N
1a520 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72  ext entry in Par
1a530 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c  se.pTriggerPrg l
1a540 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67  ist */.  SubProg
1a550 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20  ram *pProgram;  
1a560 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c   /* Program impl
1a570 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67 65  ementing pTrigge
1a580 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e  r/orconf */.  in
1a590 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  t orconf;       
1a5a0 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
1a5b0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c   ON CONFLICT pol
1a5c0 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f  icy */.  u32 aCo
1a5d0 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20  lmask[2];       
1a5e0 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64   /* Masks of old
1a5f0 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e  .*, new.* column
1a600 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b  s accessed */.};
1a610 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d  ../*.** The yDbM
1a620 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f 72  ask datatype for
1a630 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66 20   the bitmask of 
1a640 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
1a650 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53  abases..*/.#if S
1a660 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
1a670 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66 20  ED>30.  typedef 
1a680 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79 44  unsigned char yD
1a690 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41  bMask[(SQLITE_MA
1a6a0 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38 5d  X_ATTACHED+9)/8]
1a6b0 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ;.# define DbMas
1a6c0 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28  kTest(M,I)    ((
1a6d0 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28  (M)[(I)/8]&(1<<(
1a6e0 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20 64  (I)&7)))!=0).# d
1a6f0 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f  efine DbMaskZero
1a700 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74 28  (M)      memset(
1a710 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29  (M),0,sizeof(M))
1a720 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1a730 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29  Set(M,I)     (M)
1a740 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49  [(I)/8]|=(1<<((I
1a750 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20 44  )&7)).# define D
1a760 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20  bMaskAllZero(M) 
1a770 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41    sqlite3DbMaskA
1a780 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66 69  llZero(M).# defi
1a790 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f  ne DbMaskNonZero
1a7a0 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44 62  (M)   (sqlite3Db
1a7b0 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d  MaskAllZero(M)==
1a7c0 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  0).#else.  typed
1a7d0 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  ef unsigned int 
1a7e0 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e  yDbMask;.# defin
1a7f0 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49  e DbMaskTest(M,I
1a800 29 20 20 20 20 28 28 28 4d 29 26 28 28 28 79 44  )    (((M)&(((yD
1a810 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29 21  bMask)1)<<(I)))!
1a820 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  =0).# define DbM
1a830 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20  askZero(M)      
1a840 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20 44  (M)=0.# define D
1a850 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20  bMaskSet(M,I)   
1a860 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73    (M)|=(((yDbMas
1a870 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65 66  k)1)<<(I)).# def
1a880 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ine DbMaskAllZer
1a890 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20  o(M)   (M)==0.# 
1a8a0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e  define DbMaskNon
1a8b0 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30  Zero(M)   (M)!=0
1a8c0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1a8d0 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e  n SQL parser con
1a8e0 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66  text.  A copy of
1a8f0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
1a900 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75 67  is passed throug
1a910 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20  h.** the parser 
1a920 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c  and down into al
1a930 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63 74  l the parser act
1a940 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f  ion routine in o
1a950 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79  rder to.** carry
1a960 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74   around informat
1a970 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62  ion that is glob
1a980 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65  al to the entire
1a990 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   parse..**.** Th
1a9a0 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20 64  e structure is d
1a9b0 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20  ivided into two 
1a9c0 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65  parts.  When the
1a9d0 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65   parser and code
1a9e0 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c  .** generate cal
1a9f0 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63  l themselves rec
1aa00 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69  ursively, the fi
1aa10 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65 20  rst part of the 
1aa20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20  structure.** is 
1aa30 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65  constant but the
1aa40 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20   second part is 
1aa50 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65 67  reset at the beg
1aa60 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f  inning and end o
1aa70 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73  f.** each recurs
1aa80 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e  ion..**.** The n
1aa90 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54  TableLock and aT
1aaa0 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c  ableLock variabl
1aab0 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64  es are only used
1aac0 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d 63   if the shared-c
1aad0 61 63 68 65 20 0a 2a 2a 20 66 65 61 74 75 72 65  ache .** feature
1aae0 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20   is enabled (if 
1aaf0 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73  sqlite3Tsd()->us
1ab00 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20 74  eSharedData is t
1ab10 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a  rue). They are.*
1ab20 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  * used to store 
1ab30 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65  the set of table
1ab40 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20  -locks required 
1ab50 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  by the statement
1ab60 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c   being.** compil
1ab70 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c  ed. Function sql
1ab80 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20  ite3TableLock() 
1ab90 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 65  is used to add e
1aba0 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a  ntries to the.**
1abb0 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74   list..*/.struct
1abc0 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74   Parse {.  sqlit
1abd0 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
1abe0 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61  /* The main data
1abf0 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  base structure *
1ac00 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  /.  char *zErrMs
1ac10 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65  g;       /* An e
1ac20 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
1ac30 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20    Vdbe *pVdbe;  
1ac40 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67         /* An eng
1ac50 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e  ine for executin
1ac60 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65 63  g database bytec
1ac70 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  ode */.  int rc;
1ac80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ac90 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
1aca0 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20  m execution */. 
1acb0 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b   u8 colNamesSet;
1acc0 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66        /* TRUE af
1acd0 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d  ter OP_ColumnNam
1ace0 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65  e has been issue
1acf0 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20  d to pVdbe */.  
1ad00 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20  u8 checkSchema; 
1ad10 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73       /* Causes s
1ad20 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65  chema cookie che
1ad30 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
1ad40 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64  r */.  u8 nested
1ad50 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
1ad60 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
1ad70 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72  calls to the par
1ad80 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74  ser/code generat
1ad90 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70  or */.  u8 nTemp
1ada0 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Reg;         /* 
1adb0 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72  Number of tempor
1adc0 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69 6e  ary registers in
1add0 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20   aTempReg[] */. 
1ade0 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65   u8 isMultiWrite
1adf0 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
1ae00 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d   statement may m
1ae10 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c  odify/insert mul
1ae20 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20  tiple rows */.  
1ae30 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20  u8 mayAbort;    
1ae40 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1ae50 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68  statement may th
1ae60 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63  row an ABORT exc
1ae70 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68  eption */.  u8 h
1ae80 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20  asCompound;     
1ae90 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f   /* Need to invo
1aea0 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ke convertCompou
1aeb0 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
1aec0 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43  ry() */.  u8 okC
1aed0 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f  onstFactor;    /
1aee0 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f  * OK to factor o
1aef0 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a  ut constants */.
1af00 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38    int aTempReg[8
1af10 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e  ];     /* Holdin
1af20 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f  g area for tempo
1af30 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 2a  rary registers *
1af40 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65  /.  int nRangeRe
1af50 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65  g;       /* Size
1af60 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72   of the temporar
1af70 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
1af80 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65   */.  int iRange
1af90 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69  Reg;       /* Fi
1afa0 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e 20  rst register in 
1afb0 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
1afc0 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
1afd0 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20  t nErr;         
1afe0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1aff0 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20  errors seen */. 
1b000 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20   int nTab;      
1b010 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b020 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c  of previously al
1b030 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75 72  located VDBE cur
1b040 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  sors */.  int nM
1b050 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  em;            /
1b060 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  * Number of memo
1b070 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f  ry cells used so
1b080 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53   far */.  int nS
1b090 65 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  et;            /
1b0a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65 74 73  * Number of sets
1b0b0 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
1b0c0 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20 20 20    int nOnce;    
1b0d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b0e0 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e 73 74   of OP_Once inst
1b0f0 72 75 63 74 69 6f 6e 73 20 73 6f 20 66 61 72 20  ructions so far 
1b100 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f  */.  int nOpAllo
1b110 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  c;        /* Num
1b120 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c  ber of slots all
1b130 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e  ocated for Vdbe.
1b140 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69  aOp[] */.  int i
1b150 46 69 78 65 64 4f 70 3b 20 20 20 20 20 20 20 20  FixedOp;        
1b160 2f 2a 20 4e 65 76 65 72 20 62 61 63 6b 20 6f 75  /* Never back ou
1b170 74 20 6f 70 63 6f 64 65 73 20 69 46 69 78 65 64  t opcodes iFixed
1b180 4f 70 2d 31 20 6f 72 20 65 61 72 6c 69 65 72 20  Op-1 or earlier 
1b190 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73 65 3b  */.  int ckBase;
1b1a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73            /* Bas
1b1b0 65 20 72 65 67 69 73 74 65 72 20 6f 66 20 64 61  e register of da
1b1c0 74 61 20 64 75 72 69 6e 67 20 63 68 65 63 6b 20  ta during check 
1b1d0 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20  constraints */. 
1b1e0 20 69 6e 74 20 69 50 61 72 74 49 64 78 54 61 62   int iPartIdxTab
1b1f0 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63  ;     /* Table c
1b200 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
1b210 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20  a partial index 
1b220 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 4c  */.  int iCacheL
1b230 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  evel;     /* Col
1b240 43 61 63 68 65 20 76 61 6c 69 64 20 77 68 65 6e  Cache valid when
1b250 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65   aColCache[].iLe
1b260 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c  vel<=iCacheLevel
1b270 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65   */.  int iCache
1b280 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f  Cnt;       /* Co
1b290 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67 65  unter used to ge
1b2a0 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68 65  nerate aColCache
1b2b0 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f  [].lru values */
1b2c0 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20  .  int nLabel;  
1b2d0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1b2e0 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64  r of labels used
1b2f0 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65   */.  int *aLabe
1b300 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70  l;         /* Sp
1b310 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ace to hold the 
1b320 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74 72 75  labels */.  stru
1b330 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20  ct yColCache {. 
1b340 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20     int iTable;  
1b350 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
1b360 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  e cursor number 
1b370 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c 75  */.    i16 iColu
1b380 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  mn;          /* 
1b390 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d  Table column num
1b3a0 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74 65  ber */.    u8 te
1b3b0 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 20  mpReg;          
1b3c0 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74 65   /* iReg is a te
1b3d0 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61 74  mp register that
1b3e0 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72 65   needs to be fre
1b3f0 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c  ed */.    int iL
1b400 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
1b410 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c  /* Nesting level
1b420 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67   */.    int iReg
1b430 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1b440 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65 20   Reg with value 
1b450 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20  of this column. 
1b460 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f  0 means none. */
1b470 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20 20  .    int lru;   
1b480 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65             /* Le
1b490 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73 65  ast recently use
1b4a0 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65 20  d entry has the 
1b4b0 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a  smallest value *
1b4c0 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b  /.  } aColCache[
1b4d0 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
1b4e0 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20  E];  /* One for 
1b4f0 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68  each column cach
1b500 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45 78 70  e entry */.  Exp
1b510 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78 70  rList *pConstExp
1b520 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78  r;/* Constant ex
1b530 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54  pressions */.  T
1b540 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e  oken constraintN
1b550 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74  ame;/* Name of t
1b560 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75  he constraint cu
1b570 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61  rrently being pa
1b580 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73  rsed */.  yDbMas
1b590 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f  k writeMask;   /
1b5a0 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65 20  * Start a write 
1b5b0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74  transaction on t
1b5c0 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20 2a  hese databases *
1b5d0 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b  /.  yDbMask cook
1b5e0 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d  ieMask;  /* Bitm
1b5f0 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65  ask of schema ve
1b600 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65 73  rified databases
1b610 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65   */.  int cookie
1b620 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58  Value[SQLITE_MAX
1b630 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f  _ATTACHED+2];  /
1b640 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b  * Values of cook
1b650 69 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f  ies to verify */
1b660 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b  .  int regRowid;
1b670 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
1b680 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69  ter holding rowi
1b690 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c  d of CREATE TABL
1b6a0 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74  E entry */.  int
1b6b0 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20   regRoot;       
1b6c0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
1b6d0 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20  lding root page 
1b6e0 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f  number for new o
1b6f0 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20  bjects */.  int 
1b700 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20  nMaxArg;        
1b710 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73   /* Max args pas
1b720 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63  sed to user func
1b730 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67  tion by sub-prog
1b740 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43  ram */.#if SELEC
1b750 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20  TTRACE_ENABLED. 
1b760 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20   int nSelect;   
1b770 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b780 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  of SELECT statem
1b790 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69  ents seen */.  i
1b7a0 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e 74  nt nSelectIndent
1b7b0 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61 72 20 74  ;   /* How far t
1b7c0 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45 43 54 54  o indent SELECTT
1b7d0 52 41 43 45 28 29 20 6f 75 74 70 75 74 20 2a 2f  RACE() output */
1b7e0 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
1b7f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
1b800 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e  ED_CACHE.  int n
1b810 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20  TableLock;      
1b820 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
1b830 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f  ocks in aTableLo
1b840 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63  ck */.  TableLoc
1b850 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f  k *aTableLock; /
1b860 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65  * Required table
1b870 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65   locks for share
1b880 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
1b890 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63  #endif.  Autoinc
1b8a0 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a  Info *pAinc;  /*
1b8b0 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
1b8c0 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  ut AUTOINCREMENT
1b8d0 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20   counters */..  
1b8e0 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  /* Information u
1b8f0 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69 6e 67  sed while coding
1b900 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
1b910 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  s. */.  Parse *p
1b920 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20  Toplevel;    /* 
1b930 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20  Parse structure 
1b940 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d  for main program
1b950 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20   (or NULL) */.  
1b960 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54  Table *pTriggerT
1b970 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72  ab;  /* Table tr
1b980 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e 67  iggers are being
1b990 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20   coded for */.  
1b9a0 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20 20  int addrCrTab;  
1b9b0 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20       /* Address 
1b9c0 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  of OP_CreateTabl
1b9d0 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41  e opcode on CREA
1b9e0 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 69 6e  TE TABLE */.  in
1b9f0 74 20 61 64 64 72 53 6b 69 70 50 4b 3b 20 20 20  t addrSkipPK;   
1ba00 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66     /* Address of
1ba10 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20   instruction to 
1ba20 73 6b 69 70 20 50 52 49 4d 41 52 59 20 4b 45 59  skip PRIMARY KEY
1ba30 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 33 32 20   index */.  u32 
1ba40 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20  nQueryLoop;     
1ba50 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f   /* Est number o
1ba60 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20  f iterations of 
1ba70 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32  a query (10*log2
1ba80 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c  (N)) */.  u32 ol
1ba90 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  dmask;         /
1baa0 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  * Mask of old.* 
1bab0 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
1bac0 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d  ed */.  u32 newm
1bad0 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
1bae0 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  Mask of new.* co
1baf0 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
1bb00 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65   */.  u8 eTrigge
1bb10 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b  rOp;       /* TK
1bb20 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
1bb30 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20  RT or TK_DELETE 
1bb40 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b  */.  u8 eOrconf;
1bb50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1bb60 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
1bb70 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67   policy for trig
1bb80 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75  ger steps */.  u
1bb90 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65 72  8 disableTrigger
1bba0 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64  s;  /* True to d
1bbb0 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  isable triggers 
1bbc0 2a 2f 0a 0a 20 20 2f 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 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bbf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bc00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
1bc10 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63 6f    ** Above is co
1bc20 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72  nstant between r
1bc30 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f  ecursions.  Belo
1bc40 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f 72  w is reset befor
1bc50 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a  e and after.  **
1bc60 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e   each recursion.
1bc70 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 62    The boundary b
1bc80 65 74 77 65 65 6e 20 74 68 65 73 65 20 74 77 6f  etween these two
1bc90 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74 65   regions is dete
1bca0 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e  rmined.  ** usin
1bcb0 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65  g offsetof(Parse
1bcc0 2c 6e 56 61 72 29 20 73 6f 20 74 68 65 20 6e 56  ,nVar) so the nV
1bcd0 61 72 20 66 69 65 6c 64 20 6d 75 73 74 20 62 65  ar field must be
1bce0 20 74 68 65 20 66 69 72 73 74 20 66 69 65 6c 64   the first field
1bcf0 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 72 65 63  .  ** in the rec
1bd00 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20  ursive region.. 
1bd10 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
1bd20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bd30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bd40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bd50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e  *********/..  in
1bd60 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20  t nVar;         
1bd70 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1bd80 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c  r of '?' variabl
1bd90 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53  es seen in the S
1bda0 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  QL so far */.  i
1bdb0 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20 20  nt nzVar;       
1bdc0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1bdd0 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  er of available 
1bde0 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d  slots in azVar[]
1bdf0 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72 74   */.  u8 iPkSort
1be00 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
1be10 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20 66  /* ASC or DESC f
1be20 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  or INTEGER PRIMA
1be30 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20 62  RY KEY */.  u8 b
1be40 46 72 65 65 57 69 74 68 3b 20 20 20 20 20 20 20  FreeWith;       
1be50 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1be60 20 70 57 69 74 68 20 73 68 6f 75 6c 64 20 62 65   pWith should be
1be70 20 66 72 65 65 64 20 77 69 74 68 20 70 61 72 73   freed with pars
1be80 65 72 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61  er */.  u8 expla
1be90 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  in;             
1bea0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
1beb0 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73   EXPLAIN flag is
1bec0 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75   found on the qu
1bed0 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ery */.#ifndef S
1bee0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
1bef0 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63  ALTABLE.  u8 dec
1bf00 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20 20  lareVtab;       
1bf10 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69      /* True if i
1bf20 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65  nside sqlite3_de
1bf30 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a  clare_vtab() */.
1bf40 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b    int nVtabLock;
1bf50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1bf60 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
1bf70 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20   tables to lock 
1bf80 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
1bf90 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20  nAlias;         
1bfa0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1bfb0 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c  of aliased resul
1bfc0 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f  t set columns */
1bfd0 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20  .  int nHeight; 
1bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1bff0 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20  Expression tree 
1c000 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e  height of curren
1c010 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a  t sub-select */.
1c020 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1c030 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e  MIT_EXPLAIN.  in
1c040 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20  t iSelectId;    
1c050 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66          /* ID of
1c060 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20   current select 
1c070 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
1c080 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78  ut */.  int iNex
1c090 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20  tSelectId;      
1c0a0 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61    /* Next availa
1c0b0 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f  ble select ID fo
1c0c0 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
1c0d0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68 61   */.#endif.  cha
1c0e0 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20 20  r **azVar;      
1c0f0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
1c100 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70  rs to names of p
1c110 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56  arameters */.  V
1c120 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b  dbe *pReprepare;
1c130 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62           /* VM b
1c140 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20  eing reprepared 
1c150 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72  (sqlite3Reprepar
1c160 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  e()) */.  const 
1c170 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20  char *zTail;    
1c180 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74      /* All SQL t
1c190 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73  ext past the las
1c1a0 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73  t semicolon pars
1c1b0 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ed */.  Table *p
1c1c0 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20  NewTable;       
1c1d0 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69    /* A table bei
1c1e0 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ng constructed b
1c1f0 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a  y CREATE TABLE *
1c200 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65  /.  Trigger *pNe
1c210 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a  wTrigger;     /*
1c220 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20 63   Trigger under c
1c230 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43 52  onstruct by a CR
1c240 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a  EATE TRIGGER */.
1c250 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
1c260 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54  uthContext; /* T
1c270 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65 72  he 6th parameter
1c280 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61   to db->xAuth ca
1c290 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b  llbacks */.  Tok
1c2a0 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20  en sNameToken;  
1c2b0 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
1c2c0 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64  with unqualified
1c2d0 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e   schema object n
1c2e0 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73  ame */.  Token s
1c2f0 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20  LastToken;      
1c300 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74     /* The last t
1c310 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 23  oken parsed */.#
1c320 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1c330 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
1c340 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20    Token sArg;   
1c350 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1c360 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20  omplete text of 
1c370 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e  a module argumen
1c380 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61  t */.  Table **a
1c390 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20  pVtabLock;      
1c3a0 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
1c3b0 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65  irtual tables ne
1c3c0 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f  eding locking */
1c3d0 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20  .#endif.  Table 
1c3e0 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20  *pZombieTab;    
1c3f0 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54      /* List of T
1c400 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20  able objects to 
1c410 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64  delete after cod
1c420 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67  e gen */.  Trigg
1c430 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72 50  erPrg *pTriggerP
1c440 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c  rg;  /* Linked l
1c450 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69  ist of coded tri
1c460 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20  ggers */.  With 
1c470 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  *pWith;         
1c480 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
1c490 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20  WITH clause, or 
1c4a0 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  NULL */.};../*.*
1c4b0 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
1c4c0 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64   currently insid
1c4d0 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63  e an sqlite3_dec
1c4e0 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c  lare_vtab() call
1c4f0 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
1c500 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1c510 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49  ABLE.  #define I
1c520 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30  N_DECLARE_VTAB 0
1c530 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
1c540 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
1c550 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72   (pParse->declar
1c560 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f  eVtab).#endif../
1c570 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1c580 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1c590 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  g structure can 
1c5a0 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61  be declared on a
1c5b0 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a   stack and used.
1c5c0 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20 50  ** to save the P
1c5d0 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
1c5e0 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20  t value so that 
1c5f0 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72  it can be restor
1c600 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72  ed later..*/.str
1c610 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20  uct AuthContext 
1c620 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
1c630 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20  zAuthContext;   
1c640 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61 72  /* Put saved Par
1c650 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
1c660 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20  here */.  Parse 
1c670 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
1c680 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72        /* The Par
1c690 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
1c6a0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65  };../*.** Bitfie
1c6b0 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20  ld flags for P5 
1c6c0 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73  value in various
1c6d0 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65   opcodes..*/.#de
1c6e0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41  fine OPFLAG_NCHA
1c6f0 4e 47 45 20 20 20 20 20 20 20 30 78 30 31 20 20  NGE       0x01  
1c700 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61    /* Set to upda
1c710 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a  te db->nChange *
1c720 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1c730 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20 20 30  _EPHEM         0
1c740 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x01    /* OP_Col
1c750 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c 20 6f  umn: Ephemeral o
1c760 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f 0a 23  utput is ok */.#
1c770 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41  define OPFLAG_LA
1c780 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 30 32  STROWID     0x02
1c790 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70      /* Set to up
1c7a0 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77  date db->lastRow
1c7b0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  id */.#define OP
1c7c0 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20 20  FLAG_ISUPDATE   
1c7d0 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 68     0x04    /* Th
1c7e0 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20  is OP_Insert is 
1c7f0 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f  an sql UPDATE */
1c800 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1c810 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30 78  APPEND        0x
1c820 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73  08    /* This is
1c830 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e   likely to be an
1c840 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69   append */.#defi
1c850 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  ne OPFLAG_USESEE
1c860 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20 20  KRESULT 0x10    
1c870 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64 20  /* Try to avoid 
1c880 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65 49  a seek in BtreeI
1c890 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66 69  nsert() */.#defi
1c8a0 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  ne OPFLAG_LENGTH
1c8b0 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20 20  ARG     0x40    
1c8c0 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
1c8d0 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74  y used for lengt
1c8e0 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  h() */.#define O
1c8f0 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20  PFLAG_TYPEOFARG 
1c900 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f      0x80    /* O
1c910 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73  P_Column only us
1c920 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20  ed for typeof() 
1c930 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1c940 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20  G_BULKCSR       
1c950 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x01    /* OP_Op
1c960 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65  en** used to ope
1c970 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f  n bulk cursor */
1c980 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1c990 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30 78  P2ISREG       0x
1c9a0 30 32 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f  02    /* P2 to O
1c9b0 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65  P_Open** is a re
1c9c0 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f  gister number */
1c9d0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1c9e0 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30 78  PERMUTE       0x
1c9f0 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70  01    /* OP_Comp
1ca00 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65 72  are: use the per
1ca10 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a  mutation */../*.
1ca20 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72 20   * Each trigger 
1ca30 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64  present in the d
1ca40 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
1ca50 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69  s stored as an i
1ca60 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74  nstance of. * st
1ca70 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 0a 20  ruct Trigger. . 
1ca80 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f  *. * Pointers to
1ca90 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   instances of st
1caa0 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72 65  ruct Trigger are
1cab0 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77   stored in two w
1cac0 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68  ays.. * 1. In th
1cad0 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61 73  e "trigHash" has
1cae0 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66  h table (part of
1caf0 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68   the sqlite3* th
1cb00 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  at represents th
1cb10 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73  e . *    databas
1cb20 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  e). This allows 
1cb30 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72  Trigger structur
1cb40 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76  es to be retriev
1cb50 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32  ed by name.. * 2
1cb60 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61  . All triggers a
1cb70 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
1cb80 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f   single table fo
1cb90 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  rm a linked list
1cba0 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20  , using the. *  
1cbb0 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f    pNext member o
1cbc0 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1cbd0 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  . A pointer to t
1cbe0 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
1cbf0 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69   of the. *    li
1cc00 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f  nked list is sto
1cc10 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69  red as the "pTri
1cc20 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20  gger" member of 
1cc30 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20  the associated. 
1cc40 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c  *    struct Tabl
1cc50 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74  e.. *. * The "st
1cc60 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
1cc70 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
1cc80 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61  rst element of a
1cc90 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20   linked list. * 
1cca0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
1ccb0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
1ccc0 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74  ecified as the t
1ccd0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
1cce0 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
1ccf0 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  er {.  char *zNa
1cd00 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
1cd10 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
1cd20 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20  e trigger       
1cd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd40 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c   */.  char *tabl
1cd50 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
1cd60 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   The table or vi
1cd70 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  ew to which the 
1cd80 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20  trigger applies 
1cd90 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
1cda0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1cdb0 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
1cdc0 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
1cdd0 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a  INSERT         *
1cde0 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20  /.  u8 tr_tm;   
1cdf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1ce00 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45  ne of TRIGGER_BE
1ce10 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46  FORE, TRIGGER_AF
1ce20 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  TER */.  Expr *p
1ce30 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  When;           
1ce40 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61   /* The WHEN cla
1ce50 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65  use of the expre
1ce60 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55  ssion (may be NU
1ce70 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  LL) */.  IdList 
1ce80 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20  *pColumns;      
1ce90 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   /* If this is a
1cea0 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c  n UPDATE OF <col
1ceb0 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65  umn-list> trigge
1cec0 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
1ced0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cee0 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74  the <column-list
1cef0 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65  > is stored here
1cf00 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
1cf10 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a  chema;        /*
1cf20 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
1cf30 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a  ng the trigger *
1cf40 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62  /.  Schema *pTab
1cf50 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
1cf60 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
1cf70 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
1cf80 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65  TriggerStep *ste
1cf90 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20  p_list; /* Link 
1cfa0 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20  list of trigger 
1cfb0 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20  program steps   
1cfc0 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54            */.  T
1cfd0 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20  rigger *pNext;  
1cfe0 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74         /* Next t
1cff0 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65  rigger associate
1d000 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65  d with the table
1d010 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
1d020 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65  trigger is eithe
1d030 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e  r a BEFORE or an
1d040 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20   AFTER trigger. 
1d050 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
1d060 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65  onstants.** dete
1d070 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a 2a  rmine which. .**
1d080 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65  .** If there are
1d090 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65   multiple trigge
1d0a0 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66  rs, you might of
1d0b0 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64   some BEFORE and
1d0c0 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20   some AFTER..** 
1d0d0 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74  In that cases, t
1d0e0 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c  he constants bel
1d0f0 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74  ow can be ORed t
1d100 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  ogether..*/.#def
1d110 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f  ine TRIGGER_BEFO
1d120 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52  RE  1.#define TR
1d130 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a  IGGER_AFTER   2.
1d140 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*. * An instan
1d150 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  ce of struct Tri
1d160 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64  ggerStep is used
1d170 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67   to store a sing
1d180 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  le SQL statement
1d190 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61  . * that is a pa
1d1a0 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d  rt of a trigger-
1d1b0 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20  program. . *. * 
1d1c0 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72  Instances of str
1d1d0 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
1d1e0 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
1d1f0 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69  singly linked li
1d200 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73  st (linked. * us
1d210 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20  ing the "pNext" 
1d220 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63  member) referenc
1d230 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f  ed by the "step_
1d240 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20  list" member of 
1d250 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69 61 74  the . * associat
1d260 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ed struct Trigge
1d270 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20  r instance. The 
1d280 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
1d290 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
1d2a0 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74   is. * the first
1d2b0 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69   step of the tri
1d2c0 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a  gger-program.. *
1d2d0 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65   . * The "op" me
1d2e0 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77  mber indicates w
1d2f0 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61  hether this is a
1d300 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45   "DELETE", "INSE
1d310 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72  RT", "UPDATE" or
1d320 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61  . * "SELECT" sta
1d330 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e  tement. The mean
1d340 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65  ings of the othe
1d350 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74  r members is det
1d360 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 0a  ermined by the .
1d370 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22   * value of "op"
1d380 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a   as follows:. *.
1d390 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53   * (op == TK_INS
1d3a0 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20  ERT). * orconf  
1d3b0 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20    -> stores the 
1d3c0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f  ON CONFLICT algo
1d3d0 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74  rithm. * pSelect
1d3e0 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73     -> If this is
1d3f0 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
1d400 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73  ... SELECT ... s
1d410 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
1d420 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
1d430 68 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69  his stores a poi
1d440 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45  nter to the SELE
1d450 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74  CT statement. Ot
1d460 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
1d470 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20   target    -> A 
1d480 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68  token holding th
1d490 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  e quoted name of
1d4a0 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e   the table to in
1d4b0 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45  sert into.. * pE
1d4c0 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68  xprList -> If th
1d4d0 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
1d4e0 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20  INTO ... VALUES 
1d4f0 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
1d500 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
1d510 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
1d520 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73  values to be ins
1d530 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65  erted. Otherwise
1d540 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73   NULL.. * pIdLis
1d550 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
1d560 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
1d570 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61   ... (<column-na
1d580 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e  mes>) VALUES ...
1d590 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20   . *            
1d5a0 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65    statement, the
1d5b0 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68  n this stores th
1d5c0 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74  e column-names t
1d5d0 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20  o be. *         
1d5e0 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e       inserted in
1d5f0 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  to.. *. * (op ==
1d600 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 74   TK_DELETE). * t
1d610 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f  arget    -> A to
1d620 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ken holding the 
1d630 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
1d640 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65  he table to dele
1d650 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65  te from.. * pWhe
1d660 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
1d670 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
1d680 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
1d690 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
1d6a0 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
1d6b0 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
1d6c0 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f   NULL.. * . * (o
1d6d0 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a  p == TK_UPDATE).
1d6e0 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20   * target    -> 
1d6f0 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20  A token holding 
1d700 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20  the quoted name 
1d710 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
1d720 75 70 64 61 74 65 20 72 6f 77 73 20 6f 66 2e 0a  update rows of..
1d730 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
1d740 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
1d750 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73   of the UPDATE s
1d760 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
1d770 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
1d780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
1d790 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
1d7a0 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20   pExprList -> A 
1d7b0 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75  list of the colu
1d7c0 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e  mns to update an
1d7d0 64 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  d the expression
1d7e0 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20  s to update. *  
1d7f0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 6d              them
1d800 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33   to. See sqlite3
1d810 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e  Update() documen
1d820 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e  tation of "pChan
1d830 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20  ges". *         
1d840 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20       argument.. 
1d850 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72  * . */.struct Tr
1d860 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38  iggerStep {.  u8
1d870 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
1d880 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f     /* One of TK_
1d890 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54  DELETE, TK_UPDAT
1d8a0 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b  E, TK_INSERT, TK
1d8b0 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20  _SELECT */.  u8 
1d8c0 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  orconf;         
1d8d0 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b    /* OE_Rollback
1d8e0 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67   etc. */.  Trigg
1d8f0 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20  er *pTrig;      
1d900 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20 74  /* The trigger t
1d910 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69 73  hat this step is
1d920 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20   a part of */.  
1d930 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
1d940 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73       /* SELECT s
1d950 74 61 74 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f  tatment or RHS o
1d960 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  f INSERT INTO ..
1d970 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20   SELECT ... */. 
1d980 20 54 6f 6b 65 6e 20 74 61 72 67 65 74 3b 20 20   Token target;  
1d990 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20        /* Target 
1d9a0 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45  table for DELETE
1d9b0 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54  , UPDATE, INSERT
1d9c0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
1d9d0 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  re;        /* Th
1d9e0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  e WHERE clause f
1d9f0 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  or DELETE or UPD
1da00 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45  ATE steps */.  E
1da10 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69  xprList *pExprLi
1da20 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73  st; /* SET claus
1da30 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a 2f  e for UPDATE. */
1da40 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69  .  IdList *pIdLi
1da50 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  st;     /* Colum
1da60 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45  n names for INSE
1da70 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  RT */.  TriggerS
1da80 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  tep *pNext;  /* 
1da90 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b  Next in the link
1daa0 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67  -list */.  Trigg
1dab0 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20  erStep *pLast;  
1dac0 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20  /* Last element 
1dad0 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61  in link-list. Va
1dae0 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d  lid for 1st elem
1daf0 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   only */.};../*.
1db00 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
1db10 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
1db20 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
1db30 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  used by the sqli
1db40 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74  teFix....** rout
1db50 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c  ines as they wal
1db60 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  k the parse tree
1db70 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73   to make databas
1db80 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20  e references.** 
1db90 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a 74  explicit.  .*/.t
1dba0 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
1dbb0 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73  Fixer DbFixer;.s
1dbc0 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a  truct DbFixer {.
1dbd0 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
1dbe0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
1dbf0 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45  sing context.  E
1dc00 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72  rror messages wr
1dc10 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20  itten here */.  
1dc20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
1dc30 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73      /* Fix items
1dc40 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20   to this schema 
1dc50 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c  */.  int bVarOnl
1dc60 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63  y;       /* Chec
1dc70 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72  k for variable r
1dc80 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a  eferences only *
1dc90 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1dca0 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20  zDb;    /* Make 
1dcb0 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73  sure all objects
1dcc0 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69   are contained i
1dcd0 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  n this database 
1dce0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1dcf0 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65  *zType;  /* Type
1dd00 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
1dd10 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
1dd20 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20  or messages */. 
1dd30 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e   const Token *pN
1dd40 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  ame; /* Name of 
1dd50 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20  the container - 
1dd60 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d  used for error m
1dd70 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f  essages */.};../
1dd80 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64  *.** An objected
1dd90 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c   used to accumul
1dda0 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66 20  ate the text of 
1ddb0 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20 77  a string where w
1ddc0 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65  e.** do not nece
1ddd0 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77  ssarily know how
1dde0 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67 20   big the string 
1ddf0 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65  will be in the e
1de00 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74  nd..*/.struct St
1de10 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74  rAccum {.  sqlit
1de20 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
1de30 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61  /* Optional data
1de40 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69  base for lookasi
1de50 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c  de.  Can be NULL
1de60 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61 73   */.  char *zBas
1de70 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  e;         /* A 
1de80 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  base allocation.
1de90 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f    Not from mallo
1dea0 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  c. */.  char *zT
1deb0 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
1dec0 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65  The string colle
1ded0 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  cted so far */. 
1dee0 20 69 6e 74 20 20 6e 43 68 61 72 3b 20 20 20 20   int  nChar;    
1def0 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
1df00 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f  of the string so
1df10 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e   far */.  int  n
1df20 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f  Alloc;         /
1df30 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63  * Amount of spac
1df40 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a  e allocated in z
1df50 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 20 6d  Text */.  int  m
1df60 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f  xAlloc;        /
1df70 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65  * Maximum allowe
1df80 64 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  d string length 
1df90 2a 2f 0a 20 20 75 38 20 20 20 75 73 65 4d 61 6c  */.  u8   useMal
1dfa0 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 30 3a 20  loc;      /* 0: 
1dfb0 6e 6f 6e 65 2c 20 20 31 3a 20 73 71 6c 69 74 65  none,  1: sqlite
1dfc0 33 44 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20 73  3DbMalloc,  2: s
1dfd0 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f  qlite3_malloc */
1dfe0 0a 20 20 75 38 20 20 20 61 63 63 45 72 72 6f 72  .  u8   accError
1dff0 3b 20 20 20 20 20 20 20 2f 2a 20 53 54 52 41 43  ;       /* STRAC
1e000 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52  CUM_NOMEM or STR
1e010 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a  ACCUM_TOOBIG */.
1e020 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43  };.#define STRAC
1e030 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64  CUM_NOMEM   1.#d
1e040 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 54  efine STRACCUM_T
1e050 4f 4f 42 49 47 20 20 32 0a 0a 2f 2a 0a 2a 2a 20  OOBIG  2../*.** 
1e060 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  A pointer to thi
1e070 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  s structure is u
1e080 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61  sed to communica
1e090 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  te information.*
1e0a0 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e  * from sqlite3In
1e0b0 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53  it and OP_ParseS
1e0c0 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73  chema into the s
1e0d0 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
1e0e0 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  ck..*/.typedef s
1e0f0 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65  truct {.  sqlite
1e100 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
1e110 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65   The database be
1e120 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
1e130 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
1e140 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f  rMsg;    /* Erro
1e150 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64  r message stored
1e160 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69   here */.  int i
1e170 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Db;            /
1e180 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74  * 0 for main dat
1e190 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45  abase.  1 for TE
1e1a0 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41  MP, 2.. for ATTA
1e1b0 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63  CHed */.  int rc
1e1c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1e1d0 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f   Result code sto
1e1e0 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e  red here */.} In
1e1f0 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53  itData;../*.** S
1e200 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
1e210 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69  ing global confi
1e220 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f  guration data fo
1e230 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62  r the SQLite lib
1e240 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  rary..**.** This
1e250 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20   structure also 
1e260 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74  contains some st
1e270 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ate information.
1e280 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74  .*/.struct Sqlit
1e290 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74  e3Config {.  int
1e2a0 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20   bMemstat;      
1e2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e2c0 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
1e2d0 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a   memory status *
1e2e0 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74  /.  int bCoreMut
1e2f0 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
1e300 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1e310 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74   enable core mut
1e320 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62  exing */.  int b
1e330 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20  FullMutex;      
1e340 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e350 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66  True to enable f
1e360 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a  ull mutexing */.
1e370 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20    int bOpenUri; 
1e380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e390 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69      /* True to i
1e3a0 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d  nterpret filenam
1e3b0 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20  es as URIs */.  
1e3c0 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20 20  int bUseCis;    
1e3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3e0 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e    /* Use coverin
1e3f0 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75  g indices for fu
1e400 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e  ll-scans */.  in
1e410 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20  t mxStrlen;     
1e420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e430 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e  /* Maximum strin
1e440 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e  g length */.  in
1e450 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20  t neverCorrupt; 
1e460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e470 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 61  /* Database is a
1e480 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65  lways well-forme
1e490 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f  d */.  int szLoo
1e4a0 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
1e4b0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
1e4c0 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
1e4d0 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69  ffer size */.  i
1e4e0 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  nt nLookaside;  
1e4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e500 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
1e510 61 73 69 64 65 20 62 75 66 66 65 72 20 63 6f 75  aside buffer cou
1e520 6e 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  nt */.  sqlite3_
1e530 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20  mem_methods m;  
1e540 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77            /* Low
1e550 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c  -level memory al
1e560 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61  location interfa
1e570 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ce */.  sqlite3_
1e580 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75  mutex_methods mu
1e590 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77  tex;      /* Low
1e5a0 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74  -level mutex int
1e5b0 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
1e5c0 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f  te3_pcache_metho
1e5d0 64 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a  ds2 pcache2;  /*
1e5e0 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d   Low-level page-
1e5f0 63 61 63 68 65 20 69 6e 74 65 72 66 61 63 65 20  cache interface 
1e600 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70  */.  void *pHeap
1e610 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e620 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73         /* Heap s
1e630 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a  torage space */.
1e640 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20    int nHeap;    
1e650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e660 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70      /* Size of p
1e670 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Heap[] */.  int 
1e680 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20  mnReq, mxReq;   
1e690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e6a0 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61   Min and max hea
1e6b0 70 20 72 65 71 75 65 73 74 73 20 73 69 7a 65 73  p requests sizes
1e6c0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   */.  sqlite3_in
1e6d0 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20  t64 szMmap;     
1e6e0 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28          /* mmap(
1e6f0 29 20 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e  ) space per open
1e700 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74   file */.  sqlit
1e710 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b  e3_int64 mxMmap;
1e720 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e730 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f  Maximum value fo
1e740 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f  r szMmap */.  vo
1e750 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20  id *pScratch;   
1e760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e770 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72  /* Scratch memor
1e780 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72  y */.  int szScr
1e790 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
1e7a0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
1e7b0 20 6f 66 20 65 61 63 68 20 73 63 72 61 74 63 68   of each scratch
1e7c0 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74   buffer */.  int
1e7d0 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20 20   nScratch;      
1e7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e7f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61  * Number of scra
1e800 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20  tch buffers */. 
1e810 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20   void *pPage;   
1e820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e830 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65     /* Page cache
1e840 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
1e850 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20   szPage;        
1e860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e870 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70  * Size of each p
1e880 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  age in pPage[] *
1e890 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20  /.  int nPage;  
1e8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8b0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1e8c0 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67  of pages in pPag
1e8d0 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50  e[] */.  int mxP
1e8e0 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20  arserStack;     
1e8f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61             /* ma
1e900 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74  ximum depth of t
1e910 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20  he parser stack 
1e920 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43  */.  int sharedC
1e930 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20  acheEnabled;    
1e940 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69         /* true i
1e950 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  f shared-cache m
1e960 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20  ode enabled */. 
1e970 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69   /* The above mi
1e980 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ght be initializ
1e990 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20  ed to non-zero. 
1e9a0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e   The following n
1e9b0 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20  eed to always.  
1e9c0 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20  ** initially be 
1e9d0 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a  zero, however. *
1e9e0 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20  /.  int isInit; 
1e9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea00 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
1ea10 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ter initializati
1ea20 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64 20  on has finished 
1ea30 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72  */.  int inProgr
1ea40 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ess;            
1ea50 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77         /* True w
1ea60 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74  hile initializat
1ea70 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
1ea80 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78  */.  int isMutex
1ea90 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
1eaa0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
1eab0 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72 65  fter mutexes are
1eac0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
1ead0 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e    int isMallocIn
1eae0 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
1eaf0 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
1eb00 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
1eb10 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
1eb20 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20   isPCacheInit;  
1eb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1eb40 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c  * True after mal
1eb50 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  loc is initializ
1eb60 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  ed */.  int nRef
1eb70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
1eb80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1eb90 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20  ber of users of 
1eba0 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20  pInitMutex */.  
1ebb0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70  sqlite3_mutex *p
1ebc0 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
1ebd0 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20    /* Mutex used 
1ebe0 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69  by sqlite3_initi
1ebf0 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69  alize() */.  voi
1ec00 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c  d (*xLog)(void*,
1ec10 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
1ec20 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f  ; /* Function fo
1ec30 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76  r logging */.  v
1ec40 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20  oid *pLogArg;   
1ec50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec60 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
1ec70 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20  ument to xLog() 
1ec80 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
1ec90 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20  _ENABLE_SQLLOG. 
1eca0 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28   void(*xSqllog)(
1ecb0 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
1ecc0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
1ecd0 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f  ;.  void *pSqllo
1ece0 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66  gArg;.#endif.#if
1ecf0 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f  def SQLITE_VDBE_
1ed00 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54 68  COVERAGE.  /* Th
1ed10 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
1ed20 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c  back (if not NUL
1ed30 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e  L) is invoked on
1ed40 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61 6e   every VDBE bran
1ed50 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f  ch.  ** operatio
1ed60 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c 6c  n.  Set the call
1ed70 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49 54  back using SQLIT
1ed80 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f  E_TESTCTRL_VDBE_
1ed90 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20  COVERAGE..  */. 
1eda0 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72 61   void (*xVdbeBra
1edb0 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69  nch)(void*,int i
1edc0 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69 73  SrcLine,u8 eThis
1edd0 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61  ,u8 eMx);  /* Ca
1ede0 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
1edf0 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72 67   *pVdbeBranchArg
1ee00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ee10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67        /* 1st arg
1ee30 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  ument */.#endif.
1ee40 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1ee50 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
1ee60 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61  .  int (*xTestCa
1ee70 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20  llback)(int);   
1ee80 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20       /* Invoked 
1ee90 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  by sqlite3FaultS
1eea0 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  im() */.#endif. 
1eeb0 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46   int bLocaltimeF
1eec0 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20  ault;           
1eed0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61     /* True to fa
1eee0 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63  il localtime() c
1eef0 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  alls */.};../*.*
1ef00 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20  * This macro is 
1ef10 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 61  used inside of a
1ef20 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
1ef30 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74  ts to indicate t
1ef40 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73 65 72  hat.** the asser
1ef50 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20  t is only valid 
1ef60 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64  on a well-formed
1ef70 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e 73 74   database.  Inst
1ef80 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20  ead of:.**.**   
1ef90 20 20 61 73 73 65 72 74 28 20 58 20 29 3b 0a 2a    assert( X );.*
1efa0 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a  *.** One writes:
1efb0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72  .**.**     asser
1efc0 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f  t( X || CORRUPT_
1efd0 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52  DB );.**.** CORR
1efe0 55 50 54 5f 44 42 20 69 73 20 74 72 75 65 20 64  UPT_DB is true d
1eff0 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65  uring normal ope
1f000 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54  ration.  CORRUPT
1f010 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64  _DB does not ind
1f020 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20 74 68  icate.** that th
1f030 65 20 64 61 74 61 62 61 73 65 20 69 73 20 64 65  e database is de
1f040 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75 70 74  finitely corrupt
1f050 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74 20 6d  , only that it m
1f060 69 67 68 74 20 62 65 20 63 6f 72 72 75 70 74 2e  ight be corrupt.
1f070 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65 73  .** For most tes
1f080 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55 50 54  t cases, CORRUPT
1f090 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20 66 61  _DB is set to fa
1f0a0 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70 65 63  lse using a spec
1f0b0 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74  ial.** sqlite3_t
1f0c0 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20  est_control().  
1f0d0 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61 73 73  This enables ass
1f0e0 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
1f0f0 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69   to prove.** thi
1f100 6e 67 73 20 74 68 61 74 20 61 72 65 20 61 6c 77  ngs that are alw
1f110 61 79 73 20 74 72 75 65 20 66 6f 72 20 77 65 6c  ays true for wel
1f120 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73  l-formed databas
1f130 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  es..*/.#define C
1f140 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71 6c 69  ORRUPT_DB  (sqli
1f150 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43  te3Config.neverC
1f160 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a  orrupt==0)../*.*
1f170 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65  * Context pointe
1f180 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68  r passed down th
1f190 72 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d 77  rough the tree-w
1f1a0 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57  alk..*/.struct W
1f1b0 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a  alker {.  int (*
1f1c0 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57  xExprCallback)(W
1f1d0 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20  alker*, Expr*); 
1f1e0 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20      /* Callback 
1f1f0 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20  for expressions 
1f200 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65  */.  int (*xSele
1f210 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b  ctCallback)(Walk
1f220 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f  er*,Select*);  /
1f230 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53  * Callback for S
1f240 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64  ELECTs */.  void
1f250 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61   (*xSelectCallba
1f260 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c  ck2)(Walker*,Sel
1f270 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20  ect*);/* Second 
1f280 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c  callback for SEL
1f290 45 43 54 73 20 2a 2f 0a 20 20 50 61 72 73 65 20  ECTs */.  Parse 
1f2a0 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
1f2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2c0 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f      /* Parser co
1f2d0 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74  ntext.  */.  int
1f2e0 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20   walkerDepth;   
1f2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f300 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1f310 20 6f 66 20 73 75 62 71 75 65 72 69 65 73 20 2a   of subqueries *
1f320 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b 20 20 20  /.  u8 eCode;   
1f330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f350 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73   A small process
1f360 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e  ing code */.  un
1f370 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20  ion {           
1f380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f390 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61          /* Extra
1f3a0 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61   data for callba
1f3b0 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f  ck */.    NameCo
1f3c0 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20  ntext *pNC;     
1f3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3e0 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63       /* Naming c
1f3f0 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e  ontext */.    in
1f400 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  t n;            
1f410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f420 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 6f           /* A co
1f430 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74  unter */.    int
1f440 20 69 43 75 72 3b 20 20 20 20 20 20 20 20 20 20   iCur;          
1f450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f460 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 75 72          /* A cur
1f470 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  sor number */.  
1f480 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c    SrcList *pSrcL
1f490 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ist;            
1f4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f4b0 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
1f4c0 20 20 20 73 74 72 75 63 74 20 53 72 63 43 6f 75     struct SrcCou
1f4d0 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20  nt *pSrcCount;  
1f4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f4f0 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e   Counting column
1f500 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20   references */. 
1f510 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72   } u;.};../* For
1f520 77 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e  ward declaration
1f530 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  s */.int sqlite3
1f540 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a  WalkExpr(Walker*
1f550 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
1f560 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73  lite3WalkExprLis
1f570 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c  t(Walker*, ExprL
1f580 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
1f590 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c  e3WalkSelect(Wal
1f5a0 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
1f5b0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
1f5c0 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72  electExpr(Walker
1f5d0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
1f5e0 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
1f5f0 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20  ctFrom(Walker*, 
1f600 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a  Select*);../*.**
1f610 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
1f620 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65  m the parse-tree
1f630 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69   walking primiti
1f640 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a  ves and their.**
1f650 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23   callbacks..*/.#
1f660 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69  define WRC_Conti
1f670 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f  nue    0   /* Co
1f680 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f  ntinue down into
1f690 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65   children */.#de
1f6a0 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20  fine WRC_Prune  
1f6b0 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74       1   /* Omit
1f6c0 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f   children but co
1f6d0 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73  ntinue walking s
1f6e0 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69  iblings */.#defi
1f6f0 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20  ne WRC_Abort    
1f700 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f     2   /* Abando
1f710 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20  n the tree walk 
1f720 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
1f730 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
1f740 72 75 63 74 75 72 65 20 72 65 70 72 65 73 65 6e  ructure represen
1f750 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20  ts a set of one 
1f760 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20  or more CTEs.** 
1f770 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78  (common table ex
1f780 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74  pressions) creat
1f790 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57  ed by a single W
1f7a0 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73  ITH clause..*/.s
1f7b0 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69  truct With {.  i
1f7c0 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20  nt nCte;        
1f7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f7e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73  * Number of CTEs
1f7f0 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61   in the WITH cla
1f800 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  use */.  With *p
1f810 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20 20 20  Outer;          
1f820 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74           /* Cont
1f830 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75  aining WITH clau
1f840 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  se, or NULL */. 
1f850 20 73 74 72 75 63 74 20 43 74 65 20 7b 20 20 20   struct Cte {   
1f860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f870 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45   /* For each CTE
1f880 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61   in the WITH cla
1f890 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63  use.... */.    c
1f8a0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
1f8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f8c0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43  * Name of this C
1f8d0 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69  TE */.    ExprLi
1f8e0 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20  st *pCols;      
1f8f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73            /* Lis
1f900 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f  t of explicit co
1f910 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e  lumn names, or N
1f920 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  ULL */.    Selec
1f930 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
1f940 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1f950 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  e definition of 
1f960 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20  this CTE */.    
1f970 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 72 72  const char *zErr
1f980 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f990 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  /* Error message
1f9a0 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65   for circular re
1f9b0 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20  ferences */.  } 
1f9c0 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66  a[1];.};..#ifdef
1f9d0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
1f9e0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1f9f0 6f 66 20 74 68 65 20 54 72 65 65 56 69 65 77 20  of the TreeView 
1fa00 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64 20 66  object is used f
1fa10 6f 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20  or printing the 
1fa20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61  content of.** da
1fa30 74 61 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e  ta structures on
1fa40 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
1fa50 6e 74 66 28 29 20 75 73 69 6e 67 20 61 20 74 72  ntf() using a tr
1fa60 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f  ee-like view..*/
1fa70 0a 73 74 72 75 63 74 20 54 72 65 65 56 69 65 77  .struct TreeView
1fa80 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b   {.  int iLevel;
1fa90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1faa0 57 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74  Which level of t
1fab0 68 65 20 74 72 65 65 20 77 65 20 61 72 65 20 6f  he tree we are o
1fac0 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65  n */.  u8  bLine
1fad0 5b 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f  [100];         /
1fae0 2a 20 44 72 61 77 20 76 65 72 74 69 63 61 6c 20  * Draw vertical 
1faf0 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62  in column i if b
1fb00 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20  Line[i] is true 
1fb10 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  */.};.#endif /* 
1fb20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
1fb30 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20  ./*.** Assuming 
1fb40 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  zIn points to th
1fb50 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
1fb60 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  a UTF-8 characte
1fb70 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49  r,.** advance zI
1fb80 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  n to point to th
1fb90 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
1fba0 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63  the next UTF-8 c
1fbb0 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65  haracter..*/.#de
1fbc0 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50  fine SQLITE_SKIP
1fbd0 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20  _UTF8(zIn) {    
1fbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbf0 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a      \.  if( (*(z
1fc00 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20  In++))>=0xc0 ){ 
1fc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
1fc30 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20     while( (*zIn 
1fc40 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b  & 0xc0)==0x80 ){
1fc50 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20   zIn++; }       
1fc60 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20        \.  }     
1fc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
1fca0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  .}../*.** The SQ
1fcb0 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72  LITE_*_BKPT macr
1fcc0 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74  os are substitut
1fcd0 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72  es for the error
1fce0 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74   codes with.** t
1fcf0 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74  he same name but
1fd00 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b   without the _BK
1fd10 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73  PT suffix.  Thes
1fd20 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a  e macros invoke.
1fd30 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74  ** routines that
1fd40 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65   report the line
1fd50 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68  -number on which
1fd60 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69   the error origi
1fd70 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73  nated.** using s
1fd80 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54  qlite3_log().  T
1fd90 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f  he routines also
1fda0 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65   provide a conve
1fdb0 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74  nient place.** t
1fdc0 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72  o set a debugger
1fdd0 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a   breakpoint..*/.
1fde0 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75  int sqlite3Corru
1fdf0 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e  ptError(int);.in
1fe00 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45  t sqlite3MisuseE
1fe10 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
1fe20 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
1fe30 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e  ror(int);.#defin
1fe40 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
1fe50 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72  _BKPT sqlite3Cor
1fe60 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  ruptError(__LINE
1fe70 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
1fe80 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73  TE_MISUSE_BKPT s
1fe90 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
1fea0 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
1feb0 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f  ine SQLITE_CANTO
1fec0 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  PEN_BKPT sqlite3
1fed0 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f  CantopenError(__
1fee0 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20  LINE__).../*.** 
1fef0 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61  FTS4 is really a
1ff00 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20  n extension for 
1ff10 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61  FTS3.  It is ena
1ff20 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a  bled using the.*
1ff30 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
1ff40 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74  FTS3 macro.  But
1ff50 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73   to avoid confus
1ff60 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c  ion we also call
1ff70 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45  .** the SQLITE_E
1ff80 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f  NABLE_FTS4 macro
1ff90 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20   to serve as an 
1ffa0 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45  alias for SQLITE
1ffb0 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f  _ENABLE_FTS3..*/
1ffc0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
1ffd0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29  ITE_ENABLE_FTS4)
1ffe0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
1fff0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
20000 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
20010 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23 65 6e  _ENABLE_FTS3.#en
20020 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63  dif../*.** The c
20030 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73  type.h header is
20040 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d   needed for non-
20050 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20  ASCII systems.  
20060 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65  It is also.** ne
20070 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65  eded by FTS3 whe
20080 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64  n FTS3 is includ
20090 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61  ed in the amalga
200a0 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21  mation..*/.#if !
200b0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
200c0 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28  SCII) || \.    (
200d0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
200e0 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64  NABLE_FTS3) && d
200f0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d  efined(SQLITE_AM
20100 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69  ALGAMATION)).# i
20110 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e  nclude <ctype.h>
20120 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
20130 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
20140 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74  ros mimic the st
20150 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66  andard library f
20160 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72  unctions toupper
20170 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29  (),.** isspace()
20180 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64  , isalnum(), isd
20190 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69  igit() and isxdi
201a0 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76  git(), respectiv
201b0 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69  ely. The.** sqli
201c0 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79  te versions only
201d0 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20   work for ASCII 
201e0 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61  characters, rega
201f0 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65  rdless of locale
20200 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
20210 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e  TE_ASCII.# defin
20220 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72  e sqlite3Toupper
20230 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69  (x)  ((x)&~(sqli
20240 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
20250 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
20260 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20  0x20)).# define 
20270 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78  sqlite3Isspace(x
20280 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
20290 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
202a0 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23  har)(x)]&0x01).#
202b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
202c0 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c  salnum(x)   (sql
202d0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
202e0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
202f0 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20  &0x06).# define 
20300 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
20310 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
20320 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
20330 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23  har)(x)]&0x02).#
20340 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
20350 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c  sdigit(x)   (sql
20360 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
20370 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
20380 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20  &0x04).# define 
20390 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
203a0 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  x)  (sqlite3Ctyp
203b0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
203c0 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23  har)(x)]&0x08).#
203d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
203e0 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c  olower(x)   (sql
203f0 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72  ite3UpperToLower
20400 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
20410 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64 65  (x)]).#else.# de
20420 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
20430 70 65 72 28 78 29 20 20 20 74 6f 75 70 70 65 72  per(x)   toupper
20440 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
20450 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
20460 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20  lite3Isspace(x) 
20470 20 20 69 73 73 70 61 63 65 28 28 75 6e 73 69 67    isspace((unsig
20480 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
20490 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
204a0 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e  alnum(x)   isaln
204b0 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  um((unsigned cha
204c0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
204d0 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
204e0 29 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73  )   isalpha((uns
204f0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
20500 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20510 49 73 64 69 67 69 74 28 78 29 20 20 20 69 73 64  Isdigit(x)   isd
20520 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
20530 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
20540 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
20550 74 28 78 29 20 20 69 73 78 64 69 67 69 74 28 28  t(x)  isxdigit((
20560 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
20570 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
20580 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
20590 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65  tolower((unsigne
205a0 64 20 63 68 61 72 29 28 78 29 29 0a 23 65 6e 64  d char)(x)).#end
205b0 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  if.int sqlite3Is
205c0 49 64 43 68 61 72 28 75 38 29 3b 0a 0a 2f 2a 0a  IdChar(u8);../*.
205d0 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63  ** Internal func
205e0 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a  tion prototypes.
205f0 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  */.#define sqlit
20600 65 33 53 74 72 49 43 6d 70 20 73 71 6c 69 74 65  e3StrICmp sqlite
20610 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20 73 71  3_stricmp.int sq
20620 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f  lite3Strlen30(co
20630 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66  nst char*);.#def
20640 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49  ine sqlite3StrNI
20650 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e  Cmp sqlite3_strn
20660 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65  icmp..int sqlite
20670 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64  3MallocInit(void
20680 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
20690 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a  allocEnd(void);.
206a0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
206b0 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a  loc(u64);.void *
206c0 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72  sqlite3MallocZer
206d0 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  o(u64);.void *sq
206e0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
206f0 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  o(sqlite3*, u64)
20700 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
20710 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74  bMallocRaw(sqlit
20720 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20  e3*, u64);.char 
20730 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70  *sqlite3DbStrDup
20740 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
20750 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71  char*);.char *sq
20760 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73  lite3DbStrNDup(s
20770 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
20780 61 72 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  ar*, u64);.void 
20790 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28  *sqlite3Realloc(
207a0 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  void*, u64);.voi
207b0 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
207c0 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65  locOrFree(sqlite
207d0 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34  3 *, void *, u64
207e0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
207f0 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65  DbRealloc(sqlite
20800 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34  3 *, void *, u64
20810 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
20820 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20  bFree(sqlite3*, 
20830 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
20840 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f  te3MallocSize(vo
20850 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
20860 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71  3DbMallocSize(sq
20870 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
20880 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72  void *sqlite3Scr
20890 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b  atchMalloc(int);
208a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72  .void sqlite3Scr
208b0 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b  atchFree(void*);
208c0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61  .void *sqlite3Pa
208d0 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  geMalloc(int);.v
208e0 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46  oid sqlite3PageF
208f0 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ree(void*);.void
20900 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65   sqlite3MemSetDe
20910 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69  fault(void);.voi
20920 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d  d sqlite3BenignM
20930 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20  allocHooks(void 
20940 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20  (*)(void), void 
20950 28 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20  (*)(void));.int 
20960 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c  sqlite3HeapNearl
20970 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a  yFull(void);../*
20980 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77  .** On systems w
20990 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20  ith ample stack 
209a0 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73  space and that s
209b0 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c  upport alloca(),
209c0 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20   make.** use of 
209d0 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61  alloca() to obta
209e0 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72  in space for lar
209f0 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a  ge automatic obj
20a00 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c  ects.  By defaul
20a10 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61  t,.** obtain spa
20a20 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ce from malloc()
20a30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f  ..**.** The allo
20a40 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76  ca() routine nev
20a50 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e  er returns NULL.
20a60 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
20a70 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20  e code paths.** 
20a80 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73  that deal with s
20a90 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
20aa0 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62  () failures to b
20ab0 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a  e unreachable..*
20ac0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
20ad0 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66  USE_ALLOCA.# def
20ae0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
20af0 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
20b00 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69  alloca(N).# defi
20b10 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
20b20 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d  llocZero(D,N)  m
20b30 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c  emset(alloca(N),
20b40 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20   0, N).# define 
20b50 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
20b60 28 44 2c 50 29 20 20 20 20 20 20 20 0a 23 65 6c  (D,P)       .#el
20b70 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
20b80 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77  te3StackAllocRaw
20b90 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44  (D,N)   sqlite3D
20ba0 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a  bMallocRaw(D,N).
20bb0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20bc0 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
20bd0 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61  ,N)  sqlite3DbMa
20be0 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20  llocZero(D,N).# 
20bf0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
20c00 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20  ackFree(D,P)    
20c10 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
20c20 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69  (D,P).#endif..#i
20c30 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
20c40 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74  LE_MEMSYS3.const
20c50 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
20c60 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d  hods *sqlite3Mem
20c70 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29  GetMemsys3(void)
20c80 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
20c90 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
20ca0 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS5.const sqli
20cb0 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
20cc0 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
20cd0 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e  msys5(void);.#en
20ce0 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  dif...#ifndef SQ
20cf0 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a  LITE_MUTEX_OMIT.
20d00 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
20d10 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73  methods const *s
20d20 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74  qlite3DefaultMut
20d30 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69  ex(void);.  sqli
20d40 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
20d50 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
20d60 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b  NoopMutex(void);
20d70 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
20d80 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c   *sqlite3MutexAl
20d90 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  loc(int);.  int 
20da0 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74  sqlite3MutexInit
20db0 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71  (void);.  int sq
20dc0 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f  lite3MutexEnd(vo
20dd0 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74  id);.#endif..int
20de0 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61   sqlite3StatusVa
20df0 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  lue(int);.void s
20e00 71 6c 69 74 65 33 53 74 61 74 75 73 41 64 64 28  qlite3StatusAdd(
20e10 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
20e20 73 71 6c 69 74 65 33 53 74 61 74 75 73 53 65 74  sqlite3StatusSet
20e30 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66  (int, int);..#if
20e40 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
20e50 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
20e60 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e    int sqlite3IsN
20e70 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73  aN(double);.#els
20e80 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
20e90 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65  e3IsNaN(X)  0.#e
20ea0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
20eb0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
20ec0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
20ed0 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61  re holds informa
20ee0 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a  tion about SQL.*
20ef0 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75  * functions argu
20f00 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65 20 74  ments that are t
20f10 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  he parameters to
20f20 20 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75   the printf() fu
20f30 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  nction..*/.struc
20f40 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  t PrintfArgument
20f50 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20  s {.  int nArg; 
20f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20f70 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  * Total number o
20f80 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
20f90 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20   int nUsed;     
20fa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
20fb0 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
20fc0 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
20fd0 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
20fe0 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68  **apArg;   /* Th
20ff0 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65  e argument value
21000 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65  s */.};..#define
21010 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49   SQLITE_PRINTF_I
21020 4e 54 45 52 4e 41 4c 20 30 78 30 31 0a 23 64 65  NTERNAL 0x01.#de
21030 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
21040 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32  TF_SQLFUNC  0x02
21050 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50  .void sqlite3VXP
21060 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c  rintf(StrAccum*,
21070 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61 72   u32, const char
21080 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69  *, va_list);.voi
21090 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66  d sqlite3XPrintf
210a0 28 53 74 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c  (StrAccum*, u32,
210b0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
210c0 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  .);.char *sqlite
210d0 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  3MPrintf(sqlite3
210e0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  *,const char*, .
210f0 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..);.char *sqlit
21100 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  e3VMPrintf(sqlit
21110 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
21120 20 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72 20   va_list);.char 
21130 2a 73 71 6c 69 74 65 33 4d 41 70 70 65 6e 64 66  *sqlite3MAppendf
21140 28 73 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a 2c  (sqlite3*,char*,
21150 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
21160 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
21170 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 64 65  LITE_TEST) || de
21180 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
21190 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  UG).  void sqlit
211a0 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f  e3DebugPrintf(co
211b0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
211c0 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
211d0 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
211e0 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
211f0 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f  TestTextToPtr(co
21200 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  nst char*);.#end
21210 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  if..#if defined(
21220 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20  SQLITE_DEBUG).  
21230 54 72 65 65 56 69 65 77 20 2a 73 71 6c 69 74 65  TreeView *sqlite
21240 33 54 72 65 65 56 69 65 77 50 75 73 68 28 54 72  3TreeViewPush(Tr
21250 65 65 56 69 65 77 2a 2c 75 38 29 3b 0a 20 20 76  eeView*,u8);.  v
21260 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
21270 69 65 77 50 6f 70 28 54 72 65 65 56 69 65 77 2a  iewPop(TreeView*
21280 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
21290 33 54 72 65 65 56 69 65 77 4c 69 6e 65 28 54 72  3TreeViewLine(Tr
212a0 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 63  eeView*, const c
212b0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 76 6f  har*, ...);.  vo
212c0 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
212d0 65 77 49 74 65 6d 28 54 72 65 65 56 69 65 77 2a  ewItem(TreeView*
212e0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75  , const char*, u
212f0 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  8);.  void sqlit
21300 65 33 54 72 65 65 56 69 65 77 45 78 70 72 28 54  e3TreeViewExpr(T
21310 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
21320 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f  Expr*, u8);.  vo
21330 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
21340 65 77 45 78 70 72 4c 69 73 74 28 54 72 65 65 56  ewExprList(TreeV
21350 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  iew*, const Expr
21360 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74  List*, u8, const
21370 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
21380 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53  sqlite3TreeViewS
21390 65 6c 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c  elect(TreeView*,
213a0 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20   const Select*, 
213b0 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f  u8);.#endif...vo
213c0 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  id sqlite3SetStr
213d0 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c  ing(char **, sql
213e0 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ite3*, const cha
213f0 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  r*, ...);.void s
21400 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50  qlite3ErrorMsg(P
21410 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
21420 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71  r*, ...);.int sq
21430 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68 61  lite3Dequote(cha
21440 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
21450 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73  KeywordCode(cons
21460 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  t unsigned char*
21470 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
21480 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61 72  te3RunParser(Par
21490 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
214a0 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64  , char **);.void
214b0 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f   sqlite3FinishCo
214c0 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e  ding(Parse*);.in
214d0 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70  t sqlite3GetTemp
214e0 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  Reg(Parse*);.voi
214f0 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65  d sqlite3Release
21500 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69  TempReg(Parse*,i
21510 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
21520 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72  GetTempRange(Par
21530 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  se*,int);.void s
21540 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d  qlite3ReleaseTem
21550 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  pRange(Parse*,in
21560 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
21570 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67  ite3ClearTempReg
21580 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 45  Cache(Parse*);.E
21590 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
215a0 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69  Alloc(sqlite3*,i
215b0 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c  nt,const Token*,
215c0 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
215d0 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a  te3Expr(sqlite3*
215e0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
215f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
21600 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65 65  xprAttachSubtree
21610 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  s(sqlite3*,Expr*
21620 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45  ,Expr*,Expr*);.E
21630 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70  xpr *sqlite3PExp
21640 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45  r(Parse*, int, E
21650 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e  xpr*, Expr*, con
21660 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72  st Token*);.Expr
21670 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64   *sqlite3ExprAnd
21680 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
21690 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73   Expr*);.Expr *s
216a0 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74 69  qlite3ExprFuncti
216b0 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  on(Parse*,ExprLi
216c0 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  st*, Token*);.vo
216d0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 73  id sqlite3ExprAs
216e0 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61  signVarNumber(Pa
216f0 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
21700 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44 65  id sqlite3ExprDe
21710 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45  lete(sqlite3*, E
21720 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20  xpr*);.ExprList 
21730 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
21740 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78  Append(Parse*,Ex
21750 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a  prList*,Expr*);.
21760 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
21770 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73  ListSetName(Pars
21780 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b  e*,ExprList*,Tok
21790 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  en*,int);.void s
217a0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65  qlite3ExprListSe
217b0 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70  tSpan(Parse*,Exp
217c0 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a  rList*,ExprSpan*
217d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
217e0 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71  xprListDelete(sq
217f0 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74  lite3*, ExprList
21800 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
21810 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68  nit(sqlite3*, ch
21820 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar**);.int sqlit
21830 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76  e3InitCallback(v
21840 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a  oid*, int, char*
21850 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64  *, char**);.void
21860 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50   sqlite3Pragma(P
21870 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
21880 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  en*,Token*,int);
21890 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
218a0 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
218b0 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  nnection(sqlite3
218c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
218d0 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73  ResetOneSchema(s
218e0 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
218f0 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70  id sqlite3Collap
21900 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79 28  seDatabaseArray(
21910 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
21920 73 71 6c 69 74 65 33 42 65 67 69 6e 50 61 72 73  sqlite3BeginPars
21930 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  e(Parse*,int);.v
21940 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69  oid sqlite3Commi
21950 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73  tInternalChanges
21960 28 73 71 6c 69 74 65 33 2a 29 3b 0a 54 61 62 6c  (sqlite3*);.Tabl
21970 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74  e *sqlite3Result
21980 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73  SetOfSelect(Pars
21990 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69  e*,Select*);.voi
219a0 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73  d sqlite3OpenMas
219b0 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a  terTable(Parse *
219c0 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73  , int);.Index *s
219d0 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79  qlite3PrimaryKey
219e0 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69  Index(Table*);.i
219f0 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  16 sqlite3Column
21a00 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20  OfIndex(Index*, 
21a10 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  i16);.void sqlit
21a20 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61 72  e3StartTable(Par
21a30 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
21a40 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
21a50 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21a60 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  AddColumn(Parse*
21a70 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73  ,Token*);.void s
21a80 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c  qlite3AddNotNull
21a90 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
21aa0 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50 72  oid sqlite3AddPr
21ab0 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c  imaryKey(Parse*,
21ac0 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
21ad0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
21ae0 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b   sqlite3AddCheck
21af0 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
21b00 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
21b10 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e  sqlite3AddColumn
21b20 54 79 70 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  Type(Parse*,Toke
21b30 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
21b40 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65  3AddDefaultValue
21b50 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70 61 6e  (Parse*,ExprSpan
21b60 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21b70 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50  AddCollateType(P
21b80 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
21b90 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54  void sqlite3EndT
21ba0 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  able(Parse*,Toke
21bb0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c  n*,Token*,u8,Sel
21bc0 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
21bd0 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74  e3ParseUri(const
21be0 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
21bf0 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a  r*,unsigned int*
21c00 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
21c10 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66        sqlite3_vf
21c20 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20  s**,char**,char 
21c30 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69  **);.Btree *sqli
21c40 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65  te3DbNameToBtree
21c50 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
21c60 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
21c70 74 65 33 43 6f 64 65 4f 6e 63 65 28 50 61 72 73  te3CodeOnce(Pars
21c80 65 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  e *);..#ifdef SQ
21c90 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
21ca0 4e 5f 54 45 53 54 0a 23 20 64 65 66 69 6e 65 20  N_TEST.# define 
21cb0 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
21cc0 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c  X) SQLITE_OK.#el
21cd0 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  se.  int sqlite3
21ce0 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23  FaultSim(int);.#
21cf0 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a 73  endif..Bitvec *s
21d00 71 6c 69 74 65 33 42 69 74 76 65 63 43 72 65 61  qlite3BitvecCrea
21d10 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  te(u32);.int sql
21d20 69 74 65 33 42 69 74 76 65 63 54 65 73 74 28 42  ite3BitvecTest(B
21d30 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e  itvec*, u32);.in
21d40 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  t sqlite3BitvecS
21d50 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  et(Bitvec*, u32)
21d60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69  ;.void sqlite3Bi
21d70 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65 63  tvecClear(Bitvec
21d80 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a  *, u32, void*);.
21d90 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
21da0 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65 63  ecDestroy(Bitvec
21db0 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42  *);.u32 sqlite3B
21dc0 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65 63  itvecSize(Bitvec
21dd0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  *);.int sqlite3B
21de0 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74  itvecBuiltinTest
21df0 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52 6f 77  (int,int*);..Row
21e00 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53  Set *sqlite3RowS
21e10 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c  etInit(sqlite3*,
21e20 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64   void*, unsigned
21e30 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
21e40 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52  te3RowSetClear(R
21e50 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71  owSet*);.void sq
21e60 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
21e70 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b  t(RowSet*, i64);
21e80 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53  .int sqlite3RowS
21e90 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20  etTest(RowSet*, 
21ea0 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34 29  int iBatch, i64)
21eb0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
21ec0 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c  SetNext(RowSet*,
21ed0 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71   i64*);..void sq
21ee0 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77 28  lite3CreateView(
21ef0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
21f00 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65  ken*,Token*,Sele
21f10 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23  ct*,int,int);..#
21f20 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
21f30 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c  TE_OMIT_VIEW) ||
21f40 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
21f50 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
21f60 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  LE).  int sqlite
21f70 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61  3ViewGetColumnNa
21f80 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  mes(Parse*,Table
21f90 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
21fa0 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  ne sqlite3ViewGe
21fb0 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42  tColumnNames(A,B
21fc0 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  ) 0.#endif..#if 
21fd0 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
21fe0 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c  HED>30.  int sql
21ff0 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ite3DbMaskAllZer
22000 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64  o(yDbMask);.#end
22010 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  if.void sqlite3D
22020 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
22030 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20   SrcList*, int, 
22040 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22050 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65 28  e3CodeDropTable(
22060 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
22070 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
22080 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62  sqlite3DeleteTab
22090 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62  le(sqlite3*, Tab
220a0 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  le*);.#ifndef SQ
220b0 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
220c0 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73  CREMENT.  void s
220d0 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
220e0 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65 20 2a  entBegin(Parse *
220f0 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69 64 20  pParse);.  void 
22100 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
22110 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20 2a 70  mentEnd(Parse *p
22120 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20  Parse);.#else.# 
22130 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
22140 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e  toincrementBegin
22150 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (X).# define sql
22160 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
22170 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a 76  tEnd(X).#endif.v
22180 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72  oid sqlite3Inser
22190 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  t(Parse*, SrcLis
221a0 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c  t*, Select*, IdL
221b0 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ist*, int);.void
221c0 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c   *sqlite3ArrayAl
221d0 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c  locate(sqlite3*,
221e0 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69  void*,int,int*,i
221f0 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71  nt*);.IdList *sq
22200 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e  lite3IdListAppen
22210 64 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69  d(sqlite3*, IdLi
22220 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  st*, Token*);.in
22230 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49  t sqlite3IdListI
22240 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e  ndex(IdList*,con
22250 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69  st char*);.SrcLi
22260 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
22270 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65  stEnlarge(sqlite
22280 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  3*, SrcList*, in
22290 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74  t, int);.SrcList
222a0 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
222b0 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c  Append(sqlite3*,
222c0 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
222d0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c  *, Token*);.SrcL
222e0 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
222f0 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72  istAppendFromTer
22300 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  m(Parse*, SrcLis
22310 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  t*, Token*, Toke
22320 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n*,.            
22330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22340 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a            Token*
22350 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a  , Select*, Expr*
22360 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  , IdList*);.void
22370 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49   sqlite3SrcListI
22380 6e 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a  ndexedBy(Parse *
22390 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b  , SrcList *, Tok
223a0 65 6e 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  en *);.int sqlit
223b0 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75  e3IndexedByLooku
223c0 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63  p(Parse *, struc
223d0 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a  t SrcList_item *
223e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
223f0 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54  rcListShiftJoinT
22400 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76  ype(SrcList*);.v
22410 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
22420 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28  stAssignCursors(
22430 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
22440 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
22450 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  dListDelete(sqli
22460 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a  te3*, IdList*);.
22470 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
22480 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
22490 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49  3*, SrcList*);.I
224a0 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c  ndex *sqlite3All
224b0 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74  ocateIndexObject
224c0 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e  (sqlite3*,i16,in
224d0 74 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e 64 65 78  t,char**);.Index
224e0 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 49   *sqlite3CreateI
224f0 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65  ndex(Parse*,Toke
22500 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73  n*,Token*,SrcLis
22510 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  t*,ExprList*,int
22520 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20  ,Token*,.       
22530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22540 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69     Expr*, int, i
22550 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
22560 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65  3DropIndex(Parse
22570 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
22580 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65  );.int sqlite3Se
22590 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c  lect(Parse*, Sel
225a0 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74  ect*, SelectDest
225b0 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69  *);.Select *sqli
225c0 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72  te3SelectNew(Par
225d0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72  se*,ExprList*,Sr
225e0 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
225f0 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  rList*,.        
22600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22610 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a   Expr*,ExprList*
22620 2c 75 31 36 2c 45 78 70 72 2a 2c 45 78 70 72 2a  ,u16,Expr*,Expr*
22630 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
22640 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69  electDelete(sqli
22650 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  te3*, Select*);.
22660 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72  Table *sqlite3Sr
22670 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73  cListLookup(Pars
22680 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69  e*, SrcList*);.i
22690 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64  nt sqlite3IsRead
226a0 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62  Only(Parse*, Tab
226b0 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  le*, int);.void 
226c0 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
226d0 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75  (Parse*, int iCu
226e0 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c  r, int iDb, Tabl
226f0 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65  e*, int);.#if de
22700 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
22710 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54  BLE_UPDATE_DELET
22720 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66  E_LIMIT) && !def
22730 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
22740 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20  _SUBQUERY).Expr 
22750 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65  *sqlite3LimitWhe
22760 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73  re(Parse*,SrcLis
22770 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
22780 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63  t*,Expr*,Expr*,c
22790 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  har*);.#endif.vo
227a0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
227b0 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63  From(Parse*, Src
227c0 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  List*, Expr*);.v
227d0 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74  oid sqlite3Updat
227e0 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
227f0 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45  t*, ExprList*, E
22800 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72  xpr*, int);.Wher
22810 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68  eInfo *sqlite3Wh
22820 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c  ereBegin(Parse*,
22830 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
22840 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73  xprList*,ExprLis
22850 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69  t*,u16,int);.voi
22860 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e  d sqlite3WhereEn
22870 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 75  d(WhereInfo*);.u
22880 36 34 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f  64 sqlite3WhereO
22890 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68  utputRowCount(Wh
228a0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
228b0 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73  qlite3WhereIsDis
228c0 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a  tinct(WhereInfo*
228d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
228e0 65 72 65 49 73 4f 72 64 65 72 65 64 28 57 68 65  ereIsOrdered(Whe
228f0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
22900 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74  lite3WhereIsSort
22910 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  ed(WhereInfo*);.
22920 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
22930 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68  ContinueLabel(Wh
22940 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
22950 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61 6b  qlite3WhereBreak
22960 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a  Label(WhereInfo*
22970 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
22980 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65  ereOkOnePass(Whe
22990 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a  reInfo*, int*);.
229a0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
229b0 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72  odeGetColumn(Par
229c0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
229d0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
229e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
229f0 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66  rCodeGetColumnOf
22a00 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62  Table(Vdbe*, Tab
22a10 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
22a20 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
22a30 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61  3ExprCodeMove(Pa
22a40 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
22a50 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22a60 65 33 45 78 70 72 43 61 63 68 65 53 74 6f 72 65  e3ExprCacheStore
22a70 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
22a80 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
22a90 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50 75  lite3ExprCachePu
22aa0 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  sh(Parse*);.void
22ab0 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
22ac0 65 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a 76 6f  ePop(Parse*);.vo
22ad0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
22ae0 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65 2a  cheRemove(Parse*
22af0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
22b00 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
22b10 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29 3b  heClear(Parse*);
22b20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
22b30 72 43 61 63 68 65 41 66 66 69 6e 69 74 79 43 68  rCacheAffinityCh
22b40 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  ange(Parse*, int
22b50 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
22b60 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61 72  ite3ExprCode(Par
22b70 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
22b80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
22b90 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65  prCodeFactorable
22ba0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
22bb0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22bc0 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74  e3ExprCodeAtInit
22bd0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
22be0 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
22bf0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d  lite3ExprCodeTem
22c00 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  p(Parse*, Expr*,
22c10 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
22c20 74 65 33 45 78 70 72 43 6f 64 65 54 61 72 67 65  te3ExprCodeTarge
22c30 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
22c40 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
22c50 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61  te3ExprCodeAndCa
22c60 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  che(Parse*, Expr
22c70 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
22c80 69 74 65 33 45 78 70 72 43 6f 64 65 45 78 70 72  ite3ExprCodeExpr
22c90 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70  List(Parse*, Exp
22ca0 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 75 38 29  rList*, int, u8)
22cb0 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ;.#define SQLITE
22cc0 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30  _ECEL_DUP      0
22cd0 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f  x01  /* Deep, no
22ce0 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73  t shallow copies
22cf0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
22d00 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20  TE_ECEL_FACTOR  
22d10 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72   0x02  /* Factor
22d20 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65   out constant te
22d30 72 6d 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  rms */.void sqli
22d40 74 65 33 45 78 70 72 49 66 54 72 75 65 28 50 61  te3ExprIfTrue(Pa
22d50 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
22d60 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
22d70 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 28  ite3ExprIfFalse(
22d80 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
22d90 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20  nt, int);.Table 
22da0 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c  *sqlite3FindTabl
22db0 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  e(sqlite3*,const
22dc0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
22dd0 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ar*);.Table *sql
22de0 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28  ite3LocateTable(
22df0 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65  Parse*,int isVie
22e00 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  w,const char*, c
22e10 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62  onst char*);.Tab
22e20 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74  le *sqlite3Locat
22e30 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65  eTableItem(Parse
22e40 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 73 74 72  *,int isView,str
22e50 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
22e60 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69   *);.Index *sqli
22e70 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c  te3FindIndex(sql
22e80 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
22e90 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
22ea0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c  .void sqlite3Unl
22eb0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c  inkAndDeleteTabl
22ec0 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  e(sqlite3*,int,c
22ed0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
22ee0 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
22ef0 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71  ndDeleteIndex(sq
22f00 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
22f10 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
22f20 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61 72 73  lite3Vacuum(Pars
22f30 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
22f40 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a  RunVacuum(char**
22f50 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61  , sqlite3*);.cha
22f60 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72  r *sqlite3NameFr
22f70 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a  omToken(sqlite3*
22f80 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
22f90 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72  qlite3ExprCompar
22fa0 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  e(Expr*, Expr*, 
22fb0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
22fc0 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65  3ExprListCompare
22fd0 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72  (ExprList*, Expr
22fe0 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  List*, int);.int
22ff0 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c   sqlite3ExprImpl
23000 69 65 73 45 78 70 72 28 45 78 70 72 2a 2c 20 45  iesExpr(Expr*, E
23010 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
23020 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
23030 79 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e 61  yzeAggregates(Na
23040 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
23050 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23060 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69  ExprAnalyzeAggLi
23070 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  st(NameContext*,
23080 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
23090 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55  sqlite3FunctionU
230a0 73 65 73 54 68 69 73 53 72 63 28 45 78 70 72 2a  sesThisSrc(Expr*
230b0 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62  , SrcList*);.Vdb
230c0 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62  e *sqlite3GetVdb
230d0 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  e(Parse*);.void 
230e0 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53  sqlite3PrngSaveS
230f0 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64  tate(void);.void
23100 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74   sqlite3PrngRest
23110 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a  oreState(void);.
23120 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c  void sqlite3Roll
23130 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a  backAll(sqlite3*
23140 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
23150 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
23160 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ema(Parse*, int)
23170 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
23180 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68  deVerifyNamedSch
23190 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  ema(Parse*, cons
231a0 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f  t char *zDb);.vo
231b0 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54  id sqlite3BeginT
231c0 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
231d0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
231e0 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e 73  lite3CommitTrans
231f0 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a  action(Parse*);.
23200 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c  void sqlite3Roll
23210 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28  backTransaction(
23220 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
23230 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50  lite3Savepoint(P
23240 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  arse*, int, Toke
23250 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
23260 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73  3CloseSavepoints
23270 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69  (sqlite3 *);.voi
23280 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75  d sqlite3LeaveMu
23290 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69  texAndCloseZombi
232a0 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  e(sqlite3*);.int
232b0 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
232c0 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69  nstant(Expr*);.i
232d0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
232e0 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28  ConstantNotJoin(
232f0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
23300 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
23310 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72  tOrFunction(Expr
23320 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  *, u8);.int sqli
23330 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43 6f  te3ExprIsTableCo
23340 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74  nstant(Expr*,int
23350 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
23360 70 72 49 73 49 6e 74 65 67 65 72 28 45 78 70 72  prIsInteger(Expr
23370 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
23380 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75  lite3ExprCanBeNu
23390 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b  ll(const Expr*);
233a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
233b0 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43  NeedsNoAffinityC
233c0 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72  hange(const Expr
233d0 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71  *, char);.int sq
233e0 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e  lite3IsRowid(con
233f0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
23400 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
23410 6f 77 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c  owDelete(Parse*,
23420 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c  Table*,Trigger*,
23430 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c  int,int,int,i16,
23440 75 38 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20  u8,u8,u8);.void 
23450 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
23460 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61  owIndexDelete(Pa
23470 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
23480 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69  t, int, int*);.i
23490 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  nt sqlite3Genera
234a0 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65  teIndexKey(Parse
234b0 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20  *, Index*, int, 
234c0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49  int, int, int*,I
234d0 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ndex*,int);.void
234e0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50   sqlite3ResolveP
234f0 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73  artIdxLabel(Pars
23500 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
23510 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e  lite3GenerateCon
23520 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61  straintChecks(Pa
23530 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a  rse*,Table*,int*
23540 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
23550 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
23560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23570 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74         u8,u8,int
23580 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ,int*);.void sql
23590 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65  ite3CompleteInse
235a0 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62  rtion(Parse*,Tab
235b0 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  le*,int,int,int,
235c0 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
235d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
235e0 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65  enTableAndIndice
235f0 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
23600 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2a 2c  , int, int, u8*,
23610 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f   int*, int*);.vo
23620 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57  id sqlite3BeginW
23630 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61  riteOperation(Pa
23640 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
23650 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c  .void sqlite3Mul
23660 74 69 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b  tiWrite(Parse*);
23670 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79  .void sqlite3May
23680 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76  Abort(Parse*);.v
23690 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43  oid sqlite3HaltC
236a0 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
236b0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72  , int, int, char
236c0 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64  *, i8, u8);.void
236d0 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65 43 6f   sqlite3UniqueCo
236e0 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
236f0 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76   int, Index*);.v
23700 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 69 64  oid sqlite3Rowid
23710 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
23720 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b  *, int, Table*);
23730 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
23740 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45  prDup(sqlite3*,E
23750 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c  xpr*,int);.ExprL
23760 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
23770 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
23780 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b  ,ExprList*,int);
23790 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
237a0 33 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69  3SrcListDup(sqli
237b0 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e  te3*,SrcList*,in
237c0 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69  t);.IdList *sqli
237d0 74 65 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c  te3IdListDup(sql
237e0 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a  ite3*,IdList*);.
237f0 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53  Select *sqlite3S
23800 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65 33  electDup(sqlite3
23810 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a  *,Select*,int);.
23820 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f  #if SELECTTRACE_
23830 45 4e 41 42 4c 45 44 0a 76 6f 69 64 20 73 71 6c  ENABLED.void sql
23840 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d  ite3SelectSetNam
23850 65 28 53 65 6c 65 63 74 2a 2c 63 6f 6e 73 74 20  e(Select*,const 
23860 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  char*);.#else.# 
23870 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65  define sqlite3Se
23880 6c 65 63 74 53 65 74 4e 61 6d 65 28 41 2c 42 29  lectSetName(A,B)
23890 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
238a0 69 74 65 33 46 75 6e 63 44 65 66 49 6e 73 65 72  ite3FuncDefInser
238b0 74 28 46 75 6e 63 44 65 66 48 61 73 68 2a 2c 20  t(FuncDefHash*, 
238c0 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63 44  FuncDef*);.FuncD
238d0 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46  ef *sqlite3FindF
238e0 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  unction(sqlite3*
238f0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
23900 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69  ,int,u8,u8);.voi
23910 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
23920 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  rBuiltinFunction
23930 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  s(sqlite3*);.voi
23940 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
23950 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f  rDateTimeFunctio
23960 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
23970 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 47 6c  qlite3RegisterGl
23980 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28 76 6f  obalFunctions(vo
23990 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  id);.int sqlite3
239a0 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71  SafetyCheckOk(sq
239b0 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
239c0 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53  ite3SafetyCheckS
239d0 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a  ickOrOk(sqlite3*
239e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
239f0 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73  hangeCookie(Pars
23a00 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21  e*, int);..#if !
23a10 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
23a20 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21 64 65  MIT_VIEW) && !de
23a30 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
23a40 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20  T_TRIGGER).void 
23a50 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69  sqlite3Materiali
23a60 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54  zeView(Parse*, T
23a70 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  able*, Expr*, in
23a80 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  t);.#endif..#ifn
23a90 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
23aa0 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73  TRIGGER.  void s
23ab0 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67 67  qlite3BeginTrigg
23ac0 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  er(Parse*, Token
23ad0 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
23ae0 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74  ,IdList*,SrcList
23af0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
23b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
23b10 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  pr*,int, int);. 
23b20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e   void sqlite3Fin
23b30 69 73 68 54 72 69 67 67 65 72 28 50 61 72 73 65  ishTrigger(Parse
23b40 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c  *, TriggerStep*,
23b50 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64   Token*);.  void
23b60 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
23b70 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ger(Parse*, SrcL
23b80 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  ist*, int);.  vo
23b90 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
23ba0 69 67 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c  iggerPtr(Parse*,
23bb0 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72   Trigger*);.  Tr
23bc0 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72  igger *sqlite3Tr
23bd0 69 67 67 65 72 73 45 78 69 73 74 28 50 61 72 73  iggersExist(Pars
23be0 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  e *, Table*, int
23bf0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
23c00 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67   *pMask);.  Trig
23c10 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67  ger *sqlite3Trig
23c20 67 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c  gerList(Parse *,
23c30 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69   Table *);.  voi
23c40 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
23c50 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
23c60 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20  Trigger *, int, 
23c70 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
23c80 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20  Table *,.       
23c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ca0 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69       int, int, i
23cb0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
23cc0 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
23cd0 72 44 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c  rDirect(Parse *,
23ce0 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c   Trigger *, Tabl
23cf0 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e *, int, int, i
23d00 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
23d10 74 65 56 69 65 77 54 72 69 67 67 65 72 73 28 50  teViewTriggers(P
23d20 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
23d30 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  xpr*, int, ExprL
23d40 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ist*);.  void sq
23d50 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
23d60 65 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  erStep(sqlite3*,
23d70 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a   TriggerStep*);.
23d80 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
23d90 71 6c 69 74 65 33 54 72 69 67 67 65 72 53 65 6c  qlite3TriggerSel
23da0 65 63 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ectStep(sqlite3*
23db0 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69  ,Select*);.  Tri
23dc0 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
23dd0 33 54 72 69 67 67 65 72 49 6e 73 65 72 74 53 74  3TriggerInsertSt
23de0 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
23df0 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20  n*, IdList*,.   
23e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c 75 38 29       Select*,u8)
23e30 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
23e40 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55  *sqlite3TriggerU
23e50 70 64 61 74 65 53 74 65 70 28 73 71 6c 69 74 65  pdateStep(sqlite
23e60 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  3*,Token*,ExprLi
23e70 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b  st*, Expr*, u8);
23e80 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
23e90 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65  sqlite3TriggerDe
23ea0 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74 65 33  leteStep(sqlite3
23eb0 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29  *,Token*, Expr*)
23ec0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
23ed0 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71  DeleteTrigger(sq
23ee0 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a  lite3*, Trigger*
23ef0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
23f00 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
23f10 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
23f20 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
23f30 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
23f40 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50  TriggerColmask(P
23f50 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45  arse*,Trigger*,E
23f60 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74  xprList*,int,int
23f70 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20  ,Table*,int);.# 
23f80 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61  define sqlite3Pa
23f90 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28  rseToplevel(p) (
23fa0 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f  (p)->pToplevel ?
23fb0 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20   (p)->pToplevel 
23fc0 3a 20 28 70 29 29 0a 23 65 6c 73 65 0a 23 20 64  : (p)).#else.# d
23fd0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
23fe0 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44  ggersExist(B,C,D
23ff0 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65  ,E,F) 0.# define
24000 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
24010 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66  igger(A,B).# def
24020 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54  ine sqlite3DropT
24030 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23  riggerPtr(A,B).#
24040 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55   define sqlite3U
24050 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
24060 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64  igger(A,B,C).# d
24070 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
24080 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c  eRowTrigger(A,B,
24090 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23  C,D,E,F,G,H,I).#
240a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
240b0 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
240c0 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29  ect(A,B,C,D,E,F)
240d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
240e0 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20  3TriggerList(X, 
240f0 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  Y) 0.# define sq
24100 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
24110 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65  el(p) p.# define
24120 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
24130 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45  olmask(A,B,C,D,E
24140 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a  ,F,G) 0.#endif..
24150 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54  int sqlite3JoinT
24160 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
24170 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
24180 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
24190 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65  3CreateForeignKe
241a0 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
241b0 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70  st*, Token*, Exp
241c0 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  rList*, int);.vo
241d0 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46  id sqlite3DeferF
241e0 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
241f0 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  , int);.#ifndef 
24200 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
24210 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64  ORIZATION.  void
24220 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
24230 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63  (Parse*,Expr*,Sc
24240 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b  hema*,SrcList*);
24250 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
24260 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69  thCheck(Parse*,i
24270 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
24280 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
24290 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
242a0 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
242b0 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a  ntextPush(Parse*
242c0 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20  , AuthContext*, 
242d0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
242e0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
242f0 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43  ContextPop(AuthC
24300 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20  ontext*);.  int 
24310 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43  sqlite3AuthReadC
24320 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ol(Parse*, const
24330 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63   char *, const c
24340 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  har *, int);.#el
24350 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
24360 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c  te3AuthRead(a,b,
24370 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71  c,d).# define sq
24380 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61  lite3AuthCheck(a
24390 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c  ,b,c,d,e)    SQL
243a0 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20  ITE_OK.# define 
243b0 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
243c0 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20  xtPush(a,b,c).# 
243d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
243e0 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20  thContextPop(a) 
243f0 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e   ((void)(a)).#en
24400 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
24410 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Attach(Parse*, E
24420 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  xpr*, Expr*, Exp
24430 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
24440 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Detach(Parse*, 
24450 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
24460 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69  ite3FixInit(DbFi
24470 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e  xer*, Parse*, in
24480 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
24490 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69  const Token*);.i
244a0 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63  nt sqlite3FixSrc
244b0 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53  List(DbFixer*, S
244c0 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
244d0 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44  lite3FixSelect(D
244e0 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a  bFixer*, Select*
244f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
24500 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20  xExpr(DbFixer*, 
24510 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
24520 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44  te3FixExprList(D
24530 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73  bFixer*, ExprLis
24540 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
24550 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44  FixTriggerStep(D
24560 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72  bFixer*, Trigger
24570 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Step*);.int sqli
24580 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68  te3AtoF(const ch
24590 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20  ar *z, double*, 
245a0 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
245b0 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f  lite3GetInt32(co
245c0 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a  nst char *, int*
245d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
245e0 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  oi(const char*);
245f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31  .int sqlite3Utf1
24600 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76  6ByteLen(const v
24610 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  oid *pData, int 
24620 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69  nChar);.int sqli
24630 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63  te3Utf8CharLen(c
24640 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61  onst char *pData
24650 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33  , int nByte);.u3
24660 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61  2 sqlite3Utf8Rea
24670 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c  d(const u8**);.L
24680 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
24690 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74  Est(u64);.LogEst
246a0 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64   sqlite3LogEstAd
246b0 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29  d(LogEst,LogEst)
246c0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
246d0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
246e0 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  LE.LogEst sqlite
246f0 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c  3LogEstFromDoubl
24700 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69  e(double);.#endi
24710 66 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f 67  f.u64 sqlite3Log
24720 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29  EstToInt(LogEst)
24730 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65  ;../*.** Routine
24740 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72  s to read and wr
24750 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e  ite variable-len
24760 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54  gth integers.  T
24770 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  hese used to.** 
24780 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c  be defined local
24790 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75  ly, but now we u
247a0 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f  se the varint ro
247b0 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74  utines in the ut
247c0 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f  il.c.** file..*/
247d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56  .int sqlite3PutV
247e0 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63  arint(unsigned c
247f0 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73  har*, u64);.u8 s
24800 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28  qlite3GetVarint(
24810 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
24820 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75  har *, u64 *);.u
24830 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
24840 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67  nt32(const unsig
24850 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20  ned char *, u32 
24860 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
24870 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b  arintLen(u64 v);
24880 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d  ../*.** The comm
24890 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20 61  on case is for a
248a0 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20   varint to be a 
248b0 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68  single byte.  Th
248c0 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  ey following.** 
248d0 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68  macros handle th
248e0 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69  e common case wi
248f0 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72  thout a procedur
24900 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e  e call, but then
24910 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f   call.** the pro
24920 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65  cedure for large
24930 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64  r varints..*/.#d
24940 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33  efine getVarint3
24950 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
24960 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29  ((*(A)<(u8)0x80)
24970 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29  ?((B)=(u32)*(A))
24980 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72  ,1:sqlite3GetVar
24990 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a  int32((A),(u32 *
249a0 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  )&(B))).#define 
249b0 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29  putVarint32(A,B)
249c0 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32    \.  (u8)(((u32
249d0 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f  )(B)<(u32)0x80)?
249e0 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20  (*(A)=(unsigned 
249f0 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20  char)(B)),1:\.  
24a00 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
24a10 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69  ((A),(B))).#defi
24a20 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20  ne getVarint    
24a30 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
24a40 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69  .#define putVari
24a50 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74  nt    sqlite3Put
24a60 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63  Varint...const c
24a70 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65  har *sqlite3Inde
24a80 78 41 66 66 69 6e 69 74 79 53 74 72 28 56 64 62  xAffinityStr(Vdb
24a90 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 76  e *, Index *);.v
24aa0 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
24ab0 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20  Affinity(Vdbe*, 
24ac0 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68  Table*, int);.ch
24ad0 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72  ar sqlite3Compar
24ae0 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  eAffinity(Expr *
24af0 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32  pExpr, char aff2
24b00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
24b10 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78  dexAffinityOk(Ex
24b20 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
24b30 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63  idx_affinity);.c
24b40 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41  har sqlite3ExprA
24b50 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45  ffinity(Expr *pE
24b60 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xpr);.int sqlite
24b70 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68  3Atoi64(const ch
24b80 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20  ar*, i64*, int, 
24b90 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
24ba0 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f  DecOrHexToI64(co
24bb0 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29  nst char*, i64*)
24bc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
24bd0 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74  rorWithMsg(sqlit
24be0 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
24bf0 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64  char*,...);.void
24c00 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71   sqlite3Error(sq
24c10 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
24c20 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42  d *sqlite3HexToB
24c30 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  lob(sqlite3*, co
24c40 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74  nst char *z, int
24c50 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48   n);.u8 sqlite3H
24c60 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a  exToInt(int h);.
24c70 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61  int sqlite3TwoPa
24c80 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20  rtName(Parse *, 
24c90 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
24ca0 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69  , Token **);..#i
24cb0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
24cc0 5f 54 45 53 54 29 20 0a 63 6f 6e 73 74 20 63 68  _TEST) .const ch
24cd0 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61  ar *sqlite3ErrNa
24ce0 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  me(int);.#endif.
24cf0 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
24d00 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b  ite3ErrStr(int);
24d10 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64  .int sqlite3Read
24d20 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50  Schema(Parse *pP
24d30 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  arse);.CollSeq *
24d40 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53  sqlite3FindCollS
24d50 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65  eq(sqlite3*,u8 e
24d60 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nc, const char*,
24d70 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  int);.CollSeq *s
24d80 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c  qlite3LocateColl
24d90 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
24da0 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e  e, const char*zN
24db0 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ame);.CollSeq *s
24dc0 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65  qlite3ExprCollSe
24dd0 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
24de0 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45   Expr *pExpr);.E
24df0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
24e00 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28  AddCollateToken(
24e10 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
24e20 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  xpr*, const Toke
24e30 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  n*);.Expr *sqlit
24e40 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65  e3ExprAddCollate
24e50 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78  String(Parse*,Ex
24e60 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  pr*,const char*)
24e70 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
24e80 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45  xprSkipCollate(E
24e90 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
24ea0 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50  e3CheckCollSeq(P
24eb0 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20  arse *, CollSeq 
24ec0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
24ed0 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50  heckObjectName(P
24ee0 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68  arse *, const ch
24ef0 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar *);.void sqli
24f00 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
24f10 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  s(sqlite3 *, int
24f20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64  );.int sqlite3Ad
24f30 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  dInt64(i64*,i64)
24f40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62  ;.int sqlite3Sub
24f50 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
24f60 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49  .int sqlite3MulI
24f70 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
24f80 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e  int sqlite3AbsIn
24f90 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66  t32(int);.#ifdef
24fa0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38   SQLITE_ENABLE_8
24fb0 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71  _3_NAMES.void sq
24fc0 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33  lite3FileSuffix3
24fd0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68  (const char*, ch
24fe0 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ar*);.#else.# de
24ff0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65  fine sqlite3File
25000 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e  Suffix3(X,Y).#en
25010 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65  dif.u8 sqlite3Ge
25020 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63  tBoolean(const c
25030 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e  har *z,u8);..con
25040 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  st void *sqlite3
25050 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65  ValueText(sqlite
25060 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69  3_value*, u8);.i
25070 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42  nt sqlite3ValueB
25080 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c  ytes(sqlite3_val
25090 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  ue*, u8);.void s
250a0 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
250b0 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  r(sqlite3_value*
250c0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
250d0 64 20 2a 2c 75 38 2c 20 0a 20 20 20 20 20 20 20  d *,u8, .       
250e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250f0 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
25100 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
25110 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74  lueSetNull(sqlit
25120 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64  e3_value*);.void
25130 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65   sqlite3ValueFre
25140 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  e(sqlite3_value*
25150 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  );.sqlite3_value
25160 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65   *sqlite3ValueNe
25170 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68  w(sqlite3 *);.ch
25180 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36  ar *sqlite3Utf16
25190 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  to8(sqlite3 *, c
251a0 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
251b0 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
251c0 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73  3ValueFromExpr(s
251d0 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a  qlite3 *, Expr *
251e0 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65  , u8, u8, sqlite
251f0 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69  3_value **);.voi
25200 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70  d sqlite3ValueAp
25210 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69  plyAffinity(sqli
25220 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c  te3_value *, u8,
25230 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51   u8);.#ifndef SQ
25240 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
25250 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  N.extern const u
25260 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
25270 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72  ite3OpcodeProper
25280 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  ty[];.extern con
25290 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
252a0 20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c   sqlite3UpperToL
252b0 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  ower[];.extern c
252c0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
252d0 61 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d  ar sqlite3CtypeM
252e0 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  ap[];.extern con
252f0 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33  st Token sqlite3
25300 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74  IntTokens[];.ext
25310 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73  ern SQLITE_WSD s
25320 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
25330 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  fig sqlite3Confi
25340 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45  g;.extern SQLITE
25350 5f 57 53 44 20 46 75 6e 63 44 65 66 48 61 73 68  _WSD FuncDefHash
25360 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75   sqlite3GlobalFu
25370 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66  nctions;.#ifndef
25380 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
25390 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69  .extern int sqli
253a0 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a  te3PendingByte;.
253b0 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f  #endif.#endif.vo
253c0 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61  id sqlite3RootPa
253d0 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a  geMoved(sqlite3*
253e0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
253f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
25400 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f  index(Parse*, To
25410 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ken*, Token*);.v
25420 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
25430 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
25440 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
25450 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61  erRenameTable(Pa
25460 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
25470 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
25480 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e  ite3GetToken(con
25490 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
254a0 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64   *, int *);.void
254b0 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61   sqlite3NestedPa
254c0 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  rse(Parse*, cons
254d0 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76  t char*, ...);.v
254e0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 69 72  oid sqlite3Expir
254f0 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
25500 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  nts(sqlite3*);.i
25510 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75  nt sqlite3CodeSu
25520 62 73 65 6c 65 63 74 28 50 61 72 73 65 20 2a 2c  bselect(Parse *,
25530 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e   Expr *, int, in
25540 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25550 53 65 6c 65 63 74 50 72 65 70 28 50 61 72 73 65  SelectPrep(Parse
25560 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65  *, Select*, Name
25570 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73  Context*);.int s
25580 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e  qlite3MatchSpanN
25590 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ame(const char*,
255a0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
255b0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
255c0 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
255d0 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e  ite3ResolveExprN
255e0 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ames(NameContext
255f0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
25600 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65  sqlite3ResolveSe
25610 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a  lectNames(Parse*
25620 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43  , Select*, NameC
25630 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73  ontext*);.void s
25640 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c  qlite3ResolveSel
25650 66 52 65 66 65 72 65 6e 63 65 28 50 61 72 73 65  fReference(Parse
25660 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70  *,Table*,int,Exp
25670 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  r*,ExprList*);.i
25680 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  nt sqlite3Resolv
25690 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50 61  eOrderGroupBy(Pa
256a0 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45  rse*, Select*, E
256b0 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20  xprList*, const 
256c0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
256d0 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c  ite3ColumnDefaul
256e0 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20  t(Vdbe *, Table 
256f0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
25700 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46  id sqlite3AlterF
25710 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50  inishAddColumn(P
25720 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29  arse *, Token *)
25730 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
25740 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d  terBeginAddColum
25750 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69  n(Parse *, SrcLi
25760 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  st *);.CollSeq *
25770 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65  sqlite3GetCollSe
25780 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f  q(Parse*, u8, Co
25790 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63  llSeq *, const c
257a0 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69  har*);.char sqli
257b0 74 65 33 41 66 66 69 6e 69 74 79 54 79 70 65 28  te3AffinityType(
257c0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 38 2a  const char*, u8*
257d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
257e0 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54  nalyze(Parse*, T
257f0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
25800 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b  int sqlite3Invok
25810 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73  eBusyHandler(Bus
25820 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20  yHandler*);.int 
25830 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71  sqlite3FindDb(sq
25840 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
25850 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
25860 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a  DbName(sqlite3 *
25870 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
25880 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c  .int sqlite3Anal
25890 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33  ysisLoad(sqlite3
258a0 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64  *,int iDB);.void
258b0 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e   sqlite3DeleteIn
258c0 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74  dexSamples(sqlit
258d0 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  e3*,Index*);.voi
258e0 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74  d sqlite3Default
258f0 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a  RowEst(Index*);.
25900 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
25910 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  sterLikeFunction
25920 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  s(sqlite3*, int)
25930 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c  ;.int sqlite3IsL
25940 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  ikeFunction(sqli
25950 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c  te3*,Expr*,int*,
25960 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
25970 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69 6c 65 46  ite3MinimumFileF
25980 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c 20 69 6e  ormat(Parse*, in
25990 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
259a0 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72  lite3SchemaClear
259b0 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61  (void *);.Schema
259c0 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47   *sqlite3SchemaG
259d0 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74  et(sqlite3 *, Bt
259e0 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ree *);.int sqli
259f0 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78  te3SchemaToIndex
25a00 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63  (sqlite3 *db, Sc
25a10 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f  hema *);.KeyInfo
25a20 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
25a30 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69  Alloc(sqlite3*,i
25a40 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
25a50 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65  lite3KeyInfoUnre
25a60 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79  f(KeyInfo*);.Key
25a70 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
25a80 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a  InfoRef(KeyInfo*
25a90 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
25aa0 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65  te3KeyInfoOfInde
25ab0 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  x(Parse*, Index*
25ac0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
25ad0 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74  _DEBUG.int sqlit
25ae0 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65  e3KeyInfoIsWrite
25af0 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  able(KeyInfo*);.
25b00 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
25b10 65 33 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c  e3CreateFunc(sql
25b20 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
25b30 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ar *, int, int, 
25b40 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f 69 64 20  void *, .  void 
25b50 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
25b60 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
25b70 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f  _value **),.  vo
25b80 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
25b90 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
25ba0 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76  te3_value **), v
25bb0 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
25bc0 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e  context*),.  Fun
25bd0 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65  cDestructor *pDe
25be0 73 74 72 75 63 74 6f 72 0a 29 3b 0a 69 6e 74 20  structor.);.int 
25bf0 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 73  sqlite3ApiExit(s
25c00 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29  qlite3 *db, int)
25c10 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65  ;.int sqlite3Ope
25c20 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28 50 61  nTempDatabase(Pa
25c30 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71  rse *);..void sq
25c40 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69  lite3StrAccumIni
25c50 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 68 61  t(StrAccum*, cha
25c60 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
25c70 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
25c80 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63  cumAppend(StrAcc
25c90 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  um*,const char*,
25ca0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
25cb0 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
25cc0 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f  All(StrAccum*,co
25cd0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
25ce0 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64 43 68   sqlite3AppendCh
25cf0 61 72 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74  ar(StrAccum*,int
25d00 2c 63 68 61 72 29 3b 0a 63 68 61 72 20 2a 73 71  ,char);.char *sq
25d10 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e  lite3StrAccumFin
25d20 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a  ish(StrAccum*);.
25d30 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
25d40 63 63 75 6d 52 65 73 65 74 28 53 74 72 41 63 63  ccumReset(StrAcc
25d50 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  um*);.void sqlit
25d60 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74  e3SelectDestInit
25d70 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74  (SelectDest*,int
25d80 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
25d90 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e  ite3CreateColumn
25da0 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20  Expr(sqlite3 *, 
25db0 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20  SrcList *, int, 
25dc0 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  int);..void sqli
25dd0 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72 74  te3BackupRestart
25de0 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20  (sqlite3_backup 
25df0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25e00 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c  BackupUpdate(sql
25e10 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50  ite3_backup *, P
25e20 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29  gno, const u8 *)
25e30 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
25e40 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
25e50 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71 6c 69  _STAT4.void sqli
25e60 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69  te3AnalyzeFuncti
25e70 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73  ons(void);.int s
25e80 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65  qlite3Stat4Probe
25e90 53 65 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c  SetValue(Parse*,
25ea0 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52  Index*,UnpackedR
25eb0 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 75 38  ecord**,Expr*,u8
25ec0 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20  ,int,int*);.int 
25ed0 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75  sqlite3Stat4Valu
25ee0 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65 2a  eFromExpr(Parse*
25ef0 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c  , Expr*, u8, sql
25f00 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76  ite3_value**);.v
25f10 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 34  oid sqlite3Stat4
25f20 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b  ProbeFree(Unpack
25f30 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20  edRecord*);.int 
25f40 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75  sqlite3Stat4Colu
25f50 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  mn(sqlite3*, con
25f60 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69  st void*, int, i
25f70 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  nt, sqlite3_valu
25f80 65 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  e**);.#endif../*
25f90 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
25fa0 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67  e to the LEMON-g
25fb0 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a  enerated parser.
25fc0 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  */.void *sqlite3
25fd0 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64  ParserAlloc(void
25fe0 2a 28 2a 29 28 75 36 34 29 29 3b 0a 76 6f 69 64  *(*)(u64));.void
25ff0 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 72   sqlite3ParserFr
26000 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a  ee(void*, void(*
26010 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20  )(void*));.void 
26020 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f  sqlite3Parser(vo
26030 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c  id*, int, Token,
26040 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66   Parse*);.#ifdef
26050 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b   YYTRACKMAXSTACK
26060 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69  DEPTH.  int sqli
26070 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65  te3ParserStackPe
26080 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69  ak(void*);.#endi
26090 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  f..void sqlite3A
260a0 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  utoLoadExtension
260b0 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66  s(sqlite3*);.#if
260c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
260d0 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
260e0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c    void sqlite3Cl
260f0 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oseExtensions(sq
26100 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23  lite3*);.#else.#
26110 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
26120 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58  loseExtensions(X
26130 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ).#endif..#ifnde
26140 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
26150 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69  ARED_CACHE.  voi
26160 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  d sqlite3TableLo
26170 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c  ck(Parse *, int,
26180 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20   int, u8, const 
26190 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  char *);.#else. 
261a0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
261b0 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c  TableLock(v,w,x,
261c0 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  y,z).#endif..#if
261d0 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
261e0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66    int sqlite3Utf
261f0 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68  8To8(unsigned ch
26200 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
26210 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
26220 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
26230 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
26240 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64  tabClear(Y).#  d
26250 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
26260 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54  bSync(X,Y) SQLIT
26270 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
26280 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
26290 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
262a0 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
262b0 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
262c0 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
262d0 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65  (db) 0.#  define
262e0 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
262f0 28 58 29 20 0a 23 20 20 64 65 66 69 6e 65 20 73  (X) .#  define s
26300 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
26310 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
26320 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
26330 69 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ist(X).#  define
26340 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
26350 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53  point(X, Y, Z) S
26360 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69  QLITE_OK.#  defi
26370 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56 54 61  ne sqlite3GetVTa
26380 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61 62  ble(X,Y)  ((VTab
26390 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20  le*)0).#else.   
263a0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
263b0 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64  Clear(sqlite3 *d
263c0 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76  b, Table*);.   v
263d0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 44  oid sqlite3VtabD
263e0 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65  isconnect(sqlite
263f0 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29  3 *db, Table *p)
26400 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
26410 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33  VtabSync(sqlite3
26420 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20   *db, Vdbe*);.  
26430 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
26440 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33  Rollback(sqlite3
26450 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71   *db);.   int sq
26460 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28  lite3VtabCommit(
26470 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
26480 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
26490 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b  bLock(VTable *);
264a0 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
264b0 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c  VtabUnlock(VTabl
264c0 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  e *);.   void sq
264d0 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
264e0 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20  ist(sqlite3*);. 
264f0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
26500 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74  bSavepoint(sqlit
26510 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  e3 *, int, int);
26520 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
26530 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
26540 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f  (Vdbe*, sqlite3_
26550 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c  vtab*);.   VTabl
26560 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61  e *sqlite3GetVTa
26570 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61  ble(sqlite3*, Ta
26580 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65  ble*);.#  define
26590 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
265a0 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56  nc(db) ((db)->nV
265b0 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d  Trans>0 && (db)-
265c0 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e  >aVTrans==0).#en
265d0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
265e0 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65  VtabMakeWritable
265f0 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b  (Parse*,Table*);
26600 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
26610 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73  bBeginParse(Pars
26620 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
26630 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29  n*, Token*, int)
26640 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
26650 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50 61  abFinishParse(Pa
26660 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  rse*, Token*);.v
26670 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41  oid sqlite3VtabA
26680 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a  rgInit(Parse*);.
26690 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
266a0 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a  ArgExtend(Parse*
266b0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
266c0 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72  qlite3VtabCallCr
266d0 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69  eate(sqlite3*, i
266e0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
266f0 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20  , char **);.int 
26700 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
26710 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54  onnect(Parse*, T
26720 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  able*);.int sqli
26730 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72  te3VtabCallDestr
26740 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  oy(sqlite3*, int
26750 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
26760 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
26770 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c  Begin(sqlite3 *,
26780 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63   VTable *);.Func
26790 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62  Def *sqlite3Vtab
267a0 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e  OverloadFunction
267b0 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44  (sqlite3 *,FuncD
267c0 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45  ef*, int nArg, E
267d0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
267e0 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69  te3InvalidFuncti
267f0 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  on(sqlite3_conte
26800 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
26810 76 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65  value**);.sqlite
26820 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53  3_int64 sqlite3S
26830 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73  tmtCurrentTime(s
26840 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
26850 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  ;.int sqlite3Vdb
26860 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28  eParameterIndex(
26870 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Vdbe*, const cha
26880 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
26890 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e  lite3TransferBin
268a0 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74  dings(sqlite3_st
268b0 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74  mt *, sqlite3_st
268c0 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  mt *);.void sqli
268d0 74 65 33 50 61 72 73 65 72 52 65 73 65 74 28 50  te3ParserReset(P
268e0 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
268f0 74 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62  te3Reprepare(Vdb
26900 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
26910 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65  3ExprListCheckLe
26920 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70  ngth(Parse*, Exp
26930 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
26940 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ar*);.CollSeq *s
26950 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70  qlite3BinaryComp
26960 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  areCollSeq(Parse
26970 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72   *, Expr *, Expr
26980 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
26990 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e  TempInMemory(con
269a0 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f  st sqlite3*);.co
269b0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
269c0 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
269d0 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  (int);.#ifndef S
269e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
269f0 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63   int sqlite3Chec
26a00 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c  kpoint(sqlite3*,
26a10 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
26a20 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71   int*);.  int sq
26a30 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48  lite3WalDefaultH
26a40 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  ook(void*,sqlite
26a50 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  3*,const char*,i
26a60 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e  nt);.#endif.#ifn
26a70 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
26a80 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69  CTE.  With *sqli
26a90 74 65 33 57 69 74 68 41 64 64 28 50 61 72 73 65  te3WithAdd(Parse
26aa0 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45  *,With*,Token*,E
26ab0 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a  xprList*,Select*
26ac0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
26ad0 33 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69  3WithDelete(sqli
26ae0 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76  te3*,With*);.  v
26af0 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 50  oid sqlite3WithP
26b00 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68  ush(Parse*, With
26b10 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64  *, u8);.#else.#d
26b20 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74  efine sqlite3Wit
26b30 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65  hPush(x,y,z).#de
26b40 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68  fine sqlite3With
26b50 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64  Delete(x,y).#end
26b60 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69  if../* Declarati
26b70 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ons for function
26b80 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c  s in fkey.c. All
26b90 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72 65   of these are re
26ba0 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d  placed by.** no-
26bb0 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49  op macros if OMI
26bc0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
26bd0 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69   defined. In thi
26be0 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67  s case no foreig
26bf0 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f  n.** key functio
26c00 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61  nality is availa
26c10 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49  ble. If OMIT_TRI
26c20 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64 20  GGER is defined 
26c30 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45  but.** OMIT_FORE
26c40 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20  IGN_KEY is not, 
26c50 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65  only some of the
26c60 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e   functions are n
26c70 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68  o-oped. In.** th
26c80 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20  is case foreign 
26c90 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64 2c  keys are parsed,
26ca0 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75   but no other fu
26cb0 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 0a  nctionality is .
26cc0 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66  ** provided (enf
26cd0 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63  orcement of FK c
26ce0 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75 69  onstraints requi
26cf0 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72 73  res the triggers
26d00 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f   sub-system)..*/
26d10 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
26d20 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
26d30 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e  N_KEY) && !defin
26d40 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ed(SQLITE_OMIT_T
26d50 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73  RIGGER).  void s
26d60 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61  qlite3FkCheck(Pa
26d70 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
26d80 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
26d90 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
26da0 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61  e3FkDropTable(Pa
26db0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  rse*, SrcList *,
26dc0 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64   Table*);.  void
26dd0 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
26de0 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
26df0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
26e00 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
26e10 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71  int sqlite3FkReq
26e20 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61  uired(Parse*, Ta
26e30 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29  ble*, int*, int)
26e40 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 46  ;.  u32 sqlite3F
26e50 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c  kOldmask(Parse*,
26e60 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79   Table*);.  FKey
26e70 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72   *sqlite3FkRefer
26e80 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a  ences(Table *);.
26e90 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
26ea0 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73  sqlite3FkActions
26eb0 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20  (a,b,c,d,e,f).  
26ec0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
26ed0 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65  kCheck(a,b,c,d,e
26ee0 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,f).  #define sq
26ef0 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65  lite3FkDropTable
26f00 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e  (a,b,c).  #defin
26f10 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61  e sqlite3FkOldma
26f20 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20 20  sk(a,b)         
26f30 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
26f40 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c  te3FkRequired(a,
26f50 62 2c 63 2c 64 29 20 20 20 20 30 0a 23 65 6e 64  b,c,d)    0.#end
26f60 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
26f70 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
26f80 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  EY.  void sqlite
26f90 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65  3FkDelete(sqlite
26fa0 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  3 *, Table*);.  
26fb0 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  int sqlite3FkLoc
26fc0 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
26fd0 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64  Table*,FKey*,Ind
26fe0 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c  ex**,int**);.#el
26ff0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
27000 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62  ite3FkDelete(a,b
27010 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
27020 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
27030 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64  (a,b,c,d,e).#end
27040 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c  if.../*.** Avail
27050 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63  able fault injec
27060 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65  tors.  Should be
27070 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e   numbered beginn
27080 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23  ing with 0..*/.#
27090 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41  define SQLITE_FA
270a0 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c  ULTINJECTOR_MALL
270b0 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65  OC     0.#define
270c0 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a   SQLITE_FAULTINJ
270d0 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20  ECTOR_COUNT     
270e0 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e   1../*.** The in
270f0 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 63  terface to the c
27100 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75  ode in fault.c u
27110 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79  sed for identify
27120 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20  ing "benign".** 
27130 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e  malloc failures.
27140 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72   This is only pr
27150 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f  esent if SQLITE_
27160 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
27170 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69  T.** is not defi
27180 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ned..*/.#ifndef 
27190 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
271a0 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64 20  TIN_TEST.  void 
271b0 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
271c0 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
271d0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e    void sqlite3En
271e0 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f  dBenignMalloc(vo
271f0 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  id);.#else.  #de
27200 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69  fine sqlite3Begi
27210 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a  nBenignMalloc().
27220 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
27230 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
27240 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ().#endif../*.**
27250 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20   Allowed return 
27260 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69  values from sqli
27270 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29  te3FindInIndex()
27280 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49  .*/.#define IN_I
27290 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20  NDEX_ROWID      
272a0 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63 68 20    1   /* Search 
272b0 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
272c0 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
272d0 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20  e IN_INDEX_EPH  
272e0 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 53          2   /* S
272f0 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d 65 72  earch an ephemer
27300 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65  al b-tree */.#de
27310 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e  fine IN_INDEX_IN
27320 44 45 58 5f 41 53 43 20 20 20 20 33 20 20 20 2f  DEX_ASC    3   /
27330 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78  * Existing index
27340 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64   ASCENDING */.#d
27350 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49  efine IN_INDEX_I
27360 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20 20 20  NDEX_DESC   4   
27370 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65  /* Existing inde
27380 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a  x DESCENDING */.
27390 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
273a0 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20 35 20  _NOOP         5 
273b0 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76    /* No table av
273c0 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d  ailable. Use com
273d0 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a  parisons */./*.*
273e0 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20  * Allowed flags 
273f0 66 6f 72 20 74 68 65 20 33 72 64 20 70 61 72 61  for the 3rd para
27400 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  meter to sqlite3
27410 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a  FindInIndex()..*
27420 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
27430 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30  EX_NOOP_OK     0
27440 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20  x0001  /* OK to 
27450 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f  return IN_INDEX_
27460 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NOOP */.#define 
27470 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53  IN_INDEX_MEMBERS
27480 48 49 50 20 20 30 78 30 30 30 32 20 20 2f 2a 20  HIP  0x0002  /* 
27490 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64  IN operator used
274a0 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69 70 20   for membership 
274b0 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  test */.#define 
274c0 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20  IN_INDEX_LOOP   
274d0 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
274e0 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64  IN operator used
274f0 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e   as a loop */.in
27500 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  t sqlite3FindInI
27510 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78  ndex(Parse *, Ex
27520 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 29  pr *, u32, int*)
27530 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
27540 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57  _ENABLE_ATOMIC_W
27550 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69 74  RITE.  int sqlit
27560 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71  e3JournalOpen(sq
27570 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e  lite3_vfs *, con
27580 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74  st char *, sqlit
27590 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20  e3_file *, int, 
275a0 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
275b0 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73  te3JournalSize(s
275c0 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 20  qlite3_vfs *);. 
275d0 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
275e0 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65  nalCreate(sqlite
275f0 33 5f 66 69 6c 65 20 2a 29 3b 0a 20 20 69 6e 74  3_file *);.  int
27600 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45   sqlite3JournalE
27610 78 69 73 74 73 28 73 71 6c 69 74 65 33 5f 66 69  xists(sqlite3_fi
27620 6c 65 20 2a 70 29 3b 0a 23 65 6c 73 65 0a 20 20  le *p);.#else.  
27630 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a  #define sqlite3J
27640 6f 75 72 6e 61 6c 53 69 7a 65 28 70 56 66 73 29  ournalSize(pVfs)
27650 20 28 28 70 56 66 73 29 2d 3e 73 7a 4f 73 46 69   ((pVfs)->szOsFi
27660 6c 65 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  le).  #define sq
27670 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73  lite3JournalExis
27680 74 73 28 70 29 20 31 0a 23 65 6e 64 69 66 0a 0a  ts(p) 1.#endif..
27690 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a  void sqlite3MemJ
276a0 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
276b0 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74 20  e3_file *);.int 
276c0 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61  sqlite3MemJourna
276d0 6c 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e 74  lSize(void);.int
276e0 20 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f 75   sqlite3IsMemJou
276f0 72 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66 69 6c  rnal(sqlite3_fil
27700 65 20 2a 29 3b 0a 0a 23 69 66 20 53 51 4c 49 54  e *);..#if SQLIT
27710 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48  E_MAX_EXPR_DEPTH
27720 3e 30 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  >0.  void sqlite
27730 33 45 78 70 72 53 65 74 48 65 69 67 68 74 28 50  3ExprSetHeight(P
27740 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
27750 70 72 20 2a 70 29 3b 0a 20 20 69 6e 74 20 73 71  pr *p);.  int sq
27760 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48  lite3SelectExprH
27770 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b  eight(Select *);
27780 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78  .  int sqlite3Ex
27790 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 50 61  prCheckHeight(Pa
277a0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73  rse*, int);.#els
277b0 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
277c0 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74  te3ExprSetHeight
277d0 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20  (x,y).  #define 
277e0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
277f0 72 48 65 69 67 68 74 28 78 29 20 30 0a 20 20 23  rHeight(x) 0.  #
27800 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
27810 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c  prCheckHeight(x,
27820 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73  y).#endif..u32 s
27830 71 6c 69 74 65 33 47 65 74 34 62 79 74 65 28 63  qlite3Get4byte(c
27840 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20  onst u8*);.void 
27850 73 71 6c 69 74 65 33 50 75 74 34 62 79 74 65 28  sqlite3Put4byte(
27860 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64  u8*, u32);..#ifd
27870 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
27880 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20  _UNLOCK_NOTIFY. 
27890 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
278a0 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73  nectionBlocked(s
278b0 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65  qlite3 *, sqlite
278c0 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  3 *);.  void sql
278d0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e  ite3ConnectionUn
278e0 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a  locked(sqlite3 *
278f0 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  db);.  void sqli
27900 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f  te3ConnectionClo
27910 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29  sed(sqlite3 *db)
27920 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
27930 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
27940 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a  ionBlocked(x,y).
27950 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
27960 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63  3ConnectionUnloc
27970 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65  ked(x).  #define
27980 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
27990 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64  onClosed(x).#end
279a0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
279b0 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73  E_DEBUG.  void s
279c0 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63  qlite3ParserTrac
279d0 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29  e(FILE*, char *)
279e0 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
279f0 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  If the SQLITE_EN
27a00 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69  ABLE IOTRACE exi
27a10 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f  sts then the glo
27a20 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  bal variable.** 
27a30 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69  sqlite3IoTrace i
27a40 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
27a50 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75   printf-like rou
27a60 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  tine used to.** 
27a70 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e  print I/O tracin
27a80 67 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a  g messages. .*/.
27a90 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
27aa0 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64  ABLE_IOTRACE.# d
27ab0 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29  efine IOTRACE(A)
27ac0 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54    if( sqlite3IoT
27ad0 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49  race ){ sqlite3I
27ae0 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f  oTrace A; }.  vo
27af0 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f  id sqlite3VdbeIO
27b00 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b  TraceSql(Vdbe*);
27b10 0a 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76  .SQLITE_EXTERN v
27b20 6f 69 64 20 28 2a 73 71 6c 69 74 65 33 49 6f 54  oid (*sqlite3IoT
27b30 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72  race)(const char
27b40 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20  *,...);.#else.# 
27b50 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41  define IOTRACE(A
27b60 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27b70 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
27b80 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
27b90 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73  * These routines
27ba0 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66   are available f
27bb0 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65  or the mem2.c de
27bc0 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61  bugging memory a
27bd0 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79  llocator.** only
27be0 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65 64  .  They are used
27bf0 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
27c00 64 69 66 66 65 72 65 6e 74 20 22 74 79 70 65 73  different "types
27c10 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61  " of memory.** a
27c20 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70  llocations are p
27c30 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20  roperly tracked 
27c40 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a  by the system..*
27c50 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
27c60 65 62 75 67 53 65 74 54 79 70 65 28 29 20 73 65  ebugSetType() se
27c70 74 73 20 74 68 65 20 22 74 79 70 65 22 20 6f 66  ts the "type" of
27c80 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74   an allocation t
27c90 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20  o one of.** the 
27ca0 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73  MEMTYPE_* macros
27cb0 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20   defined below. 
27cc0 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20 62   The type must b
27cd0 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68  e a bitmask with
27ce0 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74  .** a single bit
27cf0 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69   set..**.** sqli
27d00 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
27d10 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75  pe() returns tru
27d20 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20  e if any of the 
27d30 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f  bits in its seco
27d40 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d  nd.** argument m
27d50 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65  atch the type se
27d60 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75  t by the previou
27d70 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  s sqlite3Memdebu
27d80 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73  gSetType()..** s
27d90 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
27da0 73 54 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e  sType() is inten
27db0 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69  ded for use insi
27dc0 64 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74  de assert() stat
27dd0 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71  ements..**.** sq
27de0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
27df0 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72  ype() returns tr
27e00 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68  ue if none of th
27e10 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65  e bits in its se
27e20 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  cond.** argument
27e30 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20   match the type 
27e40 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69  set by the previ
27e50 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ous sqlite3Memde
27e60 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a  bugSetType()..**
27e70 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65 20  .** Perhaps the 
27e80 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70  most important p
27e90 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69 66 66  oint is the diff
27ea0 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d  erence between M
27eb0 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61  EMTYPE_HEAP.** a
27ec0 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  nd MEMTYPE_LOOKA
27ed0 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c  SIDE.  If an all
27ee0 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59  ocation is MEMTY
27ef0 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68  PE_LOOKASIDE, th
27f00 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d  at means.** it m
27f10 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 61  ight have been a
27f20 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b  llocated by look
27f30 61 73 69 64 65 2c 20 65 78 63 65 70 74 20 74 68  aside, except th
27f40 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73  e allocation was
27f50 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72  .** too large or
27f60 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61   lookaside was a
27f70 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74  lready full.  It
27f80 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
27f90 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20   verify.** that 
27fa0 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74  allocations that
27fb0 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
27fc0 20 73 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f   satisfied by lo
27fd0 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a  okaside are not.
27fe0 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20 74  ** passed back t
27ff0 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  o non-lookaside 
28000 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e  free() routines.
28010 20 20 41 73 73 65 72 74 73 20 73 75 63 68 20 61    Asserts such a
28020 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65  s the.** example
28030 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65   above are place
28040 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f  d on the non-loo
28050 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
28060 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79  utines to verify
28070 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61  .** this constra
28080 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  int. .**.** All 
28090 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70  of this is no-op
280a0 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f   for a productio
280b0 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c  n build.  It onl
280c0 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20  y comes into.** 
280d0 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53 51  play when the SQ
280e0 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f  LITE_MEMDEBUG co
280f0 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
28100 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69  n is used..*/.#i
28110 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44  fdef SQLITE_MEMD
28120 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69  EBUG.  void sqli
28130 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
28140 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20  pe(void*,u8);.  
28150 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  int sqlite3Memde
28160 62 75 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a  bugHasType(void*
28170 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  ,u8);.  int sqli
28180 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
28190 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c  e(void*,u8);.#el
281a0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
281b0 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
281c0 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f  pe(X,Y)  /* no-o
281d0 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71  p */.# define sq
281e0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
281f0 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64  Type(X,Y)  1.# d
28200 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
28210 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29  debugNoType(X,Y)
28220 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66     1.#endif.#def
28230 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50  ine MEMTYPE_HEAP
28240 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20         0x01  /* 
28250 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c  General heap all
28260 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  ocations */.#def
28270 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b  ine MEMTYPE_LOOK
28280 41 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20  ASIDE  0x02  /* 
28290 48 65 61 70 20 74 68 61 74 20 6d 69 67 68 74 20  Heap that might 
282a0 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73  have been lookas
282b0 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ide */.#define M
282c0 45 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20 20  EMTYPE_SCRATCH  
282d0 20 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61 74    0x04  /* Scrat
282e0 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  ch allocations *
282f0 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
28300 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78 30  E_PCACHE     0x0
28310 38 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65  8  /* Page cache
28320 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
28330 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67  ./*.** Threading
28340 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69   interface.*/.#i
28350 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
28360 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e  KER_THREADS>0.in
28370 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 43  t sqlite3ThreadC
28380 72 65 61 74 65 28 53 51 4c 69 74 65 54 68 72 65  reate(SQLiteThre
28390 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f  ad**,void*(*)(vo
283a0 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74  id*),void*);.int
283b0 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a 6f   sqlite3ThreadJo
283c0 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a  in(SQLiteThread*
283d0 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69  , void**);.#endi
283e0 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51  f..#endif /* _SQ
283f0 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a        LITEINT_H_ */.