/ Hex Artifact Content
Login

Artifact f9240915e0ccd579f6cab7b23d419f181665f687:


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 2f 2a 20  e "mutex.h"../* 
7430: 57 68 65 6e 20 75 73 69 6e 67 20 61 20 64 65 66  When using a def
7440: 61 75 6c 74 20 77 61 6c 20 73 61 66 65 74 79 20  ault wal safety 
7450: 6c 65 76 65 6c 2c 20 74 68 65 20 73 61 66 65 74  level, the safet
7460: 79 20 6c 65 76 65 6c 20 73 68 6f 75 6c 64 20 6f  y level should o
7470: 6e 6c 79 20 0a 2a 2a 20 63 68 61 6e 67 65 20 77  nly .** change w
7480: 69 74 68 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20  ith the journal 
7490: 6d 6f 64 65 20 69 66 20 74 68 65 20 75 73 65 72  mode if the user
74a0: 20 68 61 73 6e 27 74 20 6d 61 6e 75 61 6c 6c 79   hasn't manually
74b0: 20 73 70 65 63 69 66 69 65 64 20 0a 2a 2a 20 70   specified .** p
74c0: 72 61 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75  ragma synchronou
74d0: 73 2c 20 69 66 20 74 68 65 79 20 68 61 76 65 20  s, if they have 
74e0: 74 68 65 20 64 65 66 61 75 6c 74 73 20 73 68 6f  the defaults sho
74f0: 75 6c 64 6e 27 74 20 62 65 20 61 70 70 6c 69 65  uldn't be applie
7500: 64 2e 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  d..** The SQLITE
7510: 5f 53 41 46 45 54 59 4c 45 56 45 4c 5f 46 49 58  _SAFETYLEVEL_FIX
7520: 45 44 20 76 61 6c 75 65 20 69 73 20 4f 52 65 64  ED value is ORed
7530: 20 69 6e 74 6f 20 74 68 65 20 44 62 2d 3e 73 61   into the Db->sa
7540: 66 65 74 79 5f 6c 65 76 65 6c 0a 2a 2a 20 66 69  fety_level.** fi
7550: 65 6c 64 20 77 68 65 6e 20 74 68 65 20 75 73 65  eld when the use
7560: 72 20 68 61 73 20 73 70 65 63 69 66 69 65 64 20  r has specified 
7570: 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65  a synchronous se
7580: 74 74 69 6e 67 20 76 69 61 20 70 72 61 67 6d 61  tting via pragma
7590: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
75a0: 49 54 45 5f 53 41 46 45 54 59 4c 45 56 45 4c 5f  ITE_SAFETYLEVEL_
75b0: 46 49 58 45 44 20 30 78 31 30 0a 23 64 65 66 69  FIXED 0x10.#defi
75c0: 6e 65 20 53 51 4c 49 54 45 5f 53 41 46 45 54 59  ne SQLITE_SAFETY
75d0: 4c 45 56 45 4c 5f 56 41 4c 55 45 5f 4d 41 53 4b  LEVEL_VALUE_MASK
75e0: 20 30 78 30 33 0a 23 64 65 66 69 6e 65 20 53 51   0x03.#define SQ
75f0: 4c 49 54 45 5f 44 62 53 61 66 65 74 79 4c 65 76  LITE_DbSafetyLev
7600: 65 6c 56 61 6c 75 65 28 6c 65 76 65 6c 29 20 28  elValue(level) (
7610: 6c 65 76 65 6c 26 53 51 4c 49 54 45 5f 53 41 46  level&SQLITE_SAF
7620: 45 54 59 4c 45 56 45 4c 5f 56 41 4c 55 45 5f 4d  ETYLEVEL_VALUE_M
7630: 41 53 4b 29 0a 23 64 65 66 69 6e 65 20 53 51 4c  ASK).#define SQL
7640: 49 54 45 5f 44 62 53 61 66 65 74 79 4c 65 76 65  ITE_DbSafetyLeve
7650: 6c 49 73 46 69 78 65 64 28 6c 65 76 65 6c 29 20  lIsFixed(level) 
7660: 28 6c 65 76 65 6c 26 53 51 4c 49 54 45 5f 53 41  (level&SQLITE_SA
7670: 46 45 54 59 4c 45 56 45 4c 5f 46 49 58 45 44 29  FETYLEVEL_FIXED)
7680: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
7690: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65  abase file to be
76a0: 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65   accessed by the
76b0: 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e   system is an in
76c0: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65  stance.** of the
76d0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
76e0: 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65  ture.  There are
76f0: 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66   normally two of
7700: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
7710: 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69  s.** in the sqli
7720: 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20  te.aDb[] array. 
7730: 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d   aDb[0] is the m
7740: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
7750: 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20  e and.** aDb[1] 
7760: 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
7770: 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c  file used to hol
7780: 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  d temporary tabl
7790: 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  es.  Additional.
77a0: 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79  ** databases may
77b0: 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f   be attached..*/
77c0: 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63  .struct Db {.  c
77d0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
77e0: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
77f0: 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
7800: 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
7810: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a         /* The B*
7820: 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66  Tree structure f
7830: 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65  or this database
7840: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61   file */.  u8 sa
7850: 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20  fety_level;     
7860: 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76  /* How aggressiv
7870: 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74  e at syncing dat
7880: 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53  a to disk */.  S
7890: 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
78a0: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
78b0: 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  o database schem
78c0: 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72  a (possibly shar
78d0: 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ed) */.};../*.**
78e0: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
78f0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
7900: 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20 61  ructure stores a
7910: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
7920: 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68  ..**.** Most Sch
7930: 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ema objects are 
7940: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
7950: 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65 78  a Btree.  The ex
7960: 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68  ception is.** th
7970: 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65  e Schema for the
7980: 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20 28   TEMP databaes (
7990: 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20  sqlite3.aDb[1]) 
79a0: 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73 74  which is free-st
79b0: 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68  anding..** In sh
79c0: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c  ared cache mode,
79d0: 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61   a single Schema
79e0: 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73   object can be s
79f0: 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c  hared by multipl
7a00: 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74  e.** Btrees that
7a10: 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 61   refer to the sa
7a20: 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74  me underlying Bt
7a30: 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a  Shared object..*
7a40: 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a  * .** Schema obj
7a50: 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74  ects are automat
7a60: 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74  ically deallocat
7a70: 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74  ed when the last
7a80: 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72   Btree that.** r
7a90: 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69  eferences them i
7aa0: 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54  s destroyed.   T
7ab0: 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69  he TEMP Schema i
7ac0: 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64  s manually freed
7ad0: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63   by.** sqlite3_c
7ae0: 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74  lose()..*.** A t
7af0: 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f  hread must be ho
7b00: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
7b10: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
7b20: 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65  ng Btree in orde
7b30: 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53  r.** to access S
7b40: 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20  chema content.  
7b50: 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61  This implies tha
7b60: 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73  t the thread mus
7b70: 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c  t also be.** hol
7b80: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
7b90: 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e  the sqlite3 conn
7ba0: 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74  ection pointer t
7bb0: 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72  hat owns the Btr
7bc0: 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d  ee..** For a TEM
7bd0: 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74  P Schema, only t
7be0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  he connection mu
7bf0: 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e  tex is required.
7c00: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d  .*/.struct Schem
7c10: 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61  a {.  int schema
7c20: 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61  _cookie;   /* Da
7c30: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65  tabase schema ve
7c40: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  rsion number for
7c50: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
7c60: 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b  int iGeneration;
7c70: 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69       /* Generati
7c80: 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63  on counter.  Inc
7c90: 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61  remented with ea
7ca0: 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48  ch change */.  H
7cb0: 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20  ash tblHash;    
7cc0: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65      /* All table
7cd0: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
7ce0: 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48  e */.  Hash idxH
7cf0: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
7d00: 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63  ll (named) indic
7d10: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
7d20: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69  me */.  Hash tri
7d30: 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  gHash;       /* 
7d40: 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64  All triggers ind
7d50: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
7d60: 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b    Hash fkeyHash;
7d70: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f         /* All fo
7d80: 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65  reign keys by re
7d90: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e  ferenced table n
7da0: 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ame */.  Table *
7db0: 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a  pSeqTab;      /*
7dc0: 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   The sqlite_sequ
7dd0: 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20  ence table used 
7de0: 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  by AUTOINCREMENT
7df0: 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f   */.  u8 file_fo
7e00: 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63  rmat;      /* Sc
7e10: 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73  hema format vers
7e20: 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ion for this fil
7e30: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  e */.  u8 enc;  
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
7e50: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65  ext encoding use
7e60: 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61  d by this databa
7e70: 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65  se */.  u16 sche
7e80: 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  maFlags;     /* 
7e90: 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  Flags associated
7ea0: 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d   with this schem
7eb0: 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65  a */.  int cache
7ec0: 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e  _size;      /* N
7ed0: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
7ee0: 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63  o use in the cac
7ef0: 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  he */.};../*.** 
7f00: 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
7f10: 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
7f20: 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
7f30: 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20  bits in the .** 
7f40: 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  Db.pSchema->flag
7f50: 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
7f60: 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74  ine DbHasPropert
7f70: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28  y(D,I,P)     (((
7f80: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
7f90: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26  ma->schemaFlags&
7fa0: 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
7fb0: 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65  ne DbHasAnyPrope
7fc0: 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44  rty(D,I,P)  (((D
7fd0: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
7fe0: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28  a->schemaFlags&(
7ff0: 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  P))!=0).#define 
8000: 44 62 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c  DbSetProperty(D,
8010: 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44  I,P)     (D)->aD
8020: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  b[I].pSchema->sc
8030: 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23  hemaFlags|=(P).#
8040: 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72  define DbClearPr
8050: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
8060: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
8070: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
8080: 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c  &=~(P)../*.** Al
8090: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
80a0: 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d   the DB.pSchema-
80b0: 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a  >flags field..**
80c0: 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d  .** The DB_Schem
80d0: 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20  aLoaded flag is 
80e0: 73 65 74 20 61 66 74 65 72 20 74 68 65 20 64 61  set after the da
80f0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61  tabase schema ha
8100: 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69  s been.** read i
8110: 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73  nto internal has
8120: 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20  h tables..**.** 
8130: 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20  DB_UnresetViews 
8140: 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f  means that one o
8150: 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76  r more views hav
8160: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74  e column names t
8170: 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e  hat.** have been
8180: 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66   filled out.  If
8190: 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e   the schema chan
81a0: 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d  ges, these colum
81b0: 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a  n names might.**
81c0: 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20   changes and so 
81d0: 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65  the view will ne
81e0: 65 64 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a  ed to be reset..
81f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63  */.#define DB_Sc
8200: 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78  hemaLoaded    0x
8210: 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68  0001  /* The sch
8220: 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61  ema has been loa
8230: 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ded */.#define D
8240: 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 20  B_UnresetViews  
8250: 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d    0x0002  /* Som
8260: 65 20 76 69 65 77 73 20 68 61 76 65 20 64 65 66  e views have def
8270: 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  ined column name
8280: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  s */.#define DB_
8290: 45 6d 70 74 79 20 20 20 20 20 20 20 20 20 20 20  Empty           
82a0: 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66  0x0004  /* The f
82b0: 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65  ile is empty (le
82c0: 6e 67 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f  ngth 0 bytes) */
82d0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ../*.** The numb
82e0: 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20  er of different 
82f0: 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20  kinds of things 
8300: 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69  that can be limi
8310: 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65  ted.** using the
8320: 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29   sqlite3_limit()
8330: 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23   interface..*/.#
8340: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f  define SQLITE_N_
8350: 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49  LIMIT (SQLITE_LI
8360: 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MIT_WORKER_THREA
8370: 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f  DS+1)../*.** Loo
8380: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73  kaside malloc is
8390: 20 61 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d   a set of fixed-
83a0: 73 69 7a 65 20 62 75 66 66 65 72 73 20 74 68 61  size buffers tha
83b0: 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a  t can be used.**
83c0: 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c   to satisfy smal
83d0: 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f  l transient memo
83e0: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65  ry allocation re
83f0: 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63  quests for objec
8400: 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64  ts.** associated
8410: 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c   with a particul
8420: 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ar database conn
8430: 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65  ection.  The use
8440: 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65   of.** lookaside
8450: 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73   malloc provides
8460: 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70   a significant p
8470: 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e  erformance enhan
8480: 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f  cement.** (appro
8490: 78 20 31 30 25 29 20 62 79 20 61 76 6f 69 64 69  x 10%) by avoidi
84a0: 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c  ng numerous mall
84b0: 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73 74 73  oc/free requests
84c0: 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a   while parsing.*
84d0: 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  * SQL statements
84e0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b  ..**.** The Look
84f0: 61 73 69 64 65 20 73 74 72 75 63 74 75 72 65 20  aside structure 
8500: 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74  holds configurat
8510: 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ion information 
8520: 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f  about the.** loo
8530: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75  kaside malloc su
8540: 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61  bsystem.  Each a
8550: 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20  vailable memory 
8560: 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a  allocation in.**
8570: 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73   the lookaside s
8580: 75 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72  ubsystem is stor
8590: 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed on a linked l
85a0: 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65  ist of Lookaside
85b0: 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e  Slot.** objects.
85c0: 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65  .**.** Lookaside
85d0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
85e0: 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f   only allowed fo
85f0: 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61  r objects that a
8600: 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a  re associated.**
8610: 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c   with a particul
8620: 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ar database conn
8630: 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20  ection.  Hence, 
8640: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
8650: 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20  on cannot.** be 
8660: 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73  stored in lookas
8670: 69 64 65 20 62 65 63 61 75 73 65 20 69 6e 20 73  ide because in s
8680: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
8690: 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f   the schema info
86a0: 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68  rmation.** is sh
86b0: 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65  ared by multiple
86c0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
86d0: 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72  tions.  Therefor
86e0: 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  e, while parsing
86f0: 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  .** schema infor
8700: 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b  mation, the Look
8710: 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66  aside.bEnabled f
8720: 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64 20 73  lag is cleared s
8730: 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73  o that.** lookas
8740: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
8750: 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20  are not used to 
8760: 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73 63  construct the sc
8770: 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f  hema objects..*/
8780: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
8790: 65 20 7b 0a 20 20 75 31 36 20 73 7a 3b 20 20 20  e {.  u16 sz;   
87a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
87b0: 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75   Size of each bu
87c0: 66 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f  ffer in bytes */
87d0: 0a 20 20 75 38 20 62 45 6e 61 62 6c 65 64 3b 20  .  u8 bEnabled; 
87e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 61             /* Fa
87f0: 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65 20 6e  lse to disable n
8800: 65 77 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ew lookaside all
8810: 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38  ocations */.  u8
8820: 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20   bMalloced;     
8830: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
8840: 20 70 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64   pStart obtained
8850: 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61   from sqlite3_ma
8860: 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  lloc() */.  int 
8870: 6e 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  nOut;           
8880: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
8890: 20 62 75 66 66 65 72 73 20 63 75 72 72 65 6e 74   buffers current
88a0: 6c 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a  ly checked out *
88b0: 2f 0a 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20  /.  int mxOut;  
88c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
88d0: 69 67 68 77 61 74 65 72 20 6d 61 72 6b 20 66 6f  ighwater mark fo
88e0: 72 20 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20  r nOut */.  int 
88f0: 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20  anStat[3];      
8900: 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20      /* 0: hits. 
8910: 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e   1: size misses.
8920: 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73    2: full misses
8930: 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53   */.  LookasideS
8940: 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a  lot *pFree;   /*
8950: 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62   List of availab
8960: 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20  le buffers */.  
8970: 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20  void *pStart;   
8980: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
8990: 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62   byte of availab
89a0: 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20  le memory space 
89b0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b  */.  void *pEnd;
89c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
89d0: 46 69 72 73 74 20 62 79 74 65 20 70 61 73 74 20  First byte past 
89e0: 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  end of available
89f0: 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72   space */.};.str
8a00: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  uct LookasideSlo
8a10: 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53  t {.  LookasideS
8a20: 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f  lot *pNext;    /
8a30: 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e  * Next buffer in
8a40: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65   the list of fre
8a50: 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a  e buffers */.};.
8a60: 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74 61  ./*.** A hash ta
8a70: 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ble for function
8a80: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a   definitions..**
8a90: 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75  .** Hash each Fu
8aa0: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
8ab0: 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  into one of the 
8ac0: 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20  FuncDefHash.a[] 
8ad0: 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73  slots..** Collis
8ae0: 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20  ions are on the 
8af0: 46 75 6e 63 44 65 66 2e 70 48 61 73 68 20 63 68  FuncDef.pHash ch
8b00: 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  ain..*/.struct F
8b10: 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46  uncDefHash {.  F
8b20: 75 6e 63 44 65 66 20 2a 61 5b 32 33 5d 3b 20 20  uncDef *a[23];  
8b30: 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62       /* Hash tab
8b40: 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73  le for functions
8b50: 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53   */.};..#ifdef S
8b60: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
8b70: 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20  NTICATION./*.** 
8b80: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64  Information held
8b90: 20 69 6e 20 74 68 65 20 22 73 71 6c 69 74 65 33   in the "sqlite3
8ba0: 22 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  " database conne
8bb0: 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64  ction object and
8bc0: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61   used.** to mana
8bd0: 67 65 20 75 73 65 72 20 61 75 74 68 65 6e 74 69  ge user authenti
8be0: 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64  cation..*/.typed
8bf0: 65 66 20 73 74 72 75 63 74 20 73 71 6c 69 74 65  ef struct sqlite
8c00: 33 5f 75 73 65 72 61 75 74 68 20 73 71 6c 69 74  3_userauth sqlit
8c10: 65 33 5f 75 73 65 72 61 75 74 68 3b 0a 73 74 72  e3_userauth;.str
8c20: 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72  uct sqlite3_user
8c30: 61 75 74 68 20 7b 0a 20 20 75 38 20 61 75 74 68  auth {.  u8 auth
8c40: 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
8c50: 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
8c60: 74 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  t authentication
8c70: 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20   level */.  int 
8c80: 6e 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20  nAuthPW;        
8c90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
8ca0: 65 20 6f 66 20 74 68 65 20 7a 41 75 74 68 50 57  e of the zAuthPW
8cb0: 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 63   in bytes */.  c
8cc0: 68 61 72 20 2a 7a 41 75 74 68 50 57 3b 20 20 20  har *zAuthPW;   
8cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8ce0: 50 61 73 73 77 6f 72 64 20 75 73 65 64 20 74 6f  Password used to
8cf0: 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f   authenticate */
8d00: 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68 55 73  .  char *zAuthUs
8d10: 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
8d20: 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20 75 73   /* User name us
8d30: 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61  ed to authentica
8d40: 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c  te */.};../* All
8d50: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
8d60: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
8d70: 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64  .authLevel */.#d
8d80: 65 66 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e  efine UAUTH_Unkn
8d90: 6f 77 6e 20 20 20 20 20 30 20 20 20 20 20 2f 2a  own     0     /*
8da0: 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   Authentication 
8db0: 6e 6f 74 20 79 65 74 20 63 68 65 63 6b 65 64 20  not yet checked 
8dc0: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48  */.#define UAUTH
8dd0: 5f 46 61 69 6c 20 20 20 20 20 20 20 20 31 20 20  _Fail        1  
8de0: 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65     /* User authe
8df0: 6e 74 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64  ntication failed
8e00: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54   */.#define UAUT
8e10: 48 5f 55 73 65 72 20 20 20 20 20 20 20 20 32 20  H_User        2 
8e20: 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63      /* Authentic
8e30: 61 74 65 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c  ated as a normal
8e40: 20 75 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65   user */.#define
8e50: 20 55 41 55 54 48 5f 41 64 6d 69 6e 20 20 20 20   UAUTH_Admin    
8e60: 20 20 20 33 20 20 20 20 20 2f 2a 20 41 75 74 68     3     /* Auth
8e70: 65 6e 74 69 63 61 74 65 64 20 61 73 20 61 6e 20  enticated as an 
8e80: 61 64 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f  administrator */
8e90: 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75  ../* Functions u
8ea0: 73 65 64 20 6f 6e 6c 79 20 62 79 20 75 73 65 72  sed only by user
8eb0: 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c   authorization l
8ec0: 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  ogic */.int sqli
8ed0: 74 65 33 55 73 65 72 41 75 74 68 54 61 62 6c 65  te3UserAuthTable
8ee0: 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  (const char*);.i
8ef0: 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  nt sqlite3UserAu
8f00: 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c  thCheckLogin(sql
8f10: 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
8f20: 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  *,u8*);.void sql
8f30: 69 74 65 33 55 73 65 72 41 75 74 68 49 6e 69 74  ite3UserAuthInit
8f40: 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
8f50: 20 73 71 6c 69 74 65 33 43 72 79 70 74 46 75 6e   sqlite3CryptFun
8f60: 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  c(sqlite3_contex
8f70: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
8f80: 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66  alue**);..#endif
8f90: 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f   /* SQLITE_USER_
8fa0: 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a  AUTHENTICATION *
8fb0: 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66  /../*.** typedef
8fc0: 20 66 6f 72 20 74 68 65 20 61 75 74 68 6f 72 69   for the authori
8fd0: 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20  zation callback 
8fe0: 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66  function..*/.#if
8ff0: 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f  def SQLITE_USER_
9000: 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20  AUTHENTICATION. 
9010: 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73   typedef int (*s
9020: 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f  qlite3_xauth)(vo
9030: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
9040: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
9050: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20  const char*,.   
9060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9070: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
9080: 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
9090: 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74  har*);.#else.  t
90a0: 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c  ypedef int (*sql
90b0: 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64  ite3_xauth)(void
90c0: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
90d0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
90e0: 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20  nst char*,.     
90f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9100: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
9110: 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
9120: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61  ./*.** Each data
9130: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
9140: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
9150: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
9160: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
9170: 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20  ruct sqlite3 {. 
9180: 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56   sqlite3_vfs *pV
9190: 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  fs;            /
91a0: 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a  * OS Interface *
91b0: 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20  /.  struct Vdbe 
91c0: 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
91d0: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74    /* List of act
91e0: 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  ive virtual mach
91f0: 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  ines */.  CollSe
9200: 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20  q *pDfltColl;   
9210: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
9220: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67  efault collating
9230: 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52   sequence (BINAR
9240: 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  Y) */.  sqlite3_
9250: 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20  mutex *mutex;   
9260: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74        /* Connect
9270: 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44  ion mutex */.  D
9280: 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20  b *aDb;         
9290: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
92a0: 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  All backends */.
92b0: 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20    int nDb;      
92c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92d0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63  /* Number of bac
92e0: 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20  kends currently 
92f0: 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20  in use */.  int 
9300: 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
9310: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73            /* Mis
9320: 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73  cellaneous flags
9330: 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20  . See below */. 
9340: 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20   i64 lastRowid; 
9350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9360: 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20  * ROWID of most 
9370: 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73  recent insert (s
9380: 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69  ee above) */.  i
9390: 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20  64 szMmap;      
93a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
93b0: 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a  Default mmap_siz
93c0: 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75  e setting */.  u
93d0: 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e  nsigned int open
93e0: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20  Flags;       /* 
93f0: 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
9400: 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65  sqlite3_vfs.xOpe
9410: 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  n() */.  int err
9420: 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
9430: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
9440: 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65  ecent error code
9450: 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20   (SQLITE_*) */. 
9460: 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20   int errMask;   
9470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9480: 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73  * & result codes
9490: 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72   with this befor
94a0: 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20  e returning */. 
94b0: 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b   u16 dbOptFlags;
94c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
94d0: 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c  * Flags to enabl
94e0: 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69  e/disable optimi
94f0: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20  zations */.  u8 
9500: 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20  autoCommit;     
9510: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
9520: 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c  e auto-commit fl
9530: 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70  ag. */.  u8 temp
9540: 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20  _store;         
9550: 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c         /* 1: fil
9560: 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64  e 2: memory 0: d
9570: 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d  efault */.  u8 m
9580: 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20  allocFailed;    
9590: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
95a0: 65 20 69 66 20 77 65 20 68 61 76 65 20 73 65 65  e if we have see
95b0: 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  n a malloc failu
95c0: 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c  re */.  u8 dfltL
95d0: 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ockMode;        
95e0: 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
95f0: 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f   locking-mode fo
9600: 72 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a  r attached dbs *
9610: 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20  /.  signed char 
9620: 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20  nextAutovac;    
9630: 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74    /* Autovac set
9640: 74 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55  ting after VACUU
9650: 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38  M if >=0 */.  u8
9660: 20 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20   suppressErr;   
9670: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
9680: 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f  o not issue erro
9690: 72 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72  r messages if tr
96a0: 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f  ue */.  u8 vtabO
96b0: 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20  nConflict;      
96c0: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
96d0: 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f  o return for s3_
96e0: 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74  vtab_on_conflict
96f0: 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61  () */.  u8 isTra
9700: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
9710: 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  t;    /* True if
9720: 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73   the outermost s
9730: 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53  avepoint is a TS
9740: 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61   */.  int nextPa
9750: 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20  gesize;         
9760: 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20      /* Pagesize 
9770: 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20  after VACUUM if 
9780: 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69  >0 */.  u32 magi
9790: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
97a0: 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e        /* Magic n
97b0: 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74  umber for detect
97c0: 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20   library misuse 
97d0: 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65  */.  int nChange
97e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
97f0: 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75     /* Value retu
9800: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
9810: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
9820: 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b  nt nTotalChange;
9830: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9840: 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  Value returned b
9850: 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f  y sqlite3_total_
9860: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
9870: 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  nt aLimit[SQLITE
9880: 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20  _N_LIMIT];   /* 
9890: 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20  Limits */.  int 
98a0: 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20  nMaxSorterMmap; 
98b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
98c0: 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67  imum size of reg
98d0: 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73  ions mapped by s
98e0: 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63  orter */.  struc
98f0: 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66  t sqlite3InitInf
9900: 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  o {      /* Info
9910: 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72  rmation used dur
9920: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
9930: 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65  on */.    int ne
9940: 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20  wTnum;          
9950: 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67        /* Rootpag
9960: 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67  e of table being
9970: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
9980: 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20      u8 iDb;     
9990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99a0: 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65  /* Which db file
99b0: 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61   is being initia
99c0: 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20  lized */.    u8 
99d0: 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  busy;           
99e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45           /* TRUE
99f0: 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
9a00: 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20  itializing */.  
9a10: 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67    u8 orphanTrigg
9a20: 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  er;           /*
9a30: 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   Last statement 
9a40: 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50  is orphaned TEMP
9a50: 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20   trigger */.  } 
9a60: 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62  init;.  int nVdb
9a70: 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20  eActive;        
9a80: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
9a90: 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74  of VDBEs current
9aa0: 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20  ly running */.  
9ab0: 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20  int nVdbeRead;  
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9ad0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
9ae0: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
9af0: 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20  d or write */.  
9b00: 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20  int nVdbeWrite; 
9b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9b20: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
9b30: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
9b40: 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20  d and write */. 
9b50: 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20   int nVdbeExec; 
9b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9b70: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
9b80: 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65  ed calls to Vdbe
9b90: 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Exec() */.  int 
9ba0: 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  nExtension;     
9bb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
9bc0: 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78  ber of loaded ex
9bd0: 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f  tensions */.  vo
9be0: 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b  id **aExtension;
9bf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
9c00: 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c  rray of shared l
9c10: 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a  ibrary handles *
9c20: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63  /.  void (*xTrac
9c30: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
9c40: 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a  har*);        /*
9c50: 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   Trace function 
9c60: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63  */.  void *pTrac
9c70: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
9c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9c90: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
9ca0: 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  e trace function
9cb0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72   */.  void (*xPr
9cc0: 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  ofile)(void*,con
9cd0: 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20  st char*,u64);  
9ce0: 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e  /* Profiling fun
9cf0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
9d00: 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20  *pProfileArg;   
9d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d20: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
9d30: 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63   to profile func
9d40: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
9d50: 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20  pCommitArg;     
9d60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
9d70: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d  rgument to xComm
9d80: 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  itCallback() */ 
9d90: 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d    .  int (*xComm
9da0: 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  itCallback)(void
9db0: 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65  *);    /* Invoke
9dc0: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
9dd0: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52  t. */.  void *pR
9de0: 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20  ollbackArg;     
9df0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
9e00: 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61  ument to xRollba
9e10: 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  ckCallback() */ 
9e20: 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c    .  void (*xRol
9e30: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76  lbackCallback)(v
9e40: 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65  oid*); /* Invoke
9e50: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
9e60: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  t. */.  void *pU
9e70: 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64  pdateArg;.  void
9e80: 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61   (*xUpdateCallba
9e90: 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  ck)(void*,int, c
9ea0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
9eb0: 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e   char*,sqlite_in
9ec0: 74 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  t64);.#ifndef SQ
9ed0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
9ee0: 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61  int (*xWalCallba
9ef0: 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69  ck)(void *, sqli
9f00: 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
9f10: 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  r *, int);.  voi
9f20: 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64  d *pWalArg;.#end
9f30: 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  if.  void(*xColl
9f40: 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71  Needed)(void*,sq
9f50: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
9f60: 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  Rep,const char*)
9f70: 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  ;.  void(*xCollN
9f80: 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73  eeded16)(void*,s
9f90: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
9fa0: 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  tRep,const void*
9fb0: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c  );.  void *pColl
9fc0: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c  NeededArg;.  sql
9fd0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72  ite3_value *pErr
9fe0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f  ;          /* Mo
9ff0: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
a000: 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69  message */.  uni
a010: 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c  on {.    volatil
a020: 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70  e int isInterrup
a030: 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20  ted; /* True if 
a040: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
a050: 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  t has been calle
a060: 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20  d */.    double 
a070: 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20  notUsed1;       
a080: 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a       /* Spacer *
a090: 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b  /.  } u1;.  Look
a0a0: 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b  aside lookaside;
a0b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
a0c0: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f  kaside malloc co
a0d0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23  nfiguration */.#
a0e0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
a0f0: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
a100: 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68  .  sqlite3_xauth
a110: 20 78 41 75 74 68 3b 20 20 20 20 20 20 20 20 20   xAuth;         
a120: 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f   /* Access autho
a130: 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f  rization functio
a140: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  n */.  void *pAu
a150: 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  thArg;          
a160: 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75       /* 1st argu
a170: 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65  ment to the acce
a180: 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e  ss auth function
a190: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
a1a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
a1b0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
a1c0: 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65  .  int (*xProgre
a1d0: 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  ss)(void *);    
a1e0: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73   /* The progress
a1f0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   callback */.  v
a200: 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72  oid *pProgressAr
a210: 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
a220: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
a230: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
a240: 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  k */.  unsigned 
a250: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20  nProgressOps;   
a260: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
a270: 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72  f opcodes for pr
a280: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
a290: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
a2a0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
a2b0: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
a2c0: 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20   nVTrans;       
a2d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
a2e0: 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20  located size of 
a2f0: 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73  aVTrans */.  Has
a300: 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20  h aModule;      
a310: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f             /* po
a320: 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74  pulated by sqlit
a330: 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
a340: 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20  () */.  VtabCtx 
a350: 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20  *pVtabCtx;      
a360: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74        /* Context
a370: 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62   for active vtab
a380: 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20   connect/create 
a390: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56  */.  VTable **aV
a3a0: 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
a3b0: 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61     /* Virtual ta
a3c0: 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74  bles with open t
a3d0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  ransactions */. 
a3e0: 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e   VTable *pDiscon
a3f0: 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63  nect;    /* Disc
a400: 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20  onnect these in 
a410: 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65  next sqlite3_pre
a420: 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66  pare() */.#endif
a430: 0a 20 20 46 75 6e 63 44 65 66 48 61 73 68 20 61  .  FuncDefHash a
a440: 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
a450: 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f   /* Hash table o
a460: 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e  f connection fun
a470: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68  ctions */.  Hash
a480: 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20   aCollSeq;      
a490: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
a4a0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
a4b0: 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61  nces */.  BusyHa
a4c0: 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65  ndler busyHandle
a4d0: 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20  r;      /* Busy 
a4e0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62  callback */.  Db
a4f0: 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20   aDbStatic[2];  
a500: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
a510: 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20  tatic space for 
a520: 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61  the 2 default ba
a530: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65  ckends */.  Save
a540: 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
a550: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  t;        /* Lis
a560: 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65  t of active save
a570: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
a580: 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20  busyTimeout;    
a590: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73            /* Bus
a5a0: 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75  y handler timeou
a5b0: 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20  t, in msec */.  
a5c0: 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20  int nSavepoint; 
a5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a5e0: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74   Number of non-t
a5f0: 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
a600: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  oints */.  int n
a610: 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20  Statement;      
a620: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
a630: 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61  er of nested sta
a640: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
a650: 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ons  */.  i64 nD
a660: 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20  eferredCons;    
a670: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
a680: 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
a690: 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63  nts this transac
a6a0: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e  tion. */.  i64 n
a6b0: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
a6c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
a6d0: 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61  deferred immedia
a6e0: 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  te constraints *
a6f0: 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73  /.  int *pnBytes
a700: 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20  Freed;          
a710: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c    /* If not NULL
a720: 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73  , increment this
a730: 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a   in DbFree() */.
a740: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
a750: 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
a760: 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  FY.  /* The foll
a770: 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20  owing variables 
a780: 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65  are all protecte
a790: 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f  d by the STATIC_
a7a0: 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74  MASTER .  ** mut
a7b0: 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74  ex, not by sqlit
a7c0: 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61  e3.mutex. They a
a7d0: 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20  re used by code 
a7e0: 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20  in notify.c. .  
a7f0: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
a800: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
a810: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
a820: 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e  that X is waitin
a830: 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20  g for Y to.  ** 
a840: 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69  unlock so that i
a850: 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20  t can proceed.. 
a860: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
a870: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
a880: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
a890: 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e  ns that somethin
a8a0: 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20  g that X tried. 
a8b0: 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20   ** tried to do 
a8c0: 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20  recently failed 
a8d0: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c  with an SQLITE_L
a8e0: 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20  OCKED error due 
a8f0: 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65  to locks.  ** he
a900: 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20  ld by Y..  */.  
a910: 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69  sqlite3 *pBlocki
a920: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a  ngConnection; /*
a930: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74   Connection that
a940: 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c   caused SQLITE_L
a950: 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74  OCKED */.  sqlit
a960: 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65  e3 *pUnlockConne
a970: 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  ction;          
a980: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
a990: 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f  o watch for unlo
a9a0: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  ck */.  void *pU
a9b0: 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20  nlockArg;       
a9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a9d0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e   Argument to xUn
a9e0: 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20  lockNotify */.  
a9f0: 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f  void (*xUnlockNo
aa00: 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69  tify)(void **, i
aa10: 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20  nt);  /* Unlock 
aa20: 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20  notify callback 
aa30: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e  */.  sqlite3 *pN
aa40: 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20  extBlocked;     
aa50: 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
aa60: 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65  st of all blocke
aa70: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f  d connections */
aa80: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
aa90: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
aaa0: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69  NTICATION.  sqli
aab0: 74 65 33 5f 75 73 65 72 61 75 74 68 20 61 75 74  te3_userauth aut
aac0: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65  h;        /* Use
aad0: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
aae0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
aaf0: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
ab00: 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63   A macro to disc
ab10: 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e  over the encodin
ab20: 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e  g of a database.
ab30: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 4e 43 28  .*/.#define ENC(
ab40: 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30  db) ((db)->aDb[0
ab50: 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a  ].pSchema->enc).
ab60: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
ab70: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73  values for the s
ab80: 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f  qlite3.flags..*/
ab90: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
aba0: 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20 30  VdbeTrace      0
abb0: 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 54 72  x00000001  /* Tr
abc0: 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42 45  ue to trace VDBE
abd0: 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64   execution */.#d
abe0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74  efine SQLITE_Int
abf0: 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78 30 30  ernChanges  0x00
ac00: 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63 6f 6d  000002  /* Uncom
ac10: 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62 6c  mitted Hash tabl
ac20: 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  e changes */.#de
ac30: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
ac40: 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 30  FSync      0x000
ac50: 30 30 30 30 34 20 20 2f 2a 20 55 73 65 20 66 75  00004  /* Use fu
ac60: 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20  ll fsync on the 
ac70: 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69  backend */.#defi
ac80: 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75  ne SQLITE_CkptFu
ac90: 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30 30  llFSync  0x00000
aca0: 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c  008  /* Use full
acb0: 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b   fsync for check
acc0: 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  point */.#define
acd0: 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69   SQLITE_CacheSpi
ace0: 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30 30 31  ll     0x0000001
acf0: 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c  0  /* OK to spil
ad00: 6c 20 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f  l pager cache */
ad10: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ad20: 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30  FullColNames   0
ad30: 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20 53 68  x00000020  /* Sh
ad40: 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e  ow full column n
ad50: 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a  ames on SELECT *
ad60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ad70: 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20  _ShortColNames  
ad80: 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53  0x00000040  /* S
ad90: 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e  how short column
ada0: 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69  s names */.#defi
adb0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  ne SQLITE_CountR
adc0: 6f 77 73 20 20 20 20 20 20 30 78 30 30 30 30 30  ows      0x00000
add0: 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f  080  /* Count ro
ade0: 77 73 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e  ws changed by IN
adf0: 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20  SERT, */.       
ae00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae20: 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20     /*   DELETE, 
ae30: 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20 72 65  or UPDATE and re
ae40: 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20  turn */.        
ae50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae70: 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74    /*   the count
ae80: 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63   using a callbac
ae90: 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  k. */.#define SQ
aea0: 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63  LITE_NullCallbac
aeb0: 6b 20 20 20 30 78 30 30 30 30 30 31 30 30 20 20  k   0x00000100  
aec0: 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61  /* Invoke the ca
aed0: 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74  llback once if t
aee0: 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  he */.          
aef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af10: 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74 20  /*   result set 
af20: 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66  is empty */.#def
af30: 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72  ine SQLITE_SqlTr
af40: 61 63 65 20 20 20 20 20 20 20 30 78 30 30 30 30  ace       0x0000
af50: 30 32 30 30 20 20 2f 2a 20 44 65 62 75 67 20 70  0200  /* Debug p
af60: 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65  rint SQL as it e
af70: 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69  xecutes */.#defi
af80: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69  ne SQLITE_VdbeLi
af90: 73 74 69 6e 67 20 20 20 20 30 78 30 30 30 30 30  sting    0x00000
afa0: 34 30 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69  400  /* Debug li
afb0: 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70  stings of VDBE p
afc0: 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69  rograms */.#defi
afd0: 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53  ne SQLITE_WriteS
afe0: 63 68 65 6d 61 20 20 20 20 30 78 30 30 30 30 30  chema    0x00000
aff0: 38 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70  800  /* OK to up
b000: 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54  date SQLITE_MAST
b010: 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ER */.#define SQ
b020: 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72  LITE_VdbeAddopTr
b030: 61 63 65 20 30 78 30 30 30 30 31 30 30 30 20 20  ace 0x00001000  
b040: 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65 33  /* Trace sqlite3
b050: 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c  VdbeAddOp() call
b060: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b070: 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73  ITE_IgnoreChecks
b080: 20 20 20 30 78 30 30 30 30 32 30 30 30 20 20 2f     0x00002000  /
b090: 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65  * Do not enforce
b0a0: 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e   check constrain
b0b0: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
b0c0: 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69  LITE_ReadUncommi
b0d0: 74 74 65 64 20 30 78 30 30 30 34 30 30 30 20 20  tted 0x0004000  
b0e0: 2f 2a 20 46 6f 72 20 73 68 61 72 65 64 2d 63 61  /* For shared-ca
b0f0: 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66  che mode */.#def
b100: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63  ine SQLITE_Legac
b110: 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30  yFileFmt  0x0000
b120: 38 30 30 30 20 20 2f 2a 20 43 72 65 61 74 65 20  8000  /* Create 
b130: 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 69 6e  new databases in
b140: 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65   format 1 */.#de
b150: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 6f  fine SQLITE_Reco
b160: 76 65 72 79 4d 6f 64 65 20 20 20 30 78 30 30 30  veryMode   0x000
b170: 31 30 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65  10000  /* Ignore
b180: 20 73 63 68 65 6d 61 20 65 72 72 6f 72 73 20 2a   schema errors *
b190: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b1a0: 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20 20 20  _ReverseOrder   
b1b0: 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20 52  0x00020000  /* R
b1c0: 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64  everse unordered
b1d0: 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66   SELECTs */.#def
b1e0: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72  ine SQLITE_RecTr
b1f0: 69 67 67 65 72 73 20 20 20 20 30 78 30 30 30 34  iggers    0x0004
b200: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
b210: 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65  recursive trigge
b220: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
b230: 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73  LITE_ForeignKeys
b240: 20 20 20 20 30 78 30 30 30 38 30 30 30 30 20 20      0x00080000  
b250: 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69  /* Enforce forei
b260: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
b270: 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ts  */.#define S
b280: 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20  QLITE_AutoIndex 
b290: 20 20 20 20 20 30 78 30 30 31 30 30 30 30 30 20       0x00100000 
b2a0: 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d   /* Enable autom
b2b0: 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a  atic indexes */.
b2c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
b2d0: 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78  referBuiltin  0x
b2e0: 30 30 32 30 30 30 30 30 20 20 2f 2a 20 50 72 65  00200000  /* Pre
b2f0: 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74  ference to built
b300: 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65  -in funcs */.#de
b310: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64  fine SQLITE_Load
b320: 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 34  Extension  0x004
b330: 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  00000  /* Enable
b340: 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20   load_extension 
b350: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b360: 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20  E_EnableTrigger 
b370: 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20   0x00800000  /* 
b380: 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74  True to enable t
b390: 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69  riggers */.#defi
b3a0: 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46  ne SQLITE_DeferF
b3b0: 4b 73 20 20 20 20 20 20 20 30 78 30 31 30 30 30  Ks       0x01000
b3c0: 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c  000  /* Defer al
b3d0: 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  l FK constraints
b3e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b3f0: 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20  TE_QueryOnly    
b400: 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f 2a    0x02000000  /*
b410: 20 44 69 73 61 62 6c 65 20 64 61 74 61 62 61 73   Disable databas
b420: 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  e changes */.#de
b430: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
b440: 45 51 50 20 20 20 20 20 20 20 20 30 78 30 34 30  EQP        0x040
b450: 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00000  /* Debug 
b460: 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
b470: 41 4e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69  AN */.../*.** Bi
b480: 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ts of the sqlite
b490: 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65  3.dbOptFlags fie
b4a0: 6c 64 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ld that are used
b4b0: 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   by the.** sqlit
b4c0: 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
b4d0: 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
b4e0: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e  OPTIMIZATIONS,..
b4f0: 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a  .) interface to.
b500: 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64  ** selectively d
b510: 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f  isable various o
b520: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f  ptimizations..*/
b530: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b540: 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30  QueryFlattener 0
b550: 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79  x0001   /* Query
b560: 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23   flattening */.#
b570: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
b580: 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30  lumnCache    0x0
b590: 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  002   /* Column 
b5a0: 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65  cache */.#define
b5b0: 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f   SQLITE_GroupByO
b5c0: 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20  rder   0x0004   
b5d0: 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72  /* GROUPBY cover
b5e0: 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23   of ORDERBY */.#
b5f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61  define SQLITE_Fa
b600: 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30  ctorOutConst 0x0
b610: 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  008   /* Constan
b620: 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f  t factoring */./
b630: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
b640: 20 6e 6f 74 20 75 73 65 64 20 20 20 20 30 78 30   not used    0x0
b650: 30 31 30 20 20 20 2f 2f 20 57 61 73 3a 20 53 51  010   // Was: SQ
b660: 4c 49 54 45 5f 49 64 78 52 65 61 6c 41 73 49 6e  LITE_IdxRealAsIn
b670: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
b680: 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20  ITE_DistinctOpt 
b690: 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44     0x0020   /* D
b6a0: 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e  ISTINCT using in
b6b0: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
b6c0: 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78   SQLITE_CoverIdx
b6d0: 53 63 61 6e 20 20 20 30 78 30 30 34 30 20 20 20  Scan   0x0040   
b6e0: 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65  /* Covering inde
b6f0: 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69  x scans */.#defi
b700: 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42  ne SQLITE_OrderB
b710: 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20  yIdxJoin 0x0080 
b720: 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66    /* ORDER BY of
b730: 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78   joins via index
b740: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b750: 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65  TE_SubqCoroutine
b760: 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76    0x0100   /* Ev
b770: 61 6c 75 61 74 65 20 73 75 62 71 75 65 72 69 65  aluate subquerie
b780: 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20  s as coroutines 
b790: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b7a0: 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20 20  E_Transitive    
b7b0: 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61   0x0200   /* Tra
b7c0: 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69  nsitive constrai
b7d0: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
b7e0: 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f  QLITE_OmitNoopJo
b7f0: 69 6e 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a  in   0x0400   /*
b800: 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62   Omit unused tab
b810: 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a  les in joins */.
b820: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
b830: 74 61 74 33 34 20 20 20 20 20 20 20 20 20 30 78  tat34         0x
b840: 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54  0800   /* Use ST
b850: 41 54 33 20 6f 72 20 53 54 41 54 34 20 64 61 74  AT3 or STAT4 dat
b860: 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  a */.#define SQL
b870: 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20  ITE_AllOpts     
b880: 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41     0xffff   /* A
b890: 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ll optimizations
b8a0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f   */../*.** Macro
b8b0: 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68  s for testing wh
b8c0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74  ether or not opt
b8d0: 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65  imizations are e
b8e0: 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c  nabled or disabl
b8f0: 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ed..*/.#ifndef S
b900: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
b910: 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e 65 20  IN_TEST.#define 
b920: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61  OptimizationDisa
b930: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
b940: 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61  (((db)->dbOptFla
b950: 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23  gs&(mask))!=0).#
b960: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
b970: 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d  ionEnabled(db, m
b980: 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64  ask)   (((db)->d
b990: 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29  bOptFlags&(mask)
b9a0: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65 66  )==0).#else.#def
b9b0: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
b9c0: 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  Disabled(db, mas
b9d0: 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20 4f 70  k)  0.#define Op
b9e0: 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65  timizationEnable
b9f0: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 31 0a  d(db, mask)   1.
ba00: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
ba10: 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74 20  turn true if it 
ba20: 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e  OK to factor con
ba30: 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
ba40: 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69  s into the initi
ba50: 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64  alization.** cod
ba60: 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  e. The argument 
ba70: 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63  is a Parse objec
ba80: 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67  t for the code g
ba90: 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65  enerator..*/.#de
baa0: 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72  fine ConstFactor
bab0: 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f  Ok(P) ((P)->okCo
bac0: 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a  nstFactor)../*.*
bad0: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
bae0: 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  s for the sqlite
baf0: 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a  .magic field..**
bb00: 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65   The numbers are
bb10: 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e   obtained at ran
bb20: 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20  dom and have no 
bb30: 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c  special meaning,
bb40: 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62   other.** than b
bb50: 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72  eing distinct fr
bb60: 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a  om one another..
bb70: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bb80: 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20  E_MAGIC_OPEN    
bb90: 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20   0xa029a697  /* 
bba0: 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e  Database is open
bbb0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
bbc0: 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20  TE_MAGIC_CLOSED 
bbd0: 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a    0x9f3c2d33  /*
bbe0: 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f   Database is clo
bbf0: 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  sed */.#define S
bc00: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b  QLITE_MAGIC_SICK
bc10: 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30 20       0x4b771290 
bc20: 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77   /* Error and aw
bc30: 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a  aiting close */.
bc40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
bc50: 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30 78  AGIC_BUSY     0x
bc60: 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74  f03b7906  /* Dat
bc70: 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20  abase currently 
bc80: 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  in use */.#defin
bc90: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45  e SQLITE_MAGIC_E
bca0: 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37 39  RROR    0xb53579
bcb0: 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45  30  /* An SQLITE
bcc0: 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63  _MISUSE error oc
bcd0: 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e  curred */.#defin
bce0: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a  e SQLITE_MAGIC_Z
bcf0: 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66 63  OMBIE   0x64cffc
bd00: 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74  7f  /* Close wit
bd10: 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  h last statement
bd20: 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   close */../*.**
bd30: 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69   Each SQL functi
bd40: 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  on is defined by
bd50: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
bd60: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  the following.**
bd70: 20 73 74 72 75 63 74 75 72 65 2e 20 20 41 20 70   structure.  A p
bd80: 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
bd90: 74 72 75 63 74 75 72 65 20 69 73 20 73 74 6f 72  tructure is stor
bda0: 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
bdb0: 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74  .aFunc.** hash t
bdc0: 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74  able.  When mult
bdd0: 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 68  iple functions h
bde0: 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  ave the same nam
bdf0: 65 2c 20 74 68 65 20 68 61 73 68 20 74 61 62 6c  e, the hash tabl
be00: 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61  e.** points to a
be10: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   linked list of 
be20: 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73  these structures
be30: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
be40: 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41 72 67  Def {.  i16 nArg
be50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
be60: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
be70: 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75  nts.  -1 means u
be80: 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31  nlimited */.  u1
be90: 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20  6 funcFlags;    
bea0: 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69     /* Some combi
beb0: 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45  nation of SQLITE
bec0: 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69  _FUNC_* */.  voi
bed0: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20  d *pUserData;   
bee0: 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70    /* User data p
bef0: 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75  arameter */.  Fu
bf00: 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20  ncDef *pNext;   
bf10: 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74     /* Next funct
bf20: 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61  ion with same na
bf30: 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  me */.  void (*x
bf40: 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f  Func)(sqlite3_co
bf50: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
bf60: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
bf70: 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e  Regular function
bf80: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 74   */.  void (*xSt
bf90: 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ep)(sqlite3_cont
bfa0: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
bfb0: 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67  _value**); /* Ag
bfc0: 67 72 65 67 61 74 65 20 73 74 65 70 20 2a 2f 0a  gregate step */.
bfd0: 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69    void (*xFinali
bfe0: 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ze)(sqlite3_cont
bff0: 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20  ext*);          
c000: 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61        /* Aggrega
c010: 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a  te finalizer */.
c020: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
c030: 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61         /* SQL na
c040: 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
c050: 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66  on. */.  FuncDef
c060: 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a   *pHash;      /*
c070: 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66   Next with a dif
c080: 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20  ferent name but 
c090: 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f  the same hash */
c0a0: 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
c0b0: 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20  r *pDestructor; 
c0c0: 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63    /* Reference c
c0d0: 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f  ounted destructo
c0e0: 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b  r function */.};
c0f0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ../*.** This str
c100: 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61  ucture encapsula
c110: 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74  tes a user-funct
c120: 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63  ion destructor c
c130: 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63  allback (as.** c
c140: 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67 20  onfigured using 
c150: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
c160: 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66 65  v2()) and a refe
c170: 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57  rence counter. W
c180: 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75  hen.** create_fu
c190: 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63  nction_v2() is c
c1a0: 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20  alled to create 
c1b0: 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  a function with 
c1c0: 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a  a destructor,.**
c1d0: 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74   a single object
c1e0: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
c1f0: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63   allocated. Func
c200: 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20  Destructor.nRef 
c210: 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68  is set to .** th
c220: 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63  e number of Func
c230: 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61  Def objects crea
c240: 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72  ted (either 1 or
c250: 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   3, depending on
c260: 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e   whether.** or n
c270: 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ot the specified
c280: 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c   encoding is SQL
c290: 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75  ITE_ANY). The Fu
c2a0: 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f  ncDef.pDestructo
c2b0: 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65  r.** member of e
c2c0: 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46  ach of the new F
c2d0: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69  uncDef objects i
c2e0: 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74  s set to point t
c2f0: 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a  o the allocated.
c300: 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ** FuncDestructo
c310: 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66  r..**.** Thereaf
c320: 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66  ter, when one of
c330: 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a   the FuncDef obj
c340: 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c  ects is deleted,
c350: 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a   the reference.*
c360: 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20  * count on this 
c370: 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d  object is decrem
c380: 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72  ented. When it r
c390: 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65  eaches 0, the de
c3a0: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69  structor.** is i
c3b0: 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46  nvoked and the F
c3c0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74  uncDestructor st
c3d0: 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a  ructure freed..*
c3e0: 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73  /.struct FuncDes
c3f0: 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20  tructor {.  int 
c400: 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78  nRef;.  void (*x
c410: 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
c420: 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  ;.  void *pUserD
c430: 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  ata;.};../*.** P
c440: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
c450: 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73  or FuncDef.flags
c460: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
c470: 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59   _LENGTH and _TY
c480: 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d  PEOF.** values m
c490: 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74  ust correspond t
c4a0: 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41  o OPFLAG_LENGTHA
c4b0: 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59  RG and OPFLAG_TY
c4c0: 50 45 4f 46 41 52 47 2e 20 20 54 68 65 72 65 0a  PEOFARG.  There.
c4d0: 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20  ** are assert() 
c4e0: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68  statements in th
c4f0: 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79  e code to verify
c500: 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e   this..*/.#defin
c510: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e  e SQLITE_FUNC_EN
c520: 43 4d 41 53 4b 20 20 30 78 30 30 33 20 2f 2a 20  CMASK  0x003 /* 
c530: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
c540: 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55  ITE_UTF16BE or U
c550: 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e  TF16LE */.#defin
c560: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49  e SQLITE_FUNC_LI
c570: 4b 45 20 20 20 20 20 30 78 30 30 34 20 2f 2a 20  KE     0x004 /* 
c580: 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68  Candidate for th
c590: 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74  e LIKE optimizat
c5a0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
c5b0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20  QLITE_FUNC_CASE 
c5c0: 20 20 20 20 30 78 30 30 38 20 2f 2a 20 43 61 73      0x008 /* Cas
c5d0: 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45  e-sensitive LIKE
c5e0: 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a  -type function *
c5f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c600: 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30  _FUNC_EPHEM    0
c610: 78 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61  x010 /* Ephemera
c620: 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68 20  l.  Delete with 
c630: 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  VDBE */.#define 
c640: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
c650: 43 4f 4c 4c 20 30 78 30 32 30 20 2f 2a 20 73 71  COLL 0x020 /* sq
c660: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
c670: 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20 63  Seq() might be c
c680: 61 6c 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  alled */.#define
c690: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
c6a0: 47 54 48 20 20 20 30 78 30 34 30 20 2f 2a 20 42  GTH   0x040 /* B
c6b0: 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29  uilt-in length()
c6c0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
c6d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
c6e0: 5f 54 59 50 45 4f 46 20 20 20 30 78 30 38 30 20  _TYPEOF   0x080 
c6f0: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65  /* Built-in type
c700: 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  of() function */
c710: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c720: 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30 78  FUNC_COUNT    0x
c730: 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  100 /* Built-in 
c740: 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61  count(*) aggrega
c750: 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  te */.#define SQ
c760: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53  LITE_FUNC_COALES
c770: 43 45 20 30 78 32 30 30 20 2f 2a 20 42 75 69 6c  CE 0x200 /* Buil
c780: 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20  t-in coalesce() 
c790: 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23  or ifnull() */.#
c7a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
c7b0: 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 34 30  NC_UNLIKELY 0x40
c7c0: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e  0 /* Built-in un
c7d0: 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69 6f  likely() functio
c7e0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
c7f0: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
c800: 54 20 30 78 38 30 30 20 2f 2a 20 43 6f 6e 73 74  T 0x800 /* Const
c810: 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76 65 20  ant inputs give 
c820: 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70 75  a constant outpu
c830: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
c840: 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20  ITE_FUNC_MINMAX 
c850: 20 30 78 31 30 30 30 20 2f 2a 20 54 72 75 65 20   0x1000 /* True 
c860: 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20 6d 61  for min() and ma
c870: 78 28 29 20 61 67 67 72 65 67 61 74 65 73 20 2a  x() aggregates *
c880: 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  /../*.** The fol
c890: 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63  lowing three mac
c8a0: 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c  ros, FUNCTION(),
c8b0: 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20   LIKEFUNC() and 
c8c0: 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65 0a  AGGREGATE() are.
c8d0: 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61 74  ** used to creat
c8e0: 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65  e the initialize
c8f0: 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44  rs for the FuncD
c900: 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a  ef structures..*
c910: 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28  *.**   FUNCTION(
c920: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
c930: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
c940: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
c950: 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75  eate a scalar fu
c960: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
c970: 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  n of a function 
c980: 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69 6d  zName .**     im
c990: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66  plemented by C f
c9a0: 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68  unction xFunc th
c9b0: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
c9c0: 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a  arguments. The.*
c9d0: 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73  *     value pass
c9e0: 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61  ed as iArg is ca
c9f0: 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20  st to a (void*) 
ca00: 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62  and made availab
ca10: 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65  le.**     as the
ca20: 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
ca30: 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
ca40: 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
ca50: 6e 2e 20 49 66 20 0a 2a 2a 20 20 20 20 20 61 72  n. If .**     ar
ca60: 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72  gument bNC is tr
ca70: 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c  ue, then the SQL
ca80: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
ca90: 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a  L flag is set..*
caa0: 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e  *.**   VFUNCTION
cab0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
cac0: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
cad0: 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43  **     Like FUNC
cae0: 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f  TION except it o
caf0: 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f  mits the SQLITE_
cb00: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c  FUNC_CONSTANT fl
cb10: 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52  ag..**.**   AGGR
cb20: 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  EGATE(zName, nAr
cb30: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53  g, iArg, bNC, xS
cb40: 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20  tep, xFinal).** 
cb50: 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
cb60: 74 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  te an aggregate 
cb70: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
cb80: 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  ion implemented 
cb90: 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20  by.**     the C 
cba0: 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20  functions xStep 
cbb0: 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20  and xFinal. The 
cbc0: 66 69 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d  first four param
cbd0: 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65  eters.**     are
cbe0: 20 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20   interpreted in 
cbf0: 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20  the same way as 
cc00: 74 68 65 20 66 69 72 73 74 20 34 20 70 61 72 61  the first 4 para
cc10: 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20  meters to.**    
cc20: 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a   FUNCTION()..**.
cc30: 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e  **   LIKEFUNC(zN
cc40: 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c  ame, nArg, pArg,
cc50: 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55   flags).**     U
cc60: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
cc70: 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
cc80: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
cc90: 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a  function zName .
cca0: 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63 63 65  **     that acce
ccb0: 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e  pts nArg argumen
ccc0: 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d  ts and is implem
ccd0: 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20  ented by a call 
cce0: 74 6f 20 43 20 0a 2a 2a 20 20 20 20 20 66 75 6e  to C .**     fun
ccf0: 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20  ction likeFunc. 
cd00: 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73  Argument pArg is
cd10: 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64   cast to a (void
cd20: 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20   *) and made.** 
cd30: 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73      available as
cd40: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73   the function us
cd50: 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33  er-data (sqlite3
cd60: 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54  _user_data()). T
cd70: 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65  he.**     FuncDe
cd80: 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65  f.flags variable
cd90: 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76   is set to the v
cda0: 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 74  alue passed as t
cdb0: 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20  he flags.**     
cdc0: 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64  parameter..*/.#d
cdd0: 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a  efine FUNCTION(z
cde0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
cdf0: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
ce00: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
ce10: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
ce20: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
ce30: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
ce40: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
ce50: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
ce60: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
ce70: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
ce80: 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54  }.#define VFUNCT
ce90: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
cea0: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
ceb0: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
cec0: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
ced0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
cee0: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
cef0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
cf00: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
cf10: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
cf20: 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49  }.#define FUNCTI
cf30: 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ON2(zName, nArg,
cf40: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
cf50: 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c  c, extraFlags) \
cf60: 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f  .  {nArg,SQLITE_
cf70: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
cf80: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
cf90: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
cfa0: 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c  OLL)|extraFlags,
cfb0: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
cfc0: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
cfd0: 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a   xFunc, 0, 0, #z
cfe0: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
cff0: 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e  ine STR_FUNCTION
d000: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
d010: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
d020: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
d030: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
d040: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
d050: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
d060: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72  DCOLL), \.   pAr
d070: 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  g, 0, xFunc, 0, 
d080: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
d090: 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e  .#define LIKEFUN
d0a0: 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  C(zName, nArg, a
d0b0: 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b  rg, flags) \.  {
d0c0: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
d0d0: 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
d0e0: 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a  E_UTF8|flags, \.
d0f0: 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20     (void *)arg, 
d100: 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20  0, likeFunc, 0, 
d110: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
d120: 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41  .#define AGGREGA
d130: 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  TE(zName, nArg, 
d140: 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20  arg, nc, xStep, 
d150: 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72  xFinal) \.  {nAr
d160: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
d170: 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  nc*SQLITE_FUNC_N
d180: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53  EEDCOLL), \.   S
d190: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
d1a0: 28 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74  (arg), 0, 0, xSt
d1b0: 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65  ep,xFinal,#zName
d1c0: 2c 30 2c 30 7d 0a 23 64 65 66 69 6e 65 20 41 47  ,0,0}.#define AG
d1d0: 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20  GREGATE2(zName, 
d1e0: 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
d1f0: 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78  Step, xFinal, ex
d200: 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e  traFlags) \.  {n
d210: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
d220: 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43  |(nc*SQLITE_FUNC
d230: 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61  _NEEDCOLL)|extra
d240: 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49  Flags, \.   SQLI
d250: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
d260: 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70 2c  g), 0, 0, xStep,
d270: 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c  xFinal,#zName,0,
d280: 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75  0}../*.** All cu
d290: 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73  rrent savepoints
d2a0: 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
d2b0: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61   linked list sta
d2c0: 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69  rting at.** sqli
d2d0: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20  te3.pSavepoint. 
d2e0: 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
d2f0: 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73  t in the list is
d300: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
d310: 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76  ly.** opened sav
d320: 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e  epoint. Savepoin
d330: 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20  ts are added to 
d340: 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65 20  the list by the 
d350: 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70  vdbe.** OP_Savep
d360: 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  oint instruction
d370: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65  ..*/.struct Save
d380: 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a  point {.  char *
d390: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d3b0: 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20   Savepoint name 
d3c0: 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29  (nul-terminated)
d3d0: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
d3e0: 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  redCons;        
d3f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
d400: 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
d410: 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f  fk violations */
d420: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
d430: 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  ImmCons;        
d440: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
d450: 20 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d   of deferred imm
d460: 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f   fk. */.  Savepo
d470: 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  int *pNext;     
d480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d490: 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e   Parent savepoin
d4a0: 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b  t (if any) */.};
d4b0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
d4c0: 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61  owing are used a
d4d0: 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  s the second par
d4e0: 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
d4f0: 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a  3Savepoint(),.**
d500: 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61   and as the P1 a
d510: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f  rgument to the O
d520: 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
d530: 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66  ruction..*/.#def
d540: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  ine SAVEPOINT_BE
d550: 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69  GIN      0.#defi
d560: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  ne SAVEPOINT_REL
d570: 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e  EASE    1.#defin
d580: 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  e SAVEPOINT_ROLL
d590: 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a  BACK   2.../*.**
d5a0: 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64   Each SQLite mod
d5b0: 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62  ule (virtual tab
d5c0: 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69  le definition) i
d5d0: 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a  s defined by an.
d5e0: 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
d5f0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
d600: 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69  ucture, stored i
d610: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d  n the sqlite3.aM
d620: 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61  odule.** hash ta
d630: 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d  ble..*/.struct M
d640: 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20  odule {.  const 
d650: 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
d660: 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f  pModule;       /
d670: 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74  * Callback point
d680: 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ers */.  const c
d690: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
d6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d6b0: 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20   Name passed to 
d6c0: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
d6d0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b  */.  void *pAux;
d6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75            /* pAu
d700: 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  x passed to crea
d710: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
d720: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
d730: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20  )(void *);      
d740: 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20        /* Module 
d750: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
d760: 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ion */.};../*.**
d770: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
d780: 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  ut each column o
d790: 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69  f an SQL table i
d7a0: 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73  s held in an ins
d7b0: 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
d7c0: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
d7d0: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20  truct Column {. 
d7e0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
d7f0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
d800: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78  s column */.  Ex
d810: 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f  pr *pDflt;     /
d820: 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20  * Default value 
d830: 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  of this column *
d840: 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b  /.  char *zDflt;
d850: 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
d860: 20 74 65 78 74 20 6f 66 20 74 68 65 20 64 65 66   text of the def
d870: 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20  ault value */.  
d880: 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 20 20  char *zType;    
d890: 20 2f 2a 20 44 61 74 61 20 74 79 70 65 20 66 6f   /* Data type fo
d8a0: 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  r this column */
d8b0: 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20  .  char *zColl; 
d8c0: 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67      /* Collating
d8d0: 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e   sequence.  If N
d8e0: 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66  ULL, use the def
d8f0: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74  ault */.  u8 not
d900: 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e  Null;      /* An
d910: 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61   OE_ code for ha
d920: 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c  ndling a NOT NUL
d930: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  L constraint */.
d940: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
d950: 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65     /* One of the
d960: 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20   SQLITE_AFF_... 
d970: 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73  values */.  u8 s
d980: 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  zEst;        /* 
d990: 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f  Estimated size o
d9a0: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 20  f this column.  
d9b0: 49 4e 54 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63  INT==1 */.  u8 c
d9c0: 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  olFlags;     /* 
d9d0: 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69  Boolean properti
d9e0: 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47  es.  See COLFLAG
d9f0: 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20  _ defines below 
da00: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
da10: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c  d values for Col
da20: 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f  umn.colFlags:.*/
da30: 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
da40: 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31  _PRIMKEY  0x0001
da50: 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73      /* Column is
da60: 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 69   part of the pri
da70: 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66  mary key */.#def
da80: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  ine COLFLAG_HIDD
da90: 45 4e 20 20 20 30 78 30 30 30 32 20 20 20 20 2f  EN   0x0002    /
daa0: 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  * A hidden colum
dab0: 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74  n in a virtual t
dac0: 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  able */../*.** A
dad0: 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75   "Collating Sequ
dae0: 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65 64  ence" is defined
daf0: 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
db00: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
db10: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43  .** structure. C
db20: 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63  onceptually, a c
db30: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
db40: 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  e consists of a 
db50: 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f  name and.** a co
db60: 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65  mparison routine
db70: 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68   that defines th
db80: 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20  e order of that 
db90: 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20  sequence..**.** 
dba0: 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20  If CollSeq.xCmp 
dbb0: 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e  is NULL, it mean
dbc0: 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f  s that the.** co
dbd0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
dbe0: 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20   is undefined.  
dbf0: 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e  Indices built on
dc00: 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a   an undefined.**
dc10: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
dc20: 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72  nce may not be r
dc30: 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a  ead or written..
dc40: 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65  */.struct CollSe
dc50: 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  q {.  char *zNam
dc60: 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  e;          /* N
dc70: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61  ame of the colla
dc80: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55  ting sequence, U
dc90: 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a  TF-8 encoded */.
dca0: 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
dcb0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
dcc0: 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64  encoding handled
dcd0: 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   by xCmp() */.  
dce0: 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20  void *pUser;    
dcf0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
dd00: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28  rgument to xCmp(
dd10: 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d  ) */.  int (*xCm
dd20: 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  p)(void*,int, co
dd30: 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
dd40: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
dd50: 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69  void (*xDel)(voi
dd60: 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63  d*);  /* Destruc
dd70: 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f  tor for pUser */
dd80: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72  .};../*.** A sor
dd90: 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65  t order can be e
dda0: 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45 53  ither ASC or DES
ddb0: 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  C..*/.#define SQ
ddc0: 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20  LITE_SO_ASC     
ddd0: 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20    0  /* Sort in 
dde0: 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20  ascending order 
ddf0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
de00: 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31  E_SO_DESC      1
de10: 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63    /* Sort in asc
de20: 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a  ending order */.
de30: 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66  ./*.** Column af
de40: 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a  finity types..**
de50: 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74  .** These used t
de60: 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20  o have mnemonic 
de70: 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f  name like 'i' fo
de80: 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  r SQLITE_AFF_INT
de90: 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20  EGER and.** 't' 
dea0: 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  for SQLITE_AFF_T
deb0: 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e  EXT.  But we can
dec0: 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73   save a little s
ded0: 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65  pace and improve
dee0: 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20  .** the speed a 
def0: 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72  little by number
df00: 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 63  ing the values c
df10: 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20 0a  onsecutively.  .
df20: 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72  **.** But rather
df30: 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68   than start with
df40: 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69   0 or 1, we begi
df50: 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54 68 61  n with 'A'.  Tha
df60: 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d  t way,.** when m
df70: 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79  ultiple affinity
df80: 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61   types are conca
df90: 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73  tenated into a s
dfa0: 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65  tring and.** use
dfb0: 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72  d as the P4 oper
dfc0: 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62  and, they will b
dfd0: 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e  e more readable.
dfe0: 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f  .**.** Note also
dff0: 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69   that the numeri
e000: 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75  c types are grou
e010: 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20  ped together so 
e020: 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20  that testing.** 
e030: 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79  for a numeric ty
e040: 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  pe is a single c
e050: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20  omparison.  And 
e060: 74 68 65 20 4e 4f 4e 45 20 74 79 70 65 20 69 73  the NONE type is
e070: 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69   first..*/.#defi
e080: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f  ne SQLITE_AFF_NO
e090: 4e 45 20 20 20 20 20 27 41 27 0a 23 64 65 66 69  NE     'A'.#defi
e0a0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ne SQLITE_AFF_TE
e0b0: 58 54 20 20 20 20 20 27 42 27 0a 23 64 65 66 69  XT     'B'.#defi
e0c0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ne SQLITE_AFF_NU
e0d0: 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65 66 69  MERIC  'C'.#defi
e0e0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ne SQLITE_AFF_IN
e0f0: 54 45 47 45 52 20 20 27 44 27 0a 23 64 65 66 69  TEGER  'D'.#defi
e100: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ne SQLITE_AFF_RE
e110: 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65 66  AL     'E'..#def
e120: 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d  ine sqlite3IsNum
e130: 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20  ericAffinity(X) 
e140: 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46   ((X)>=SQLITE_AF
e150: 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a  F_NUMERIC)../*.*
e160: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
e170: 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73  _MASK values mas
e180: 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69  ks off the signi
e190: 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61  ficant bits of a
e1a0: 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61  n.** affinity va
e1b0: 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e 65  lue. .*/.#define
e1c0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
e1d0: 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a       0x47../*.**
e1e0: 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20   Additional bit 
e1f0: 76 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20  values that can 
e200: 62 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20  be ORed with an 
e210: 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74  affinity without
e220: 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65  .** changing the
e230: 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a   affinity..**.**
e240: 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e   The SQLITE_NOTN
e250: 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f  ULL flag is a co
e260: 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c  mbination of NUL
e270: 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55  LEQ and JUMPIFNU
e280: 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73  LL..** It causes
e290: 20 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20   an assert() to 
e2a0: 66 69 72 65 20 69 66 20 65 69 74 68 65 72 20 6f  fire if either o
e2b0: 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70  perand to a comp
e2c0: 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74  arison.** operat
e2d0: 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20  or is NULL.  It 
e2e0: 69 73 20 61 64 64 65 64 20 74 6f 20 63 65 72 74  is added to cert
e2f0: 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  ain comparison o
e300: 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70  perators to.** p
e310: 72 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f 70  rove that the op
e320: 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79  erands are alway
e330: 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23  s NOT NULL..*/.#
e340: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55  define SQLITE_JU
e350: 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20  MPIFNULL   0x10 
e360: 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74   /* jumps if eit
e370: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
e380: 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ULL */.#define S
e390: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20  QLITE_STOREP2   
e3a0: 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72     0x20  /* Stor
e3b0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b  e result in reg[
e3c0: 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20  P2] rather than 
e3d0: 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  jump */.#define 
e3e0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20  SQLITE_NULLEQ   
e3f0: 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c      0x80  /* NUL
e400: 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  L=NULL */.#defin
e410: 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c  e SQLITE_NOTNULL
e420: 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41        0x90  /* A
e430: 73 73 65 72 74 20 74 68 61 74 20 6f 70 65 72 61  ssert that opera
e440: 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55  nds are never NU
e450: 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  LL */../*.** An 
e460: 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
e470: 79 70 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ype is created f
e480: 6f 72 20 65 61 63 68 20 76 69 72 74 75 61 6c 20  or each virtual 
e490: 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e  table present in
e4a0: 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65  .** the database
e4b0: 20 73 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20   schema. .**.** 
e4c0: 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
e4d0: 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64  schema is shared
e4e0: 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69 73 20  , then there is 
e4f0: 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  one instance of 
e500: 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72  this.** structur
e510: 65 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62  e for each datab
e520: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28  ase connection (
e530: 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75  sqlite3*) that u
e540: 73 65 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a  ses the shared.*
e550: 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69  * schema. This i
e560: 73 20 62 65 63 61 75 73 65 20 65 61 63 68 20 64  s because each d
e570: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
e580: 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74 73 20  on requires its 
e590: 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e  own unique.** in
e5a0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71  stance of the sq
e5b0: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
e5c0: 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  le used to acces
e5d0: 73 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  s the virtual ta
e5e0: 62 6c 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e  ble .** implemen
e5f0: 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f  tation. sqlite3_
e600: 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61  vtab* handles ca
e610: 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20  n not be shared 
e620: 62 65 74 77 65 65 6e 20 0a 2a 2a 20 64 61 74 61  between .** data
e630: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
e640: 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20  , even when the 
e650: 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d  rest of the in-m
e660: 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 20 0a  emory database .
e670: 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68 61  ** schema is sha
e680: 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c  red, as the impl
e690: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e  ementation often
e6a0: 20 73 74 6f 72 65 73 20 74 68 65 20 64 61 74 61   stores the data
e6b0: 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
e6c0: 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64  on handle passed
e6d0: 20 74 6f 20 69 74 20 76 69 61 20 74 68 65 20 78   to it via the x
e6e0: 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72  Connect() or xCr
e6f0: 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a  eate() method.**
e700: 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
e710: 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c  zation internall
e720: 79 2e 20 54 68 69 73 20 64 61 74 61 62 61 73 65  y. This database
e730: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
e740: 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62  le may.** then b
e750: 65 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69  e used by the vi
e760: 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c  rtual table impl
e770: 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63  ementation to ac
e780: 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73  cess real tables
e790: 20 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20   .** within the 
e7a0: 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61  database. So tha
e7b0: 74 20 74 68 65 79 20 61 70 70 65 61 72 20 61 73  t they appear as
e7c0: 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c   part of the cal
e7d0: 6c 65 72 73 20 0a 2a 2a 20 74 72 61 6e 73 61 63  lers .** transac
e7e0: 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65  tion, these acce
e7f0: 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20  sses need to be 
e800: 6d 61 64 65 20 76 69 61 20 74 68 65 20 73 61 6d  made via the sam
e810: 65 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 63  e database .** c
e820: 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61  onnection as tha
e830: 74 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74  t used to execut
e840: 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73  e SQL operations
e850: 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   on the virtual 
e860: 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  table..**.** All
e870: 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20   VTable objects 
e880: 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20  that correspond 
e890: 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  to a single tabl
e8a0: 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a  e in a shared.**
e8b0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
e8c0: 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73   are initially s
e8d0: 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65  tored in a linke
e8e0: 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74  d-list pointed t
e8f0: 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c  o by.** the Tabl
e900: 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72  e.pVTable member
e910: 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65   variable of the
e920: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54   corresponding T
e930: 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20  able object..** 
e940: 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f  When an sqlite3_
e950: 70 72 65 70 61 72 65 28 29 20 6f 70 65 72 61 74  prepare() operat
e960: 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64 20  ion is required 
e970: 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69  to access the vi
e980: 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20  rtual.** table, 
e990: 69 74 20 73 65 61 72 63 68 65 73 20 74 68 65 20  it searches the 
e9a0: 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56 54 61  list for the VTa
e9b0: 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73 70  ble that corresp
e9c0: 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64  onds to the.** d
e9d0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
e9e0: 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65  on doing the pre
e9f0: 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20  paring so as to 
ea00: 75 73 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a  use the correct.
ea10: 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  ** sqlite3_vtab*
ea20: 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63   handle in the c
ea30: 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a  ompiled query..*
ea40: 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d  *.** When an in-
ea50: 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a  memory Table obj
ea60: 65 63 74 20 69 73 20 64 65 6c 65 74 65 64 20 28  ect is deleted (
ea70: 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e  for example when
ea80: 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69   the.** schema i
ea90: 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64  s being reloaded
eaa0: 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e   for some reason
eab0: 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62  ), the VTable ob
eac0: 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 20 0a 2a  jects are not .*
ead0: 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68  * deleted and th
eae0: 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  e sqlite3_vtab* 
eaf0: 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20  handles are not 
eb00: 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 20  xDisconnect()ed 
eb10: 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  .** immediately.
eb20: 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61   Instead, they a
eb30: 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68  re moved from th
eb40: 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20  e Table.pVTable 
eb50: 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68  list to.** anoth
eb60: 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68  er linked list h
eb70: 65 61 64 65 64 20 62 79 20 74 68 65 20 73 71 6c  eaded by the sql
eb80: 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74  ite3.pDisconnect
eb90: 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a   member of the.*
eba0: 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
ebb0: 73 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72  sqlite3 structur
ebc0: 65 2e 20 54 68 65 79 20 61 72 65 20 74 68 65 6e  e. They are then
ebd0: 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e   deleted/xDiscon
ebe0: 6e 65 63 74 65 64 20 0a 2a 2a 20 6e 65 78 74 20  nected .** next 
ebf0: 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74  time a statement
ec00: 20 69 73 20 70 72 65 70 61 72 65 64 20 75 73 69   is prepared usi
ec10: 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a  ng said sqlite3*
ec20: 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a  . This is done.*
ec30: 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c  * to avoid deadl
ec40: 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c  ock issues invol
ec50: 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71  ving multiple sq
ec60: 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65  lite3.mutex mute
ec70: 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f  xes..** Refer to
ec80: 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20   comments above 
ec90: 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33  function sqlite3
eca0: 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29  VtabUnlockList()
ecb0: 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61   for an.** expla
ecc0: 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79  nation as to why
ecd0: 20 69 74 20 69 73 20 73 61 66 65 20 74 6f 20 61   it is safe to a
ece0: 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61  dd an entry to a
ecf0: 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f  n sqlite3.pDisco
ed00: 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69  nnect.** list wi
ed10: 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68  thout holding th
ed20: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
ed30: 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75  sqlite3.mutex mu
ed40: 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d  tex..**.** The m
ed50: 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74  emory for object
ed60: 73 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  s of this type i
ed70: 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74  s always allocat
ed80: 65 64 20 62 79 20 0a 2a 2a 20 73 71 6c 69 74 65  ed by .** sqlite
ed90: 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69  3DbMalloc(), usi
eda0: 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ng the connectio
edb0: 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20  n handle stored 
edc0: 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73 20  in VTable.db as 
edd0: 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61 72  .** the first ar
ede0: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  gument..*/.struc
edf0: 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c  t VTable {.  sql
ee00: 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
ee10: 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
ee20: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73  se connection as
ee30: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
ee40: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f  is table */.  Mo
ee50: 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20  dule *pMod;     
ee60: 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
ee70: 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70  er to module imp
ee80: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20  lementation */. 
ee90: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
eea0: 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f  Vtab;      /* Po
eeb0: 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e  inter to vtab in
eec0: 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20  stance */.  int 
eed0: 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
eee0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
eef0: 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
ef00: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f  his structure */
ef10: 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e  .  u8 bConstrain
ef20: 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
ef30: 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69  True if constrai
ef40: 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65  nts are supporte
ef50: 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65  d */.  int iSave
ef60: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  point;          
ef70: 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65   /* Depth of the
ef80: 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b   SAVEPOINT stack
ef90: 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e   */.  VTable *pN
efa0: 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
efb0: 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65  /* Next in linke
efc0: 64 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76  d list (see abov
efd0: 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  e) */.};../*.** 
efe0: 45 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20 69  Each SQL table i
eff0: 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
f000: 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 20 69 6e   memory by an in
f010: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 0a 2a 2a  stance of the.**
f020: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
f030: 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c  ture..**.** Tabl
f040: 65 2e 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 6e  e.zName is the n
f050: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
f060: 2e 20 20 54 68 65 20 63 61 73 65 20 6f 66 20 74  .  The case of t
f070: 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a 20 43  he original.** C
f080: 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
f090: 65 6d 65 6e 74 20 69 73 20 73 74 6f 72 65 64 2c  ement is stored,
f0a0: 20 62 75 74 20 63 61 73 65 20 69 73 20 6e 6f 74   but case is not
f0b0: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 66 6f 72   significant for
f0c0: 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e  .** comparisons.
f0d0: 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 6e 43 6f  .**.** Table.nCo
f0e0: 6c 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  l is the number 
f0f0: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
f100: 69 73 20 74 61 62 6c 65 2e 20 20 54 61 62 6c 65  is table.  Table
f110: 2e 61 43 6f 6c 20 69 73 20 61 0a 2a 2a 20 70 6f  .aCol is a.** po
f120: 69 6e 74 65 72 20 74 6f 20 61 6e 20 61 72 72 61  inter to an arra
f130: 79 20 6f 66 20 43 6f 6c 75 6d 6e 20 73 74 72 75  y of Column stru
f140: 63 74 75 72 65 73 2c 20 6f 6e 65 20 66 6f 72 20  ctures, one for 
f150: 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a  each column..**.
f160: 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20  ** If the table 
f170: 68 61 73 20 61 6e 20 49 4e 54 45 47 45 52 20 50  has an INTEGER P
f180: 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e  RIMARY KEY, then
f190: 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20   Table.iPKey is 
f1a0: 74 68 65 20 69 6e 64 65 78 20 6f 66 0a 2a 2a 20  the index of.** 
f1b0: 74 68 65 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20  the column that 
f1c0: 69 73 20 74 68 61 74 20 6b 65 79 2e 20 20 20 4f  is that key.   O
f1d0: 74 68 65 72 77 69 73 65 20 54 61 62 6c 65 2e 69  therwise Table.i
f1e0: 50 4b 65 79 20 69 73 20 6e 65 67 61 74 69 76 65  PKey is negative
f1f0: 2e 20 20 4e 6f 74 65 0a 2a 2a 20 74 68 61 74 20  .  Note.** that 
f200: 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20  the datatype of 
f210: 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
f220: 6d 75 73 74 20 62 65 20 49 4e 54 45 47 45 52 20  must be INTEGER 
f230: 66 6f 72 20 74 68 69 73 20 66 69 65 6c 64 20 74  for this field t
f240: 6f 0a 2a 2a 20 62 65 20 73 65 74 2e 20 20 41 6e  o.** be set.  An
f250: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
f260: 20 4b 45 59 20 69 73 20 75 73 65 64 20 61 73 20   KEY is used as 
f270: 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 65 61  the rowid for ea
f280: 63 68 20 72 6f 77 20 6f 66 0a 2a 2a 20 74 68 65  ch row of.** the
f290: 20 74 61 62 6c 65 2e 20 20 49 66 20 61 20 74 61   table.  If a ta
f2a0: 62 6c 65 20 68 61 73 20 6e 6f 20 49 4e 54 45 47  ble has no INTEG
f2b0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  ER PRIMARY KEY, 
f2c0: 74 68 65 6e 20 61 20 72 61 6e 64 6f 6d 20 72 6f  then a random ro
f2d0: 77 69 64 0a 2a 2a 20 69 73 20 67 65 6e 65 72 61  wid.** is genera
f2e0: 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77  ted for each row
f2f0: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20   of the table.  
f300: 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79  TF_HasPrimaryKey
f310: 20 69 73 20 73 65 74 20 69 66 0a 2a 2a 20 74 68   is set if.** th
f320: 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e 79 20  e table has any 
f330: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 49 4e 54  PRIMARY KEY, INT
f340: 45 47 45 52 20 6f 72 20 6f 74 68 65 72 77 69 73  EGER or otherwis
f350: 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 74  e..**.** Table.t
f360: 6e 75 6d 20 69 73 20 74 68 65 20 70 61 67 65 20  num is the page 
f370: 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 72  number for the r
f380: 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65 20 6f  oot BTree page o
f390: 66 20 74 68 65 20 74 61 62 6c 65 20 69 6e 20 74  f the table in t
f3a0: 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66  he.** database f
f3b0: 69 6c 65 2e 20 20 49 66 20 54 61 62 6c 65 2e 69  ile.  If Table.i
f3c0: 44 62 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  Db is the index 
f3d0: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
f3e0: 74 61 62 6c 65 20 62 61 63 6b 65 6e 64 0a 2a 2a  table backend.**
f3f0: 20 69 6e 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d   in sqlite.aDb[]
f400: 2e 20 20 30 20 69 73 20 66 6f 72 20 74 68 65 20  .  0 is for the 
f410: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 61 6e  main database an
f420: 64 20 31 20 69 73 20 66 6f 72 20 74 68 65 20 66  d 1 is for the f
f430: 69 6c 65 20 74 68 61 74 0a 2a 2a 20 68 6f 6c 64  ile that.** hold
f440: 73 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  s temporary tabl
f450: 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 20  es and indices. 
f460: 20 49 66 20 54 46 5f 45 70 68 65 6d 65 72 61 6c   If TF_Ephemeral
f470: 20 69 73 20 73 65 74 0a 2a 2a 20 74 68 65 6e 20   is set.** then 
f480: 74 68 65 20 74 61 62 6c 65 20 69 73 20 73 74 6f  the table is sto
f490: 72 65 64 20 69 6e 20 61 20 66 69 6c 65 20 74 68  red in a file th
f4a0: 61 74 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61  at is automatica
f4b0: 6c 6c 79 20 64 65 6c 65 74 65 64 0a 2a 2a 20 77  lly deleted.** w
f4c0: 68 65 6e 20 74 68 65 20 56 44 42 45 20 63 75 72  hen the VDBE cur
f4d0: 73 6f 72 20 74 6f 20 74 68 65 20 74 61 62 6c 65  sor to the table
f4e0: 20 69 73 20 63 6c 6f 73 65 64 2e 20 20 49 6e 20   is closed.  In 
f4f0: 74 68 69 73 20 63 61 73 65 20 54 61 62 6c 65 2e  this case Table.
f500: 74 6e 75 6d 20 0a 2a 2a 20 72 65 66 65 72 73 20  tnum .** refers 
f510: 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62  VDBE cursor numb
f520: 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  er that holds th
f530: 65 20 74 61 62 6c 65 20 6f 70 65 6e 2c 20 6e 6f  e table open, no
f540: 74 20 74 6f 20 74 68 65 20 72 6f 6f 74 0a 2a 2a  t to the root.**
f550: 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 20 20 54   page number.  T
f560: 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 73 20  ransient tables 
f570: 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  are used to hold
f580: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
f590: 61 0a 2a 2a 20 73 75 62 2d 71 75 65 72 79 20 74  a.** sub-query t
f5a0: 68 61 74 20 61 70 70 65 61 72 73 20 69 6e 73 74  hat appears inst
f5b0: 65 61 64 20 6f 66 20 61 20 72 65 61 6c 20 74 61  ead of a real ta
f5c0: 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 20  ble name in the 
f5d0: 46 52 4f 4d 20 63 6c 61 75 73 65 20 0a 2a 2a 20  FROM clause .** 
f5e0: 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  of a SELECT stat
f5f0: 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ement..*/.struct
f600: 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20   Table {.  char 
f610: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
f620: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
f630: 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a  able or view */.
f640: 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20    Column *aCol; 
f650: 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d         /* Inform
f660: 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
f670: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64   column */.  Ind
f680: 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20  ex *pIndex;     
f690: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c    /* List of SQL
f6a0: 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73   indexes on this
f6b0: 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c   table. */.  Sel
f6c0: 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
f6d0: 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61    /* NULL for ta
f6e0: 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f  bles.  Points to
f6f0: 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61   definition if a
f700: 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79   view. */.  FKey
f710: 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20   *pFKey;        
f720: 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20   /* Linked list 
f730: 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b  of all foreign k
f740: 65 79 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  eys in this tabl
f750: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  e */.  char *zCo
f760: 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53  lAff;       /* S
f770: 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74  tring defining t
f780: 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65  he affinity of e
f790: 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69  ach column */.#i
f7a0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
f7b0: 54 5f 43 48 45 43 4b 0a 20 20 45 78 70 72 4c 69  T_CHECK.  ExprLi
f7c0: 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f  st *pCheck;    /
f7d0: 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73  * All CHECK cons
f7e0: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 65 6e 64 69  traints */.#endi
f7f0: 66 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c  f.  LogEst nRowL
f800: 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69  ogEst;   /* Esti
f810: 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61  mated rows in ta
f820: 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74  ble - from sqlit
f830: 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f  e_stat1 table */
f840: 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20  .  int tnum;    
f850: 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20          /* Root 
f860: 42 54 72 65 65 20 6e 6f 64 65 20 66 6f 72 20 74  BTree node for t
f870: 68 69 73 20 74 61 62 6c 65 20 28 73 65 65 20 6e  his table (see n
f880: 6f 74 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20  ote above) */.  
f890: 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20  i16 iPKey;      
f8a0: 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e       /* If not n
f8b0: 65 67 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f  egative, use aCo
f8c0: 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20  l[iPKey] as the 
f8d0: 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 20  primary key */. 
f8e0: 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20   i16 nCol;      
f8f0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
f900: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
f910: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 31  is table */.  u1
f920: 36 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  6 nRef;         
f930: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
f940: 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73  pointers to this
f950: 20 54 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45   Table */.  LogE
f960: 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20  st szTabRow;    
f970: 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69   /* Estimated si
f980: 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65  ze of each table
f990: 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f   row in bytes */
f9a0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
f9b0: 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20  NABLE_COSTMULT. 
f9c0: 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74   LogEst costMult
f9d0: 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75  ;     /* Cost mu
f9e0: 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69  ltiplier for usi
f9f0: 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ng this table */
fa00: 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 74 61 62  .#endif.  u8 tab
fa10: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f  Flags;         /
fa20: 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76  * Mask of TF_* v
fa30: 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 6b 65  alues */.  u8 ke
fa40: 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  yConf;          
fa50: 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e  /* What to do in
fa60: 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e   case of uniquen
fa70: 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20  ess conflict on 
fa80: 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66  iPKey */.#ifndef
fa90: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54   SQLITE_OMIT_ALT
faa0: 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64  ERTABLE.  int ad
fab0: 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f  dColOffset;    /
fac0: 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41  * Offset in CREA
fad0: 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f  TE TABLE stmt to
fae0: 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d   add a new colum
faf0: 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  n */.#endif.#ifn
fb00: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
fb10: 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69  VIRTUALTABLE.  i
fb20: 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20  nt nModuleArg;  
fb30: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
fb40: 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68   arguments to th
fb50: 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68  e module */.  ch
fb60: 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67  ar **azModuleArg
fb70: 3b 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 61 6c  ;  /* Text of al
fb80: 6c 20 6d 6f 64 75 6c 65 20 61 72 67 73 2e 20 5b  l module args. [
fb90: 30 5d 20 69 73 20 6d 6f 64 75 6c 65 20 6e 61 6d  0] is module nam
fba0: 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70  e */.  VTable *p
fbb0: 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c  VTable;     /* L
fbc0: 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62  ist of VTable ob
fbd0: 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66  jects. */.#endif
fbe0: 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
fbf0: 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20  gger;   /* List 
fc00: 6f 66 20 74 72 69 67 67 65 72 73 20 73 74 6f 72  of triggers stor
fc10: 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f  ed in pSchema */
fc20: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
fc30: 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  ma;     /* Schem
fc40: 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  a that contains 
fc50: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
fc60: 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62  Table *pNextZomb
fc70: 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20  ie;  /* Next on 
fc80: 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69  the Parse.pZombi
fc90: 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a  eTab list */.};.
fca0: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
fcb0: 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65 2e  alues for Table.
fcc0: 74 61 62 46 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65  tabFlags..*/.#de
fcd0: 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79  fine TF_Readonly
fce0: 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20          0x01    
fcf0: 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73  /* Read-only sys
fd00: 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  tem table */.#de
fd10: 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61  fine TF_Ephemera
fd20: 6c 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20  l       0x02    
fd30: 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20  /* An ephemeral 
fd40: 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
fd50: 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65   TF_HasPrimaryKe
fd60: 79 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54  y   0x04    /* T
fd70: 61 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61  able has a prima
fd80: 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  ry key */.#defin
fd90: 65 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65  e TF_Autoincreme
fda0: 6e 74 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20  nt   0x08    /* 
fdb0: 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  Integer primary 
fdc0: 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65  key is autoincre
fdd0: 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ment */.#define 
fde0: 54 46 5f 56 69 72 74 75 61 6c 20 20 20 20 20 20  TF_Virtual      
fdf0: 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 49 73     0x10    /* Is
fe00: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
fe10: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57   */.#define TF_W
fe20: 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30  ithoutRowid    0
fe30: 78 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77  x20    /* No row
fe40: 69 64 20 75 73 65 64 2e 20 50 52 49 4d 41 52 59  id used. PRIMARY
fe50: 20 4b 45 59 20 69 73 20 74 68 65 20 6b 65 79 20   KEY is the key 
fe60: 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20  */.../*.** Test 
fe70: 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20 6f  to see whether o
fe80: 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73  r not a table is
fe90: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
fea0: 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f  .  This is.** do
feb0: 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f  ne as a macro so
fec0: 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65   that it will be
fed0: 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77   optimized out w
fee0: 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  hen virtual.** t
fef0: 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20  able support is 
ff00: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
ff10: 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64   build..*/.#ifnd
ff20: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
ff30: 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64  IRTUALTABLE.#  d
ff40: 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28  efine IsVirtual(
ff50: 58 29 20 20 20 20 20 20 28 28 28 58 29 2d 3e 74  X)      (((X)->t
ff60: 61 62 46 6c 61 67 73 20 26 20 54 46 5f 56 69 72  abFlags & TF_Vir
ff70: 74 75 61 6c 29 21 3d 30 29 0a 23 20 20 64 65 66  tual)!=0).#  def
ff80: 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  ine IsHiddenColu
ff90: 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c  mn(X) (((X)->col
ffa0: 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f  Flags & COLFLAG_
ffb0: 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c 73  HIDDEN)!=0).#els
ffc0: 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  e.#  define IsVi
ffd0: 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a  rtual(X)      0.
ffe0: 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
fff0: 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65  enColumn(X) 0.#e
10000 6e 64 69 66 0a 0a 2f 2a 20 44 6f 65 73 20 74 68  ndif../* Does th
10010 65 20 74 61 62 6c 65 20 68 61 76 65 20 61 20 72  e table have a r
10020 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
10030 48 61 73 52 6f 77 69 64 28 58 29 20 20 20 20 20  HasRowid(X)     
10040 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
10050 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69  & TF_WithoutRowi
10060 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61  d)==0)../*.** Ea
10070 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ch foreign key c
10080 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20  onstraint is an 
10090 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
100a0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
100b0 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72  ure..**.** A for
100c0 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f  eign key is asso
100d0 63 69 61 74 65 64 20 77 69 74 68 20 74 77 6f 20  ciated with two 
100e0 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72  tables.  The "fr
100f0 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20  om" table is.** 
10100 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  the table that c
10110 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46 45  ontains the REFE
10120 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68  RENCES clause th
10130 61 74 20 63 72 65 61 74 65 73 20 74 68 65 20 66  at creates the f
10140 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20  oreign.** key.  
10150 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69  The "to" table i
10160 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  s the table that
10170 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65   is named in the
10180 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
10190 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20  se..** Consider 
101a0 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a  this example:.**
101b0 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54  .**     CREATE T
101c0 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20  ABLE ex1(.**    
101d0 20 20 20 61 20 49 4e 54 45 47 45 52 20 50 52 49     a INTEGER PRI
101e0 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20  MARY KEY,.**    
101f0 20 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e     b INTEGER CON
10200 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45  STRAINT fk1 REFE
10210 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a  RENCES ex2(x).**
10220 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f       );.**.** Fo
10230 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66  r foreign key "f
10240 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61  k1", the from-ta
10250 62 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e 64  ble is "ex1" and
10260 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
10270 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76   "ex2"..** Equiv
10280 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a  alent names:.**.
10290 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c  **     from-tabl
102a0 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65  e == child-table
102b0 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62  .**       to-tab
102c0 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62  le == parent-tab
102d0 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45  le.**.** Each RE
102e0 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
102f0 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73  generates an ins
10300 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
10310 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
10320 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74 74  .** which is att
10330 61 63 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f  ached to the fro
10340 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f  m-table.  The to
10350 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20  -table need not 
10360 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68  exist when.** th
10370 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20  e from-table is 
10380 63 72 65 61 74 65 64 2e 20 20 54 68 65 20 65 78  created.  The ex
10390 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74  istence of the t
103a0 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63  o-table is not c
103b0 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  hecked..**.** Th
103c0 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61  e list of all pa
103d0 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20  rents for child 
103e0 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20  Table X is held 
103f0 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a  at X.pFKey..**.*
10400 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  * A list of all 
10410 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74  children for a t
10420 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68  able named Z (wh
10430 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76  ich might not ev
10440 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20  en exist).** is 
10450 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66  held in Schema.f
10460 6b 65 79 48 61 73 68 20 77 69 74 68 20 61 20 68  keyHash with a h
10470 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f  ash key of Z..*/
10480 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20  .struct FKey {. 
10490 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20   Table *pFrom;  
104a0 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74     /* Table cont
104b0 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52  aining the REFER
104c0 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b  ENCES clause (ak
104d0 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46  a: Child) */.  F
104e0 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20  Key *pNextFrom; 
104f0 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69   /* Next FKey wi
10500 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70  th the same in p
10510 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e  From. Next paren
10520 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20  t of pFrom */.  
10530 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20  char *zTo;      
10540 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62    /* Name of tab
10550 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65 79 20  le that the key 
10560 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20  points to (aka: 
10570 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65  Parent) */.  FKe
10580 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f  y *pNextTo;    /
10590 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68 65 20  * Next with the 
105a0 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63  same zTo. Next c
105b0 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a  hild of zTo. */.
105c0 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b    FKey *pPrevTo;
105d0 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20      /* Previous 
105e0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54  with the same zT
105f0 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b  o */.  int nCol;
10600 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
10610 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
10620 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f   this key */.  /
10630 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31  * EV: R-30323-21
10640 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65  917 */.  u8 isDe
10650 66 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a  ferred;       /*
10660 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61   True if constra
10670 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20  int checking is 
10680 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f  deferred till CO
10690 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63  MMIT */.  u8 aAc
106a0 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20  tion[2];        
106b0 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64  /* ON DELETE and
106c0 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f   ON UPDATE actio
106d0 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  ns, respectively
106e0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61   */.  Trigger *a
106f0 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54  pTrigger[2];/* T
10700 72 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74  riggers for aAct
10710 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f  ion[] actions */
10720 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61  .  struct sColMa
10730 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70  p {      /* Mapp
10740 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ing of columns i
10750 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d  n pFrom to colum
10760 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20  ns in zTo */.   
10770 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20   int iFrom;     
10780 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
10790 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72  of column in pFr
107a0 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  om */.    char *
107b0 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  zCol;           
107c0 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d  /* Name of colum
107d0 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55  n in zTo.  If NU
107e0 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b  LL use PRIMARY K
107f0 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31  EY */.  } aCol[1
10800 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ];            /*
10810 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   One entry for e
10820 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75  ach of nCol colu
10830 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  mns */.};../*.**
10840 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73   SQLite supports
10850 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20   many different 
10860 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20  ways to resolve 
10870 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  a constraint.** 
10880 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b  error.  ROLLBACK
10890 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
108a0 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61  s that a constra
108b0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a  int violation.**
108c0 20 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72   causes the oper
108d0 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73  ation in process
108e0 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72   to fail and for
108f0 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
10900 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62  nsaction.** to b
10910 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  e rolled back.  
10920 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67  ABORT processing
10930 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61   means the opera
10940 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a  tion in process.
10950 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79  ** fails and any
10960 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66   prior changes f
10970 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65  rom that one ope
10980 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65  ration are backe
10990 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68  d out,.** but th
109a0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
109b0 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b   not rolled back
109c0 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69  .  FAIL processi
109d0 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a  ng means that.**
109e0 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
109f0 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73  n progress stops
10a00 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20   and returns an 
10a10 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74  error code.  But
10a20 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65   prior.** change
10a30 73 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d  s due to the sam
10a40 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20  e operation are 
10a50 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61  not backed out a
10a60 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a  nd no rollback.*
10a70 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52  * occurs.  IGNOR
10a80 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  E means that the
10a90 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20   particular row 
10aa0 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20  that caused the 
10ab0 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
10ac0 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72  ror is not inser
10ad0 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20  ted or updated. 
10ae0 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74   Processing cont
10af0 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72  inues and no err
10b00 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65  or.** is returne
10b10 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e  d.  REPLACE mean
10b20 73 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69  s that preexisti
10b30 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73  ng database rows
10b40 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20   that caused.** 
10b50 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  a UNIQUE constra
10b60 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72  int violation ar
10b70 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61  e removed so tha
10b80 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74  t the new insert
10b90 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61   or.** update ca
10ba0 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63  n proceed.  Proc
10bb0 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73  essing continues
10bc0 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73   and no error is
10bd0 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a   reported..**.**
10be0 20 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55   RESTRICT, SETNU
10bf0 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20  LL, and CASCADE 
10c00 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e  actions apply on
10c10 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65  ly to foreign ke
10c20 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20  ys..** RESTRICT 
10c30 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41  is the same as A
10c40 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41  BORT for IMMEDIA
10c50 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  TE foreign keys 
10c60 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20  and the.** same 
10c70 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20  as ROLLBACK for 
10c80 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20  DEFERRED keys.  
10c90 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68  SETNULL means th
10ca0 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a  at the foreign.*
10cb0 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20  * key is set to 
10cc0 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d  NULL.  CASCADE m
10cd0 65 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45  eans that a DELE
10ce0 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20  TE or UPDATE of 
10cf0 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65  the.** reference
10d00 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70  d table row is p
10d10 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74  ropagated into t
10d20 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64  he row that hold
10d30 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e  s the.** foreign
10d40 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65   key..** .** The
10d50 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f   following symbo
10d60 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20 75  lic values are u
10d70 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68  sed to record wh
10d80 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61  ich type.** of a
10d90 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a  ction to take..*
10da0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e  /.#define OE_Non
10db0 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65  e     0   /* The
10dc0 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61  re is no constra
10dd0 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a  int to check */.
10de0 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62  #define OE_Rollb
10df0 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20  ack 1   /* Fail 
10e00 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e  the operation an
10e10 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  d rollback the t
10e20 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
10e30 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20  efine OE_Abort  
10e40 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75    2   /* Back ou
10e50 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f  t changes but do
10e60 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61   no rollback tra
10e70 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
10e80 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20  ine OE_Fail     
10e90 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20  3   /* Stop the 
10ea0 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65  operation but le
10eb0 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68  ave all prior ch
10ec0 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
10ed0 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20   OE_Ignore   4  
10ee0 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65   /* Ignore the e
10ef0 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20  rror. Do not do 
10f00 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50  the INSERT or UP
10f10 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
10f20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20  OE_Replace  5   
10f30 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74 69  /* Delete existi
10f40 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20  ng record, then 
10f50 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  do INSERT or UPD
10f60 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ATE */..#define 
10f70 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20 20 20  OE_Restrict 6   
10f80 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20  /* OE_Abort for 
10f90 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f  IMMEDIATE, OE_Ro
10fa0 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52  llback for DEFER
10fb0 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  RED */.#define O
10fc0 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f  E_SetNull  7   /
10fd0 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67  * Set the foreig
10fe0 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e  n key value to N
10ff0 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ULL */.#define O
11000 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f  E_SetDflt  8   /
11010 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67  * Set the foreig
11020 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69  n key value to i
11030 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64  ts default */.#d
11040 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65  efine OE_Cascade
11050 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65    9   /* Cascade
11060 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a   the changes */.
11070 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61  .#define OE_Defa
11080 75 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f 20 77  ult  10  /* Do w
11090 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66 61  hatever the defa
110a0 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f  ult action is */
110b0 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  .../*.** An inst
110c0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
110d0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
110e0 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
110f0 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
11100 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62  nt to sqlite3Vdb
11110 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20  eKeyCompare and 
11120 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72  is used to contr
11130 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70 61  ol the .** compa
11140 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f  rison of the two
11150 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a   index keys..**.
11160 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f  ** Note that aSo
11170 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43  rtOrder[] and aC
11180 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c  oll[] have nFiel
11190 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72  d+1 slots.  Ther
111a0 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20  e.** are nField 
111b0 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f  slots for the co
111c0 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65  lumns of an inde
111d0 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61  x then one extra
111e0 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65   slot.** for the
111f0 20 72 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e   rowid at the en
11200 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79  d..*/.struct Key
11210 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65  Info {.  u32 nRe
11220 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
11230 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65  Number of refere
11240 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79  nces to this Key
11250 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  Info object */. 
11260 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
11270 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
11280 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74  oding - one of t
11290 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76  he SQLITE_UTF* v
112a0 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  alues */.  u16 n
112b0 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f  Field;         /
112c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20  * Number of key 
112d0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69  columns in the i
112e0 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 58  ndex */.  u16 nX
112f0 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a  Field;        /*
11300 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
11310 6e 73 20 62 65 79 6f 6e 64 20 74 68 65 20 6b 65  ns beyond the ke
11320 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73  y columns */.  s
11330 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
11340 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
11350 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
11360 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
11370 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f  r;     /* Sort o
11380 72 64 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f  rder for each co
11390 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53  lumn. */.  CollS
113a0 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f  eq *aColl[1];  /
113b0 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
113c0 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65  ence for each te
113d0 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f  rm of the key */
113e0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
113f0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
11400 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
11410 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74  e holds informat
11420 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a 2a 20 73  ion about a.** s
11430 69 6e 67 6c 65 20 69 6e 64 65 78 20 72 65 63 6f  ingle index reco
11440 72 64 20 74 68 61 74 20 68 61 73 20 61 6c 72 65  rd that has alre
11450 61 64 79 20 62 65 65 6e 20 70 61 72 73 65 64 20  ady been parsed 
11460 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64  out into individ
11470 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a  ual.** values..*
11480 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73  *.** A record is
11490 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20   an object that 
114a0 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
114b0 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64  more fields of d
114c0 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20  ata..** Records 
114d0 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  are used to stor
114e0 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
114f0 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64   a table row and
11500 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65   to store.** the
11510 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78   key of an index
11520 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69  .  A blob encodi
11530 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69  ng of a record i
11540 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20  s created by.** 
11550 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  the OP_MakeRecor
11560 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20  d opcode of the 
11570 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61  VDBE and is disa
11580 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a  ssembled by the.
11590 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  ** OP_Column opc
115a0 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ode..**.** This 
115b0 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
115c0 61 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61  a record that ha
115d0 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 64  s already been d
115e0 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a 2a 20 69  isassembled.** i
115f0 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74 69 74 75  nto its constitu
11600 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a  ent fields..**.*
11610 2a 20 54 68 65 20 72 31 20 61 6e 64 20 72 32 20  * The r1 and r2 
11620 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 73  member variables
11630 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 62   are only used b
11640 79 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 64 20  y the optimized 
11650 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 66 75  comparison.** fu
11660 6e 63 74 69 6f 6e 73 20 76 64 62 65 52 65 63 6f  nctions vdbeReco
11670 72 64 43 6f 6d 70 61 72 65 49 6e 74 28 29 20 61  rdCompareInt() a
11680 6e 64 20 76 64 62 65 52 65 63 6f 72 64 43 6f 6d  nd vdbeRecordCom
11690 70 61 72 65 53 74 72 69 6e 67 28 29 2e 0a 2a 2f  pareString()..*/
116a0 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64  .struct Unpacked
116b0 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e  Record {.  KeyIn
116c0 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f  fo *pKeyInfo;  /
116d0 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20  * Collation and 
116e0 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72  sort-order infor
116f0 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 31 36 20  mation */.  u16 
11700 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
11710 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
11720 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20  ries in apMem[] 
11730 2a 2f 0a 20 20 69 38 20 64 65 66 61 75 6c 74 5f  */.  i8 default_
11740 72 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70  rc;      /* Comp
11750 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 69 66  arison result if
11760 20 6b 65 79 73 20 61 72 65 20 65 71 75 61 6c 20   keys are equal 
11770 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f 64 65 3b  */.  u8 errCode;
11780 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f           /* Erro
11790 72 20 64 65 74 65 63 74 65 64 20 62 79 20 78 52  r detected by xR
117a0 65 63 6f 72 64 43 6f 6d 70 61 72 65 20 28 43 4f  ecordCompare (CO
117b0 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20  RRUPT or NOMEM) 
117c0 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20  */.  Mem *aMem; 
117d0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
117e0 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 31 3b 20  es */.  int r1; 
117f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
11800 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69  alue to return i
11810 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f  f (lhs > rhs) */
11820 0a 20 20 69 6e 74 20 72 32 3b 20 20 20 20 20 20  .  int r2;      
11830 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
11840 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 72 68  to return if (rh
11850 73 20 3c 20 6c 68 73 29 20 2a 2f 0a 7d 3b 0a 0a  s < lhs) */.};..
11860 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
11870 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73 65  index is represe
11880 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62  nted in memory b
11890 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  y an.** instance
118a0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
118b0 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
118c0 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  ** The columns o
118d0 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
118e0 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78   are to be index
118f0 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65 64  ed are described
11900 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c  .** by the aiCol
11910 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74  umn[] field of t
11920 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
11930 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70  For example, sup
11940 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20  pose.** we have 
11950 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61  the following ta
11960 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a  ble and index:.*
11970 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
11980 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74  TABLE Ex1(c1 int
11990 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78  , c2 int, c3 tex
119a0 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  t);.**     CREAT
119b0 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45  E INDEX Ex2 ON E
119c0 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a  x1(c3,c1);.**.**
119d0 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74   In the Table st
119e0 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69  ructure describi
119f0 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20  ng Ex1, nCol==3 
11a00 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72  because there ar
11a10 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d  e.** three colum
11a20 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
11a30 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73    In the Index s
11a40 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
11a50 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c  ing.** Ex2, nCol
11a60 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f  umn==2 since 2 o
11a70 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20  f the 3 columns 
11a80 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65 78  of Ex1 are index
11a90 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  ed..** The value
11aa0 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20   of aiColumn is 
11ab0 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d  {2, 0}.  aiColum
11ac0 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20  n[0]==2 because 
11ad0 74 68 65 20 0a 2a 2a 20 66 69 72 73 74 20 63 6f  the .** first co
11ae0 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
11af0 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20 69  ed (c3) has an i
11b00 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31  ndex of 2 in Ex1
11b10 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20  .aCol[]..** The 
11b20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f  second column to
11b30 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31 29   be indexed (c1)
11b40 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
11b50 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f   0 in.** Ex1.aCo
11b60 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61  l[], hence Ex2.a
11b70 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a  iColumn[1]==0..*
11b80 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f  *.** The Index.o
11b90 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74  nError field det
11ba0 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20  ermines whether 
11bb0 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78  or not the index
11bc0 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75  ed columns.** mu
11bd0 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64  st be unique and
11be0 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74   what to do if t
11bf0 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68  hey are not.  Wh
11c00 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  en Index.onError
11c10 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20  =OE_None,.** it 
11c20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f  means this is no
11c30 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  t a unique index
11c40 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20  .  Otherwise it 
11c50 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  is a unique inde
11c60 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c  x.** and the val
11c70 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72  ue of Index.onEr
11c80 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68 65  ror indicate the
11c90 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20   which conflict 
11ca0 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61  resolution .** a
11cb0 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c  lgorithm to empl
11cc0 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61  oy whenever an a
11cd0 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74  ttempt is made t
11ce0 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75  o insert a non-u
11cf0 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74  nique.** element
11d00 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
11d10 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  x {.  char *zNam
11d20 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
11d30 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69  * Name of this i
11d40 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61  ndex */.  i16 *a
11d50 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
11d60 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75     /* Which colu
11d70 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62 79 20  mns are used by 
11d80 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74  this index.  1st
11d90 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73   is 0 */.  LogEs
11da0 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20  t *aiRowLogEst; 
11db0 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c      /* From ANAL
11dc0 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73  YZE: Est. rows s
11dd0 65 6c 65 63 74 65 64 20 62 79 20 65 61 63 68 20  elected by each 
11de0 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c  column */.  Tabl
11df0 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20  e *pTable;      
11e00 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20       /* The SQL 
11e10 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65  table being inde
11e20 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  xed */.  char *z
11e30 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20  ColAff;         
11e40 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
11e50 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
11e60 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
11e70 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65   */.  Index *pNe
11e80 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  xt;            /
11e90 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78  * The next index
11ea0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
11eb0 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20   the same table 
11ec0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
11ed0 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a  hema;         /*
11ee0 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
11ef0 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  ng this index */
11f00 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
11f10 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66  r;          /* f
11f20 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20  or each column: 
11f30 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73  True==DESC, Fals
11f40 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61 72  e==ASC */.  char
11f50 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 20   **azColl;      
11f60 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
11f70 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
11f80 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e  nce names for in
11f90 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  dex */.  Expr *p
11fa0 50 61 72 74 49 64 78 57 68 65 72 65 3b 20 20 20  PartIdxWhere;   
11fb0 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73    /* WHERE claus
11fc0 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e  e for partial in
11fd0 64 69 63 65 73 20 2a 2f 0a 20 20 4b 65 79 49 6e  dices */.  KeyIn
11fe0 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 20  fo *pKeyInfo;   
11ff0 20 20 20 20 2f 2a 20 41 20 4b 65 79 49 6e 66 6f      /* A KeyInfo
12000 20 6f 62 6a 65 63 74 20 73 75 69 74 61 62 6c 65   object suitable
12010 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20   for this index 
12020 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20  */.  int tnum;  
12030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12040 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e   DB Page contain
12050 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73  ing root of this
12060 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45   index */.  LogE
12070 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20  st szIdxRow;    
12080 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
12090 64 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69  d average row si
120a0 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  ze in bytes */. 
120b0 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20   u16 nKeyCol;   
120c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
120d0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66  ber of columns f
120e0 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a  orming the key *
120f0 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b  /.  u16 nColumn;
12100 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12110 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
12120 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
12130 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e  index */.  u8 on
12140 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20  Error;          
12150 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c      /* OE_Abort,
12160 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52   OE_Ignore, OE_R
12170 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f  eplace, or OE_No
12180 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ne */.  unsigned
12190 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20   idxType:2;     
121a0 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32   /* 1==UNIQUE, 2
121b0 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30  ==PRIMARY KEY, 0
121c0 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a  ==CREATE INDEX *
121d0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e  /.  unsigned bUn
121e0 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20  ordered:1;   /* 
121f0 55 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 66  Use this index f
12200 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72  or == or IN quer
12210 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e  ies only */.  un
12220 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75  signed uniqNotNu
12230 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69  ll:1;  /* True i
12240 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54  f UNIQUE and NOT
12250 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f   NULL for all co
12260 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67  lumns */.  unsig
12270 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b  ned isResized:1;
12280 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72      /* True if r
12290 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74  esizeIndexObject
122a0 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  () has been call
122b0 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ed */.  unsigned
122c0 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20   isCovering:1;  
122d0 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73   /* True if this
122e0 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69   is a covering i
122f0 6e 64 65 78 20 2a 2f 0a 23 69 66 64 65 66 20 53  ndex */.#ifdef S
12300 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
12310 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e  T3_OR_STAT4.  in
12320 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20  t nSample;      
12330 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
12340 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20   of elements in 
12350 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69  aSample[] */.  i
12360 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20  nt nSampleCol;  
12370 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
12380 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61  of IndexSample.a
12390 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20  nEq[] and so on 
123a0 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 41  */.  tRowcnt *aA
123b0 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f 2a  vgEq;         /*
123c0 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c   Average nEq val
123d0 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74  ues for keys not
123e0 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20   in aSample */. 
123f0 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53   IndexSample *aS
12400 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d  ample;    /* Sam
12410 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74  ples of the left
12420 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74  -most key */.  t
12430 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74  Rowcnt *aiRowEst
12440 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c  ;       /* Non-l
12450 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61 74 31  ogarithmic stat1
12460 20 64 61 74 61 20 66 6f 72 20 74 68 69 73 20 69   data for this i
12470 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  ndex */.  tRowcn
12480 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20 20 20  t nRowEst0;     
12490 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69     /* Non-logari
124a0 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66 20  thmic number of 
124b0 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65  rows in the inde
124c0 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a  x */.#endif.};..
124d0 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
124e0 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69  lues for Index.i
124f0 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e  dxType.*/.#defin
12500 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  e SQLITE_IDXTYPE
12510 5f 41 50 50 44 45 46 20 20 20 20 20 20 30 20 20  _APPDEF      0  
12520 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e   /* Created usin
12530 67 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a  g CREATE INDEX *
12540 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
12550 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20  _IDXTYPE_UNIQUE 
12560 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c       1   /* Impl
12570 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20  ements a UNIQUE 
12580 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64  constraint */.#d
12590 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58  efine SQLITE_IDX
125a0 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20  TYPE_PRIMARYKEY 
125b0 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50   2   /* Is the P
125c0 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74  RIMARY KEY for t
125d0 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20  he table */../* 
125e0 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
125f0 6e 64 65 78 20 58 20 69 73 20 61 20 50 52 49 4d  ndex X is a PRIM
12600 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f  ARY KEY index */
12610 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61  .#define IsPrima
12620 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28  ryKeyIndex(X)  (
12630 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51  (X)->idxType==SQ
12640 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49  LITE_IDXTYPE_PRI
12650 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74  MARYKEY)../* Ret
12660 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65  urn true if inde
12670 78 20 58 20 69 73 20 61 20 55 4e 49 51 55 45 20  x X is a UNIQUE 
12680 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
12690 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58   IsUniqueIndex(X
126a0 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45  )      ((X)->onE
126b0 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a  rror!=OE_None)..
126c0 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c  /*.** Each sampl
126d0 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
126e0 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62  sqlite_stat3 tab
126f0 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  le is represente
12700 64 20 69 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20  d in memory .** 
12710 75 73 69 6e 67 20 61 20 73 74 72 75 63 74 75 72  using a structur
12720 65 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20  e of this type. 
12730 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69   See documentati
12740 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66  on at the top of
12750 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e   the.** analyze.
12760 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66 6f  c source file fo
12770 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
12780 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  ormation..*/.str
12790 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20  uct IndexSample 
127a0 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20 20 20  {.  void *p;    
127b0 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
127c0 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65 63 6f   to sampled reco
127d0 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20  rd */.  int n;  
127e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
127f0 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e 20 62  e of record in b
12800 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  ytes */.  tRowcn
12810 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45  t *anEq;    /* E
12820 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  st. number of ro
12830 77 73 20 77 68 65 72 65 20 74 68 65 20 6b 65 79  ws where the key
12840 20 65 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d   equals this sam
12850 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  ple */.  tRowcnt
12860 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73   *anLt;    /* Es
12870 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  t. number of row
12880 73 20 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c  s where key is l
12890 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61  ess than this sa
128a0 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  mple */.  tRowcn
128b0 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45  t *anDLt;   /* E
128c0 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69  st. number of di
128d0 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73  stinct keys less
128e0 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c   than this sampl
128f0 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45  e */.};../*.** E
12900 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67  ach token coming
12910 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65   out of the lexe
12920 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  r is an instance
12930 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75   of.** this stru
12940 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61  cture.  Tokens a
12950 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20  re also used as 
12960 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65  part of an expre
12970 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  ssion..**.** Not
12980 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20  e if Token.z==0 
12990 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61  then Token.dyn a
129a0 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75  nd Token.n are u
129b0 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20  ndefined and.** 
129c0 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64  may contain rand
129d0 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e  om values.  Do n
129e0 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75  ot make any assu
129f0 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f  mptions about To
12a00 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54  ken.dyn.** and T
12a10 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65  oken.n when Toke
12a20 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63  n.z==0..*/.struc
12a30 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73  t Token {.  cons
12a40 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f  t char *z;     /
12a50 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f  * Text of the to
12a60 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74  ken.  Not NULL-t
12a70 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20  erminated! */.  
12a80 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20  unsigned int n; 
12a90 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
12aa0 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68  characters in th
12ab0 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a  is token */.};..
12ac0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
12ad0 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
12ae0 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ure contains inf
12af0 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20  ormation needed 
12b00 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63  to generate.** c
12b10 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54  ode for a SELECT
12b20 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61   that contains a
12b30 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
12b40 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70  ns..**.** If Exp
12b50 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c  r.op==TK_AGG_COL
12b60 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55  UMN or TK_AGG_FU
12b70 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72  NCTION then Expr
12b80 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a  .pAggInfo is a.*
12b90 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  * pointer to thi
12ba0 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  s structure.  Th
12bb0 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66  e Expr.iColumn f
12bc0 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65  ield is the inde
12bd0 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e  x in.** AggInfo.
12be0 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66  aCol[] or AggInf
12bf0 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66  o.aFunc[] of inf
12c00 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20  ormation needed 
12c10 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63  to generate.** c
12c20 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64  ode for that nod
12c30 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f  e..**.** AggInfo
12c40 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67  .pGroupBy and Ag
12c50 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70  gInfo.aFunc.pExp
12c60 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64  r point to field
12c70 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20  s within the.** 
12c80 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20  original Select 
12c90 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
12ca0 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45 4c  escribes the SEL
12cb0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
12cc0 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20  These.** fields 
12cd0 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62  do not need to b
12ce0 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65 61  e freed when dea
12cf0 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67  llocating the Ag
12d00 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e  gInfo structure.
12d10 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e  .*/.struct AggIn
12d20 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74  fo {.  u8 direct
12d30 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Mode;          /
12d40 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72 69  * Direct renderi
12d50 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61  ng mode means ta
12d60 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c 79  ke data directly
12d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12d80 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72             ** fr
12d90 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73  om source tables
12da0 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f   rather than fro
12db0 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a  m accumulators *
12dc0 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e  /.  u8 useSortin
12dd0 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49  gIdx;       /* I
12de0 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72  n direct mode, r
12df0 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72  eference the sor
12e00 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65  ting index rathe
12e10 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
12e20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74              ** t
12e30 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74  han the source t
12e40 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  able */.  int so
12e50 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20  rtingIdx;       
12e60 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
12e70 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e  er of the sortin
12e80 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  g index */.  int
12e90 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b   sortingIdxPTab;
12ea0 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
12eb0 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d  umber of pseudo-
12ec0 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  table */.  int n
12ed0 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20  SortingColumn;  
12ee0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
12ef0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73  columns in the s
12f00 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
12f10 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52    int mnReg, mxR
12f20 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e  eg;       /* Ran
12f30 67 65 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  ge of registers 
12f40 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43  allocated for aC
12f50 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a  ol and aFunc */.
12f60 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
12f70 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65  upBy;     /* The
12f80 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65   group by clause
12f90 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67   */.  struct Agg
12fa0 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a  Info_col {    /*
12fb0 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   For each column
12fc0 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20   used in source 
12fd0 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61  tables */.    Ta
12fe0 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
12ff0 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65         /* Source
13000 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
13010 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
13020 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
13030 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
13040 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
13050 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20     int iColumn; 
13060 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
13070 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74  olumn number wit
13080 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74  hin the source t
13090 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
130a0 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20  iSorterColumn;  
130b0 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
130c0 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72  umber in the sor
130d0 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
130e0 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
130f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
13100 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
13110 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
13120 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78  ulator */.    Ex
13130 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
13140 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72         /* The or
13150 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f  iginal expressio
13160 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a  n */.  } *aCol;.
13170 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20    int nColumn;  
13180 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
13190 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72  ber of used entr
131a0 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f  ies in aCol[] */
131b0 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61  .  int nAccumula
131c0 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  tor;       /* Nu
131d0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
131e0 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67  that show throug
131f0 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e  h to the output.
13200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13210 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64             ** Ad
13220 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73  ditional columns
13230 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61   are used only a
13240 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  s parameters to.
13250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13260 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67            ** agg
13270 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
13280 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67   */.  struct Agg
13290 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a  Info_func {   /*
132a0 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65 67   For each aggreg
132b0 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ate function */.
132c0 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
132d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
132e0 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64  Expression encod
132f0 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ing the function
13300 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20   */.    FuncDef 
13310 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20  *pFunc;         
13320 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61 74   /* The aggregat
13330 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65  e function imple
13340 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  mentation */.   
13350 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20   int iMem;      
13360 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
13370 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
13380 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75  t acts as accumu
13390 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74  lator */.    int
133a0 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20   iDistinct;     
133b0 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72        /* Ephemer
133c0 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f  al table used to
133d0 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43   enforce DISTINC
133e0 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b  T */.  } *aFunc;
133f0 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20  .  int nFunc;   
13400 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
13410 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
13420 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b  in aFunc[] */.};
13430 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
13440 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61 20  type ynVar is a 
13450 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20  signed integer, 
13460 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72  either 16-bit or
13470 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61   32-bit..** Usua
13480 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69 74  lly it is 16-bit
13490 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49 54  s.  But if SQLIT
134a0 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
134b0 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65 72  UMBER is greater
134c0 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77  .** than 32767 w
134d0 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69  e have to make i
134e0 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69  t 32-bit.  16-bi
134f0 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20 62  t is preferred b
13500 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65  ecause.** it use
13510 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e  s less memory in
13520 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74   the Expr object
13530 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69 67  , which is a big
13540 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20   memory user.** 
13550 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20  in systems with 
13560 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65 64  lots of prepared
13570 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e   statements.  An
13580 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f  d few applicatio
13590 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20  ns.** need more 
135a0 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72  than about 10 or
135b0 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20   20 variables.  
135c0 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65  But some extreme
135d0 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74   users want.** t
135e0 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64 20  o have prepared 
135f0 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20  statements with 
13600 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69 61  over 32767 varia
13610 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68  bles, and for th
13620 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e  em.** the option
13630 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61   is available (a
13640 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e  t compile-time).
13650 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
13660 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
13670 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65  ER<=32767.typede
13680 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c  f i16 ynVar;.#el
13690 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79  se.typedef int y
136a0 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  nVar;.#endif../*
136b0 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66  .** Each node of
136c0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69   an expression i
136d0 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  n the parse tree
136e0 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   is an instance.
136f0 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
13700 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  ture..**.** Expr
13710 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64  .op is the opcod
13720 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 70  e. The integer p
13730 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65  arser token code
13740 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20  s are reused.** 
13750 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e  as opcodes here.
13760 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68   For example, th
13770 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65 73  e parser defines
13780 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20   TK_GE to be an 
13790 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20  integer.** code 
137a0 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
137b0 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20   ">=" operator. 
137c0 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65  This same intege
137d0 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65 64  r code is reused
137e0 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74  .** to represent
137f0 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68 61   the greater-tha
13800 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70  n-or-equal-to op
13810 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78  erator in the ex
13820 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65  pression.** tree
13830 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
13840 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
13850 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f  SQL literal (TK_
13860 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41  INTEGER, TK_FLOA
13870 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20  T, TK_BLOB, .** 
13880 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74  or TK_STRING), t
13890 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
138a0 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74  ontains the text
138b0 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65   of the SQL lite
138c0 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65  ral. If.** the e
138d0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76  xpression is a v
138e0 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49  ariable (TK_VARI
138f0 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72  ABLE), then Expr
13900 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
13910 74 68 65 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65  the .** variable
13920 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20   name. Finally, 
13930 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
13940 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
13950 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f  tion (TK_FUNCTIO
13960 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72  N),.** then Expr
13970 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
13980 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
13990 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  function..**.** 
139a0 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20  Expr.pRight and 
139b0 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74  Expr.pLeft are t
139c0 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
139d0 74 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73  t subexpressions
139e0 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20   of a.** binary 
139f0 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72  operator. Either
13a00 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20   or both may be 
13a10 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  NULL..**.** Expr
13a20 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69  .x.pList is a li
13a30 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  st of arguments 
13a40 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
13a50 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
13a60 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20  tion,.** a CASE 
13a70 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e  expression or an
13a80 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   IN expression o
13a90 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73  f the form "<lhs
13aa0 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e  > IN (<y>, <z>..
13ab0 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70  .)"..** Expr.x.p
13ac0 53 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69  Select is used i
13ad0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
13ae0 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74   is a sub-select
13af0 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f   or an expressio
13b00 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d  n of.** the form
13b10 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45   "<lhs> IN (SELE
13b20 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65  CT ...)". If the
13b30 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69   EP_xIsSelect bi
13b40 74 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a  t is set in the.
13b50 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  ** Expr.flags ma
13b60 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e  sk, then Expr.x.
13b70 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
13b80 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70  . Otherwise, Exp
13b90 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 0a 2a 2a  r.x.pList is .**
13ba0 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e   valid..**.** An
13bb0 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
13bc0 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44  he form ID or ID
13bd0 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20 61 20  .ID refers to a 
13be0 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c  column in a tabl
13bf0 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65  e..** For such e
13c00 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72  xpressions, Expr
13c10 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b  .op is set to TK
13c20 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72  _COLUMN and Expr
13c30 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  .iTable is.** th
13c40 65 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72  e integer cursor
13c50 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42   number of a VDB
13c60 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  E cursor pointin
13c70 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20  g to that table 
13c80 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c  and.** Expr.iCol
13c90 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d  umn is the colum
13ca0 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  n number for the
13cb0 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e   specific column
13cc0 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70  .  If the.** exp
13cd0 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20  ression is used 
13ce0 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61  as a result in a
13cf0 6e 20 61 67 67 72 65 67 61 74 65 20 53 45 4c 45  n aggregate SELE
13d00 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  CT, then the.** 
13d10 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74  value is also st
13d20 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78 70 72  ored in the Expr
13d30 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20  .iAgg column in 
13d40 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73 6f  the aggregate so
13d50 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20   that.** it can 
13d60 62 65 20 61 63 63 65 73 73 65 64 20 61 66 74 65  be accessed afte
13d70 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73  r all aggregates
13d80 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a   are computed..*
13d90 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
13da0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62  ession is an unb
13db0 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61  ound variable ma
13dc0 72 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e  rker (a question
13dd0 20 6d 61 72 6b 20 0a 2a 2a 20 63 68 61 72 61 63   mark .** charac
13de0 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f  ter '?' in the o
13df0 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65  riginal SQL) the
13e00 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c  n the Expr.iTabl
13e10 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65  e holds the inde
13e20 78 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72  x .** number for
13e30 20 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a   that variable..
13e40 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
13e50 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
13e60 71 75 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e  query then Expr.
13e70 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e  iColumn holds an
13e80 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69   integer.** regi
13e90 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74  ster number cont
13ea0 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c  aining the resul
13eb0 74 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72  t of the subquer
13ec0 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75  y.  If the.** su
13ed0 62 71 75 65 72 79 20 67 69 76 65 73 20 61 20 63  bquery gives a c
13ee0 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20  onstant result, 
13ef0 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d  then iTable is -
13f00 31 2e 20 20 49 66 20 74 68 65 20 73 75 62 71 75  1.  If the subqu
13f10 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64  ery.** gives a d
13f20 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20  ifferent answer 
13f30 61 74 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d  at different tim
13f40 65 73 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d  es during statem
13f50 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a  ent processing.*
13f60 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73  * then iTable is
13f70 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
13f80 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61  a subroutine tha
13f90 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73  t computes the s
13fa0 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49  ubquery..**.** I
13fb0 66 20 74 68 65 20 45 78 70 72 20 69 73 20 6f 66  f the Expr is of
13fc0 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c   type OP_Column,
13fd0 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69   and the table i
13fe0 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66  t is selecting f
13ff0 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b  rom.** is a disk
14000 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f   table or the "o
14010 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62  ld.*" pseudo-tab
14020 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f  le, then pTab po
14030 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ints to the.** c
14040 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62  orresponding tab
14050 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a  le definition..*
14060 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20  *.** ALLOCATION 
14070 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70  NOTES:.**.** Exp
14080 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73  r objects can us
14090 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72  e a lot of memor
140a0 79 20 73 70 61 63 65 20 69 6e 20 64 61 74 61 62  y space in datab
140b0 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a  ase schema.  To.
140c0 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d  ** help reduce m
140d0 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e  emory requiremen
140e0 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e  ts, sometimes an
140f0 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c   Expr object wil
14100 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65  l be.** truncate
14110 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63  d.  And to reduc
14120 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
14130 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
14140 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a  ns, sometimes.**
14150 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70   two or more Exp
14160 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62  r objects will b
14170 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
14180 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ngle memory allo
14190 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74  cation,.** toget
141a0 68 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54  her with Expr.zT
141b0 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a  oken strings..**
141c0 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65  .** If the EP_Re
141d0 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b  duced and EP_Tok
141e0 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65  enOnly flags are
141f0 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20   set when.** an 
14200 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74  Expr object is t
14210 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20  runcated.  When 
14220 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
14230 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74  t, then all.** t
14240 68 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62  he child Expr ob
14250 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45 78 70  jects in the Exp
14260 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72  r.pLeft and Expr
14270 2e 70 52 69 67 68 74 20 73 75 62 74 72 65 65 73  .pRight subtrees
14280 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  .** are containe
14290 64 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  d within the sam
142a0 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
142b0 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65  ion.  Note, howe
142c0 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65  ver, that.** the
142d0 20 73 75 62 74 72 65 65 73 20 69 6e 20 45 78 70   subtrees in Exp
142e0 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70  r.x.pList or Exp
142f0 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20  r.x.pSelect are 
14300 61 6c 77 61 79 73 20 73 65 70 61 72 61 74 65 6c  always separatel
14310 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
14320 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
14330 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f  ether or not EP_
14340 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a  Reduced is set..
14350 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b  */.struct Expr {
14360 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
14370 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65            /* Ope
14380 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64  ration performed
14390 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
143a0 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
143b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
143c0 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65   affinity of the
143d0 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20   column or 0 if 
143e0 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  not a column */.
143f0 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20    u32 flags;    
14400 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
14410 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a  ous flags.  EP_*
14420 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
14430 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72  union {.    char
14440 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20   *zToken;       
14450 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75     /* Token valu
14460 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74  e. Zero terminat
14470 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20  ed and dequoted 
14480 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75  */.    int iValu
14490 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
144a0 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e   Non-negative in
144b0 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 45  teger value if E
144c0 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20  P_IntValue */.  
144d0 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  } u;..  /* If th
144e0 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
144f0 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68  lag is set in th
14500 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  e Expr.flags mas
14510 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20  k, then no.  ** 
14520 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74  space is allocat
14530 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ed for the field
14540 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69  s below this poi
14550 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74  nt. An attempt t
14560 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68  o.  ** access th
14570 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  em will result i
14580 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20  n a segfault or 
14590 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a 20 20  malfunction. .  
145a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
145b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
145c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 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 2f 0a 0a 20 20 45 78 70 72 20 2a  *****/..  Expr *
145f0 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20 20  pLeft;          
14600 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65   /* Left subnode
14610 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67   */.  Expr *pRig
14620 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ht;          /* 
14630 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f  Right subnode */
14640 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45  .  union {.    E
14650 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20  xprList *pList; 
14660 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20      /* op = IN, 
14670 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20  EXISTS, SELECT, 
14680 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20  CASE, FUNCTION, 
14690 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53  BETWEEN */.    S
146a0 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
146b0 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c      /* EP_xIsSel
146c0 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c  ect and op = IN,
146d0 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20   EXISTS, SELECT 
146e0 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20  */.  } x;..  /* 
146f0 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  If the EP_Reduce
14700 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  d flag is set in
14710 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
14720 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20  mask, then no.  
14730 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f  ** space is allo
14740 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cated for the fi
14750 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20  elds below this 
14760 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70  point. An attemp
14770 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73  t to.  ** access
14780 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c   them will resul
14790 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20  t in a segfault 
147a0 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a  or malfunction..
147b0 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
147c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
147d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
147e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
147f0 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51  *******/..#if SQ
14800 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45  LITE_MAX_EXPR_DE
14810 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69  PTH>0.  int nHei
14820 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ght;           /
14830 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68 65 20  * Height of the 
14840 74 72 65 65 20 68 65 61 64 65 64 20 62 79 20 74  tree headed by t
14850 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64  his node */.#end
14860 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  if.  int iTable;
14870 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
14880 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72  K_COLUMN: cursor
14890 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   number of table
148a0 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a   holding column.
148b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148c0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52           ** TK_R
148d0 45 47 49 53 54 45 52 3a 20 72 65 67 69 73 74 65  EGISTER: registe
148e0 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20  r number.       
148f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14900 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a    ** TK_TRIGGER:
14910 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20   1 -> new, 0 -> 
14920 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20 20  old.            
14930 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
14940 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 33  EP_Unlikely:  13
14950 34 32 31 37 37 32 38 20 74 69 6d 65 73 20 6c 69  4217728 times li
14960 6b 65 6c 69 68 6f 6f 64 20 2a 2f 0a 20 20 79 6e  kelihood */.  yn
14970 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  Var iColumn;    
14980 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d       /* TK_COLUM
14990 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e  N: column index.
149a0 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a    -1 for rowid..
149b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149c0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56           ** TK_V
149d0 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c  ARIABLE: variabl
149e0 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73  e number (always
149f0 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20 69 31 36   >= 1). */.  i16
14a00 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20 20   iAgg;          
14a10 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74      /* Which ent
14a20 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e  ry in pAggInfo->
14a30 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e  aCol[] or ->aFun
14a40 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69  c[] */.  i16 iRi
14a50 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20  ghtJoinTable;   
14a60 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69  /* If EP_FromJoi
14a70 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61 62  n, the right tab
14a80 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a  le of the join *
14a90 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20  /.  u8 op2;     
14aa0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
14ab0 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69  _REGISTER: origi
14ac0 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70  nal value of Exp
14ad0 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20  r.op.           
14ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
14af0 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20   TK_COLUMN: the 
14b00 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20  value of p5 for 
14b10 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  OP_Column.      
14b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b30 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e     ** TK_AGG_FUN
14b40 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64  CTION: nesting d
14b50 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66  epth */.  AggInf
14b60 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20  o *pAggInfo;    
14b70 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41   /* Used by TK_A
14b80 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b  GG_COLUMN and TK
14b90 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f  _AGG_FUNCTION */
14ba0 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
14bb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
14bc0 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e  le for TK_COLUMN
14bd0 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f   expressions. */
14be0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
14bf0 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65  ollowing are the
14c00 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74   meanings of bit
14c10 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  s in the Expr.fl
14c20 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
14c30 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69  efine EP_FromJoi
14c40 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f  n  0x000001 /* O
14c50 72 69 67 69 6e 61 74 65 64 20 69 6e 20 4f 4e 20  riginated in ON 
14c60 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  or USING clause 
14c70 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  of a join */.#de
14c80 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20  fine EP_Agg     
14c90 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f    0x000002 /* Co
14ca0 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
14cb0 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
14cc0 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
14cd0 65 20 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 30  e EP_Resolved  0
14ce0 78 30 30 30 30 30 34 20 2f 2a 20 49 44 73 20 68  x000004 /* IDs h
14cf0 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65  ave been resolve
14d00 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a  d to COLUMNs */.
14d10 23 64 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72  #define EP_Error
14d20 20 20 20 20 20 30 78 30 30 30 30 30 38 20 2f 2a       0x000008 /*
14d30 20 45 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74   Expression cont
14d40 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
14d50 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69   errors */.#defi
14d60 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20  ne EP_Distinct  
14d70 30 78 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72  0x000010 /* Aggr
14d80 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77  egate function w
14d90 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79  ith DISTINCT key
14da0 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
14db0 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30  EP_VarSelect 0x0
14dc0 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74  00020 /* pSelect
14dd0 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20   is correlated, 
14de0 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a  not constant */.
14df0 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75  #define EP_DblQu
14e00 6f 74 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a  oted 0x000040 /*
14e10 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69   token.z was ori
14e20 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22  ginally in "..."
14e30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49   */.#define EP_I
14e40 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30 30 38  nfixFunc 0x00008
14e50 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e  0 /* True for an
14e60 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a   infix function:
14e70 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63   LIKE, GLOB, etc
14e80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
14e90 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30 31 30  ollate   0x00010
14ea0 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69  0 /* Tree contai
14eb0 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20  ns a TK_COLLATE 
14ec0 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66  operator */.#def
14ed0 69 6e 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20  ine EP_Generic  
14ee0 20 30 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e   0x000200 /* Ign
14ef0 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61  ore COLLATE or a
14f00 66 66 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20  ffinity on this 
14f10 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tree */.#define 
14f20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30  EP_IntValue  0x0
14f30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72  00400 /* Integer
14f40 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64   value contained
14f50 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a   in u.iValue */.
14f60 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65  #define EP_xIsSe
14f70 6c 65 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a  lect 0x000800 /*
14f80 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61   x.pSelect is va
14f90 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65 20 78  lid (otherwise x
14fa0 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64  .pList is) */.#d
14fb0 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20  efine EP_Skip   
14fc0 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43     0x001000 /* C
14fd0 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55  OLLATE, AS, or U
14fe0 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69  NLIKELY */.#defi
14ff0 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20 20 20  ne EP_Reduced   
15000 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72  0x002000 /* Expr
15010 20 73 74 72 75 63 74 20 45 58 50 52 5f 52 45 44   struct EXPR_RED
15020 55 43 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f  UCEDSIZE bytes o
15030 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
15040 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30  P_TokenOnly 0x00
15050 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72  4000 /* Expr str
15060 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e  uct EXPR_TOKENON
15070 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  LYSIZE bytes onl
15080 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
15090 53 74 61 74 69 63 20 20 20 20 30 78 30 30 38 30  Static    0x0080
150a0 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65  00 /* Held in me
150b0 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65  mory not obtaine
150c0 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20  d from malloc() 
150d0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65  */.#define EP_Me
150e0 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30  mToken  0x010000
150f0 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69   /* Need to sqli
15100 74 65 33 44 62 46 72 65 65 28 29 20 45 78 70 72  te3DbFree() Expr
15110 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69  .zToken */.#defi
15120 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20  ne EP_NoReduce  
15130 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e  0x020000 /* Cann
15140 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44 55 43  ot EXPRDUP_REDUC
15150 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23  E this Expr */.#
15160 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65  define EP_Unlike
15170 6c 79 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20  ly  0x040000 /* 
15180 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69  unlikely() or li
15190 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74  kelihood() funct
151a0 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ion */.#define E
151b0 50 5f 43 6f 6e 73 74 61 6e 74 20 20 30 78 30 38  P_Constant  0x08
151c0 30 30 30 30 20 2f 2a 20 4e 6f 64 65 20 69 73 20  0000 /* Node is 
151d0 61 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 0a 2f  a constant */../
151e0 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  *.** These macro
151f0 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  s can be used to
15200 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63   test, set, or c
15210 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65  lear bits in the
15220 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20   .** Expr.flags 
15230 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
15240 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74  e ExprHasPropert
15250 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45 29  y(E,P)     (((E)
15260 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29  ->flags&(P))!=0)
15270 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73  .#define ExprHas
15280 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29  AllProperty(E,P)
15290 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
152a0 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e  P))==(P)).#defin
152b0 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74  e ExprSetPropert
152c0 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e  y(E,P)     (E)->
152d0 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  flags|=(P).#defi
152e0 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70  ne ExprClearProp
152f0 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d  erty(E,P)   (E)-
15300 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a  >flags&=~(P)../*
15310 20 54 68 65 20 45 78 70 72 53 65 74 56 56 41 50   The ExprSetVVAP
15320 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20  roperty() macro 
15330 69 73 20 75 73 65 64 20 66 6f 72 20 56 65 72 69  is used for Veri
15340 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61  fication, Valida
15350 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63  tion,.** and Acc
15360 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e  reditation only.
15370 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20    It works like 
15380 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
15390 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20  ) during VVA.** 
153a0 70 72 6f 63 65 73 73 65 73 20 62 75 74 20 69 73  processes but is
153b0 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c   a no-op for del
153c0 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  ivery..*/.#ifdef
153d0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
153e0 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56  define ExprSetVV
153f0 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  AProperty(E,P)  
15400 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a  (E)->flags|=(P).
15410 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45  #else.# define E
15420 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
15430 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  y(E,P).#endif../
15440 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
15450 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d  etermine the num
15460 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65 71  ber of bytes req
15470 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61  uired by a norma
15480 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63  l Expr .** struc
15490 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  t, an Expr struc
154a0 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65  t with the EP_Re
154b0 64 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69  duced flag set i
154c0 6e 20 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a  n Expr.flags .**
154d0 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72   and an Expr str
154e0 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f  uct with the EP_
154f0 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73  TokenOnly flag s
15500 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  et..*/.#define E
15510 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20  XPR_FULLSIZE    
15520 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78         sizeof(Ex
15530 70 72 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a  pr)           /*
15540 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64   Full size */.#d
15550 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43  efine EXPR_REDUC
15560 45 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66  EDSIZE        of
15570 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62  fsetof(Expr,iTab
15580 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66  le)  /* Common f
15590 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69  eatures */.#defi
155a0 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c  ne EXPR_TOKENONL
155b0 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65  YSIZE      offse
155c0 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20  tof(Expr,pLeft) 
155d0 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75    /* Fewer featu
155e0 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c  res */../*.** Fl
155f0 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  ags passed to th
15600 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
15610 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65  () function. See
15620 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d   the header comm
15630 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71  ent .** above sq
15640 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66  lite3ExprDup() f
15650 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23  or details..*/.#
15660 64 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52  define EXPRDUP_R
15670 45 44 55 43 45 20 20 20 20 20 20 20 20 20 30 78  EDUCE         0x
15680 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65  0001  /* Used re
15690 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20  duced-size Expr 
156a0 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  nodes */../*.** 
156b0 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  A list of expres
156c0 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70  sions.  Each exp
156d0 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69  ression may opti
156e0 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a  onally have a.**
156f0 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f   name.  An expr/
15700 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  name combination
15710 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
15720 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75  several ways, su
15730 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73  ch.** as the lis
15740 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49 44  t of "expr AS ID
15750 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69  " fields followi
15760 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72  ng a "SELECT" or
15770 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20   in the.** list 
15780 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20 69  of "ID = expr" i
15790 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54  tems in an UPDAT
157a0 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78  E.  A list of ex
157b0 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a  pressions can.**
157c0 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73   also be used as
157d0 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
157e0 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20   a function, in 
157f0 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 61  which case the a
15800 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20  .zName.** field 
15810 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a  is not used..**.
15820 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74 68  ** By default th
15830 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65  e Expr.zSpan fie
15840 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e  ld holds a human
15850 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72 69  -readable descri
15860 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ption of.** the 
15870 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
15880 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 67  is used in the g
15890 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72  eneration of err
158a0 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a  or messages and.
158b0 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73  ** column labels
158c0 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
158d0 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74   Expr.zSpan is t
158e0 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78  ypically the tex
158f0 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e  t of a.** column
15900 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69   expression as i
15910 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53 45  t exists in a SE
15920 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
15930 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20   However, if.** 
15940 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20 66  the bSpanIsTab f
15950 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e  lag is set, then
15960 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f   zSpan is overlo
15970 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65  aded to mean the
15980 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20   name.** of the 
15990 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e  result column in
159a0 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42   the form: DATAB
159b0 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e  ASE.TABLE.COLUMN
159c0 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a  .  This later.**
159d0 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f   form is used fo
159e0 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f  r name resolutio
159f0 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46 52  n with nested FR
15a00 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73  OM clauses..*/.s
15a10 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b  truct ExprList {
15a20 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20  .  int nExpr;   
15a30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
15a40 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ber of expressio
15a50 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  ns on the list *
15a60 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c  /.  struct ExprL
15a70 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f  ist_item { /* Fo
15a80 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f  r each expressio
15a90 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  n in the list */
15aa0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
15ab0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
15ac0 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72  The list of expr
15ad0 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63  essions */.    c
15ae0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
15af0 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
15b00 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
15b10 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20  this expression 
15b20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70  */.    char *zSp
15b30 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  an;            /
15b40 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20  * Original text 
15b50 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
15b60 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74  n */.    u8 sort
15b70 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
15b80 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f   /* 1 for DESC o
15b90 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20  r 0 for ASC */. 
15ba0 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65     unsigned done
15bb0 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20   :1;       /* A 
15bc0 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65  flag to indicate
15bd0 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67   when processing
15be0 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a   is finished */.
15bf0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70      unsigned bSp
15c00 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a  anIsTab :1; /* z
15c10 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41  Span holds DB.TA
15c20 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20  BLE.COLUMN */.  
15c30 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61    unsigned reusa
15c40 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e  ble :1;   /* Con
15c50 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
15c60 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a   is reusable */.
15c70 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20      union {.    
15c80 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20    struct {.     
15c90 20 20 20 75 31 36 20 69 4f 72 64 65 72 42 79 43     u16 iOrderByC
15ca0 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20  ol;      /* For 
15cb0 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e  ORDER BY, column
15cc0 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c   number in resul
15cd0 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20  t set */.       
15ce0 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20   u16 iAlias;    
15cf0 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
15d00 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61  into Parse.aAlia
15d10 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f  s[] for zName */
15d20 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20  .      } x;.    
15d30 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72    int iConstExpr
15d40 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67  Reg;      /* Reg
15d50 69 73 74 65 72 20 69 6e 20 77 68 69 63 68 20 45  ister in which E
15d60 78 70 72 20 76 61 6c 75 65 20 69 73 20 63 61 63  xpr value is cac
15d70 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a  hed */.    } u;.
15d80 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20    } *a;         
15d90 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
15da0 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  c a power of two
15db0 20 67 72 65 61 74 65 72 20 6f 72 20 65 71 75 61   greater or equa
15dc0 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b  l to nExpr */.};
15dd0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
15de0 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
15df0 63 74 75 72 65 20 69 73 20 75 73 65 64 20 62 79  cture is used by
15e00 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 72   the parser to r
15e10 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68  ecord both.** th
15e20 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72  e parse tree for
15e30 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61   an expression a
15e40 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69  nd the span of i
15e50 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e  nput text for an
15e60 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a  .** expression..
15e70 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 53 70  */.struct ExprSp
15e80 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78  an {.  Expr *pEx
15e90 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  pr;          /* 
15ea0 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70  The expression p
15eb0 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63  arse tree */.  c
15ec0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72  onst char *zStar
15ed0 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68  t;   /* First ch
15ee0 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74  aracter of input
15ef0 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74   text */.  const
15f00 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20   char *zEnd;    
15f10 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65   /* One characte
15f20 72 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f  r past the end o
15f30 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a  f input text */.
15f40 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
15f50 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
15f60 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64  ructure can hold
15f70 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f   a simple list o
15f80 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a  f identifiers,.*
15f90 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69  * such as the li
15fa0 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68  st "a,b,c" in th
15fb0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
15fc0 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  ements:.**.**   
15fd0 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
15fe0 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e  (a,b,c) VALUES .
15ff0 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  ..;.**      CREA
16000 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20  TE INDEX idx ON 
16010 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20  t(a,b,c);.**    
16020 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
16030 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44   trig BEFORE UPD
16040 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20  ATE ON t(a,b,c) 
16050 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ...;.**.** The I
16060 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c  dList.a.idx fiel
16070 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74  d is used when t
16080 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73  he IdList repres
16090 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66  ents the list of
160a0 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  .** column names
160b0 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e   after a table n
160c0 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54  ame in an INSERT
160d0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
160e0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  the statement.**
160f0 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49  .**     INSERT I
16100 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e  NTO t(a,b,c) ...
16110 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73  .**.** If "a" is
16120 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e   the k-th column
16130 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74   of table "t", t
16140 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e  hen IdList.a[0].
16150 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63  idx==k..*/.struc
16160 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72  t IdList {.  str
16170 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20  uct IdList_item 
16180 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  {.    char *zNam
16190 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
161a0 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65  of the identifie
161b0 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78  r */.    int idx
161c0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ;          /* In
161d0 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c  dex in some Tabl
161e0 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f  e.aCol[] of a co
161f0 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65  lumn named zName
16200 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e   */.  } *a;.  in
16210 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f  t nId;         /
16220 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e  * Number of iden
16230 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c  tifiers on the l
16240 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
16250 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74   The bitmask dat
16260 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 65  atype defined be
16270 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20  low is used for 
16280 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
16290 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61  tions..**.** Cha
162a0 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20  nging this from 
162b0 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32  a 64-bit to a 32
162c0 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73  -bit type limits
162d0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a   the number of.*
162e0 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f  * tables in a jo
162f0 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64  in to 32 instead
16300 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74 20   of 64.  But it 
16310 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68 65  also reduces the
16320 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20   size.** of the 
16330 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20 62  library by 738 b
16340 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f  ytes on ix86..*/
16350 0a 74 79 70 65 64 65 66 20 75 36 34 20 42 69 74  .typedef u64 Bit
16360 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  mask;../*.** The
16370 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
16380 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22  in a Bitmask.  "
16390 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d  BMS" means "BitM
163a0 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64  ask Size"..*/.#d
163b0 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74  efine BMS  ((int
163c0 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b  )(sizeof(Bitmask
163d0 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62  )*8))../*.** A b
163e0 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a  it in a Bitmask.
163f0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42  */.#define MASKB
16400 49 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61  IT(n)   (((Bitma
16410 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66  sk)1)<<(n)).#def
16420 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28 6e 29  ine MASKBIT32(n)
16430 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69 6e 74   (((unsigned int
16440 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a  )1)<<(n))../*.**
16450 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
16460 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
16470 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  es the FROM clau
16480 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  se of a SELECT s
16490 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63  tatement..** Eac
164a0 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  h table or subqu
164b0 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ery in the FROM 
164c0 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61  clause is a sepa
164d0 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a  rate element of.
164e0 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  ** the SrcList.a
164f0 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20  [] array..**.** 
16500 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f  With the additio
16510 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61  n of multiple da
16520 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20  tabase support, 
16530 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
16540 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61  ructure.** can a
16550 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64  lso be used to d
16560 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63  escribe a partic
16570 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20  ular table such 
16580 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  as the table tha
16590 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64  t.** is modified
165a0 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44   by an INSERT, D
165b0 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45  ELETE, or UPDATE
165c0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
165d0 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a  standard SQL,.**
165e0 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75   such a table mu
165f0 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e  st be a simple n
16600 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e  ame: ID.  But in
16610 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62   SQLite, the tab
16620 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65  le can.** now be
16630 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
16640 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20   database name, 
16650 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20  a dot, then the 
16660 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49  table name: ID.I
16670 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69  D..**.** The joi
16680 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75 74  ntype starts out
16690 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69   showing the joi
166a0 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20 74  n type between t
166b0 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65  he current table
166c0 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74  .** and the next
166d0 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69   table on the li
166e0 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72 20  st.  The parser 
166f0 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20  builds the list 
16700 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74  this way..** But
16710 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
16720 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c  hiftJoinType() l
16730 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65 20  ater shifts the 
16740 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61  jointypes so tha
16750 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79  t each.** jointy
16760 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68 65  pe expresses the
16770 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
16780 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20  e table and the 
16790 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a  previous table..
167a0 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c  **.** In the col
167b0 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20  Used field, the 
167c0 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28  high-order bit (
167d0 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20 69  bit 63) is set i
167e0 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63  f the table.** c
167f0 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61  ontains more tha
16800 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64  n 63 columns and
16810 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61   the 64-th or la
16820 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73  ter column is us
16830 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72  ed..*/.struct Sr
16840 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53  cList {.  int nS
16850 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  rc;        /* Nu
16860 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f  mber of tables o
16870 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e 20  r subqueries in 
16880 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
16890 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b  */.  u32 nAlloc;
168a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
168b0 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63  of entries alloc
168c0 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f  ated in a[] belo
168d0 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72  w */.  struct Sr
168e0 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  cList_item {.   
168f0 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
16900 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20  ;  /* Schema to 
16910 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20  which this item 
16920 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20  is fixed */.    
16930 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b  char *zDatabase;
16940 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
16950 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68  abase holding th
16960 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
16970 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
16980 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
16990 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
169a0 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20  ar *zAlias;     
169b0 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20  /* The "B" part 
169c0 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68  of a "A AS B" ph
169d0 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20  rase.  zName is 
169e0 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54  the "A" */.    T
169f0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
16a00 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65   /* An SQL table
16a10 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
16a20 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53  o zName */.    S
16a30 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
16a40 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61   /* A SELECT sta
16a50 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70  tement used in p
16a60 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20  lace of a table 
16a70 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  name */.    int 
16a80 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a  addrFillSub;  /*
16a90 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72   Address of subr
16aa0 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65  outine to manife
16ab0 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f  st a subquery */
16ac0 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75  .    int regRetu
16ad0 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  rn;    /* Regist
16ae0 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72  er holding retur
16af0 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64  n address of add
16b00 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20  rFillSub */.    
16b10 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20  int regResult;  
16b20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68    /* Registers h
16b30 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f  olding results o
16b40 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a  f a co-routine *
16b50 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70  /.    u8 jointyp
16b60 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  e;      /* Type 
16b70 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  of join between 
16b80 74 68 69 73 20 61 62 6c 65 20 61 6e 64 20 74 68  this able and th
16b90 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20  e previous */.  
16ba0 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e    unsigned notIn
16bb0 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20  dexed :1;    /* 
16bc0 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73  True if there is
16bd0 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63   a NOT INDEXED c
16be0 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 75 6e 73  lause */.    uns
16bf0 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74  igned isCorrelat
16c00 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  ed :1;  /* True 
16c10 69 66 20 73 75 62 2d 71 75 65 72 79 20 69 73 20  if sub-query is 
16c20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20  correlated */.  
16c30 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f    unsigned viaCo
16c40 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20  routine :1;  /* 
16c50 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61  Implemented as a
16c60 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20   co-routine */. 
16c70 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65     unsigned isRe
16c80 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a  cursive :1;   /*
16c90 20 54 72 75 65 20 66 6f 72 20 72 65 63 75 72 73   True for recurs
16ca0 69 76 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e  ive reference in
16cb0 20 57 49 54 48 20 2a 2f 0a 23 69 66 6e 64 65 66   WITH */.#ifndef
16cc0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
16cd0 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c  LAIN.    u8 iSel
16ce0 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66  ectId;     /* If
16cf0 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65   pSelect!=0, the
16d00 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73   id of the sub-s
16d10 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a  elect in EQP */.
16d20 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69  #endif.    int i
16d30 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20  Cursor;      /* 
16d40 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
16d50 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61  number used to a
16d60 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65  ccess this table
16d70 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f   */.    Expr *pO
16d80 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  n;        /* The
16d90 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20   ON clause of a 
16da0 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69  join */.    IdLi
16db0 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a  st *pUsing;   /*
16dc0 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   The USING claus
16dd0 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
16de0 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73     Bitmask colUs
16df0 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31  ed;  /* Bit N (1
16e00 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75  <<N) set if colu
16e10 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20  mn N of pTab is 
16e20 75 73 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72  used */.    char
16e30 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f 2a   *zIndex;     /*
16e40 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d   Identifier from
16e50 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49   "INDEXED BY <zI
16e60 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f  ndex>" clause */
16e70 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64  .    Index *pInd
16e80 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78 20  ex;    /* Index 
16e90 73 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73  structure corres
16ea0 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64 65  ponding to zInde
16eb0 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 7d  x, if any */.  }
16ec0 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20   a[1];          
16ed0 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
16ee0 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69 66  for each identif
16ef0 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ier on the list 
16f00 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72  */.};../*.** Per
16f10 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66  mitted values of
16f20 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a   the SrcList.a.j
16f30 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f  ointype field.*/
16f40 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45  .#define JT_INNE
16f50 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20  R     0x0001    
16f60 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69  /* Any kind of i
16f70 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f  nner or cross jo
16f80 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
16f90 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30 30  _CROSS     0x000
16fa0 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74  2    /* Explicit
16fb0 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53   use of the CROS
16fc0 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  S keyword */.#de
16fd0 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20  fine JT_NATURAL 
16fe0 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54    0x0004    /* T
16ff0 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72  rue for a "natur
17000 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  al" join */.#def
17010 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20  ine JT_LEFT     
17020 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65   0x0008    /* Le
17030 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ft outer join */
17040 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48  .#define JT_RIGH
17050 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20  T     0x0010    
17060 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a  /* Right outer j
17070 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
17080 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30  T_OUTER     0x00
17090 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55  20    /* The "OU
170a0 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20  TER" keyword is 
170b0 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69  present */.#defi
170c0 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20  ne JT_ERROR     
170d0 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b  0x0040    /* unk
170e0 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72  nown or unsuppor
170f0 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f  ted join type */
17100 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61  .../*.** Flags a
17110 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74  ppropriate for t
17120 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61  he wctrlFlags pa
17130 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74  rameter of sqlit
17140 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a  e3WhereBegin().*
17150 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 49  * and the WhereI
17160 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d  nfo.wctrlFlags m
17170 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ember..*/.#defin
17180 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
17190 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20  NORMAL   0x0000 
171a0 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66  /* No-op */.#def
171b0 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
171c0 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30  Y_MIN      0x000
171d0 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  1 /* ORDER BY pr
171e0 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e  ocessing for min
171f0 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
17200 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
17210 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30 32  _MAX      0x0002
17220 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f   /* ORDER BY pro
17230 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28  cessing for max(
17240 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  ) func */.#defin
17250 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f  e WHERE_ONEPASS_
17260 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34 20  DESIRED  0x0004 
17270 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e  /* Want to do on
17280 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44 45  e-pass UPDATE/DE
17290 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE */.#define 
172a0 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53  WHERE_DUPLICATES
172b0 5f 4f 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a  _OK    0x0008 /*
172c0 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20   Ok to return a 
172d0 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  row more than on
172e0 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ce */.#define WH
172f0 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c  ERE_OMIT_OPEN_CL
17300 4f 53 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54  OSE  0x0010 /* T
17310 61 62 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65  able cursors are
17320 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f   already open */
17330 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46  .#define WHERE_F
17340 4f 52 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20  ORCE_TABLE      
17350 30 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74  0x0020 /* Do not
17360 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e   use an index-on
17370 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65  ly search */.#de
17380 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41  fine WHERE_ONETA
17390 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30  BLE_ONLY    0x00
173a0 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20  40 /* Only code 
173b0 74 68 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e  the 1st table in
173c0 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a 20 20 20   pTabList */.   
173d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173e0 20 20 20 20 20 20 20 2f 2a 20 20 20 30 78 30 30         /*   0x00
173f0 38 30 20 2f 2f 20 6e 6f 74 20 63 75 72 72 65 6e  80 // not curren
17400 74 6c 79 20 75 73 65 64 20 2a 2f 0a 23 64 65 66  tly used */.#def
17410 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42  ine WHERE_GROUPB
17420 59 20 20 20 20 20 20 20 20 20 20 30 78 30 31 30  Y          0x010
17430 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73  0 /* pOrderBy is
17440 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20   really a GROUP 
17450 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  BY */.#define WH
17460 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20  ERE_DISTINCTBY  
17470 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20 70       0x0200 /* p
17480 4f 72 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c  Orderby is reall
17490 79 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61  y a DISTINCT cla
174a0 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  use */.#define W
174b0 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e  HERE_WANT_DISTIN
174c0 43 54 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20  CT    0x0400 /* 
174d0 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73  All output needs
174e0 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20   to be distinct 
174f0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
17500 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20  _SORTBYGROUP    
17510 20 20 30 78 30 38 30 30 20 2f 2a 20 53 75 70 70    0x0800 /* Supp
17520 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  ort sqlite3Where
17530 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64  IsSorted() */.#d
17540 65 66 69 6e 65 20 57 48 45 52 45 5f 52 45 4f 50  efine WHERE_REOP
17550 45 4e 5f 49 44 58 20 20 20 20 20 20 20 30 78 31  EN_IDX       0x1
17560 30 30 30 20 2f 2a 20 54 72 79 20 74 6f 20 75 73  000 /* Try to us
17570 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 20 2a  e OP_ReopenIdx *
17580 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65  /../* Allowed re
17590 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d  turn values from
175a0 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44   sqlite3WhereIsD
175b0 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65  istinct().*/.#de
175c0 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
175d0 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20  NCT_NOOP      0 
175e0 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79   /* DISTINCT key
175f0 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f  word not used */
17600 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
17610 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20  ISTINCT_UNIQUE  
17620 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69    1  /* No dupli
17630 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cates */.#define
17640 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
17650 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20  ORDERED   2  /* 
17660 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61  All duplicates a
17670 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23  re adjacent */.#
17680 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
17690 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20  TINCT_UNORDERED 
176a0 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73  3  /* Duplicates
176b0 20 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a   are scattered *
176c0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43  /../*.** A NameC
176d0 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61  ontext defines a
176e0 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63   context in whic
176f0 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62  h to resolve tab
17700 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a  le and column.**
17710 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e   names.  The con
17720 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  text consists of
17730 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65   a list of table
17740 73 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29  s (the pSrcList)
17750 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20   field and.** a 
17760 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78  list of named ex
17770 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74  pression (pEList
17780 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78  ).  The named ex
17790 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61  pression list ma
177a0 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54  y.** be NULL.  T
177b0 68 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f  he pSrc correspo
177c0 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20  nds to the FROM 
177d0 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
177e0 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20  CT or.** to the 
177f0 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72  table being oper
17800 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52  ated on by INSER
17810 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45  T, UPDATE, or DE
17820 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45  LETE.  The.** pE
17830 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  List corresponds
17840 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73   to the result s
17850 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61  et of a SELECT a
17860 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a  nd is NULL for.*
17870 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e  * other statemen
17880 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f  ts..**.** NameCo
17890 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65  ntexts can be ne
178a0 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f  sted.  When reso
178b0 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65  lving names, the
178c0 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20   inner-most .** 
178d0 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72 63  context is searc
178e0 68 65 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e  hed first.  If n
178f0 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  o match is found
17900 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72  , the next outer
17910 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63  .** context is c
17920 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72  hecked.  If ther
17930 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61  e is still no ma
17940 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f  tch, the next co
17950 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63  ntext.** is chec
17960 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65  ked.  This proce
17970 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74  ss continues unt
17980 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74 63  il either a matc
17990 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72  h is found.** or
179a0 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72   all contexts ar
179b0 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61  e check.  When a
179c0 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c   match is found,
179d0 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72   the nRef member
179e0 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   of.** the conte
179f0 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  xt containing th
17a00 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65  e match is incre
17a10 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45  mented. .**.** E
17a20 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65 74  ach subquery get
17a30 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74  s a new NameCont
17a40 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20  ext.  The pNext 
17a50 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20  field points to 
17a60 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
17a70 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74  xt in the parent
17a80 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74 68   query.  Thus th
17a90 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61  e process of sca
17aa0 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d  nning the.** Nam
17ab0 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f  eContext list co
17ac0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61  rresponds to sea
17ad0 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73  rching through s
17ae0 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65  uccessively oute
17af0 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20  r.** subqueries 
17b00 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61  looking for a ma
17b10 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e  tch..*/.struct N
17b20 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50  ameContext {.  P
17b30 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
17b40 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65      /* The parse
17b50 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  r */.  SrcList *
17b60 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f  pSrcList;   /* O
17b70 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65  ne or more table
17b80 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76  s used to resolv
17b90 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70  e names */.  Exp
17ba0 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20  rList *pEList;  
17bb0 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69    /* Optional li
17bc0 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74  st of result-set
17bd0 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67   columns */.  Ag
17be0 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
17bf0 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
17c00 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61 74  n about aggregat
17c10 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c  es at this level
17c20 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78   */.  NameContex
17c30 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65  t *pNext;  /* Ne
17c40 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f  xt outer name co
17c50 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72  ntext.  NULL for
17c60 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20   outermost */.  
17c70 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20  int nRef;       
17c80 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17c90 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64  f names resolved
17ca0 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74   by this context
17cb0 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
17cc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
17cd0 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65  mber of errors e
17ce0 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65  ncountered while
17cf0 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
17d00 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61 67   */.  u16 ncFlag
17d10 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65  s;         /* Ze
17d20 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20  ro or more NC_* 
17d30 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62 65  flags defined be
17d40 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  low */.};../*.**
17d50 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
17d60 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74  for the NameCont
17d70 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65  ext, ncFlags fie
17d80 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 3a 20  ld..**.** Note: 
17d90 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 6d 75   NC_MinMaxAgg mu
17da0 73 74 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  st have the same
17db0 20 76 61 6c 75 65 20 61 73 20 53 46 5f 4d 69 6e   value as SF_Min
17dc0 4d 61 78 41 67 67 20 61 6e 64 0a 2a 2a 20 53 51  MaxAgg and.** SQ
17dd0 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
17de0 2e 0a 2a 2a 20 0a 2a 2f 0a 23 64 65 66 69 6e 65  ..** .*/.#define
17df0 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78   NC_AllowAgg  0x
17e00 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61  0001  /* Aggrega
17e10 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  te functions are
17e20 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f   allowed here */
17e30 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41  .#define NC_HasA
17e40 67 67 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a  gg    0x0002  /*
17e50 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   One or more agg
17e60 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
17e70 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   seen */.#define
17e80 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78   NC_IsCheck   0x
17e90 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66  0004  /* True if
17ea0 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
17eb0 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73   in a CHECK cons
17ec0 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
17ed0 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30  e NC_InAggFunc 0
17ee0 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20 69  x0008  /* True i
17ef0 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75  f analyzing argu
17f00 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20  ments to an agg 
17f10 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
17f20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30 78 30  NC_PartIdx   0x0
17f30 30 31 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  010  /* True if 
17f40 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74  resolving a part
17f50 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20  ial index WHERE 
17f60 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69  */.#define NC_Mi
17f70 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30 20 20  nMaxAgg 0x1000  
17f80 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65  /* min/max aggre
17f90 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65  gates seen.  See
17fa0 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a   note above */..
17fb0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
17fc0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
17fd0 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
17fe0 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d  tains all inform
17ff0 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20  ation.** needed 
18000 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65  to generate code
18010 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45   for a single SE
18020 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
18030 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20  **.** nLimit is 
18040 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65  set to -1 if the
18050 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63  re is no LIMIT c
18060 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20  lause.  nOffset 
18070 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20  is set to 0..** 
18080 49 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49  If there is a LI
18090 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20  MIT clause, the 
180a0 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d  parser sets nLim
180b0 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  it to the value 
180c0 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20  of the.** limit 
180d0 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74  and nOffset to t
180e0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
180f0 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20  offset (or 0 if 
18100 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20  there is not.** 
18110 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61  offset).  But la
18120 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61  ter on, nLimit a
18130 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d  nd nOffset becom
18140 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  e the memory loc
18150 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65  ations.** in the
18160 20 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72   VDBE that recor
18170 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20  d the limit and 
18180 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e  offset counters.
18190 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45  .**.** addrOpenE
181a0 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f  phm[] entries co
181b0 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73  ntain the addres
181c0 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65  s of OP_OpenEphe
181d0 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a  meral opcodes..*
181e0 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65  * These addresse
181f0 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64  s must be stored
18200 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20   so that we can 
18210 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c  go back and fill
18220 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45   in.** the P4_KE
18230 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72  YINFO and P2 par
18240 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20  ameters later.  
18250 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49  Neither the KeyI
18260 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e  nfo nor.** the n
18270 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
18280 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f   in P2 can be co
18290 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61  mputed at the sa
182a0 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68  me time.** as th
182b0 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e  e OP_OpenEphm in
182c0 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64  struction is cod
182d0 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a  ed because not.*
182e0 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61  * enough informa
182f0 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63  tion about the c
18300 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73  ompound query is
18310 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70   known at that p
18320 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79  oint..** The Key
18330 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
18340 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d  nTran[0] and [1]
18350 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74   contains collat
18360 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a  ing sequences.**
18370 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20   for the result 
18380 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  set.  The KeyInf
18390 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70  o for addrOpenEp
183a0 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63  hm[2] contains c
183b0 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75  ollating.** sequ
183c0 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52  ences for the OR
183d0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
183e0 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  /.struct Select 
183f0 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  {.  ExprList *pE
18400 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68  List;      /* Th
18410 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20  e fields of the 
18420 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f  result */.  u8 o
18430 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
18440 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b     /* One of: TK
18450 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b  _UNION TK_ALL TK
18460 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58  _INTERSECT TK_EX
18470 43 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65  CEPT */.  u16 se
18480 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  lFlags;         
18490 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a   /* Various SF_*
184a0 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74   values */.  int
184b0 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74   iLimit, iOffset
184c0 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65  ;   /* Memory re
184d0 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
184e0 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63  LIMIT & OFFSET c
184f0 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20 53  ounters */.#if S
18500 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
18510 45 44 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e 61  ED.  char zSelNa
18520 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53  me[12];     /* S
18530 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20  ymbolic name of 
18540 74 68 69 73 20 53 45 4c 45 43 54 20 75 73 65 20  this SELECT use 
18550 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20 2a 2f  for debugging */
18560 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 61 64  .#endif.  int ad
18570 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20  drOpenEphm[2];  
18580 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   /* OP_OpenEphem
18590 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64   opcodes related
185a0 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20   to this select 
185b0 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65 63 74  */.  u64 nSelect
185c0 52 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a 20 45  Row;        /* E
185d0 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20  stimated number 
185e0 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a  of result rows *
185f0 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
18600 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  c;         /* Th
18610 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
18620 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
18630 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
18640 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f   WHERE clause */
18650 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
18660 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  oupBy;    /* The
18670 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
18680 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76   */.  Expr *pHav
18690 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ing;         /* 
186a0 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  The HAVING claus
186b0 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
186c0 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a  *pOrderBy;    /*
186d0 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
186e0 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ause */.  Select
186f0 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20   *pPrior;       
18700 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74   /* Prior select
18710 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73   in a compound s
18720 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20  elect statement 
18730 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65  */.  Select *pNe
18740 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
18750 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68  ext select to th
18760 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70  e left in a comp
18770 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ound */.  Expr *
18780 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20  pLimit;         
18790 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73   /* LIMIT expres
187a0 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73  sion. NULL means
187b0 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20   not used. */.  
187c0 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20  Expr *pOffset;  
187d0 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54         /* OFFSET
187e0 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c   expression. NUL
187f0 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64  L means not used
18800 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69  . */.  With *pWi
18810 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  th;           /*
18820 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74 74   WITH clause att
18830 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73 65  ached to this se
18840 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a  lect. Or NULL. *
18850 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
18860 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53  wed values for S
18870 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20  elect.selFlags. 
18880 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78   The "SF" prefix
18890 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22   stands for.** "
188a0 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f  Select Flag"..*/
188b0 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74  .#define SF_Dist
188c0 69 6e 63 74 20 20 20 20 20 20 20 20 30 78 30 30  inct        0x00
188d0 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68  01  /* Output sh
188e0 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54  ould be DISTINCT
188f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52   */.#define SF_R
18900 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20 30  esolved        0
18910 78 30 30 30 32 20 20 2f 2a 20 49 64 65 6e 74 69  x0002  /* Identi
18920 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20  fiers have been 
18930 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66  resolved */.#def
18940 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65  ine SF_Aggregate
18950 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
18960 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  * Contains aggre
18970 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
18980 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65  /.#define SF_Use
18990 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78 30  sEphemeral   0x0
189a0 30 30 38 20 20 2f 2a 20 55 73 65 73 20 74 68 65  008  /* Uses the
189b0 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f   OpenEphemeral o
189c0 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65  pcode */.#define
189d0 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20   SF_Expanded    
189e0 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 73      0x0010  /* s
189f0 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61  qlite3SelectExpa
18a00 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74  nd() called on t
18a10 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  his */.#define S
18a20 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20  F_HasTypeInfo   
18a30 20 20 30 78 30 30 32 30 20 20 2f 2a 20 46 52 4f    0x0020  /* FRO
18a40 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76  M subqueries hav
18a50 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61  e Table metadata
18a60 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43   */.#define SF_C
18a70 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 20 30  ompound        0
18a80 78 30 30 34 30 20 20 2f 2a 20 50 61 72 74 20 6f  x0040  /* Part o
18a90 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  f a compound que
18aa0 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ry */.#define SF
18ab0 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20  _Values         
18ac0 20 30 78 30 30 38 30 20 20 2f 2a 20 53 79 6e 74   0x0080  /* Synt
18ad0 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c  hesized from VAL
18ae0 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  UES clause */.  
18af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b00 20 20 2f 2a 20 20 20 20 20 30 78 30 31 30 30 20    /*     0x0100 
18b10 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0a 23 64 65   NOT USED */.#de
18b20 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72  fine SF_NestedFr
18b30 6f 6d 20 20 20 20 20 20 30 78 30 32 30 30 20 20  om      0x0200  
18b40 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61 72  /* Part of a par
18b50 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20  enthesized FROM 
18b60 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
18b70 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72  e SF_MaybeConver
18b80 74 20 20 20 20 30 78 30 34 30 30 20 20 2f 2a 20  t    0x0400  /* 
18b90 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70  Need convertComp
18ba0 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
18bb0 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e  uery() */.#defin
18bc0 65 20 53 46 5f 52 65 63 75 72 73 69 76 65 20 20  e SF_Recursive  
18bd0 20 20 20 20 20 30 78 30 38 30 30 20 20 2f 2a 20       0x0800  /* 
18be0 54 68 65 20 72 65 63 75 72 73 69 76 65 20 70 61  The recursive pa
18bf0 72 74 20 6f 66 20 61 20 72 65 63 75 72 73 69 76  rt of a recursiv
18c00 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  e CTE */.#define
18c10 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20   SF_MinMaxAgg   
18c20 20 20 20 20 30 78 31 30 30 30 20 20 2f 2a 20 41      0x1000  /* A
18c30 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e  ggregate contain
18c40 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78  ing min() or max
18c50 28 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68  () */.../*.** Th
18c60 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53  e results of a S
18c70 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69 73  ELECT can be dis
18c80 74 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65  tributed in seve
18c90 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66  ral ways, as def
18ca0 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f  ined.** by one o
18cb0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
18cc0 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52  macros.  The "SR
18cd0 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20  T" prefix means 
18ce0 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a  "SELECT Result.*
18cf0 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20  * Type"..**.**  
18d00 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20     SRT_Union    
18d10 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
18d20 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74   as a key in a t
18d30 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 0a  emporary index .
18d40 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18d50 20 20 20 20 20 20 20 69 64 65 6e 74 69 66 69 65         identifie
18d60 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50  d by pDest->iSDP
18d70 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  arm..**.**     S
18d80 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 52  RT_Except      R
18d90 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72  emove results fr
18da0 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  om the temporary
18db0 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53   index pDest->iS
18dc0 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  DParm..**.**    
18dd0 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20   SRT_Exists     
18de0 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65   Store a 1 in me
18df0 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d  mory cell pDest-
18e00 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68 65 20  >iSDParm if the 
18e10 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20  result.**       
18e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
18e30 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a  t is not empty..
18e40 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
18e50 73 63 61 72 64 20 20 20 20 20 54 68 72 6f 77 20  scard     Throw 
18e60 74 68 65 20 72 65 73 75 6c 74 73 20 61 77 61 79  the results away
18e70 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64 20  .  This is used 
18e80 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20  by SELECT.**    
18e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ea0 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
18eb0 69 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f 73  in triggers whos
18ec0 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69  e only purpose i
18ed0 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
18ee0 20 20 20 20 20 20 20 20 20 74 68 65 20 73 69 64           the sid
18ef0 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e  e-effects of fun
18f00 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c  ctions..**.** Al
18f10 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61  l of the above a
18f20 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72  re free to ignor
18f30 65 20 74 68 65 69 72 20 4f 52 44 45 52 20 42 59  e their ORDER BY
18f40 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74   clause. Those t
18f50 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75  hat.** follow mu
18f60 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44  st honor the ORD
18f70 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a  ER BY clause..**
18f80 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70  .**     SRT_Outp
18f90 75 74 20 20 20 20 20 20 47 65 6e 65 72 61 74 65  ut      Generate
18fa0 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74   a row of output
18fb0 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52   (using the OP_R
18fc0 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20  esultRow.**     
18fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fe0 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68  opcode) for each
18ff0 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75   row in the resu
19000 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  lt set..**.**   
19010 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20    SRT_Mem       
19020 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20    Only valid if 
19030 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 20  the result is a 
19040 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a  single column..*
19050 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19060 20 20 20 20 20 20 53 74 6f 72 65 20 74 68 65 20        Store the 
19070 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20  first column of 
19080 74 68 65 20 66 69 72 73 74 20 72 65 73 75 6c 74  the first result
19090 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20   row.**         
190a0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 20 72              in r
190b0 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69  egister pDest->i
190c0 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e  SDParm then aban
190d0 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20  don the rest.** 
190e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190f0 20 20 20 20 6f 66 20 74 68 65 20 71 75 65 72 79      of the query
19100 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e 61 74  .  This destinat
19110 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d  ion implies "LIM
19120 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  IT 1"..**.**    
19130 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20   SRT_Set        
19140 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74   The result must
19150 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c   be a single col
19160 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68  umn.  Store each
19170 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19180 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72          row of r
19190 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79  esult as the key
191a0 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d   in table pDest-
191b0 3e 69 53 44 50 61 72 6d 2e 20 0a 2a 2a 20 20 20  >iSDParm. .**   
191c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191d0 20 20 41 70 70 6c 79 20 74 68 65 20 61 66 66 69    Apply the affi
191e0 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53  nity pDest->affS
191f0 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69  dst before stori
19200 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ng.**           
19210 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
19220 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c  s.  Used to impl
19230 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43  ement "IN (SELEC
19240 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20  T ...)"..**.**  
19250 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20     SRT_EphemTab 
19260 20 20 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d     Create an tem
19270 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
19280 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20  st->iSDParm and 
19290 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20  store.**        
192a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
192b0 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54   result there. T
192c0 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66  he cursor is lef
192d0 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20  t open after.** 
192e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192f0 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20      returning.  
19300 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54  This is like SRT
19310 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20 74 68  _Table except th
19320 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  at.**           
19330 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 64            this d
19340 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20  estination uses 
19350 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
19360 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20   to create.**   
19370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19380 20 20 74 68 65 20 74 61 62 6c 65 20 66 69 72 73    the table firs
19390 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
193a0 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e  _Coroutine   Gen
193b0 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69  erate a co-routi
193c0 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  ne that returns 
193d0 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20  a new row of.** 
193e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193f0 20 20 20 20 72 65 73 75 6c 74 73 20 65 61 63 68      results each
19400 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f   time it is invo
19410 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20  ked.  The entry 
19420 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20  point.**        
19430 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20               of 
19440 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69  the co-routine i
19450 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
19460 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50  ster pDest->iSDP
19470 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  arm.**          
19480 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20 74             and t
19490 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73  he result row is
194a0 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74   stored in pDest
194b0 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65 72  ->nDest register
194c0 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
194d0 20 20 20 20 20 20 20 20 20 73 74 61 72 74 69 6e           startin
194e0 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53  g with pDest->iS
194f0 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  dst..**.**     S
19500 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53  RT_Table       S
19510 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
19520 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
19530 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
19540 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20  **     SRT_Fifo 
19550 20 20 20 20 20 20 20 54 68 69 73 20 69 73 20 6c         This is l
19560 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62  ike SRT_EphemTab
19570 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
19580 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20   table.**       
19590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73                is
195a0 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65   assumed to alre
195b0 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52  ady be open.  SR
195c0 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20  T_Fifo has.**   
195d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195e0 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c    the additional
195f0 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69   property of bei
19600 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72  ng able to ignor
19610 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
19620 20 20 20 20 20 20 20 20 20 74 68 65 20 4f 52 44           the ORD
19630 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a  ER BY clause..**
19640 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74  .**     SRT_Dist
19650 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65  Fifo    Store re
19660 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f  sults in a tempo
19670 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
19680 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
19690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196a0 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74    But also use t
196b0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
196c0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20  Dest->iSDParm+1 
196d0 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  as.**           
196e0 20 20 20 20 20 20 20 20 20 20 61 20 72 65 63 6f            a reco
196f0 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20  rd of all prior 
19700 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f  results and igno
19710 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65  re any duplicate
19720 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19730 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e          rows.  N
19740 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73  ame means:  "Dis
19750 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a  tinct Fifo"..**.
19760 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75 65  **     SRT_Queue
19770 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
19780 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79  ults in priority
19790 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53   queue pDest->iS
197a0 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a  DParm (really.**
197b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197c0 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20       an index). 
197d0 20 41 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e   Append a sequen
197e0 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61  ce number so tha
197f0 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a  t all entries.**
19800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19810 20 20 20 20 20 61 72 65 20 64 69 73 74 69 6e 63       are distinc
19820 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
19830 5f 44 69 73 74 51 75 65 75 65 20 20 20 53 74 6f  _DistQueue   Sto
19840 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72  re results in pr
19850 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65  iority queue pDe
19860 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79  st->iSDParm only
19870 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   if.**          
19880 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
19890 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e  ame record has n
198a0 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64  ever been stored
198b0 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a   before.  The.**
198c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198d0 20 20 20 20 20 69 6e 64 65 78 20 61 74 20 70 44       index at pD
198e0 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68  est->iSDParm+1 h
198f0 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74  old all prior st
19900 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ores..*/.#define
19910 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
19920 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    1  /* Store re
19930 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20  sult as keys in 
19940 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
19950 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20  ine SRT_Except  
19960 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76       2  /* Remov
19970 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20  e result from a 
19980 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23  UNION index */.#
19990 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74  define SRT_Exist
199a0 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74  s       3  /* St
199b0 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73  ore 1 if the res
199c0 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  ult is not empty
199d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
199e0 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20  Discard      4  
199f0 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74  /* Do not save t
19a00 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68  he results anywh
19a10 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ere */.#define S
19a20 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20  RT_Fifo         
19a30 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  5  /* Store resu
19a40 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20  lt as data with 
19a50 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77  an automatic row
19a60 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  id */.#define SR
19a70 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20 36  T_DistFifo     6
19a80 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69    /* Like SRT_Fi
19a90 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72  fo, but unique r
19aa0 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23  esults only */.#
19ab0 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65  define SRT_Queue
19ac0 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74          7  /* St
19ad0 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  ore result in an
19ae0 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e   queue */.#defin
19af0 65 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20  e SRT_DistQueue 
19b00 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52     8  /* Like SR
19b10 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69  T_Queue, but uni
19b20 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79  que results only
19b30 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45   */../* The ORDE
19b40 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69  R BY clause is i
19b50 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f  gnored for all o
19b60 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23  f the above */.#
19b70 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65  define Ignorable
19b80 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e  Orderby(X) ((X->
19b90 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74  eDest)<=SRT_Dist
19ba0 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20  Queue)..#define 
19bb0 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
19bc0 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61   9  /* Output ea
19bd0 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  ch row of result
19be0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
19bf0 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30 20 20  Mem         10  
19c00 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
19c10 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  in a memory cell
19c20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
19c30 53 65 74 20 20 20 20 20 20 20 20 20 31 31 20 20  Set         11  
19c40 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73  /* Store results
19c50 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
19c60 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
19c70 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20  SRT_EphemTab    
19c80 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72  12  /* Create tr
19c90 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20  ansient tab and 
19ca0 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54  store like SRT_T
19cb0 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
19cc0 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20  SRT_Coroutine   
19cd0 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20  13  /* Generate 
19ce0 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  a single row of 
19cf0 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  result */.#defin
19d00 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20  e SRT_Table     
19d10 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72    14  /* Store r
19d20 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69  esult as data wi
19d30 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20  th an automatic 
19d40 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  rowid */../*.** 
19d50 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
19d60 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72  his object descr
19d70 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70 75  ibes where to pu
19d80 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  t of the results
19d90 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20   of.** a SELECT 
19da0 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74  statement..*/.st
19db0 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20  ruct SelectDest 
19dc0 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20 20  {.  u8 eDest;   
19dd0 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20           /* How 
19de0 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68  to dispose of th
19df0 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f  e results.  On o
19e00 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a  f SRT_* above. *
19e10 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64 73 74  /.  char affSdst
19e20 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 66 66 69  ;        /* Affi
19e30 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20 65  nity used when e
19e40 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f  Dest==SRT_Set */
19e50 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20  .  int iSDParm; 
19e60 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72          /* A par
19e70 61 6d 65 74 65 72 20 75 73 65 64 20 62 79 20 74  ameter used by t
19e80 68 65 20 65 44 65 73 74 20 64 69 73 70 6f 73 61  he eDest disposa
19e90 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e  l method */.  in
19ea0 74 20 69 53 64 73 74 3b 20 20 20 20 20 20 20 20  t iSdst;        
19eb0 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73     /* Base regis
19ec0 74 65 72 20 77 68 65 72 65 20 72 65 73 75 6c 74  ter where result
19ed0 73 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f  s are written */
19ee0 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20  .  int nSdst;   
19ef0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
19f00 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61  r of registers a
19f10 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 45 78  llocated */.  Ex
19f20 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79  prList *pOrderBy
19f30 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e  ;  /* Key column
19f40 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20  s for SRT_Queue 
19f50 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65 75  and SRT_DistQueu
19f60 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44  e */.};../*.** D
19f70 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72  uring code gener
19f80 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65  ation of stateme
19f90 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65  nts that do inse
19fa0 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43  rts into AUTOINC
19fb0 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c 65  REMENT .** table
19fc0 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  s, the following
19fd0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
19fe0 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
19ff0 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e  Table.u.autoInc.
1a000 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20  p.** pointer of 
1a010 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65  each autoincreme
1a020 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f  nt table to reco
1a030 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66  rd some side inf
1a040 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a  ormation that.**
1a050 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
1a060 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68  tor needs.  We h
1a070 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d  ave to keep per-
1a080 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d  table autoincrem
1a090 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ent.** informati
1a0a0 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72  on in case inser
1a0b0 74 73 20 61 72 65 20 64 6f 77 6e 20 77 69 74 68  ts are down with
1a0c0 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72  in triggers.  Tr
1a0d0 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a  iggers do not.**
1a0e0 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69   normally coordi
1a0f0 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76  nate their activ
1a100 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f  ities, but we do
1a110 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e   need to coordin
1a120 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69  ate the.** loadi
1a130 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66  ng and saving of
1a140 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69   autoincrement i
1a150 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
1a160 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
1a170 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  o {.  AutoincInf
1a180 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e  o *pNext;   /* N
1a190 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69  ext info block i
1a1a0 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d  n a list of them
1a1b0 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20   all */.  Table 
1a1c0 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
1a1d0 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e  /* Table this in
1a1e0 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20  fo block refers 
1a1f0 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  to */.  int iDb;
1a200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a210 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65   Index in sqlite
1a220 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62  3.aDb[] of datab
1a230 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62  ase holding pTab
1a240 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72   */.  int regCtr
1a250 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
1a260 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68  emory register h
1a270 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64  olding the rowid
1a280 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a   counter */.};..
1a290 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68  /*.** Size of th
1a2a0 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a  e column cache.*
1a2b0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1a2c0 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65  _N_COLCACHE.# de
1a2d0 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  fine SQLITE_N_CO
1a2e0 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66  LCACHE 10.#endif
1a2f0 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74  ../*.** At least
1a300 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66   one instance of
1a310 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1a320 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61  tructure is crea
1a330 74 65 64 20 66 6f 72 20 65 61 63 68 20 0a 2a 2a  ted for each .**
1a340 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61   trigger that ma
1a350 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65  y be fired while
1a360 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45   parsing an INSE
1a370 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45  RT, UPDATE or DE
1a380 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  LETE.** statemen
1a390 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65  t. All such obje
1a3a0 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  cts are stored i
1a3b0 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  n the linked lis
1a3c0 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50  t headed at.** P
1a3d0 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1a3e0 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63   and deleted onc
1a3f0 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70  e statement comp
1a400 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e  ilation has been
1a410 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a  .** completed..*
1a420 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d  *.** A Vdbe sub-
1a430 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70  program that imp
1a440 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79  lements the body
1a450 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65   and WHEN clause
1a460 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54   of trigger.** T
1a470 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67  riggerPrg.pTrigg
1a480 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64  er, assuming a d
1a490 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1a4a0 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20  CT clause of.** 
1a4b0 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e  TriggerPrg.orcon
1a4c0 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  f, is stored in 
1a4d0 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70  the TriggerPrg.p
1a4e0 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65  Program variable
1a4f0 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70  ..** The Parse.p
1a500 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
1a510 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74  never contains t
1a520 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20  wo entries with 
1a530 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75  the same.** valu
1a540 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69  es for both pTri
1a550 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e  gger and orconf.
1a560 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67  .**.** The Trigg
1a570 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30  erPrg.aColmask[0
1a580 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
1a590 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f  t to a mask of o
1a5a0 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  ld.* columns.** 
1a5b0 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74  accessed (or set
1a5c0 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65   to 0 for trigge
1a5d0 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65  rs fired as a re
1a5e0 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 20 0a  sult of INSERT .
1a5f0 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20  ** statements). 
1a600 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54  Similarly, the T
1a610 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61  riggerPrg.aColma
1a620 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69  sk[1] variable i
1a630 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61  s set to.** a ma
1a640 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
1a650 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20  mns used by the 
1a660 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75  program..*/.stru
1a670 63 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a  ct TriggerPrg {.
1a680 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
1a690 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69  ger;      /* Tri
1a6a0 67 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61  gger this progra
1a6b0 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d  m was coded from
1a6c0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67   */.  TriggerPrg
1a6d0 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a   *pNext;      /*
1a6e0 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50   Next entry in P
1a6f0 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1a700 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72   list */.  SubPr
1a710 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b  ogram *pProgram;
1a720 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d     /* Program im
1a730 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67  plementing pTrig
1a740 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20  ger/orconf */.  
1a750 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20  int orconf;     
1a760 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1a770 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
1a780 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61  olicy */.  u32 a
1a790 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20  Colmask[2];     
1a7a0 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f     /* Masks of o
1a7b0 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75  ld.*, new.* colu
1a7c0 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a  mns accessed */.
1a7d0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44  };../*.** The yD
1a7e0 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66  bMask datatype f
1a7f0 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f  or the bitmask o
1a800 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  f all attached d
1a810 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66  atabases..*/.#if
1a820 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41   SQLITE_MAX_ATTA
1a830 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65  CHED>30.  typede
1a840 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  f unsigned char 
1a850 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f  yDbMask[(SQLITE_
1a860 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f  MAX_ATTACHED+9)/
1a870 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  8];.# define DbM
1a880 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20  askTest(M,I)    
1a890 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c  (((M)[(I)/8]&(1<
1a8a0 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23  <((I)&7)))!=0).#
1a8b0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65   define DbMaskZe
1a8c0 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65  ro(M)      memse
1a8d0 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d  t((M),0,sizeof(M
1a8e0 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
1a8f0 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28  skSet(M,I)     (
1a900 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28  M)[(I)/8]|=(1<<(
1a910 28 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65  (I)&7)).# define
1a920 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d   DbMaskAllZero(M
1a930 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73  )   sqlite3DbMas
1a940 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65  kAllZero(M).# de
1a950 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65  fine DbMaskNonZe
1a960 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33  ro(M)   (sqlite3
1a970 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1a980 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70  ==0).#else.  typ
1a990 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e  edef unsigned in
1a9a0 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66  t yDbMask;.# def
1a9b0 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d  ine DbMaskTest(M
1a9c0 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28  ,I)    (((M)&(((
1a9d0 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29  yDbMask)1)<<(I))
1a9e0 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44  )!=0).# define D
1a9f0 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20  bMaskZero(M)    
1aa00 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65    (M)=0.# define
1aa10 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20   DbMaskSet(M,I) 
1aa20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d      (M)|=(((yDbM
1aa30 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64  ask)1)<<(I)).# d
1aa40 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a  efine DbMaskAllZ
1aa50 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a  ero(M)   (M)==0.
1aa60 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e  # define DbMaskN
1aa70 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21  onZero(M)   (M)!
1aa80 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  =0.#endif../*.**
1aa90 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63   An SQL parser c
1aaa0 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20  ontext.  A copy 
1aab0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
1aac0 65 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f  e is passed thro
1aad0 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65  ugh.** the parse
1aae0 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20  r and down into 
1aaf0 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61  all the parser a
1ab00 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e  ction routine in
1ab10 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72   order to.** car
1ab20 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d  ry around inform
1ab30 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c  ation that is gl
1ab40 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69  obal to the enti
1ab50 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20  re parse..**.** 
1ab60 54 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73  The structure is
1ab70 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77   divided into tw
1ab80 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74  o parts.  When t
1ab90 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f  he parser and co
1aba0 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63  de.** generate c
1abb0 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72  all themselves r
1abc0 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20  ecursively, the 
1abd0 66 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68  first part of th
1abe0 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69  e structure.** i
1abf0 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74  s constant but t
1ac00 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69  he second part i
1ac10 73 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62  s reset at the b
1ac20 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64  eginning and end
1ac30 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75   of.** each recu
1ac40 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rsion..**.** The
1ac50 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20   nTableLock and 
1ac60 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61  aTableLock varia
1ac70 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73  bles are only us
1ac80 65 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64  ed if the shared
1ac90 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65 61 74 75  -cache .** featu
1aca0 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69  re is enabled (i
1acb0 66 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e  f sqlite3Tsd()->
1acc0 75 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73  useSharedData is
1acd0 20 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65   true). They are
1ace0 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72  .** used to stor
1acf0 65 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62  e the set of tab
1ad00 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65  le-locks require
1ad10 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65  d by the stateme
1ad20 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70  nt being.** comp
1ad30 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73  iled. Function s
1ad40 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
1ad50 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64  ) is used to add
1ad60 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a   entries to the.
1ad70 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75  ** list..*/.stru
1ad80 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c  ct Parse {.  sql
1ad90 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
1ada0 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61    /* The main da
1adb0 74 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65  tabase structure
1adc0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72   */.  char *zErr
1add0 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e  Msg;       /* An
1ade0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a   error message *
1adf0 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b  /.  Vdbe *pVdbe;
1ae00 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65           /* An e
1ae10 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74  ngine for execut
1ae20 69 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74  ing database byt
1ae30 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72  ecode */.  int r
1ae40 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
1ae50 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  /* Return code f
1ae60 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f  rom execution */
1ae70 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65  .  u8 colNamesSe
1ae80 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20  t;      /* TRUE 
1ae90 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e  after OP_ColumnN
1aea0 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73  ame has been iss
1aeb0 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a  ued to pVdbe */.
1aec0 20 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61    u8 checkSchema
1aed0 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73  ;      /* Causes
1aee0 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63   schema cookie c
1aef0 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72  heck after an er
1af00 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74  ror */.  u8 nest
1af10 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
1af20 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
1af30 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70  d calls to the p
1af40 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72  arser/code gener
1af50 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65  ator */.  u8 nTe
1af60 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f  mpReg;         /
1af70 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70  * Number of temp
1af80 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
1af90 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f  in aTempReg[] */
1afa0 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69  .  u8 isMultiWri
1afb0 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20  te;     /* True 
1afc0 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
1afd0 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d   modify/insert m
1afe0 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
1aff0 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20    u8 mayAbort;  
1b000 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1b010 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
1b020 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65  throw an ABORT e
1b030 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  xception */.  u8
1b040 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20   hasCompound;   
1b050 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e     /* Need to in
1b060 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70  voke convertComp
1b070 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1b080 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f  uery() */.  u8 o
1b090 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20  kConstFactor;   
1b0a0 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72   /* OK to factor
1b0b0 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a   out constants *
1b0c0 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67  /.  int aTempReg
1b0d0 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64  [8];     /* Hold
1b0e0 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d  ing area for tem
1b0f0 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73  porary registers
1b100 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65   */.  int nRange
1b110 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69  Reg;       /* Si
1b120 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72  ze of the tempor
1b130 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
1b140 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e  ck */.  int iRan
1b150 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  geReg;       /* 
1b160 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69  First register i
1b170 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  n temporary regi
1b180 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
1b190 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
1b1a0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1b1b0 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f  f errors seen */
1b1c0 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20  .  int nTab;    
1b1d0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1b1e0 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20  r of previously 
1b1f0 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63  allocated VDBE c
1b200 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20  ursors */.  int 
1b210 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  nMem;           
1b220 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65   /* Number of me
1b230 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20  mory cells used 
1b240 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1b250 6e 53 65 74 3b 20 20 20 20 20 20 20 20 20 20 20  nSet;           
1b260 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65   /* Number of se
1b270 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ts used so far *
1b280 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20  /.  int nOnce;  
1b290 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1b2a0 65 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e  er of OP_Once in
1b2b0 73 74 72 75 63 74 69 6f 6e 73 20 73 6f 20 66 61  structions so fa
1b2c0 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c  r */.  int nOpAl
1b2d0 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  loc;        /* N
1b2e0 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61  umber of slots a
1b2f0 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62  llocated for Vdb
1b300 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  e.aOp[] */.  int
1b310 20 69 46 69 78 65 64 4f 70 3b 20 20 20 20 20 20   iFixedOp;      
1b320 20 20 2f 2a 20 4e 65 76 65 72 20 62 61 63 6b 20    /* Never back 
1b330 6f 75 74 20 6f 70 63 6f 64 65 73 20 69 46 69 78  out opcodes iFix
1b340 65 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c 69 65  edOp-1 or earlie
1b350 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73  r */.  int ckBas
1b360 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42  e;          /* B
1b370 61 73 65 20 72 65 67 69 73 74 65 72 20 6f 66 20  ase register of 
1b380 64 61 74 61 20 64 75 72 69 6e 67 20 63 68 65 63  data during chec
1b390 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  k constraints */
1b3a0 0a 20 20 69 6e 74 20 69 50 61 72 74 49 64 78 54  .  int iPartIdxT
1b3b0 61 62 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  ab;     /* Table
1b3c0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
1b3d0 6f 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65  o a partial inde
1b3e0 78 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  x */.  int iCach
1b3f0 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43  eLevel;     /* C
1b400 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68  olCache valid wh
1b410 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69  en aColCache[].i
1b420 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76  Level<=iCacheLev
1b430 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63  el */.  int iCac
1b440 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20  heCnt;       /* 
1b450 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20  Counter used to 
1b460 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63  generate aColCac
1b470 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20  he[].lru values 
1b480 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b  */.  int nLabel;
1b490 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1b4a0 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73  ber of labels us
1b4b0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61  ed */.  int *aLa
1b4c0 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  bel;         /* 
1b4d0 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68  Space to hold th
1b4e0 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74  e labels */.  st
1b4f0 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b  ruct yColCache {
1b500 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
1b510 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61             /* Ta
1b520 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ble cursor numbe
1b530 72 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f  r */.    i16 iCo
1b540 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  lumn;          /
1b550 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e  * Table column n
1b560 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20  umber */.    u8 
1b570 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20  tempReg;        
1b580 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20     /* iReg is a 
1b590 74 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68  temp register th
1b5a0 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66  at needs to be f
1b5b0 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20  reed */.    int 
1b5c0 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20  iLevel;         
1b5d0 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76    /* Nesting lev
1b5e0 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52  el */.    int iR
1b5f0 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eg;             
1b600 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75  /* Reg with valu
1b610 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
1b620 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20  . 0 means none. 
1b630 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20  */.    int lru; 
1b640 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b650 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75  Least recently u
1b660 73 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68  sed entry has th
1b670 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65  e smallest value
1b680 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68   */.  } aColCach
1b690 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41  e[SQLITE_N_COLCA
1b6a0 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f  CHE];  /* One fo
1b6b0 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61  r each column ca
1b6c0 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45  che entry */.  E
1b6d0 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45  xprList *pConstE
1b6e0 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  xpr;/* Constant 
1b6f0 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
1b700 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e   Token constrain
1b710 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66  tName;/* Name of
1b720 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20   the constraint 
1b730 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
1b740 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d  parsed */.  yDbM
1b750 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20  ask writeMask;  
1b760 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74   /* Start a writ
1b770 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  e transaction on
1b780 20 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73   these databases
1b790 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f   */.  yDbMask co
1b7a0 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69  okieMask;  /* Bi
1b7b0 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20  tmask of schema 
1b7c0 76 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73  verified databas
1b7d0 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b  es */.  int cook
1b7e0 69 65 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d  ieValue[SQLITE_M
1b7f0 41 58 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20  AX_ATTACHED+2]; 
1b800 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f   /* Values of co
1b810 6f 6b 69 65 73 20 74 6f 20 76 65 72 69 66 79 20  okies to verify 
1b820 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69  */.  int regRowi
1b830 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67  d;        /* Reg
1b840 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f  ister holding ro
1b850 77 69 64 20 6f 66 20 43 52 45 41 54 45 20 54 41  wid of CREATE TA
1b860 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69  BLE entry */.  i
1b870 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20  nt regRoot;     
1b880 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
1b890 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67  holding root pag
1b8a0 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77  e number for new
1b8b0 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e   objects */.  in
1b8c0 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20  t nMaxArg;      
1b8d0 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70     /* Max args p
1b8e0 61 73 73 65 64 20 74 6f 20 75 73 65 72 20 66 75  assed to user fu
1b8f0 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72  nction by sub-pr
1b900 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c  ogram */.#if SEL
1b910 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
1b920 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20  .  int nSelect; 
1b930 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1b940 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74  r of SELECT stat
1b950 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20  ements seen */. 
1b960 20 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64 65   int nSelectInde
1b970 6e 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61 72  nt;   /* How far
1b980 20 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45 43   to indent SELEC
1b990 54 54 52 41 43 45 28 29 20 6f 75 74 70 75 74 20  TTRACE() output 
1b9a0 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
1b9b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
1b9c0 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74  ARED_CACHE.  int
1b9d0 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20   nTableLock;    
1b9e0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1b9f0 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65   locks in aTable
1ba00 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c  Lock */.  TableL
1ba10 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b  ock *aTableLock;
1ba20 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62   /* Required tab
1ba30 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61  le locks for sha
1ba40 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a  red-cache mode *
1ba50 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69  /.#endif.  Autoi
1ba60 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20  ncInfo *pAinc;  
1ba70 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
1ba80 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45  bout AUTOINCREME
1ba90 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a  NT counters */..
1baa0 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
1bab0 20 75 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69   used while codi
1bac0 6e 67 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  ng trigger progr
1bad0 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20  ams. */.  Parse 
1bae0 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f  *pToplevel;    /
1baf0 2a 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72  * Parse structur
1bb00 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72  e for main progr
1bb10 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a  am (or NULL) */.
1bb20 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65    Table *pTrigge
1bb30 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20  rTab;  /* Table 
1bb40 74 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69  triggers are bei
1bb50 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a  ng coded for */.
1bb60 20 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b    int addrCrTab;
1bb70 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73         /* Addres
1bb80 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61  s of OP_CreateTa
1bb90 62 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52  ble opcode on CR
1bba0 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20  EATE TABLE */.  
1bbb0 69 6e 74 20 61 64 64 72 53 6b 69 70 50 4b 3b 20  int addrSkipPK; 
1bbc0 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20       /* Address 
1bbd0 6f 66 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  of instruction t
1bbe0 6f 20 73 6b 69 70 20 50 52 49 4d 41 52 59 20 4b  o skip PRIMARY K
1bbf0 45 59 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 33  EY index */.  u3
1bc00 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20  2 nQueryLoop;   
1bc10 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72     /* Est number
1bc20 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f   of iterations o
1bc30 66 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f  f a query (10*lo
1bc40 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20  g2(N)) */.  u32 
1bc50 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  oldmask;        
1bc60 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e   /* Mask of old.
1bc70 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
1bc80 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65  nced */.  u32 ne
1bc90 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  wmask;         /
1bca0 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20  * Mask of new.* 
1bcb0 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
1bcc0 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67  ed */.  u8 eTrig
1bcd0 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20  gerOp;       /* 
1bce0 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
1bcf0 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54  SERT or TK_DELET
1bd00 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e  E */.  u8 eOrcon
1bd10 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  f;          /* D
1bd20 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1bd30 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72  CT policy for tr
1bd40 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20  igger steps */. 
1bd50 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67 67   u8 disableTrigg
1bd60 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f  ers;  /* True to
1bd70 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65 72   disable trigger
1bd80 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a  s */..  /*******
1bd90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bda0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bdb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bdc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bdd0 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20  *.  ** Above is 
1bde0 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e  constant between
1bdf0 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65   recursions.  Be
1be00 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66  low is reset bef
1be10 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20  ore and after.  
1be20 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f  ** each recursio
1be30 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79  n.  The boundary
1be40 20 62 65 74 77 65 65 6e 20 74 68 65 73 65 20 74   between these t
1be50 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65  wo regions is de
1be60 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73  termined.  ** us
1be70 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72  ing offsetof(Par
1be80 73 65 2c 6e 56 61 72 29 20 73 6f 20 74 68 65 20  se,nVar) so the 
1be90 6e 56 61 72 20 66 69 65 6c 64 20 6d 75 73 74 20  nVar field must 
1bea0 62 65 20 74 68 65 20 66 69 72 73 74 20 66 69 65  be the first fie
1beb0 6c 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 72  ld.  ** in the r
1bec0 65 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e  ecursive region.
1bed0 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
1bee0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bef0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bf00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bf10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20  ***********/..  
1bf20 69 6e 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20  int nVar;       
1bf30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1bf40 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61  ber of '?' varia
1bf50 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65  bles seen in the
1bf60 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20   SQL so far */. 
1bf70 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20   int nzVar;     
1bf80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1bf90 6d 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c  mber of availabl
1bfa0 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72  e slots in azVar
1bfb0 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f  [] */.  u8 iPkSo
1bfc0 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
1bfd0 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43    /* ASC or DESC
1bfe0 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49   for INTEGER PRI
1bff0 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38  MARY KEY */.  u8
1c000 20 62 46 72 65 65 57 69 74 68 3b 20 20 20 20 20   bFreeWith;     
1c010 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1c020 69 66 20 70 57 69 74 68 20 73 68 6f 75 6c 64 20  if pWith should 
1c030 62 65 20 66 72 65 65 64 20 77 69 74 68 20 70 61  be freed with pa
1c040 72 73 65 72 20 2a 2f 0a 20 20 75 38 20 65 78 70  rser */.  u8 exp
1c050 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lain;           
1c060 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
1c070 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20  he EXPLAIN flag 
1c080 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20  is found on the 
1c090 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66  query */.#ifndef
1c0a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
1c0b0 54 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64  TUALTABLE.  u8 d
1c0c0 65 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20  eclareVtab;     
1c0d0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1c0e0 20 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f   inside sqlite3_
1c0f0 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a  declare_vtab() *
1c100 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63  /.  int nVtabLoc
1c110 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  k;            /*
1c120 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75   Number of virtu
1c130 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63  al tables to loc
1c140 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  k */.#endif.  in
1c150 74 20 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20  t nAlias;       
1c160 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1c170 72 20 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73  r of aliased res
1c180 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20  ult set columns 
1c190 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74  */.  int nHeight
1c1a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1c1b0 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65  * Expression tre
1c1c0 65 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72  e height of curr
1c1d0 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a  ent sub-select *
1c1e0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1c1f0 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20  _OMIT_EXPLAIN.  
1c200 69 6e 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20  int iSelectId;  
1c210 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20            /* ID 
1c220 6f 66 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63  of current selec
1c230 74 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75  t for EXPLAIN ou
1c240 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e  tput */.  int iN
1c250 65 78 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20  extSelectId;    
1c260 20 20 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69      /* Next avai
1c270 6c 61 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20  lable select ID 
1c280 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
1c290 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63  ut */.#endif.  c
1c2a0 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20  har **azVar;    
1c2b0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
1c2c0 74 65 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66  ters to names of
1c2d0 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20   parameters */. 
1c2e0 20 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72   Vdbe *pReprepar
1c2f0 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d  e;         /* VM
1c300 20 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65   being reprepare
1c310 64 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70  d (sqlite3Reprep
1c320 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73  are()) */.  cons
1c330 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20  t char *zTail;  
1c340 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c        /* All SQL
1c350 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c   text past the l
1c360 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61  ast semicolon pa
1c370 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20  rsed */.  Table 
1c380 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20  *pNewTable;     
1c390 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62      /* A table b
1c3a0 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64  eing constructed
1c3b0 20 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45   by CREATE TABLE
1c3c0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
1c3d0 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20  NewTrigger;     
1c3e0 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72  /* Trigger under
1c3f0 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20   construct by a 
1c400 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a  CREATE TRIGGER *
1c410 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1c420 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a  zAuthContext; /*
1c430 20 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74   The 6th paramet
1c440 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20  er to db->xAuth 
1c450 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54  callbacks */.  T
1c460 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b  oken sNameToken;
1c470 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
1c480 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69  n with unqualifi
1c490 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  ed schema object
1c4a0 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e   name */.  Token
1c4b0 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20   sLastToken;    
1c4c0 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74       /* The last
1c4d0 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f   token parsed */
1c4e0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1c4f0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
1c500 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20  E.  Token sArg; 
1c510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c520 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f   Complete text o
1c530 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d  f a module argum
1c540 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ent */.  Table *
1c550 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20  *apVtabLock;    
1c560 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
1c570 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
1c580 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20  needing locking 
1c590 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c  */.#endif.  Tabl
1c5a0 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20  e *pZombieTab;  
1c5b0 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
1c5c0 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74   Table objects t
1c5d0 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63  o delete after c
1c5e0 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69  ode gen */.  Tri
1c5f0 67 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65  ggerPrg *pTrigge
1c600 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64  rPrg;  /* Linked
1c610 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74   list of coded t
1c620 72 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74  riggers */.  Wit
1c630 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20  h *pWith;       
1c640 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
1c650 74 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f  t WITH clause, o
1c660 72 20 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  r NULL */.};../*
1c670 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
1c680 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73  if currently ins
1c690 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64  ide an sqlite3_d
1c6a0 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61  eclare_vtab() ca
1c6b0 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ll..*/.#ifdef SQ
1c6c0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
1c6d0 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65  LTABLE.  #define
1c6e0 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
1c6f0 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69   0.#else.  #defi
1c700 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54  ne IN_DECLARE_VT
1c710 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c  AB (pParse->decl
1c720 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a  areVtab).#endif.
1c730 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1c740 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
1c750 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61  ing structure ca
1c760 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e  n be declared on
1c770 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65   a stack and use
1c780 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65  d.** to save the
1c790 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
1c7a0 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61  ext value so tha
1c7b0 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74  t it can be rest
1c7c0 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73  ored later..*/.s
1c7d0 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78  truct AuthContex
1c7e0 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  t {.  const char
1c7f0 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
1c800 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50    /* Put saved P
1c810 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
1c820 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73  t here */.  Pars
1c830 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
1c840 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50          /* The P
1c850 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  arse structure *
1c860 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66  /.};../*.** Bitf
1c870 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50  ield flags for P
1c880 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f  5 value in vario
1c890 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 23  us opcodes..*/.#
1c8a0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43  define OPFLAG_NC
1c8b0 48 41 4e 47 45 20 20 20 20 20 20 20 30 78 30 31  HANGE       0x01
1c8c0 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70      /* Set to up
1c8d0 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65  date db->nChange
1c8e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1c8f0 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20  AG_EPHEM        
1c900 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43   0x01    /* OP_C
1c910 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c  olumn: Ephemeral
1c920 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f   output is ok */
1c930 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1c940 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20 30 78  LASTROWID     0x
1c950 30 32 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20  02    /* Set to 
1c960 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52  update db->lastR
1c970 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
1c980 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
1c990 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20       0x04    /* 
1c9a0 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69  This OP_Insert i
1c9b0 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20  s an sql UPDATE 
1c9c0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1c9d0 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20 20  G_APPEND        
1c9e0 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20  0x08    /* This 
1c9f0 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
1ca00 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65  an append */.#de
1ca10 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53  fine OPFLAG_USES
1ca20 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20  EEKRESULT 0x10  
1ca30 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69    /* Try to avoi
1ca40 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65  d a seek in Btre
1ca50 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65  eInsert() */.#de
1ca60 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47  fine OPFLAG_LENG
1ca70 54 48 41 52 47 20 20 20 20 20 30 78 34 30 20 20  THARG     0x40  
1ca80 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f    /* OP_Column o
1ca90 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e  nly used for len
1caa0 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  gth() */.#define
1cab0 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
1cac0 47 20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a  G     0x80    /*
1cad0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20   OP_Column only 
1cae0 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28  used for typeof(
1caf0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
1cb00 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20  LAG_BULKCSR     
1cb10 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
1cb20 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f  Open** used to o
1cb30 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20  pen bulk cursor 
1cb40 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1cb50 47 5f 50 32 49 53 52 45 47 20 20 20 20 20 20 20  G_P2ISREG       
1cb60 30 78 30 32 20 20 20 20 2f 2a 20 50 32 20 74 6f  0x02    /* P2 to
1cb70 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20   OP_Open** is a 
1cb80 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20  register number 
1cb90 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1cba0 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20 20  G_PERMUTE       
1cbb0 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x01    /* OP_Co
1cbc0 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65 20 70  mpare: use the p
1cbd0 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f  ermutation */../
1cbe0 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65  *. * Each trigge
1cbf0 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  r present in the
1cc00 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
1cc10 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e   is stored as an
1cc20 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20   instance of. * 
1cc30 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20  struct Trigger. 
1cc40 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20  . *. * Pointers 
1cc50 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20  to instances of 
1cc60 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61  struct Trigger a
1cc70 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f  re stored in two
1cc80 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20   ways.. * 1. In 
1cc90 74 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68  the "trigHash" h
1cca0 61 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20  ash table (part 
1ccb0 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20  of the sqlite3* 
1ccc0 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20  that represents 
1ccd0 74 68 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62  the . *    datab
1cce0 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77  ase). This allow
1ccf0 73 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74  s Trigger struct
1cd00 75 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69  ures to be retri
1cd10 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a  eved by name.. *
1cd20 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73   2. All triggers
1cd30 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
1cd40 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
1cd50 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69  form a linked li
1cd60 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a  st, using the. *
1cd70 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72      pNext member
1cd80 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
1cd90 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  er. A pointer to
1cda0 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
1cdb0 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20  nt of the. *    
1cdc0 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73  linked list is s
1cdd0 74 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54  tored as the "pT
1cde0 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f  rigger" member o
1cdf0 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  f the associated
1ce00 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61  . *    struct Ta
1ce10 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22  ble.. *. * The "
1ce20 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65  step_list" membe
1ce30 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  r points to the 
1ce40 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
1ce50 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20   a linked list. 
1ce60 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  * containing the
1ce70 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
1ce80 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65  specified as the
1ce90 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
1cea0 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  .. */.struct Tri
1ceb0 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a  gger {.  char *z
1cec0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
1ced0 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20   /* The name of 
1cee0 74 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20  the trigger     
1cef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf00 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61     */.  char *ta
1cf10 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
1cf20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20  /* The table or 
1cf30 76 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68  view to which th
1cf40 65 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65  e trigger applie
1cf50 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20  s */.  u8 op;   
1cf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1cf70 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45  * One of TK_DELE
1cf80 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54  TE, TK_UPDATE, T
1cf90 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20  K_INSERT        
1cfa0 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20   */.  u8 tr_tm; 
1cfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1cfc0 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f   One of TRIGGER_
1cfd0 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f  BEFORE, TRIGGER_
1cfe0 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20  AFTER */.  Expr 
1cff0 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20  *pWhen;         
1d000 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63     /* The WHEN c
1d010 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70  lause of the exp
1d020 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20  ression (may be 
1d030 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73  NULL) */.  IdLis
1d040 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20  t *pColumns;    
1d050 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73     /* If this is
1d060 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63   an UPDATE OF <c
1d070 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67  olumn-list> trig
1d080 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ger,.           
1d090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0a0 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69    the <column-li
1d0b0 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65  st> is stored he
1d0c0 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
1d0d0 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20  pSchema;        
1d0e0 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
1d0f0 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  ning the trigger
1d100 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54   */.  Schema *pT
1d110 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  abSchema;     /*
1d120 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
1d130 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  ng the table */.
1d140 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
1d150 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e  tep_list; /* Lin
1d160 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65  k list of trigge
1d170 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20  r program steps 
1d180 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
1d190 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b   Trigger *pNext;
1d1a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
1d1b0 20 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61   trigger associa
1d1c0 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
1d1d0 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
1d1e0 41 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74  A trigger is eit
1d1f0 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20  her a BEFORE or 
1d200 61 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72  an AFTER trigger
1d210 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
1d220 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65   constants.** de
1d230 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a  termine which. .
1d240 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61  **.** If there a
1d250 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67  re multiple trig
1d260 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20  gers, you might 
1d270 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61  of some BEFORE a
1d280 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a  nd some AFTER..*
1d290 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c  * In that cases,
1d2a0 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62   the constants b
1d2b0 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64  elow can be ORed
1d2c0 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64   together..*/.#d
1d2d0 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45  efine TRIGGER_BE
1d2e0 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20  FORE  1.#define 
1d2f0 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20  TRIGGER_AFTER   
1d300 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74  2../*. * An inst
1d310 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54  ance of struct T
1d320 72 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73  riggerStep is us
1d330 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69  ed to store a si
1d340 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65  ngle SQL stateme
1d350 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20  nt. * that is a 
1d360 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65  part of a trigge
1d370 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20  r-program. . *. 
1d380 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  * Instances of s
1d390 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
1d3a0 70 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  p are stored in 
1d3b0 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20  a singly linked 
1d3c0 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20  list (linked. * 
1d3d0 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74  using the "pNext
1d3e0 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65  " member) refere
1d3f0 6e 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65  nced by the "ste
1d400 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f  p_list" member o
1d410 66 20 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69  f the . * associ
1d420 61 74 65 64 20 73 74 72 75 63 74 20 54 72 69 67  ated struct Trig
1d430 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68  ger instance. Th
1d440 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
1d450 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69  of the linked li
1d460 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72  st is. * the fir
1d470 73 74 20 73 74 65 70 20 6f 66 20 74 68 65 20 74  st step of the t
1d480 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a  rigger-program..
1d490 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20   * . * The "op" 
1d4a0 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73  member indicates
1d4b0 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73   whether this is
1d4c0 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e   a "DELETE", "IN
1d4d0 53 45 52 54 22 2c 20 22 55 50 44 41 54 45 22 20  SERT", "UPDATE" 
1d4e0 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73  or. * "SELECT" s
1d4f0 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65  tatement. The me
1d500 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74  anings of the ot
1d510 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64  her members is d
1d520 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
1d530 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f   . * value of "o
1d540 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20  p" as follows:. 
1d550 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49  *. * (op == TK_I
1d560 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66  NSERT). * orconf
1d570 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68      -> stores th
1d580 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  e ON CONFLICT al
1d590 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65  gorithm. * pSele
1d5a0 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  ct   -> If this 
1d5b0 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
1d5c0 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e  O ... SELECT ...
1d5d0 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
1d5e0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1d5f0 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20 70   this stores a p
1d600 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45  ointer to the SE
1d610 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
1d620 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
1d630 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20   * target    -> 
1d640 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20  A token holding 
1d650 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20  the quoted name 
1d660 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
1d670 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20  insert into.. * 
1d680 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20  pExprList -> If 
1d690 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
1d6a0 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45  T INTO ... VALUE
1d6b0 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c  S ... statement,
1d6c0 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20   then. *        
1d6d0 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65        this store
1d6e0 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69  s values to be i
1d6f0 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69  nserted. Otherwi
1d700 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c  se NULL.. * pIdL
1d710 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ist   -> If this
1d720 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
1d730 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d  TO ... (<column-
1d740 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e  names>) VALUES .
1d750 2e 2e 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20  .. . *          
1d760 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74      statement, t
1d770 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20  hen this stores 
1d780 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  the column-names
1d790 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20   to be. *       
1d7a0 20 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20         inserted 
1d7b0 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20  into.. *. * (op 
1d7c0 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a  == TK_DELETE). *
1d7d0 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20   target    -> A 
1d7e0 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68  token holding th
1d7f0 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  e quoted name of
1d800 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65   the table to de
1d810 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57  lete from.. * pW
1d820 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57  here    -> The W
1d830 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74  HERE clause of t
1d840 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  he DELETE statem
1d850 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70  ent if one is sp
1d860 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20  ecified.. *     
1d870 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69           Otherwi
1d880 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20  se NULL.. * . * 
1d890 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45  (op == TK_UPDATE
1d8a0 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d  ). * target    -
1d8b0 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e  > A token holdin
1d8c0 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d  g the quoted nam
1d8d0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
1d8e0 6f 20 75 70 64 61 74 65 20 72 6f 77 73 20 6f 66  o update rows of
1d8f0 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
1d900 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
1d910 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  se of the UPDATE
1d920 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
1d930 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
1d940 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1d950 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
1d960 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20   * pExprList -> 
1d970 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f  A list of the co
1d980 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20  lumns to update 
1d990 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73 69  and the expressi
1d9a0 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a  ons to update. *
1d9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1d9c0 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74  em to. See sqlit
1d9d0 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d  e3Update() docum
1d9e0 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68  entation of "pCh
1d9f0 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20  anges". *       
1da00 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e         argument.
1da10 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74 20  . * . */.struct 
1da20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20  TriggerStep {.  
1da30 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
1da40 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
1da50 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
1da60 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20  ATE, TK_INSERT, 
1da70 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75  TK_SELECT */.  u
1da80 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  8 orconf;       
1da90 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61      /* OE_Rollba
1daa0 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69  ck etc. */.  Tri
1dab0 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20  gger *pTrig;    
1dac0 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72    /* The trigger
1dad0 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20   that this step 
1dae0 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a  is a part of */.
1daf0 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
1db00 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54  t;     /* SELECT
1db10 20 73 74 61 74 6d 65 6e 74 20 6f 72 20 52 48 53   statment or RHS
1db20 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   of INSERT INTO 
1db30 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f  .. SELECT ... */
1db40 0a 20 20 54 6f 6b 65 6e 20 74 61 72 67 65 74 3b  .  Token target;
1db50 20 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65          /* Targe
1db60 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45  t table for DELE
1db70 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45  TE, UPDATE, INSE
1db80 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  RT */.  Expr *pW
1db90 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  here;        /* 
1dba0 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
1dbb0 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55   for DELETE or U
1dbc0 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20  PDATE steps */. 
1dbd0 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72   ExprList *pExpr
1dbe0 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61  List; /* SET cla
1dbf0 75 73 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20  use for UPDATE. 
1dc00 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64  */.  IdList *pId
1dc10 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  List;     /* Col
1dc20 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e  umn names for IN
1dc30 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65  SERT */.  Trigge
1dc40 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f  rStep *pNext;  /
1dc50 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69  * Next in the li
1dc60 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69  nk-list */.  Tri
1dc70 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b  ggerStep *pLast;
1dc80 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e    /* Last elemen
1dc90 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20  t in link-list. 
1dca0 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c  Valid for 1st el
1dcb0 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f  em only */.};../
1dcc0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
1dcd0 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
1dce0 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tains informatio
1dcf0 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71  n used by the sq
1dd00 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f  liteFix....** ro
1dd10 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20 77  utines as they w
1dd20 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74 72  alk the parse tr
1dd30 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62  ee to make datab
1dd40 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a  ase references.*
1dd50 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f  * explicit.  .*/
1dd60 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
1dd70 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b  DbFixer DbFixer;
1dd80 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20  .struct DbFixer 
1dd90 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
1dda0 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  e;      /* The p
1ddb0 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20  arsing context. 
1ddc0 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   Error messages 
1ddd0 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a  written here */.
1dde0 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
1ddf0 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65  a;    /* Fix ite
1de00 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d  ms to this schem
1de10 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f  a */.  int bVarO
1de20 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68  nly;       /* Ch
1de30 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65  eck for variable
1de40 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79   references only
1de50 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1de60 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b   *zDb;    /* Mak
1de70 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63  e sure all objec
1de80 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  ts are contained
1de90 20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73   in this databas
1dea0 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  e */.  const cha
1deb0 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79  r *zType;  /* Ty
1dec0 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  pe of the contai
1ded0 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
1dee0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
1def0 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a  .  const Token *
1df00 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f  pName; /* Name o
1df10 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  f the container 
1df20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72  - used for error
1df30 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a   messages */.};.
1df40 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74  ./*.** An object
1df50 65 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d  ed used to accum
1df60 75 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f  ulate the text o
1df70 66 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65  f a string where
1df80 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65   we.** do not ne
1df90 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68  cessarily know h
1dfa0 6f 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e  ow big the strin
1dfb0 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65  g will be in the
1dfc0 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   end..*/.struct 
1dfd0 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c  StrAccum {.  sql
1dfe0 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
1dff0 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61    /* Optional da
1e000 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61  tabase for looka
1e010 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55  side.  Can be NU
1e020 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42  LL */.  char *zB
1e030 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ase;         /* 
1e040 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f  A base allocatio
1e050 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c  n.  Not from mal
1e060 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  loc. */.  char *
1e070 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  zText;         /
1e080 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c  * The string col
1e090 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f  lected so far */
1e0a0 0a 20 20 69 6e 74 20 20 6e 43 68 61 72 3b 20 20  .  int  nChar;  
1e0b0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74          /* Lengt
1e0c0 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20  h of the string 
1e0d0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1e0e0 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20   nAlloc;        
1e0f0 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70   /* Amount of sp
1e100 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ace allocated in
1e110 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20   zText */.  int 
1e120 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20   mxAlloc;       
1e130 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f   /* Maximum allo
1e140 77 65 64 20 73 74 72 69 6e 67 20 6c 65 6e 67 74  wed string lengt
1e150 68 20 2a 2f 0a 20 20 75 38 20 20 20 75 73 65 4d  h */.  u8   useM
1e160 61 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 30  alloc;      /* 0
1e170 3a 20 6e 6f 6e 65 2c 20 20 31 3a 20 73 71 6c 69  : none,  1: sqli
1e180 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a  te3DbMalloc,  2:
1e190 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20   sqlite3_malloc 
1e1a0 2a 2f 0a 20 20 75 38 20 20 20 61 63 63 45 72 72  */.  u8   accErr
1e1b0 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 53 54 52  or;       /* STR
1e1c0 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53  ACCUM_NOMEM or S
1e1d0 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a  TRACCUM_TOOBIG *
1e1e0 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52  /.};.#define STR
1e1f0 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a  ACCUM_NOMEM   1.
1e200 23 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d  #define STRACCUM
1e210 5f 54 4f 4f 42 49 47 20 20 32 0a 0a 2f 2a 0a 2a  _TOOBIG  2../*.*
1e220 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  * A pointer to t
1e230 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
1e240 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69   used to communi
1e250 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  cate information
1e260 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  .** from sqlite3
1e270 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73  Init and OP_Pars
1e280 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65  eSchema into the
1e290 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
1e2a0 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  back..*/.typedef
1e2b0 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69   struct {.  sqli
1e2c0 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
1e2d0 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
1e2e0 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
1e2f0 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a  d */.  char **pz
1e300 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72  ErrMsg;    /* Er
1e310 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72  ror message stor
1e320 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74  ed here */.  int
1e330 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
1e340 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64   /* 0 for main d
1e350 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20  atabase.  1 for 
1e360 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54  TEMP, 2.. for AT
1e370 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20  TACHed */.  int 
1e380 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
1e390 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73  /* Result code s
1e3a0 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20  tored here */.} 
1e3b0 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a  InitData;../*.**
1e3c0 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   Structure conta
1e3d0 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e  ining global con
1e3e0 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20  figuration data 
1e3f0 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c  for the SQLite l
1e400 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  ibrary..**.** Th
1e410 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73  is structure als
1e420 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20  o contains some 
1e430 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  state informatio
1e440 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c  n..*/.struct Sql
1e450 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69  ite3Config {.  i
1e460 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20  nt bMemstat;    
1e470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e480 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
1e490 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73  le memory status
1e4a0 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d   */.  int bCoreM
1e4b0 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
1e4c0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1e4d0 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d  to enable core m
1e4e0 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
1e4f0 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20   bFullMutex;    
1e500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e510 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
1e520 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a   full mutexing *
1e530 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69  /.  int bOpenUri
1e540 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e550 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1e560 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e   interpret filen
1e570 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a  ames as URIs */.
1e580 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20    int bUseCis;  
1e590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5a0 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72      /* Use cover
1e5b0 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20  ing indices for 
1e5c0 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20  full-scans */.  
1e5d0 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20  int mxStrlen;   
1e5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5f0 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72    /* Maximum str
1e600 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20  ing length */.  
1e610 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74  int neverCorrupt
1e620 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e630 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
1e640 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72   always well-for
1e650 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c  med */.  int szL
1e660 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
1e670 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
1e680 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20  fault lookaside 
1e690 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20  buffer size */. 
1e6a0 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b   int nLookaside;
1e6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6c0 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
1e6d0 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 63  okaside buffer c
1e6e0 6f 75 6e 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65  ount */.  sqlite
1e6f0 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b  3_mem_methods m;
1e700 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
1e710 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20  ow-level memory 
1e720 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72  allocation inter
1e730 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  face */.  sqlite
1e740 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
1e750 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c  mutex;      /* L
1e760 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69  ow-level mutex i
1e770 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71  nterface */.  sq
1e780 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74  lite3_pcache_met
1e790 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20 20  hods2 pcache2;  
1e7a0 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67  /* Low-level pag
1e7b0 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61 63  e-cache interfac
1e7c0 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65  e */.  void *pHe
1e7d0 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
1e7e0 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70           /* Heap
1e7f0 20 73 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a   storage space *
1e800 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20  /.  int nHeap;  
1e810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e820 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
1e830 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e   pHeap[] */.  in
1e840 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20  t mnReq, mxReq; 
1e850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e860 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68  /* Min and max h
1e870 65 61 70 20 72 65 71 75 65 73 74 73 20 73 69 7a  eap requests siz
1e880 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  es */.  sqlite3_
1e890 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20  int64 szMmap;   
1e8a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61            /* mma
1e8b0 70 28 29 20 73 70 61 63 65 20 70 65 72 20 6f 70  p() space per op
1e8c0 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c  en file */.  sql
1e8d0 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61  ite3_int64 mxMma
1e8e0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  p;             /
1e8f0 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20  * Maximum value 
1e900 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20  for szMmap */.  
1e910 76 6f 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20  void *pScratch; 
1e920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e930 20 20 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d    /* Scratch mem
1e940 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53  ory */.  int szS
1e950 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20  cratch;         
1e960 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
1e970 7a 65 20 6f 66 20 65 61 63 68 20 73 63 72 61 74  ze of each scrat
1e980 63 68 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69  ch buffer */.  i
1e990 6e 74 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20  nt nScratch;    
1e9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63   /* Number of sc
1e9c0 72 61 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f  ratch buffers */
1e9d0 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20  .  void *pPage; 
1e9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9f0 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63       /* Page cac
1ea00 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69  he memory */.  i
1ea10 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20  nt szPage;      
1ea20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea30 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68   /* Size of each
1ea40 20 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d   page in pPage[]
1ea50 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b   */.  int nPage;
1ea60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea70 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1ea80 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50  r of pages in pP
1ea90 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d  age[] */.  int m
1eaa0 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20  xParserStack;   
1eab0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1eac0 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66  maximum depth of
1ead0 20 74 68 65 20 70 61 72 73 65 72 20 73 74 61 63   the parser stac
1eae0 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65  k */.  int share
1eaf0 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20  dCacheEnabled;  
1eb00 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65           /* true
1eb10 20 69 66 20 73 68 61 72 65 64 2d 63 61 63 68 65   if shared-cache
1eb20 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f   mode enabled */
1eb30 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20  .  /* The above 
1eb40 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c  might be initial
1eb50 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f  ized to non-zero
1eb60 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
1eb70 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a   need to always.
1eb80 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62    ** initially b
1eb90 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e  e zero, however.
1eba0 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74   */.  int isInit
1ebb0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ebc0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1ebd0 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61  after initializa
1ebe0 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65  tion has finishe
1ebf0 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f  d */.  int inPro
1ec00 67 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20  gress;          
1ec10 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1ec20 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a   while initializ
1ec30 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
1ec40 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74  s */.  int isMut
1ec50 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  exInit;         
1ec60 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1ec70 20 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61   after mutexes a
1ec80 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  re initialized *
1ec90 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63  /.  int isMalloc
1eca0 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
1ecb0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
1ecc0 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
1ecd0 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
1ece0 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b  nt isPCacheInit;
1ecf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed00 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
1ed10 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c  alloc is initial
1ed20 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ized */.  int nR
1ed30 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  efInitMutex;    
1ed40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1ed50 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f  umber of users o
1ed60 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a  f pInitMutex */.
1ed70 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
1ed80 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  *pInitMutex;    
1ed90 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65      /* Mutex use
1eda0 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69  d by sqlite3_ini
1edb0 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76  tialize() */.  v
1edc0 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64  oid (*xLog)(void
1edd0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
1ede0 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20  *); /* Function 
1edf0 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20  for logging */. 
1ee00 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20   void *pLogArg; 
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 46 69 72 73 74 20 61        /* First a
1ee30 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28  rgument to xLog(
1ee40 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ) */.#ifdef SQLI
1ee50 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47  TE_ENABLE_SQLLOG
1ee60 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67  .  void(*xSqllog
1ee70 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
1ee80 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e  ,const char*, in
1ee90 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c  t);.  void *pSql
1eea0 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23  logArg;.#endif.#
1eeb0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42  ifdef SQLITE_VDB
1eec0 45 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20  E_COVERAGE.  /* 
1eed0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  The following ca
1eee0 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e  llback (if not N
1eef0 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20  ULL) is invoked 
1ef00 6f 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72  on every VDBE br
1ef10 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74  anch.  ** operat
1ef20 69 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61  ion.  Set the ca
1ef30 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c  llback using SQL
1ef40 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42  ITE_TESTCTRL_VDB
1ef50 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f  E_COVERAGE..  */
1ef60 0a 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42  .  void (*xVdbeB
1ef70 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74  ranch)(void*,int
1ef80 20 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68   iSrcLine,u8 eTh
1ef90 69 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20  is,u8 eMx);  /* 
1efa0 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  Callback */.  vo
1efb0 69 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41  id *pVdbeBranchA
1efc0 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
1efd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efe0 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61          /* 1st a
1eff0 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69  rgument */.#endi
1f000 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
1f010 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
1f020 53 54 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74  ST.  int (*xTest
1f030 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20  Callback)(int); 
1f040 20 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65         /* Invoke
1f050 64 20 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c  d by sqlite3Faul
1f060 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66  tSim() */.#endif
1f070 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d  .  int bLocaltim
1f080 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20  eFault;         
1f090 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1f0a0 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29  fail localtime()
1f0b0 20 63 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   calls */.};../*
1f0c0 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69  .** This macro i
1f0d0 73 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66  s used inside of
1f0e0 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
1f0f0 65 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65  ents to indicate
1f100 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73   that.** the ass
1f110 65 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ert is only vali
1f120 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d  d on a well-form
1f130 65 64 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e  ed database.  In
1f140 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20  stead of:.**.** 
1f150 20 20 20 20 61 73 73 65 72 74 28 20 58 20 29 3b      assert( X );
1f160 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65  .**.** One write
1f170 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  s:.**.**     ass
1f180 65 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50  ert( X || CORRUP
1f190 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f  T_DB );.**.** CO
1f1a0 52 52 55 50 54 5f 44 42 20 69 73 20 74 72 75 65  RRUPT_DB is true
1f1b0 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f   during normal o
1f1c0 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55  peration.  CORRU
1f1d0 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69  PT_DB does not i
1f1e0 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20  ndicate.** that 
1f1f0 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
1f200 64 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75  definitely corru
1f210 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74  pt, only that it
1f220 20 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75 70   might be corrup
1f230 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74  t..** For most t
1f240 65 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55  est cases, CORRU
1f250 50 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20  PT_DB is set to 
1f260 66 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70  false using a sp
1f270 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33  ecial.** sqlite3
1f280 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e  _test_control().
1f290 20 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61    This enables a
1f2a0 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
1f2b0 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74  ts to prove.** t
1f2c0 68 69 6e 67 73 20 74 68 61 74 20 61 72 65 20 61  hings that are a
1f2d0 6c 77 61 79 73 20 74 72 75 65 20 66 6f 72 20 77  lways true for w
1f2e0 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62  ell-formed datab
1f2f0 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ases..*/.#define
1f300 20 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71   CORRUPT_DB  (sq
1f310 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65  lite3Config.neve
1f320 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a  rCorrupt==0)../*
1f330 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e  .** Context poin
1f340 74 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20  ter passed down 
1f350 74 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65  through the tree
1f360 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74  -walk..*/.struct
1f370 20 57 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20   Walker {.  int 
1f380 28 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29  (*xExprCallback)
1f390 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29  (Walker*, Expr*)
1f3a0 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63  ;     /* Callbac
1f3b0 6b 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e  k for expression
1f3c0 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65  s */.  int (*xSe
1f3d0 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61  lectCallback)(Wa
1f3e0 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20  lker*,Select*); 
1f3f0 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72   /* Callback for
1f400 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f   SELECTs */.  vo
1f410 69 64 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c  id (*xSelectCall
1f420 62 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53  back2)(Walker*,S
1f430 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e  elect*);/* Secon
1f440 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53  d callback for S
1f450 45 4c 45 43 54 73 20 2a 2f 0a 20 20 50 61 72 73  ELECTs */.  Pars
1f460 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
1f470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f480 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20        /* Parser 
1f490 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69  context.  */.  i
1f4a0 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20  nt walkerDepth; 
1f4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1f4d0 65 72 20 6f 66 20 73 75 62 71 75 65 72 69 65 73  er of subqueries
1f4e0 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b 20   */.  u8 eCode; 
1f4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f510 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65  /* A small proce
1f520 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20  ssing code */.  
1f530 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20  union {         
1f540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f550 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74            /* Ext
1f560 72 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c  ra data for call
1f570 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65  back */.    Name
1f580 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20  Context *pNC;   
1f590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5a0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67         /* Naming
1f5b0 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20   context */.    
1f5c0 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
1f5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
1f5f0 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69  counter */.    i
1f600 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20 20 20  nt iCur;        
1f610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f620 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63            /* A c
1f630 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ursor number */.
1f640 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72      SrcList *pSr
1f650 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20  cList;          
1f660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f670 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  * FROM clause */
1f680 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43  .    struct SrcC
1f690 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b  ount *pSrcCount;
1f6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6b0 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75  /* Counting colu
1f6c0 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f  mn references */
1f6d0 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46  .  } u;.};../* F
1f6e0 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69  orward declarati
1f6f0 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ons */.int sqlit
1f700 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65  e3WalkExpr(Walke
1f710 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
1f720 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c  sqlite3WalkExprL
1f730 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ist(Walker*, Exp
1f740 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
1f750 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57  ite3WalkSelect(W
1f760 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
1f770 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
1f780 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b  kSelectExpr(Walk
1f790 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
1f7a0 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
1f7b0 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a  lectFrom(Walker*
1f7c0 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a  , Select*);../*.
1f7d0 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  ** Return code f
1f7e0 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72  rom the parse-tr
1f7f0 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69  ee walking primi
1f800 74 69 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a  tives and their.
1f810 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f  ** callbacks..*/
1f820 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e  .#define WRC_Con
1f830 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20  tinue    0   /* 
1f840 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e  Continue down in
1f850 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23  to children */.#
1f860 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65  define WRC_Prune
1f870 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d         1   /* Om
1f880 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20  it children but 
1f890 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67  continue walking
1f8a0 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65   siblings */.#de
1f8b0 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20  fine WRC_Abort  
1f8c0 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e       2   /* Aban
1f8d0 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c  don the tree wal
1f8e0 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  k */../*.** An i
1f8f0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
1f900 73 74 72 75 63 74 75 72 65 20 72 65 70 72 65 73  structure repres
1f910 65 6e 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e  ents a set of on
1f920 65 20 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a  e or more CTEs.*
1f930 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  * (common table 
1f940 65 78 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65  expressions) cre
1f950 61 74 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65  ated by a single
1f960 20 57 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f   WITH clause..*/
1f970 0a 73 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20  .struct With {. 
1f980 20 69 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20   int nCte;      
1f990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54   /* Number of CT
1f9b0 45 73 20 69 6e 20 74 68 65 20 57 49 54 48 20 63  Es in the WITH c
1f9c0 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20  lause */.  With 
1f9d0 2a 70 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20  *pOuter;        
1f9e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
1f9f0 6e 74 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c  ntaining WITH cl
1fa00 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ause, or NULL */
1fa10 0a 20 20 73 74 72 75 63 74 20 43 74 65 20 7b 20  .  struct Cte { 
1fa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa30 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43     /* For each C
1fa40 54 45 20 69 6e 20 74 68 65 20 57 49 54 48 20 63  TE in the WITH c
1fa50 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20  lause.... */.   
1fa60 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
1fa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa80 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
1fa90 20 43 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72   CTE */.    Expr
1faa0 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20  List *pCols;    
1fab0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
1fac0 69 73 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20  ist of explicit 
1fad0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72  column names, or
1fae0 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c   NULL */.    Sel
1faf0 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
1fb00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fb10 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  The definition o
1fb20 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20  f this CTE */.  
1fb30 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
1fb40 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rr;             
1fb50 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61    /* Error messa
1fb60 67 65 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20  ge for circular 
1fb70 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20  references */.  
1fb80 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64  } a[1];.};..#ifd
1fb90 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
1fba0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1fbb0 65 20 6f 66 20 74 68 65 20 54 72 65 65 56 69 65  e of the TreeVie
1fbc0 77 20 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64  w object is used
1fbd0 20 66 6f 72 20 70 72 69 6e 74 69 6e 67 20 74 68   for printing th
1fbe0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
1fbf0 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
1fc00 6f 6e 20 73 71 6c 69 74 65 33 44 65 62 75 67 50  on sqlite3DebugP
1fc10 72 69 6e 74 66 28 29 20 75 73 69 6e 67 20 61 20  rintf() using a 
1fc20 74 72 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a  tree-like view..
1fc30 2a 2f 0a 73 74 72 75 63 74 20 54 72 65 65 56 69  */.struct TreeVi
1fc40 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65  ew {.  int iLeve
1fc50 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  l;             /
1fc60 2a 20 57 68 69 63 68 20 6c 65 76 65 6c 20 6f 66  * Which level of
1fc70 20 74 68 65 20 74 72 65 65 20 77 65 20 61 72 65   the tree we are
1fc80 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69   on */.  u8  bLi
1fc90 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20 20 20 20  ne[100];        
1fca0 20 2f 2a 20 44 72 61 77 20 76 65 72 74 69 63 61   /* Draw vertica
1fcb0 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66  l in column i if
1fcc0 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72 75   bLine[i] is tru
1fcd0 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f  e */.};.#endif /
1fce0 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a  * SQLITE_DEBUG *
1fcf0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e  /../*.** Assumin
1fd00 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20  g zIn points to 
1fd10 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
1fd20 66 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63  f a UTF-8 charac
1fd30 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20  ter,.** advance 
1fd40 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  zIn to point to 
1fd50 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
1fd60 66 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38  f the next UTF-8
1fd70 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23   character..*/.#
1fd80 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b  define SQLITE_SK
1fd90 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20  IP_UTF8(zIn) {  
1fda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdb0 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a        \.  if( (*
1fdc0 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29  (zIn++))>=0xc0 )
1fdd0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
1fde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
1fdf0 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49  .    while( (*zI
1fe00 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20  n & 0xc0)==0x80 
1fe10 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20  ){ zIn++; }     
1fe20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20          \.  }   
1fe30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe60 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   \.}../*.** The 
1fe70 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61  SQLITE_*_BKPT ma
1fe80 63 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74  cros are substit
1fe90 75 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72  utes for the err
1fea0 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a  or codes with.**
1feb0 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62   the same name b
1fec0 75 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f  ut without the _
1fed0 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68  BKPT suffix.  Th
1fee0 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b  ese macros invok
1fef0 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68  e.** routines th
1ff00 61 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69  at report the li
1ff10 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69  ne-number on whi
1ff20 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69  ch the error ori
1ff30 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67  ginated.** using
1ff40 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20   sqlite3_log(). 
1ff50 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c   The routines al
1ff60 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e  so provide a con
1ff70 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a  venient place.**
1ff80 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67   to set a debugg
1ff90 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a  er breakpoint..*
1ffa0 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72  /.int sqlite3Cor
1ffb0 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a  ruptError(int);.
1ffc0 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73  int sqlite3Misus
1ffd0 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  eError(int);.int
1ffe0 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
1fff0 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66  Error(int);.#def
20000 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
20010 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  PT_BKPT sqlite3C
20020 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49  orruptError(__LI
20030 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
20040 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
20050 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
20060 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
20070 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e  efine SQLITE_CAN
20080 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74  TOPEN_BKPT sqlit
20090 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
200a0 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a  __LINE__).../*.*
200b0 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79  * FTS4 is really
200c0 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f   an extension fo
200d0 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65  r FTS3.  It is e
200e0 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  nabled using the
200f0 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  .** SQLITE_ENABL
20100 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42  E_FTS3 macro.  B
20110 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66  ut to avoid conf
20120 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61  usion we also ca
20130 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  ll.** the SQLITE
20140 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63  _ENABLE_FTS4 mac
20150 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61  ro to serve as a
20160 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49  n alias for SQLI
20170 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a  TE_ENABLE_FTS3..
20180 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
20190 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
201a0 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  4) && !defined(S
201b0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
201c0 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  3).# define SQLI
201d0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23  TE_ENABLE_FTS3.#
201e0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
201f0 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20   ctype.h header 
20200 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f  is needed for no
20210 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e  n-ASCII systems.
20220 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20    It is also.** 
20230 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77  needed by FTS3 w
20240 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c  hen FTS3 is incl
20250 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c  uded in the amal
20260 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66  gamation..*/.#if
20270 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
20280 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20  _ASCII) || \.   
20290 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   (defined(SQLITE
202a0 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26  _ENABLE_FTS3) &&
202b0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
202c0 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23  AMALGAMATION)).#
202d0 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e   include <ctype.
202e0 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  h>.#endif../*.**
202f0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
20300 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20  acros mimic the 
20310 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79  standard library
20320 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70   functions toupp
20330 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65  er(),.** isspace
20340 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69  (), isalnum(), i
20350 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78  sdigit() and isx
20360 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74  digit(), respect
20370 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71  ively. The.** sq
20380 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e  lite versions on
20390 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49  ly work for ASCI
203a0 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65  I characters, re
203b0 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61  gardless of loca
203c0 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  le..*/.#ifdef SQ
203d0 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66  LITE_ASCII.# def
203e0 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70  ine sqlite3Toupp
203f0 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71  er(x)  ((x)&~(sq
20400 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
20410 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
20420 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e  ]&0x20)).# defin
20430 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65  e sqlite3Isspace
20440 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
20450 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
20460 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29   char)(x)]&0x01)
20470 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20480 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73  3Isalnum(x)   (s
20490 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
204a0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
204b0 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e  )]&0x06).# defin
204c0 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61  e sqlite3Isalpha
204d0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
204e0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
204f0 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29   char)(x)]&0x02)
20500 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20510 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73  3Isdigit(x)   (s
20520 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
20530 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
20540 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e  )]&0x04).# defin
20550 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
20560 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74  t(x)  (sqlite3Ct
20570 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
20580 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29   char)(x)]&0x08)
20590 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
205a0 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73  3Tolower(x)   (s
205b0 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
205c0 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er[(unsigned cha
205d0 72 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20  r)(x)]).#else.# 
205e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
205f0 75 70 70 65 72 28 78 29 20 20 20 74 6f 75 70 70  upper(x)   toupp
20600 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er((unsigned cha
20610 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
20620 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78  sqlite3Isspace(x
20630 29 20 20 20 69 73 73 70 61 63 65 28 28 75 6e 73  )   isspace((uns
20640 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
20650 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20660 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61  Isalnum(x)   isa
20670 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63  lnum((unsigned c
20680 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
20690 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61  e sqlite3Isalpha
206a0 28 78 29 20 20 20 69 73 61 6c 70 68 61 28 28 75  (x)   isalpha((u
206b0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
206c0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
206d0 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20 69  e3Isdigit(x)   i
206e0 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64  sdigit((unsigned
206f0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
20700 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69  ine sqlite3Isxdi
20710 67 69 74 28 78 29 20 20 69 73 78 64 69 67 69 74  git(x)  isxdigit
20720 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
20730 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
20740 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20  lite3Tolower(x) 
20750 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67    tolower((unsig
20760 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 65  ned char)(x)).#e
20770 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
20780 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a 0a 2f  IsIdChar(u8);../
20790 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75  *.** Internal fu
207a0 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65  nction prototype
207b0 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c  s.*/.#define sql
207c0 69 74 65 33 53 74 72 49 43 6d 70 20 73 71 6c 69  ite3StrICmp sqli
207d0 74 65 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20  te3_stricmp.int 
207e0 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
207f0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64  const char*);.#d
20800 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72  efine sqlite3Str
20810 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74  NICmp sqlite3_st
20820 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69  rnicmp..int sqli
20830 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f  te3MallocInit(vo
20840 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
20850 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29  3MallocEnd(void)
20860 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d  ;.void *sqlite3M
20870 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64  alloc(u64);.void
20880 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a   *sqlite3MallocZ
20890 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a  ero(u64);.void *
208a0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
208b0 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36  ero(sqlite3*, u6
208c0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
208d0 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c  3DbMallocRaw(sql
208e0 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61  ite3*, u64);.cha
208f0 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44  r *sqlite3DbStrD
20900 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
20910 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a  t char*);.char *
20920 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70  sqlite3DbStrNDup
20930 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
20940 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  char*, u64);.voi
20950 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f  d *sqlite3Reallo
20960 63 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76  c(void*, u64);.v
20970 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65  oid *sqlite3DbRe
20980 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69  allocOrFree(sqli
20990 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75  te3 *, void *, u
209a0 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
209b0 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69  e3DbRealloc(sqli
209c0 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75  te3 *, void *, u
209d0 36 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  64);.void sqlite
209e0 33 44 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a  3DbFree(sqlite3*
209f0 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  , void*);.int sq
20a00 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28  lite3MallocSize(
20a10 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
20a20 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28  te3DbMallocSize(
20a30 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
20a40 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53  ;.void *sqlite3S
20a50 63 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74  cratchMalloc(int
20a60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
20a70 63 72 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a  cratchFree(void*
20a80 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
20a90 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b  PageMalloc(int);
20aa0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67  .void sqlite3Pag
20ab0 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f  eFree(void*);.vo
20ac0 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74  id sqlite3MemSet
20ad0 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76  Default(void);.v
20ae0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67  oid sqlite3Benig
20af0 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69  nMallocHooks(voi
20b00 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69  d (*)(void), voi
20b10 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e  d (*)(void));.in
20b20 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61  t sqlite3HeapNea
20b30 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a  rlyFull(void);..
20b40 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73  /*.** On systems
20b50 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63   with ample stac
20b60 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74  k space and that
20b70 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28   support alloca(
20b80 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f  ), make.** use o
20b90 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62  f alloca() to ob
20ba0 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c  tain space for l
20bb0 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f  arge automatic o
20bc0 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61  bjects.  By defa
20bd0 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73  ult,.** obtain s
20be0 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  pace from malloc
20bf0 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c  ()..**.** The al
20c00 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e  loca() routine n
20c10 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c  ever returns NUL
20c20 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  L.  This will ca
20c30 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a  use code paths.*
20c40 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68  * that deal with
20c50 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
20c60 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f  oc() failures to
20c70 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e   be unreachable.
20c80 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
20c90 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64  E_USE_ALLOCA.# d
20ca0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
20cb0 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
20cc0 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65    alloca(N).# de
20cd0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
20ce0 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20  kAllocZero(D,N) 
20cf0 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e   memset(alloca(N
20d00 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e  ), 0, N).# defin
20d10 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
20d20 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 0a 23  ee(D,P)       .#
20d30 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
20d40 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52  lite3StackAllocR
20d50 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65  aw(D,N)   sqlite
20d60 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e  3DbMallocRaw(D,N
20d70 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
20d80 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f  e3StackAllocZero
20d90 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62  (D,N)  sqlite3Db
20da0 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a  MallocZero(D,N).
20db0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20dc0 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20  StackFree(D,P)  
20dd0 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
20de0 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a  ee(D,P).#endif..
20df0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
20e00 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e  ABLE_MEMSYS3.con
20e10 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  st sqlite3_mem_m
20e20 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d  ethods *sqlite3M
20e30 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69  emGetMemsys3(voi
20e40 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  d);.#endif.#ifde
20e50 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
20e60 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71  MEMSYS5.const sq
20e70 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
20e80 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  s *sqlite3MemGet
20e90 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23  Memsys5(void);.#
20ea0 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20  endif...#ifndef 
20eb0 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49  SQLITE_MUTEX_OMI
20ec0 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  T.  sqlite3_mute
20ed0 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20  x_methods const 
20ee0 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d  *sqlite3DefaultM
20ef0 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71  utex(void);.  sq
20f00 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
20f10 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74  ods const *sqlit
20f20 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64  e3NoopMutex(void
20f30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  );.  sqlite3_mut
20f40 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78  ex *sqlite3Mutex
20f50 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e  Alloc(int);.  in
20f60 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e  t sqlite3MutexIn
20f70 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20  it(void);.  int 
20f80 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28  sqlite3MutexEnd(
20f90 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 69  void);.#endif..i
20fa0 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  nt sqlite3Status
20fb0 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64  Value(int);.void
20fc0 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 41 64   sqlite3StatusAd
20fd0 64 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  d(int, int);.voi
20fe0 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 53  d sqlite3StatusS
20ff0 65 74 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23  et(int, int);..#
21000 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
21010 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
21020 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49  T.  int sqlite3I
21030 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65  sNaN(double);.#e
21040 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
21050 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a  ite3IsNaN(X)  0.
21060 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
21070 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
21080 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
21090 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72  ture holds infor
210a0 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c  mation about SQL
210b0 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  .** functions ar
210c0 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65  guments that are
210d0 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
210e0 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29 20  to the printf() 
210f0 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  function..*/.str
21100 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65  uct PrintfArgume
21110 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67  nts {.  int nArg
21120 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21130 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72   /* Total number
21140 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
21150 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20  .  int nUsed;   
21160 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
21170 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
21180 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ts used so far *
21190 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  /.  sqlite3_valu
211a0 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20  e **apArg;   /* 
211b0 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c  The argument val
211c0 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69  ues */.};..#defi
211d0 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
211e0 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 0a 23  _INTERNAL 0x01.#
211f0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
21200 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78  INTF_SQLFUNC  0x
21210 30 32 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  02.void sqlite3V
21220 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d  XPrintf(StrAccum
21230 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68  *, u32, const ch
21240 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76  ar*, va_list);.v
21250 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e  oid sqlite3XPrin
21260 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 75 33  tf(StrAccum*, u3
21270 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  2, const char*, 
21280 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ...);.char *sqli
21290 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  te3MPrintf(sqlit
212a0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
212b0 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c   ...);.char *sql
212c0 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c  ite3VMPrintf(sql
212d0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
212e0 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61  *, va_list);.cha
212f0 72 20 2a 73 71 6c 69 74 65 33 4d 41 70 70 65 6e  r *sqlite3MAppen
21300 64 66 28 73 71 6c 69 74 65 33 2a 2c 63 68 61 72  df(sqlite3*,char
21310 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  *,const char*,..
21320 2e 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .);.#if defined(
21330 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20  SQLITE_TEST) || 
21340 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
21350 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c  EBUG).  void sql
21360 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
21370 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
21380 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  );.#endif.#if de
21390 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
213a0 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  T).  void *sqlit
213b0 65 33 54 65 73 74 54 65 78 74 54 6f 50 74 72 28  e3TestTextToPtr(
213c0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
213d0 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65  ndif..#if define
213e0 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a  d(SQLITE_DEBUG).
213f0 20 20 54 72 65 65 56 69 65 77 20 2a 73 71 6c 69    TreeView *sqli
21400 74 65 33 54 72 65 65 56 69 65 77 50 75 73 68 28  te3TreeViewPush(
21410 54 72 65 65 56 69 65 77 2a 2c 75 38 29 3b 0a 20  TreeView*,u8);. 
21420 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
21430 65 56 69 65 77 50 6f 70 28 54 72 65 65 56 69 65  eViewPop(TreeVie
21440 77 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  w*);.  void sqli
21450 74 65 33 54 72 65 65 56 69 65 77 4c 69 6e 65 28  te3TreeViewLine(
21460 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
21470 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20   char*, ...);.  
21480 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
21490 56 69 65 77 49 74 65 6d 28 54 72 65 65 56 69 65  ViewItem(TreeVie
214a0 77 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  w*, const char*,
214b0 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c   u8);.  void sql
214c0 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72  ite3TreeViewExpr
214d0 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
214e0 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20  t Expr*, u8);.  
214f0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
21500 56 69 65 77 45 78 70 72 4c 69 73 74 28 54 72 65  ViewExprList(Tre
21510 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78  eView*, const Ex
21520 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e  prList*, u8, con
21530 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
21540 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
21550 77 53 65 6c 65 63 74 28 54 72 65 65 56 69 65 77  wSelect(TreeView
21560 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a  *, const Select*
21570 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a  , u8);.#endif...
21580 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53  void sqlite3SetS
21590 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73  tring(char **, s
215a0 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63  qlite3*, const c
215b0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  har*, ...);.void
215c0 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
215d0 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
215e0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20  har*, ...);.int 
215f0 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63  sqlite3Dequote(c
21600 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
21610 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f  e3KeywordCode(co
21620 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
21630 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
21640 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50  lite3RunParser(P
21650 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
21660 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f  r*, char **);.vo
21670 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68  id sqlite3Finish
21680 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a  Coding(Parse*);.
21690 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65  int sqlite3GetTe
216a0 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76  mpReg(Parse*);.v
216b0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61  oid sqlite3Relea
216c0 73 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a  seTempReg(Parse*
216d0 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
216e0 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50  e3GetTempRange(P
216f0 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  arse*,int);.void
21700 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54   sqlite3ReleaseT
21710 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c  empRange(Parse*,
21720 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
21730 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52  qlite3ClearTempR
21740 65 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b  egCache(Parse*);
21750 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
21760 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a  prAlloc(sqlite3*
21770 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e  ,int,const Token
21780 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  *,int);.Expr *sq
21790 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65  lite3Expr(sqlite
217a0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
217b0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
217c0 33 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72  3ExprAttachSubtr
217d0 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  ees(sqlite3*,Exp
217e0 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b  r*,Expr*,Expr*);
217f0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45  .Expr *sqlite3PE
21800 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  xpr(Parse*, int,
21810 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63   Expr*, Expr*, c
21820 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78  onst Token*);.Ex
21830 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
21840 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  nd(sqlite3*,Expr
21850 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  *, Expr*);.Expr 
21860 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63  *sqlite3ExprFunc
21870 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72  tion(Parse*,Expr
21880 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
21890 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
218a0 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28  AssignVarNumber(
218b0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
218c0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
218d0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
218e0 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73   Expr*);.ExprLis
218f0 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
21900 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c  stAppend(Parse*,
21910 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29  ExprList*,Expr*)
21920 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
21930 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61  prListSetName(Pa
21940 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54  rse*,ExprList*,T
21950 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
21960 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
21970 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45  SetSpan(Parse*,E
21980 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61  xprList*,ExprSpa
21990 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
219a0 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28  3ExprListDelete(
219b0 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69  sqlite3*, ExprLi
219c0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
219d0 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20  3Init(sqlite3*, 
219e0 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  char**);.int sql
219f0 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
21a00 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61  (void*, int, cha
21a10 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f  r**, char**);.vo
21a20 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61  id sqlite3Pragma
21a30 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
21a40 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
21a50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
21a60 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
21a70 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74  Connection(sqlit
21a80 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
21a90 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61  e3ResetOneSchema
21aa0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
21ab0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c  void sqlite3Coll
21ac0 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61  apseDatabaseArra
21ad0 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  y(sqlite3*);.voi
21ae0 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 50 61  d sqlite3BeginPa
21af0 72 73 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  rse(Parse*,int);
21b00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
21b10 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67  mitInternalChang
21b20 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 54 61  es(sqlite3*);.Ta
21b30 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75  ble *sqlite3Resu
21b40 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61  ltSetOfSelect(Pa
21b50 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76  rse*,Select*);.v
21b60 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d  oid sqlite3OpenM
21b70 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65  asterTable(Parse
21b80 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20   *, int);.Index 
21b90 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b  *sqlite3PrimaryK
21ba0 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b  eyIndex(Table*);
21bb0 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75  .i16 sqlite3Colu
21bc0 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a  mnOfIndex(Index*
21bd0 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c  , i16);.void sql
21be0 69 74 65 33 53 74 61 72 74 54 61 62 6c 65 28 50  ite3StartTable(P
21bf0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
21c00 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  en*,int,int,int,
21c10 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21c20 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  e3AddColumn(Pars
21c30 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  e*,Token*);.void
21c40 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75   sqlite3AddNotNu
21c50 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ll(Parse*, int);
21c60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
21c70 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65  PrimaryKey(Parse
21c80 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
21c90 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
21ca0 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65  id sqlite3AddChe
21cb0 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ckConstraint(Par
21cc0 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
21cd0 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75  d sqlite3AddColu
21ce0 6d 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 54 6f  mnType(Parse*,To
21cf0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
21d00 74 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c  te3AddDefaultVal
21d10 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70  ue(Parse*,ExprSp
21d20 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  an*);.void sqlit
21d30 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65  e3AddCollateType
21d40 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
21d50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e  ;.void sqlite3En
21d60 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f  dTable(Parse*,To
21d70 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53  ken*,Token*,u8,S
21d80 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
21d90 69 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e  ite3ParseUri(con
21da0 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
21db0 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e  har*,unsigned in
21dc0 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
21dd0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
21de0 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61  vfs**,char**,cha
21df0 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71  r **);.Btree *sq
21e00 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72  lite3DbNameToBtr
21e10 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ee(sqlite3*,cons
21e20 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
21e30 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28 50 61  lite3CodeOnce(Pa
21e40 72 73 65 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20  rse *);..#ifdef 
21e50 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
21e60 54 49 4e 5f 54 45 53 54 0a 23 20 64 65 66 69 6e  TIN_TEST.# defin
21e70 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  e sqlite3FaultSi
21e80 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  m(X) SQLITE_OK.#
21e90 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74  else.  int sqlit
21ea0 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b  e3FaultSim(int);
21eb0 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20  .#endif..Bitvec 
21ec0 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72  *sqlite3BitvecCr
21ed0 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73  eate(u32);.int s
21ee0 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74  qlite3BitvecTest
21ef0 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
21f00 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
21f10 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33  cSet(Bitvec*, u3
21f20 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  2);.void sqlite3
21f30 42 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76  BitvecClear(Bitv
21f40 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29  ec*, u32, void*)
21f50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69  ;.void sqlite3Bi
21f60 74 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76  tvecDestroy(Bitv
21f70 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  ec*);.u32 sqlite
21f80 33 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76  3BitvecSize(Bitv
21f90 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ec*);.int sqlite
21fa0 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65  3BitvecBuiltinTe
21fb0 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52  st(int,int*);..R
21fc0 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f  owSet *sqlite3Ro
21fd0 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33  wSetInit(sqlite3
21fe0 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e  *, void*, unsign
21ff0 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  ed int);.void sq
22000 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72  lite3RowSetClear
22010 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20  (RowSet*);.void 
22020 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73  sqlite3RowSetIns
22030 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34  ert(RowSet*, i64
22040 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
22050 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a  wSetTest(RowSet*
22060 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36  , int iBatch, i6
22070 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
22080 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74  owSetNext(RowSet
22090 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20  *, i64*);..void 
220a0 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65  sqlite3CreateVie
220b0 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  w(Parse*,Token*,
220c0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65  Token*,Token*,Se
220d0 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  lect*,int,int);.
220e0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
220f0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
22100 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  || !defined(SQLI
22110 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
22120 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69  ABLE).  int sqli
22130 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
22140 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62  Names(Parse*,Tab
22150 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  le*);.#else.# de
22160 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77  fine sqlite3View
22170 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41  GetColumnNames(A
22180 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69  ,B) 0.#endif..#i
22190 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  f SQLITE_MAX_ATT
221a0 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73  ACHED>30.  int s
221b0 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
221c0 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65  ero(yDbMask);.#e
221d0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
221e0 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  3DropTable(Parse
221f0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
22200 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
22210 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c  ite3CodeDropTabl
22220 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
22230 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
22240 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
22250 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
22260 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20  able*);.#ifndef 
22270 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
22280 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64  INCREMENT.  void
22290 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
222a0 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65  ementBegin(Parse
222b0 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69   *pParse);.  voi
222c0 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
222d0 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20  rementEnd(Parse 
222e0 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a  *pParse);.#else.
222f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
22300 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
22310 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73  in(X).# define s
22320 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
22330 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66  entEnd(X).#endif
22340 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73  .void sqlite3Ins
22350 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ert(Parse*, SrcL
22360 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49  ist*, Select*, I
22370 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  dList*, int);.vo
22380 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79  id *sqlite3Array
22390 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33  Allocate(sqlite3
223a0 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a  *,void*,int,int*
223b0 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a  ,int*);.IdList *
223c0 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70  sqlite3IdListApp
223d0 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 49 64  end(sqlite3*, Id
223e0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
223f0 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73  int sqlite3IdLis
22400 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63  tIndex(IdList*,c
22410 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63  onst char*);.Src
22420 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
22430 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69  ListEnlarge(sqli
22440 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  te3*, SrcList*, 
22450 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69  int, int);.SrcLi
22460 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
22470 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33  stAppend(sqlite3
22480 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
22490 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72  en*, Token*);.Sr
224a0 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
224b0 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54  cListAppendFromT
224c0 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  erm(Parse*, SrcL
224d0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
224e0 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ken*,.          
224f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22500 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65              Toke
22510 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  n*, Select*, Exp
22520 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f  r*, IdList*);.vo
22530 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
22540 74 49 6e 64 65 78 65 64 42 79 28 50 61 72 73 65  tIndexedBy(Parse
22550 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54   *, SrcList *, T
22560 6f 6b 65 6e 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  oken *);.int sql
22570 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f  ite3IndexedByLoo
22580 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72  kup(Parse *, str
22590 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
225a0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
225b0 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
225c0 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b  nType(SrcList*);
225d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
225e0 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72  ListAssignCursor
225f0 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  s(Parse*, SrcLis
22600 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
22610 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71  3IdListDelete(sq
22620 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29  lite3*, IdList*)
22630 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
22640 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  cListDelete(sqli
22650 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  te3*, SrcList*);
22660 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41  .Index *sqlite3A
22670 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65  llocateIndexObje
22680 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c  ct(sqlite3*,i16,
22690 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e 64  int,char**);.Ind
226a0 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  ex *sqlite3Creat
226b0 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f  eIndex(Parse*,To
226c0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c  ken*,Token*,SrcL
226d0 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ist*,ExprList*,i
226e0 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  nt,Token*,.     
226f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22700 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c       Expr*, int,
22710 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
22720 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72  te3DropIndex(Par
22730 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
22740 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
22750 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53  Select(Parse*, S
22760 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65  elect*, SelectDe
22770 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
22780 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50  lite3SelectNew(P
22790 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
227a0 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
227b0 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  xprList*,.      
227c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227d0 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73     Expr*,ExprLis
227e0 74 2a 2c 75 31 36 2c 45 78 70 72 2a 2c 45 78 70  t*,u16,Expr*,Exp
227f0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
22800 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71  3SelectDelete(sq
22810 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29  lite3*, Select*)
22820 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
22830 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61  SrcListLookup(Pa
22840 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  rse*, SrcList*);
22850 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65  .int sqlite3IsRe
22860 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54  adOnly(Parse*, T
22870 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  able*, int);.voi
22880 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62  d sqlite3OpenTab
22890 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69  le(Parse*, int i
228a0 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61  Cur, int iDb, Ta
228b0 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20  ble*, int);.#if 
228c0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
228d0 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c  NABLE_UPDATE_DEL
228e0 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64  ETE_LIMIT) && !d
228f0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
22900 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70  IT_SUBQUERY).Exp
22910 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57  r *sqlite3LimitW
22920 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c  here(Parse*,SrcL
22930 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
22940 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  ist*,Expr*,Expr*
22950 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a  ,char*);.#endif.
22960 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
22970 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53  teFrom(Parse*, S
22980 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b  rcList*, Expr*);
22990 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64  .void sqlite3Upd
229a0 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ate(Parse*, SrcL
229b0 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
229c0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68   Expr*, int);.Wh
229d0 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  ereInfo *sqlite3
229e0 57 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65  WhereBegin(Parse
229f0 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
22a00 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c  ,ExprList*,ExprL
22a10 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76  ist*,u16,int);.v
22a20 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65  oid sqlite3Where
22a30 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  End(WhereInfo*);
22a40 0a 75 36 34 20 73 71 6c 69 74 65 33 57 68 65 72  .u64 sqlite3Wher
22a50 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28  eOutputRowCount(
22a60 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
22a70 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44   sqlite3WhereIsD
22a80 69 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66  istinct(WhereInf
22a90 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
22aa0 57 68 65 72 65 49 73 4f 72 64 65 72 65 64 28 57  WhereIsOrdered(W
22ab0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
22ac0 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
22ad0 72 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  rted(WhereInfo*)
22ae0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
22af0 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28  reContinueLabel(
22b00 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
22b10 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65   sqlite3WhereBre
22b20 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  akLabel(WhereInf
22b30 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
22b40 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57  WhereOkOnePass(W
22b50 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29  hereInfo*, int*)
22b60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
22b70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50  rCodeGetColumn(P
22b80 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
22b90 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  nt, int, int, u8
22ba0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
22bb0 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
22bc0 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54  OfTable(Vdbe*, T
22bd0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
22be0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
22bf0 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28  te3ExprCodeMove(
22c00 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
22c10 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
22c20 69 74 65 33 45 78 70 72 43 61 63 68 65 53 74 6f  ite3ExprCacheSto
22c30 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  re(Parse*, int, 
22c40 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
22c50 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
22c60 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f  Push(Parse*);.vo
22c70 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
22c80 63 68 65 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a  chePop(Parse*);.
22c90 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
22ca0 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73  CacheRemove(Pars
22cb0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
22cc0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
22cd0 61 63 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a  acheClear(Parse*
22ce0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
22cf0 78 70 72 43 61 63 68 65 41 66 66 69 6e 69 74 79  xprCacheAffinity
22d00 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69  Change(Parse*, i
22d10 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
22d20 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50  qlite3ExprCode(P
22d30 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
22d40 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22d50 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62  ExprCodeFactorab
22d60 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  le(Parse*, Expr*
22d70 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
22d80 69 74 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e  ite3ExprCodeAtIn
22d90 69 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  it(Parse*, Expr*
22da0 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
22db0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54  sqlite3ExprCodeT
22dc0 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72  emp(Parse*, Expr
22dd0 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
22de0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 61 72  lite3ExprCodeTar
22df0 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  get(Parse*, Expr
22e00 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
22e10 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64  lite3ExprCodeAnd
22e20 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78  Cache(Parse*, Ex
22e30 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
22e40 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45 78  qlite3ExprCodeEx
22e50 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45  prList(Parse*, E
22e60 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 75  xprList*, int, u
22e70 38 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  8);.#define SQLI
22e80 54 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20  TE_ECEL_DUP     
22e90 20 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20   0x01  /* Deep, 
22ea0 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69  not shallow copi
22eb0 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
22ec0 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52  LITE_ECEL_FACTOR
22ed0 20 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74     0x02  /* Fact
22ee0 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20  or out constant 
22ef0 74 65 72 6d 73 20 2a 2f 0a 76 6f 69 64 20 73 71  terms */.void sq
22f00 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28  lite3ExprIfTrue(
22f10 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
22f20 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
22f30 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73  qlite3ExprIfFals
22f40 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
22f50 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c   int, int);.Tabl
22f60 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61  e *sqlite3FindTa
22f70 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ble(sqlite3*,con
22f80 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
22f90 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  char*);.Table *s
22fa0 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
22fb0 65 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56  e(Parse*,int isV
22fc0 69 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  iew,const char*,
22fd0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54   const char*);.T
22fe0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
22ff0 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72  ateTableItem(Par
23000 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 73  se*,int isView,s
23010 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
23020 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71  em *);.Index *sq
23030 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73  lite3FindIndex(s
23040 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
23050 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
23060 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
23070 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61  nlinkAndDeleteTa
23080 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ble(sqlite3*,int
23090 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
230a0 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
230b0 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
230c0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
230d0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
230e0 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61  sqlite3Vacuum(Pa
230f0 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
23100 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72  e3RunVacuum(char
23110 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63  **, sqlite3*);.c
23120 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65  har *sqlite3Name
23130 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65  FromToken(sqlite
23140 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  3*, Token*);.int
23150 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70   sqlite3ExprComp
23160 61 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a  are(Expr*, Expr*
23170 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
23180 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61  te3ExprListCompa
23190 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  re(ExprList*, Ex
231a0 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69  prList*, int);.i
231b0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d  nt sqlite3ExprIm
231c0 70 6c 69 65 73 45 78 70 72 28 45 78 70 72 2a 2c  pliesExpr(Expr*,
231d0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
231e0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e  id sqlite3ExprAn
231f0 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73 28  alyzeAggregates(
23200 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
23210 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
23220 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67  e3ExprAnalyzeAgg
23230 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74  List(NameContext
23240 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  *,ExprList*);.in
23250 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f  t sqlite3Functio
23260 6e 55 73 65 73 54 68 69 73 53 72 63 28 45 78 70  nUsesThisSrc(Exp
23270 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56  r*, SrcList*);.V
23280 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56  dbe *sqlite3GetV
23290 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  dbe(Parse*);.voi
232a0 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76  d sqlite3PrngSav
232b0 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f  eState(void);.vo
232c0 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65  id sqlite3PrngRe
232d0 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29  storeState(void)
232e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
232f0 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65  llbackAll(sqlite
23300 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
23310 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
23320 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e  chema(Parse*, in
23330 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
23340 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53  CodeVerifyNamedS
23350 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f  chema(Parse*, co
23360 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a  nst char *zDb);.
23370 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
23380 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  nTransaction(Par
23390 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
233a0 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61  sqlite3CommitTra
233b0 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29  nsaction(Parse*)
233c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
233d0 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f  llbackTransactio
233e0 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  n(Parse*);.void 
233f0 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
23400 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f  (Parse*, int, To
23410 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
23420 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e  te3CloseSavepoin
23430 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76  ts(sqlite3 *);.v
23440 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65  oid sqlite3Leave
23450 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d  MutexAndCloseZom
23460 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  bie(sqlite3*);.i
23470 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
23480 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b  Constant(Expr*);
23490 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
234a0 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69  IsConstantNotJoi
234b0 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  n(Expr*);.int sq
234c0 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
234d0 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78  antOrFunction(Ex
234e0 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  pr*, u8);.int sq
234f0 6c 69 74 65 33 45 78 70 72 49 73 54 61 62 6c 65  lite3ExprIsTable
23500 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69  Constant(Expr*,i
23510 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
23520 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78  ExprIsInteger(Ex
23530 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
23540 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65  sqlite3ExprCanBe
23550 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a  Null(const Expr*
23560 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
23570 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74  prNeedsNoAffinit
23580 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78  yChange(const Ex
23590 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20  pr*, char);.int 
235a0 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63  sqlite3IsRowid(c
235b0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
235c0 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
235d0 65 52 6f 77 44 65 6c 65 74 65 28 50 61 72 73 65  eRowDelete(Parse
235e0 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72  *,Table*,Trigger
235f0 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31  *,int,int,int,i1
23600 36 2c 75 38 2c 75 38 2c 75 38 29 3b 0a 76 6f 69  6,u8,u8,u8);.voi
23610 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
23620 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28  eRowIndexDelete(
23630 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
23640 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b  int, int, int*);
23650 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65  .int sqlite3Gene
23660 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72  rateIndexKey(Par
23670 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74  se*, Index*, int
23680 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
23690 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Index*,int);.vo
236a0 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
236b0 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61  ePartIdxLabel(Pa
236c0 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
236d0 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43  sqlite3GenerateC
236e0 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28  onstraintChecks(
236f0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
23700 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  t*,int,int,int,i
23710 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt,.            
23720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23730 20 20 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69           u8,u8,i
23740 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73  nt,int*);.void s
23750 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e  qlite3CompleteIn
23760 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54  sertion(Parse*,T
23770 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  able*,int,int,in
23780 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69  t,int*,int,int,i
23790 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
237a0 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69  OpenTableAndIndi
237b0 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ces(Parse*, Tabl
237c0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  e*, int, int, u8
237d0 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  *, int*, int*);.
237e0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
237f0 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28  nWriteOperation(
23800 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
23810 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
23820 75 6c 74 69 57 72 69 74 65 28 50 61 72 73 65 2a  ultiWrite(Parse*
23830 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
23840 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b  ayAbort(Parse*);
23850 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c  .void sqlite3Hal
23860 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  tConstraint(Pars
23870 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68  e*, int, int, ch
23880 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f  ar*, i8, u8);.vo
23890 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65  id sqlite3Unique
238a0 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
238b0 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b  *, int, Index*);
238c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
238d0 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  idConstraint(Par
238e0 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a  se*, int, Table*
238f0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
23900 45 78 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a  ExprDup(sqlite3*
23910 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70  ,Expr*,int);.Exp
23920 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
23930 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  prListDup(sqlite
23940 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  3*,ExprList*,int
23950 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
23960 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73 71  te3SrcListDup(sq
23970 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c  lite3*,SrcList*,
23980 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71  int);.IdList *sq
23990 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70 28 73  lite3IdListDup(s
239a0 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29  qlite3*,IdList*)
239b0 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65  ;.Select *sqlite
239c0 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74  3SelectDup(sqlit
239d0 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29  e3*,Select*,int)
239e0 3b 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43  ;.#if SELECTTRAC
239f0 45 5f 45 4e 41 42 4c 45 44 0a 76 6f 69 64 20 73  E_ENABLED.void s
23a00 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e  qlite3SelectSetN
23a10 61 6d 65 28 53 65 6c 65 63 74 2a 2c 63 6f 6e 73  ame(Select*,cons
23a20 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  t char*);.#else.
23a30 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23a40 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 41 2c  SelectSetName(A,
23a50 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  B).#endif.void s
23a60 71 6c 69 74 65 33 46 75 6e 63 44 65 66 49 6e 73  qlite3FuncDefIns
23a70 65 72 74 28 46 75 6e 63 44 65 66 48 61 73 68 2a  ert(FuncDefHash*
23a80 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e  , FuncDef*);.Fun
23a90 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e  cDef *sqlite3Fin
23aa0 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
23ab0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  3*,const char*,i
23ac0 6e 74 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76  nt,int,u8,u8);.v
23ad0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
23ae0 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  terBuiltinFuncti
23af0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ons(sqlite3*);.v
23b00 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
23b10 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74  terDateTimeFunct
23b20 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
23b30 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
23b40 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28  GlobalFunctions(
23b50 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74  void);.int sqlit
23b60 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28  e3SafetyCheckOk(
23b70 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
23b80 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
23b90 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65  kSickOrOk(sqlite
23ba0 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
23bb0 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61  3ChangeCookie(Pa
23bc0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66  rse*, int);..#if
23bd0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
23be0 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21  _OMIT_VIEW) && !
23bf0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
23c00 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69  MIT_TRIGGER).voi
23c10 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61  d sqlite3Materia
23c20 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c  lizeView(Parse*,
23c30 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
23c40 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  int);.#endif..#i
23c50 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
23c60 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64  T_TRIGGER.  void
23c70 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69   sqlite3BeginTri
23c80 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b  gger(Parse*, Tok
23c90 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
23ca0 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69  nt,IdList*,SrcLi
23cb0 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
23cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cd0 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b  Expr*,int, int);
23ce0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
23cf0 69 6e 69 73 68 54 72 69 67 67 65 72 28 50 61 72  inishTrigger(Par
23d00 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  se*, TriggerStep
23d10 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f  *, Token*);.  vo
23d20 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
23d30 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72  igger(Parse*, Sr
23d40 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  cList*, int);.  
23d50 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
23d60 54 72 69 67 67 65 72 50 74 72 28 50 61 72 73 65  TriggerPtr(Parse
23d70 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
23d80 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33  Trigger *sqlite3
23d90 54 72 69 67 67 65 72 73 45 78 69 73 74 28 50 61  TriggersExist(Pa
23da0 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  rse *, Table*, i
23db0 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  nt, ExprList*, i
23dc0 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72  nt *pMask);.  Tr
23dd0 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72  igger *sqlite3Tr
23de0 69 67 67 65 72 4c 69 73 74 28 50 61 72 73 65 20  iggerList(Parse 
23df0 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76  *, Table *);.  v
23e00 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
23e10 6f 77 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  owTrigger(Parse*
23e20 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74  , Trigger *, int
23e30 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
23e40 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20  , Table *,.     
23e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e60 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c         int, int,
23e70 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
23e80 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
23e90 67 65 72 44 69 72 65 63 74 28 50 61 72 73 65 20  gerDirect(Parse 
23ea0 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61  *, Trigger *, Ta
23eb0 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ble *, int, int,
23ec0 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
23ed0 6c 69 74 65 56 69 65 77 54 72 69 67 67 65 72 73  liteViewTriggers
23ee0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
23ef0 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70   Expr*, int, Exp
23f00 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20  rList*);.  void 
23f10 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
23f20 67 67 65 72 53 74 65 70 28 73 71 6c 69 74 65 33  ggerStep(sqlite3
23f30 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29  *, TriggerStep*)
23f40 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
23f50 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 53  *sqlite3TriggerS
23f60 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74 65  electStep(sqlite
23f70 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54  3*,Select*);.  T
23f80 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
23f90 74 65 33 54 72 69 67 67 65 72 49 6e 73 65 72 74  te3TriggerInsert
23fa0 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
23fb0 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20  ken*, IdList*,. 
23fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fe0 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c 75         Select*,u
23ff0 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  8);.  TriggerSte
24000 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
24010 72 55 70 64 61 74 65 53 74 65 70 28 73 71 6c 69  rUpdateStep(sqli
24020 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  te3*,Token*,Expr
24030 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38  List*, Expr*, u8
24040 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
24050 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
24060 44 65 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74  DeleteStep(sqlit
24070 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72  e3*,Token*, Expr
24080 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
24090 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  e3DeleteTrigger(
240a0 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65  sqlite3*, Trigge
240b0 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
240c0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
240d0 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65  teTrigger(sqlite
240e0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
240f0 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74  r*);.  u32 sqlit
24100 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b  e3TriggerColmask
24110 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a  (Parse*,Trigger*
24120 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69  ,ExprList*,int,i
24130 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a  nt,Table*,int);.
24140 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24150 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29  ParseToplevel(p)
24160 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c   ((p)->pToplevel
24170 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65   ? (p)->pTopleve
24180 6c 20 3a 20 28 70 29 29 0a 23 65 6c 73 65 0a 23  l : (p)).#else.#
24190 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
241a0 72 69 67 67 65 72 73 45 78 69 73 74 28 42 2c 43  riggersExist(B,C
241b0 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69  ,D,E,F) 0.# defi
241c0 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  ne sqlite3Delete
241d0 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64  Trigger(A,B).# d
241e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f  efine sqlite3Dro
241f0 70 54 72 69 67 67 65 72 50 74 72 28 41 2c 42 29  pTriggerPtr(A,B)
24200 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24210 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
24220 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23  Trigger(A,B,C).#
24230 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
24240 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c  odeRowTrigger(A,
24250 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29  B,C,D,E,F,G,H,I)
24260 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24270 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44  3CodeRowTriggerD
24280 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c  irect(A,B,C,D,E,
24290 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  F).# define sqli
242a0 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 58  te3TriggerList(X
242b0 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20  , Y) 0.# define 
242c0 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c  sqlite3ParseTopl
242d0 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69  evel(p) p.# defi
242e0 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
242f0 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44  rColmask(A,B,C,D
24300 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66  ,E,F,G) 0.#endif
24310 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69  ..int sqlite3Joi
24320 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  nType(Parse*, To
24330 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ken*, Token*, To
24340 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
24350 74 65 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e  te3CreateForeign
24360 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Key(Parse*, Expr
24370 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45  List*, Token*, E
24380 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  xprList*, int);.
24390 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 65  void sqlite3Defe
243a0 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73  rForeignKey(Pars
243b0 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65  e*, int);.#ifnde
243c0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
243d0 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f  THORIZATION.  vo
243e0 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  id sqlite3AuthRe
243f0 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ad(Parse*,Expr*,
24400 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a  Schema*,SrcList*
24410 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
24420 41 75 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a  AuthCheck(Parse*
24430 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72  ,int, const char
24440 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
24450 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
24460 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
24470 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72 73  ContextPush(Pars
24480 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a  e*, AuthContext*
24490 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
244a0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
244b0 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74  thContextPop(Aut
244c0 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e  hContext*);.  in
244d0 74 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  t sqlite3AuthRea
244e0 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e  dCol(Parse*, con
244f0 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74  st char *, const
24500 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23   char *, int);.#
24510 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
24520 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 61 2c  lite3AuthRead(a,
24530 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20  b,c,d).# define 
24540 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b  sqlite3AuthCheck
24550 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53  (a,b,c,d,e)    S
24560 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e  QLITE_OK.# defin
24570 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  e sqlite3AuthCon
24580 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a  textPush(a,b,c).
24590 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
245a0 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61  AuthContextPop(a
245b0 29 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23  )  ((void)(a)).#
245c0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
245d0 65 33 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c  e3Attach(Parse*,
245e0 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45   Expr*, Expr*, E
245f0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
24600 74 65 33 44 65 74 61 63 68 28 50 61 72 73 65 2a  te3Detach(Parse*
24610 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
24620 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44 62  qlite3FixInit(Db
24630 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20  Fixer*, Parse*, 
24640 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
24650 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b  , const Token*);
24660 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53  .int sqlite3FixS
24670 72 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c  rcList(DbFixer*,
24680 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20   SrcList*);.int 
24690 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74  sqlite3FixSelect
246a0 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63  (DbFixer*, Selec
246b0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
246c0 46 69 78 45 78 70 72 28 44 62 46 69 78 65 72 2a  FixExpr(DbFixer*
246d0 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
246e0 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69 73 74  lite3FixExprList
246f0 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c  (DbFixer*, ExprL
24700 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
24710 65 33 46 69 78 54 72 69 67 67 65 72 53 74 65 70  e3FixTriggerStep
24720 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67  (DbFixer*, Trigg
24730 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71  erStep*);.int sq
24740 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20  lite3AtoF(const 
24750 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a  char *z, double*
24760 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
24770 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28  sqlite3GetInt32(
24780 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
24790 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
247a0 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a  Atoi(const char*
247b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74  );.int sqlite3Ut
247c0 66 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74  f16ByteLen(const
247d0 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e   void *pData, in
247e0 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71  t nChar);.int sq
247f0 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e  lite3Utf8CharLen
24800 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61  (const char *pDa
24810 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a  ta, int nByte);.
24820 75 33 32 20 73 71 6c 69 74 65 33 55 74 66 38 52  u32 sqlite3Utf8R
24830 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b  ead(const u8**);
24840 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
24850 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45  ogEst(u64);.LogE
24860 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
24870 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73  Add(LogEst,LogEs
24880 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
24890 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
248a0 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69  ABLE.LogEst sqli
248b0 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75  te3LogEstFromDou
248c0 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e  ble(double);.#en
248d0 64 69 66 0a 75 36 34 20 73 71 6c 69 74 65 33 4c  dif.u64 sqlite3L
248e0 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73  ogEstToInt(LogEs
248f0 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69  t);../*.** Routi
24900 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20  nes to read and 
24910 77 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c  write variable-l
24920 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20  ength integers. 
24930 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a   These used to.*
24940 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63  * be defined loc
24950 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65  ally, but now we
24960 20 75 73 65 20 74 68 65 20 76 61 72 69 6e 74 20   use the varint 
24970 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20  routines in the 
24980 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a  util.c.** file..
24990 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75  */.int sqlite3Pu
249a0 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64  tVarint(unsigned
249b0 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38   char*, u64);.u8
249c0 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
249d0 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  t(const unsigned
249e0 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b   char *, u64 *);
249f0 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61  .u8 sqlite3GetVa
24a00 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73  rint32(const uns
24a10 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33  igned char *, u3
24a20 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  2 *);.int sqlite
24a30 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76  3VarintLen(u64 v
24a40 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f  );../*.** The co
24a50 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72  mmon case is for
24a60 20 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20   a varint to be 
24a70 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20  a single byte.  
24a80 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a  They following.*
24a90 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20  * macros handle 
24aa0 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  the common case 
24ab0 77 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64  without a proced
24ac0 75 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68  ure call, but th
24ad0 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70  en call.** the p
24ae0 72 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72  rocedure for lar
24af0 67 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a  ger varints..*/.
24b00 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e  #define getVarin
24b10 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75  t32(A,B)  \.  (u
24b20 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38  8)((*(A)<(u8)0x8
24b30 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41  0)?((B)=(u32)*(A
24b40 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56  )),1:sqlite3GetV
24b50 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32  arint32((A),(u32
24b60 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e   *)&(B))).#defin
24b70 65 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c  e putVarint32(A,
24b80 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75  B)  \.  (u8)(((u
24b90 33 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30  32)(B)<(u32)0x80
24ba0 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65  )?(*(A)=(unsigne
24bb0 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a  d char)(B)),1:\.
24bc0 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69    sqlite3PutVari
24bd0 6e 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65  nt((A),(B))).#de
24be0 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20  fine getVarint  
24bf0 20 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69    sqlite3GetVari
24c00 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  nt.#define putVa
24c10 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50  rint    sqlite3P
24c20 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74  utVarint...const
24c30 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e   char *sqlite3In
24c40 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 56  dexAffinityStr(V
24c50 64 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b  dbe *, Index *);
24c60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62  .void sqlite3Tab
24c70 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a  leAffinity(Vdbe*
24c80 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
24c90 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70  char sqlite3Comp
24ca0 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72  areAffinity(Expr
24cb0 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66   *pExpr, char af
24cc0 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  f2);.int sqlite3
24cd0 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28  IndexAffinityOk(
24ce0 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
24cf0 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b  r idx_affinity);
24d00 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70  .char sqlite3Exp
24d10 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  rAffinity(Expr *
24d20 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69  pExpr);.int sqli
24d30 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20  te3Atoi64(const 
24d40 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74  char*, i64*, int
24d50 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
24d60 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28  e3DecOrHexToI64(
24d70 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34  const char*, i64
24d80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24d90 45 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c  ErrorWithMsg(sql
24da0 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
24db0 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f  t char*,...);.vo
24dc0 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  id sqlite3Error(
24dd0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
24de0 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54  oid *sqlite3HexT
24df0 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20  oBlob(sqlite3*, 
24e00 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
24e10 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65  nt n);.u8 sqlite
24e20 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29  3HexToInt(int h)
24e30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f  ;.int sqlite3Two
24e40 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  PartName(Parse *
24e50 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e  , Token *, Token
24e60 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a   *, Token **);..
24e70 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
24e80 54 45 5f 54 45 53 54 29 20 0a 63 6f 6e 73 74 20  TE_TEST) .const 
24e90 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
24ea0 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69  Name(int);.#endi
24eb0 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  f..const char *s
24ec0 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74  qlite3ErrStr(int
24ed0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
24ee0 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a  adSchema(Parse *
24ef0 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71  pParse);.CollSeq
24f00 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c   *sqlite3FindCol
24f10 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38  lSeq(sqlite3*,u8
24f20 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72   enc, const char
24f30 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20  *,int);.CollSeq 
24f40 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f  *sqlite3LocateCo
24f50 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
24f60 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  rse, const char*
24f70 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  zName);.CollSeq 
24f80 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c  *sqlite3ExprColl
24f90 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
24fa0 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b  e, Expr *pExpr);
24fb0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
24fc0 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65  prAddCollateToke
24fd0 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  n(Parse *pParse,
24fe0 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   Expr*, const To
24ff0 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ken*);.Expr *sql
25000 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61  ite3ExprAddColla
25010 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c  teString(Parse*,
25020 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  Expr*,const char
25030 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
25040 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65  3ExprSkipCollate
25050 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
25060 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71  ite3CheckCollSeq
25070 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65  (Parse *, CollSe
25080 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  q *);.int sqlite
25090 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65  3CheckObjectName
250a0 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20  (Parse *, const 
250b0 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71  char *);.void sq
250c0 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
250d0 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69  ges(sqlite3 *, i
250e0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
250f0 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  AddInt64(i64*,i6
25100 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  4);.int sqlite3S
25110 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ubInt64(i64*,i64
25120 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  );.int sqlite3Mu
25130 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  lInt64(i64*,i64)
25140 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73  ;.int sqlite3Abs
25150 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64  Int32(int);.#ifd
25160 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
25170 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20  _8_3_NAMES.void 
25180 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
25190 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  x3(const char*, 
251a0 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  char*);.#else.# 
251b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69  define sqlite3Fi
251c0 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23  leSuffix3(X,Y).#
251d0 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33  endif.u8 sqlite3
251e0 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74  GetBoolean(const
251f0 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63   char *z,u8);..c
25200 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74  onst void *sqlit
25210 65 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69  e3ValueText(sqli
25220 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
25230 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75  .int sqlite3Valu
25240 65 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76  eBytes(sqlite3_v
25250 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64  alue*, u8);.void
25260 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
25270 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  Str(sqlite3_valu
25280 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76  e*, int, const v
25290 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20 20 20  oid *,u8, .     
252a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252b0 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a     void(*)(void*
252c0 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ));.void sqlite3
252d0 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c  ValueSetNull(sql
252e0 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f  ite3_value*);.vo
252f0 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  id sqlite3ValueF
25300 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ree(sqlite3_valu
25310 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c  e*);.sqlite3_val
25320 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  ue *sqlite3Value
25330 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a  New(sqlite3 *);.
25340 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66  char *sqlite3Utf
25350 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c  16to8(sqlite3 *,
25360 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
25370 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
25380 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  te3ValueFromExpr
25390 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72  (sqlite3 *, Expr
253a0 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69   *, u8, u8, sqli
253b0 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76  te3_value **);.v
253c0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
253d0 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71  ApplyAffinity(sq
253e0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75  lite3_value *, u
253f0 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20  8, u8);.#ifndef 
25400 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
25410 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  ION.extern const
25420 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
25430 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70  qlite3OpcodeProp
25440 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  erty[];.extern c
25450 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
25460 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54  ar sqlite3UpperT
25470 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e  oLower[];.extern
25480 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
25490 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70  char sqlite3Ctyp
254a0 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  eMap[];.extern c
254b0 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74  onst Token sqlit
254c0 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65  e3IntTokens[];.e
254d0 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44  xtern SQLITE_WSD
254e0 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43   struct Sqlite3C
254f0 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e  onfig sqlite3Con
25500 66 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49  fig;.extern SQLI
25510 54 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48 61  TE_WSD FuncDefHa
25520 73 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  sh sqlite3Global
25530 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64  Functions;.#ifnd
25540 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
25550 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71  SD.extern int sq
25560 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65  lite3PendingByte
25570 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  ;.#endif.#endif.
25580 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74  void sqlite3Root
25590 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65  PageMoved(sqlite
255a0 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  3*, int, int, in
255b0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
255c0 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  Reindex(Parse*, 
255d0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
255e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
255f0 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  erFunctions(void
25600 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
25610 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28  lterRenameTable(
25620 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
25630 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
25640 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63  qlite3GetToken(c
25650 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
25660 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f  ar *, int *);.vo
25670 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64  id sqlite3Nested
25680 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f  Parse(Parse*, co
25690 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
256a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
256b0 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
256c0 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b  ments(sqlite3*);
256d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65  .int sqlite3Code
256e0 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 20  Subselect(Parse 
256f0 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20  *, Expr *, int, 
25700 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
25710 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72  e3SelectPrep(Par
25720 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
25730 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74  meContext*);.int
25740 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61   sqlite3MatchSpa
25750 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72  nName(const char
25760 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
25770 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
25780 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
25790 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70  qlite3ResolveExp
257a0 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65  rNames(NameConte
257b0 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  xt*, Expr*);.voi
257c0 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
257d0 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73  SelectNames(Pars
257e0 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d  e*, Select*, Nam
257f0 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64  eContext*);.void
25800 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53   sqlite3ResolveS
25810 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61 72  elfReference(Par
25820 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45  se*,Table*,int,E
25830 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  xpr*,ExprList*);
25840 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f  .int sqlite3Reso
25850 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28  lveOrderGroupBy(
25860 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
25870 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
25880 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
25890 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61  qlite3ColumnDefa
258a0 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c  ult(Vdbe *, Tabl
258b0 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  e *, int, int);.
258c0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
258d0 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e  rFinishAddColumn
258e0 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
258f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25900 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c  AlterBeginAddCol
25910 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63  umn(Parse *, Src
25920 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71  List *);.CollSeq
25930 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c   *sqlite3GetColl
25940 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20  Seq(Parse*, u8, 
25950 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74  CollSeq *, const
25960 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71   char*);.char sq
25970 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70  lite3AffinityTyp
25980 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75  e(const char*, u
25990 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
259a0 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c  3Analyze(Parse*,
259b0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
259c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76  ;.int sqlite3Inv
259d0 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42  okeBusyHandler(B
259e0 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e  usyHandler*);.in
259f0 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28  t sqlite3FindDb(
25a00 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
25a10 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
25a20 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33  ndDbName(sqlite3
25a30 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
25a40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e  );.int sqlite3An
25a50 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74  alysisLoad(sqlit
25a60 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f  e3*,int iDB);.vo
25a70 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
25a80 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c  IndexSamples(sql
25a90 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76  ite3*,Index*);.v
25aa0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75  oid sqlite3Defau
25ab0 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29  ltRowEst(Index*)
25ac0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
25ad0 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69  gisterLikeFuncti
25ae0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ons(sqlite3*, in
25af0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  t);.int sqlite3I
25b00 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71  sLikeFunction(sq
25b10 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74  lite3*,Expr*,int
25b20 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  *,char*);.void s
25b30 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69 6c  qlite3MinimumFil
25b40 65 46 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c 20  eFormat(Parse*, 
25b50 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
25b60 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65  sqlite3SchemaCle
25b70 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65  ar(void *);.Sche
25b80 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d  ma *sqlite3Schem
25b90 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20  aGet(sqlite3 *, 
25ba0 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71  Btree *);.int sq
25bb0 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64  lite3SchemaToInd
25bc0 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ex(sqlite3 *db, 
25bd0 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e  Schema *);.KeyIn
25be0 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
25bf0 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a  foAlloc(sqlite3*
25c00 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
25c10 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e  sqlite3KeyInfoUn
25c20 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b  ref(KeyInfo*);.K
25c30 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
25c40 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66  eyInfoRef(KeyInf
25c50 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71  o*);.KeyInfo *sq
25c60 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e  lite3KeyInfoOfIn
25c70 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65  dex(Parse*, Inde
25c80 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  x*);.#ifdef SQLI
25c90 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c  TE_DEBUG.int sql
25ca0 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69  ite3KeyInfoIsWri
25cb0 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29  teable(KeyInfo*)
25cc0 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
25cd0 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73  ite3CreateFunc(s
25ce0 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
25cf0 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  char *, int, int
25d00 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f 69  , void *, .  voi
25d10 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
25d20 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
25d30 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20  e3_value **),.  
25d40 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
25d50 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
25d60 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
25d70 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
25d80 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46  3_context*),.  F
25d90 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70  uncDestructor *p
25da0 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 69 6e  Destructor.);.in
25db0 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  t sqlite3ApiExit
25dc0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e  (sqlite3 *db, in
25dd0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
25de0 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28  penTempDatabase(
25df0 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  Parse *);..void 
25e00 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49  sqlite3StrAccumI
25e10 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 63  nit(StrAccum*, c
25e20 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  har*, int, int);
25e30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
25e40 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41  AccumAppend(StrA
25e50 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ccum*,const char
25e60 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
25e70 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65  ite3StrAccumAppe
25e80 6e 64 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c  ndAll(StrAccum*,
25e90 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
25ea0 69 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64  id sqlite3Append
25eb0 43 68 61 72 28 53 74 72 41 63 63 75 6d 2a 2c 69  Char(StrAccum*,i
25ec0 6e 74 2c 63 68 61 72 29 3b 0a 63 68 61 72 20 2a  nt,char);.char *
25ed0 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46  sqlite3StrAccumF
25ee0 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29  inish(StrAccum*)
25ef0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
25f00 72 41 63 63 75 6d 52 65 73 65 74 28 53 74 72 41  rAccumReset(StrA
25f10 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ccum*);.void sql
25f20 69 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e  ite3SelectDestIn
25f30 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69  it(SelectDest*,i
25f40 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  nt,int);.Expr *s
25f50 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75  qlite3CreateColu
25f60 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a  mnExpr(sqlite3 *
25f70 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74  , SrcList *, int
25f80 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71  , int);..void sq
25f90 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61  lite3BackupResta
25fa0 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  rt(sqlite3_backu
25fb0 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  p *);.void sqlit
25fc0 65 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73  e3BackupUpdate(s
25fd0 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c  qlite3_backup *,
25fe0 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20   Pgno, const u8 
25ff0 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  *);..#ifdef SQLI
26000 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
26010 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71  OR_STAT4.void sq
26020 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63  lite3AnalyzeFunc
26030 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74  tions(void);.int
26040 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f   sqlite3Stat4Pro
26050 62 65 53 65 74 56 61 6c 75 65 28 50 61 72 73 65  beSetValue(Parse
26060 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65  *,Index*,Unpacke
26070 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c  dRecord**,Expr*,
26080 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e  u8,int,int*);.in
26090 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 56 61  t sqlite3Stat4Va
260a0 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73  lueFromExpr(Pars
260b0 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73  e*, Expr*, u8, s
260c0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
260d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
260e0 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61  t4ProbeFree(Unpa
260f0 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e  ckedRecord*);.in
26100 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f  t sqlite3Stat4Co
26110 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63  lumn(sqlite3*, c
26120 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
26130 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61   int, sqlite3_va
26140 6c 75 65 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  lue**);.#endif..
26150 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
26160 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e  ace to the LEMON
26170 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65  -generated parse
26180 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74  r.*/.void *sqlit
26190 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f  e3ParserAlloc(vo
261a0 69 64 2a 28 2a 29 28 75 36 34 29 29 3b 0a 76 6f  id*(*)(u64));.vo
261b0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
261c0 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64  Free(void*, void
261d0 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
261e0 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28  d sqlite3Parser(
261f0 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  void*, int, Toke
26200 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64  n, Parse*);.#ifd
26210 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41  ef YYTRACKMAXSTA
26220 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71  CKDEPTH.  int sq
26230 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63 6b  lite3ParserStack
26240 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e  Peak(void*);.#en
26250 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
26260 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69  3AutoLoadExtensi
26270 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
26280 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
26290 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f  IT_LOAD_EXTENSIO
262a0 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  N.  void sqlite3
262b0 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
262c0 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65  sqlite3*);.#else
262d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
262e0 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
262f0 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  (X).#endif..#ifn
26300 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
26310 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76  SHARED_CACHE.  v
26320 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
26330 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e  Lock(Parse *, in
26340 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73  t, int, u8, cons
26350 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65  t char *);.#else
26360 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
26370 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c  e3TableLock(v,w,
26380 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23  x,y,z).#endif..#
26390 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
263a0 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55  T.  int sqlite3U
263b0 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20  tf8To8(unsigned 
263c0 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
263d0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
263e0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
263f0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
26400 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20  3VtabClear(Y).# 
26410 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
26420 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c  tabSync(X,Y) SQL
26430 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
26440 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
26450 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  back(X).#  defin
26460 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d  e sqlite3VtabCom
26470 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65  mit(X).#  define
26480 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
26490 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66 69  nc(db) 0.#  defi
264a0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  ne sqlite3VtabLo
264b0 63 6b 28 58 29 20 0a 23 20 20 64 65 66 69 6e 65  ck(X) .#  define
264c0 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
264d0 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
264e0 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
264f0 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69  kList(X).#  defi
26500 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61  ne sqlite3VtabSa
26510 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29  vepoint(X, Y, Z)
26520 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65   SQLITE_OK.#  de
26530 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56  fine sqlite3GetV
26540 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54  Table(X,Y)  ((VT
26550 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20  able*)0).#else. 
26560 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
26570 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20  abClear(sqlite3 
26580 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  *db, Table*);.  
26590 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
265a0 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69  bDisconnect(sqli
265b0 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a  te3 *db, Table *
265c0 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  p);.   int sqlit
265d0 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74  e3VtabSync(sqlit
265e0 65 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a  e3 *db, Vdbe*);.
265f0 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
26600 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74  abRollback(sqlit
26610 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20  e3 *db);.   int 
26620 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
26630 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  t(sqlite3 *db);.
26640 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
26650 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a  tabLock(VTable *
26660 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
26670 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61  e3VtabUnlock(VTa
26680 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
26690 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
266a0 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b  kList(sqlite3*);
266b0 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
266c0 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c  tabSavepoint(sql
266d0 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  ite3 *, int, int
266e0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
266f0 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
26700 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65  sg(Vdbe*, sqlite
26710 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61  3_vtab*);.   VTa
26720 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56  ble *sqlite3GetV
26730 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20  Table(sqlite3*, 
26740 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69  Table*);.#  defi
26750 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e  ne sqlite3VtabIn
26760 53 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e  Sync(db) ((db)->
26770 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62  nVTrans>0 && (db
26780 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23  )->aVTrans==0).#
26790 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
267a0 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62  e3VtabMakeWritab
267b0 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  le(Parse*,Table*
267c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
267d0 74 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61  tabBeginParse(Pa
267e0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
267f0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e  ken*, Token*, in
26800 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
26810 56 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28  VtabFinishParse(
26820 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
26830 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
26840 62 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29  bArgInit(Parse*)
26850 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
26860 61 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73  abArgExtend(Pars
26870 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  e*, Token*);.int
26880 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
26890 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c  Create(sqlite3*,
268a0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
268b0 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e   *, char **);.in
268c0 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
268d0 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c  lConnect(Parse*,
268e0 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71   Table*);.int sq
268f0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73  lite3VtabCallDes
26900 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69  troy(sqlite3*, i
26910 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
26920 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
26930 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20  abBegin(sqlite3 
26940 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75  *, VTable *);.Fu
26950 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74  ncDef *sqlite3Vt
26960 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69  abOverloadFuncti
26970 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e  on(sqlite3 *,Fun
26980 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c  cDef*, int nArg,
26990 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
269a0 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63  lite3InvalidFunc
269b0 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tion(sqlite3_con
269c0 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
269d0 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69  3_value**);.sqli
269e0 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65  te3_int64 sqlite
269f0 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65  3StmtCurrentTime
26a00 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
26a10 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
26a20 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65  dbeParameterInde
26a30 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63  x(Vdbe*, const c
26a40 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  har*, int);.int 
26a50 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42  sqlite3TransferB
26a60 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f  indings(sqlite3_
26a70 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f  stmt *, sqlite3_
26a80 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71  stmt *);.void sq
26a90 6c 69 74 65 33 50 61 72 73 65 72 52 65 73 65 74  lite3ParserReset
26aa0 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71  (Parse*);.int sq
26ab0 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28 56  lite3Reprepare(V
26ac0 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dbe*);.void sqli
26ad0 74 65 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b  te3ExprListCheck
26ae0 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45  Length(Parse*, E
26af0 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20  xprList*, const 
26b00 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  char*);.CollSeq 
26b10 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f  *sqlite3BinaryCo
26b20 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72  mpareCollSeq(Par
26b30 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78  se *, Expr *, Ex
26b40 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  pr *);.int sqlit
26b50 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63  e3TempInMemory(c
26b60 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a  onst sqlite3*);.
26b70 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
26b80 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61  te3JournalModena
26b90 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  me(int);.#ifndef
26ba0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
26bb0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68  .  int sqlite3Ch
26bc0 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  eckpoint(sqlite3
26bd0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
26be0 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20  *, int*);.  int 
26bf0 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c  sqlite3WalDefaul
26c00 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69  tHook(void*,sqli
26c10 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
26c20 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69  ,int);.#endif.#i
26c30 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
26c40 54 5f 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71  T_CTE.  With *sq
26c50 6c 69 74 65 33 57 69 74 68 41 64 64 28 50 61 72  lite3WithAdd(Par
26c60 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a  se*,With*,Token*
26c70 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63  ,ExprList*,Selec
26c80 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
26c90 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 73 71  te3WithDelete(sq
26ca0 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20  lite3*,With*);. 
26cb0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74   void sqlite3Wit
26cc0 68 50 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69  hPush(Parse*, Wi
26cd0 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a  th*, u8);.#else.
26ce0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57  #define sqlite3W
26cf0 69 74 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23  ithPush(x,y,z).#
26d00 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69  define sqlite3Wi
26d10 74 68 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65  thDelete(x,y).#e
26d20 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61  ndif../* Declara
26d30 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69  tions for functi
26d40 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41  ons in fkey.c. A
26d50 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20  ll of these are 
26d60 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e  replaced by.** n
26d70 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f  o-op macros if O
26d80 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
26d90 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74  is defined. In t
26da0 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65  his case no fore
26db0 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74  ign.** key funct
26dc0 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69  ionality is avai
26dd0 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54  lable. If OMIT_T
26de0 52 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65  RIGGER is define
26df0 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f  d but.** OMIT_FO
26e00 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74  REIGN_KEY is not
26e10 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74  , only some of t
26e20 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  he functions are
26e30 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20   no-oped. In.** 
26e40 74 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67  this case foreig
26e50 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65  n keys are parse
26e60 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20  d, but no other 
26e70 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
26e80 20 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65   .** provided (e
26e90 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b  nforcement of FK
26ea0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71   constraints req
26eb0 75 69 72 65 73 20 74 68 65 20 74 72 69 67 67 65  uires the trigge
26ec0 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a  rs sub-system)..
26ed0 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
26ee0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
26ef0 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66  IGN_KEY) && !def
26f00 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
26f10 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64  _TRIGGER).  void
26f20 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28   sqlite3FkCheck(
26f30 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
26f40 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
26f50 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
26f60 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28  ite3FkDropTable(
26f70 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20  Parse*, SrcList 
26f80 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f  *, Table*);.  vo
26f90 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69  id sqlite3FkActi
26fa0 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ons(Parse*, Tabl
26fb0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
26fc0 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
26fd0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52    int sqlite3FkR
26fe0 65 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20  equired(Parse*, 
26ff0 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e  Table*, int*, in
27000 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65  t);.  u32 sqlite
27010 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65  3FkOldmask(Parse
27020 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b  *, Table*);.  FK
27030 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66  ey *sqlite3FkRef
27040 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29  erences(Table *)
27050 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
27060 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f  e sqlite3FkActio
27070 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a  ns(a,b,c,d,e,f).
27080 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
27090 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64  3FkCheck(a,b,c,d
270a0 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20  ,e,f).  #define 
270b0 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62  sqlite3FkDropTab
270c0 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66  le(a,b,c).  #def
270d0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64  ine sqlite3FkOld
270e0 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20  mask(a,b)       
270f0 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71    0.  #define sq
27100 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28  lite3FkRequired(
27110 61 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 23 65  a,b,c,d)    0.#e
27120 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
27130 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
27140 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  _KEY.  void sqli
27150 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69  te3FkDelete(sqli
27160 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  te3 *, Table*);.
27170 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c    int sqlite3FkL
27180 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65  ocateIndex(Parse
27190 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49  *,Table*,FKey*,I
271a0 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23  ndex**,int**);.#
271b0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
271c0 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61  qlite3FkDelete(a
271d0 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,b).  #define sq
271e0 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
271f0 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65  ex(a,b,c,d,e).#e
27200 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61  ndif.../*.** Ava
27210 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a  ilable fault inj
27220 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20  ectors.  Should 
27230 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69  be numbered begi
27240 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f  nning with 0..*/
27250 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
27260 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41  FAULTINJECTOR_MA
27270 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69  LLOC     0.#defi
27280 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
27290 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20  NJECTOR_COUNT   
272a0 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
272b0 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65  interface to the
272c0 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63   code in fault.c
272d0 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69   used for identi
272e0 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a  fying "benign".*
272f0 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  * malloc failure
27300 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20  s. This is only 
27310 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54  present if SQLIT
27320 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
27330 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65  EST.** is not de
27340 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  fined..*/.#ifnde
27350 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
27360 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69  ILTIN_TEST.  voi
27370 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65  d sqlite3BeginBe
27380 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29  nignMalloc(void)
27390 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
273a0 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
273b0 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23  void);.#else.  #
273c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65  define sqlite3Be
273d0 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
273e0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
273f0 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c  te3EndBenignMall
27400 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  oc().#endif../*.
27410 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72  ** Allowed retur
27420 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71  n values from sq
27430 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
27440 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  ().*/.#define IN
27450 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20  _INDEX_ROWID    
27460 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63      1   /* Searc
27470 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  h the rowid of t
27480 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  he table */.#def
27490 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48  ine IN_INDEX_EPH
274a0 20 20 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a            2   /*
274b0 20 53 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d   Search an ephem
274c0 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23  eral b-tree */.#
274d0 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
274e0 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20 20  INDEX_ASC    3  
274f0 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64   /* Existing ind
27500 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a  ex ASCENDING */.
27510 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
27520 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20  _INDEX_DESC   4 
27530 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e    /* Existing in
27540 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a  dex DESCENDING *
27550 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
27560 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20  EX_NOOP         
27570 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20  5   /* No table 
27580 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63  available. Use c
27590 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a  omparisons */./*
275a0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67  .** Allowed flag
275b0 73 20 66 6f 72 20 74 68 65 20 33 72 64 20 70 61  s for the 3rd pa
275c0 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74  rameter to sqlit
275d0 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e  e3FindInIndex().
275e0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49  .*/.#define IN_I
275f0 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20  NDEX_NOOP_OK    
27600 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74   0x0001  /* OK t
27610 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45  o return IN_INDE
27620 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e  X_NOOP */.#defin
27630 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45  e IN_INDEX_MEMBE
27640 52 53 48 49 50 20 20 30 78 30 30 30 32 20 20 2f  RSHIP  0x0002  /
27650 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73  * IN operator us
27660 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69  ed for membershi
27670 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e  p test */.#defin
27680 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20  e IN_INDEX_LOOP 
27690 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
276a0 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73  * IN operator us
276b0 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a  ed as a loop */.
276c0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49  int sqlite3FindI
276d0 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20  nIndex(Parse *, 
276e0 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74  Expr *, u32, int
276f0 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  *);..#ifdef SQLI
27700 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43  TE_ENABLE_ATOMIC
27710 5f 57 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c  _WRITE.  int sql
27720 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28  ite3JournalOpen(
27730 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63  sqlite3_vfs *, c
27740 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c  onst char *, sql
27750 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74  ite3_file *, int
27760 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  , int);.  int sq
27770 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65  lite3JournalSize
27780 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b  (sqlite3_vfs *);
27790 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
277a0 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69  urnalCreate(sqli
277b0 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 20 20 69  te3_file *);.  i
277c0 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
277d0 6c 45 78 69 73 74 73 28 73 71 6c 69 74 65 33 5f  lExists(sqlite3_
277e0 66 69 6c 65 20 2a 70 29 3b 0a 23 65 6c 73 65 0a  file *p);.#else.
277f0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
27800 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70 56 66  3JournalSize(pVf
27810 73 29 20 28 28 70 56 66 73 29 2d 3e 73 7a 4f 73  s) ((pVfs)->szOs
27820 46 69 6c 65 29 0a 20 20 23 64 65 66 69 6e 65 20  File).  #define 
27830 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78  sqlite3JournalEx
27840 69 73 74 73 28 70 29 20 31 0a 23 65 6e 64 69 66  ists(p) 1.#endif
27850 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65  ..void sqlite3Me
27860 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c  mJournalOpen(sql
27870 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e  ite3_file *);.in
27880 74 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72  t sqlite3MemJour
27890 6e 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69  nalSize(void);.i
278a0 6e 74 20 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a  nt sqlite3IsMemJ
278b0 6f 75 72 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66  ournal(sqlite3_f
278c0 69 6c 65 20 2a 29 3b 0a 0a 23 69 66 20 53 51 4c  ile *);..#if SQL
278d0 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
278e0 54 48 3e 30 0a 20 20 76 6f 69 64 20 73 71 6c 69  TH>0.  void sqli
278f0 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74  te3ExprSetHeight
27900 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
27910 45 78 70 72 20 2a 70 29 3b 0a 20 20 69 6e 74 20  Expr *p);.  int 
27920 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
27930 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a  rHeight(Select *
27940 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
27950 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
27960 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65  Parse*, int);.#e
27970 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
27980 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67  lite3ExprSetHeig
27990 68 74 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e  ht(x,y).  #defin
279a0 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  e sqlite3SelectE
279b0 78 70 72 48 65 69 67 68 74 28 78 29 20 30 0a 20  xprHeight(x) 0. 
279c0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
279d0 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
279e0 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32  x,y).#endif..u32
279f0 20 73 71 6c 69 74 65 33 47 65 74 34 62 79 74 65   sqlite3Get4byte
27a00 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69  (const u8*);.voi
27a10 64 20 73 71 6c 69 74 65 33 50 75 74 34 62 79 74  d sqlite3Put4byt
27a20 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69  e(u8*, u32);..#i
27a30 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
27a40 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
27a50 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
27a60 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64  onnectionBlocked
27a70 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69  (sqlite3 *, sqli
27a80 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73  te3 *);.  void s
27a90 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
27aa0 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33  Unlocked(sqlite3
27ab0 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71   *db);.  void sq
27ac0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43  lite3ConnectionC
27ad0 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64  losed(sqlite3 *d
27ae0 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  b);.#else.  #def
27af0 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
27b00 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79  ctionBlocked(x,y
27b10 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
27b20 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c  te3ConnectionUnl
27b30 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69  ocked(x).  #defi
27b40 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
27b50 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65  tionClosed(x).#e
27b60 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
27b70 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64  ITE_DEBUG.  void
27b80 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72   sqlite3ParserTr
27b90 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20  ace(FILE*, char 
27ba0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  *);.#endif../*.*
27bb0 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
27bc0 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65  ENABLE IOTRACE e
27bd0 78 69 73 74 73 20 74 68 65 6e 20 74 68 65 20 67  xists then the g
27be0 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a  lobal variable.*
27bf0 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  * sqlite3IoTrace
27c00 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
27c10 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72   a printf-like r
27c20 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a  outine used to.*
27c30 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63  * print I/O trac
27c40 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a  ing messages. .*
27c50 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
27c60 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23  ENABLE_IOTRACE.#
27c70 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28   define IOTRACE(
27c80 41 29 20 20 69 66 28 20 73 71 6c 69 74 65 33 49  A)  if( sqlite3I
27c90 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65  oTrace ){ sqlite
27ca0 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20  3IoTrace A; }.  
27cb0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
27cc0 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a  IOTraceSql(Vdbe*
27cd0 29 3b 0a 53 51 4c 49 54 45 5f 45 58 54 45 52 4e  );.SQLITE_EXTERN
27ce0 20 76 6f 69 64 20 28 2a 73 71 6c 69 74 65 33 49   void (*sqlite3I
27cf0 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68  oTrace)(const ch
27d00 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a  ar*,...);.#else.
27d10 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45  # define IOTRACE
27d20 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (A).# define sql
27d30 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
27d40 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ql(X).#endif../*
27d50 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e  .** These routin
27d60 65 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  es are available
27d70 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20   for the mem2.c 
27d80 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79  debugging memory
27d90 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e   allocator.** on
27da0 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20 75 73  ly.  They are us
27db0 65 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  ed to verify tha
27dc0 74 20 64 69 66 66 65 72 65 6e 74 20 22 74 79 70  t different "typ
27dd0 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a  es" of memory.**
27de0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
27df0 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65   properly tracke
27e00 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e  d by the system.
27e10 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
27e20 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 20  mdebugSetType() 
27e30 73 65 74 73 20 74 68 65 20 22 74 79 70 65 22 20  sets the "type" 
27e40 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e  of an allocation
27e50 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68   to one of.** th
27e60 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72  e MEMTYPE_* macr
27e70 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  os defined below
27e80 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75 73 74  .  The type must
27e90 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69   be a bitmask wi
27ea0 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62  th.** a single b
27eb0 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71  it set..**.** sq
27ec0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
27ed0 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74  Type() returns t
27ee0 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68  rue if any of th
27ef0 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65  e bits in its se
27f00 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  cond.** argument
27f10 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20   match the type 
27f20 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69  set by the previ
27f30 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ous sqlite3Memde
27f40 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a  bugSetType()..**
27f50 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
27f60 48 61 73 54 79 70 65 28 29 20 69 73 20 69 6e 74  HasType() is int
27f70 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e  ended for use in
27f80 73 69 64 65 20 61 73 73 65 72 74 28 29 20 73 74  side assert() st
27f90 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
27fa0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
27fb0 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20  oType() returns 
27fc0 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20  true if none of 
27fd0 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20  the bits in its 
27fe0 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65  second.** argume
27ff0 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70  nt match the typ
28000 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65  e set by the pre
28010 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d  vious sqlite3Mem
28020 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a  debugSetType()..
28030 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68  **.** Perhaps th
28040 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74  e most important
28050 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69   point is the di
28060 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
28070 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a   MEMTYPE_HEAP.**
28080 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f   and MEMTYPE_LOO
28090 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61  KASIDE.  If an a
280a0 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d  llocation is MEM
280b0 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20  TYPE_LOOKASIDE, 
280c0 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74  that means.** it
280d0 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
280e0 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f   allocated by lo
280f0 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74 20  okaside, except 
28100 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77  the allocation w
28110 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20  as.** too large 
28120 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73  or lookaside was
28130 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20   already full.  
28140 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  It is important 
28150 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61  to verify.** tha
28160 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68  t allocations th
28170 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  at might have be
28180 65 6e 20 73 61 74 69 73 66 69 65 64 20 62 79 20  en satisfied by 
28190 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f  lookaside are no
281a0 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b  t.** passed back
281b0 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64   to non-lookasid
281c0 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65  e free() routine
281d0 73 2e 20 20 41 73 73 65 72 74 73 20 73 75 63 68  s.  Asserts such
281e0 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70   as the.** examp
281f0 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61  le above are pla
28200 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c  ced on the non-l
28210 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20  ookaside free() 
28220 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69  routines to veri
28230 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74  fy.** this const
28240 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c  raint. .**.** Al
28250 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d  l of this is no-
28260 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74  op for a product
28270 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f  ion build.  It o
28280 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a  nly comes into.*
28290 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20  * play when the 
282a0 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20  SQLITE_MEMDEBUG 
282b0 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
282c0 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  ion is used..*/.
282d0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45  #ifdef SQLITE_ME
282e0 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71  MDEBUG.  void sq
282f0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
28300 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
28310 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d    int sqlite3Mem
28320 64 65 62 75 67 48 61 73 54 79 70 65 28 76 6f 69  debugHasType(voi
28330 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71  d*,u8);.  int sq
28340 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
28350 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23  ype(void*,u8);.#
28360 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
28370 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
28380 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f  Type(X,Y)  /* no
28390 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  -op */.# define 
283a0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
283b0 61 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23  asType(X,Y)  1.#
283c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
283d0 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c  emdebugNoType(X,
283e0 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64  Y)   1.#endif.#d
283f0 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45  efine MEMTYPE_HE
28400 41 50 20 20 20 20 20 20 20 30 78 30 31 20 20 2f  AP       0x01  /
28410 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61  * General heap a
28420 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64  llocations */.#d
28430 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f  efine MEMTYPE_LO
28440 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20 20 2f  OKASIDE  0x02  /
28450 2a 20 48 65 61 70 20 74 68 61 74 20 6d 69 67 68  * Heap that migh
28460 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b  t have been look
28470 61 73 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65  aside */.#define
28480 20 4d 45 4d 54 59 50 45 5f 53 43 52 41 54 43 48   MEMTYPE_SCRATCH
28490 20 20 20 20 30 78 30 34 20 20 2f 2a 20 53 63 72      0x04  /* Scr
284a0 61 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  atch allocations
284b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
284c0 59 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30  YPE_PCACHE     0
284d0 78 30 38 20 20 2f 2a 20 50 61 67 65 20 63 61 63  x08  /* Page cac
284e0 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  he allocations *
284f0 2f 0a 0a 23 69 66 20 28 53 51 4c 49 54 45 5f 45  /..#if (SQLITE_E
28500 4e 41 42 4c 45 5f 41 50 50 4c 45 5f 53 50 49 3e  NABLE_APPLE_SPI>
28510 30 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f  0) && defined(__
28520 41 50 50 4c 45 5f 5f 29 0a 0a 2f 2a 0a 2a 2a 20  APPLE__)../*.** 
28530 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
28540 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
28550 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74  ucture is used t
28560 6f 20 68 6f 6c 64 20 74 68 65 20 70 72 6f 63 65  o hold the proce
28570 73 73 20 49 44 0a 2a 2a 20 61 6e 64 20 72 65 74  ss ID.** and ret
28580 75 72 6e 2d 62 79 2d 72 65 66 65 72 65 6e 63 65  urn-by-reference
28590 20 6c 6f 63 6b 73 74 61 74 65 20 76 61 6c 75 65   lockstate value
285a0 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 46 43  .  The SQLITE_FC
285b0 4e 54 4c 5f 4c 4f 43 4b 53 54 41 54 45 5f 50 49  NTL_LOCKSTATE_PI
285c0 44 0a 2a 2a 20 72 65 71 75 69 72 65 73 20 74 68  D.** requires th
285d0 65 20 34 74 68 20 61 72 67 75 6d 65 6e 74 20 74  e 4th argument t
285e0 6f 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63  o sqlite3_file_c
285f0 6f 6e 74 72 6f 6c 20 74 6f 20 62 65 20 61 20 70  ontrol to be a p
28600 6f 69 6e 74 65 72 20 74 6f 20 61 6e 0a 2a 2a 20  ointer to an.** 
28610 69 6e 73 74 61 6e 63 65 20 6f 66 20 4c 6f 63 6b  instance of Lock
28620 73 74 61 74 65 50 49 44 20 69 6e 69 74 69 61 6c  statePID initial
28630 69 7a 65 64 20 77 69 74 68 20 61 20 4c 6f 63 6b  ized with a Lock
28640 73 74 61 74 65 50 49 44 2e 70 69 64 20 76 61 6c  statePID.pid val
28650 75 65 20 65 71 75 61 6c 0a 2a 2a 20 74 6f 20 61  ue equal.** to a
28660 20 70 72 6f 63 65 73 73 20 49 44 20 74 6f 20 62   process ID to b
28670 65 20 74 65 73 74 65 64 2c 20 6f 72 20 74 68 65  e tested, or the
28680 20 73 70 65 63 69 61 6c 20 76 61 6c 75 65 20 53   special value S
28690 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54 45 5f  QLITE_LOCKSTATE_
286a0 41 4e 59 50 49 44 0a 2a 2a 20 54 68 65 20 4c 6f  ANYPID.** The Lo
286b0 63 6b 73 74 61 74 65 2e 73 74 61 74 65 20 76 61  ckstate.state va
286c0 6c 75 65 20 69 73 20 61 6c 77 61 79 73 20 73 65  lue is always se
286d0 74 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  t to one of the 
286e0 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65 73  following values
286f0 0a 2a 2a 20 77 68 65 6e 20 73 71 6c 69 74 65 33  .** when sqlite3
28700 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 20 72 65  _file_control re
28710 74 75 72 6e 73 3a 0a 2a 2a 20 0a 2a 2a 20 20 20  turns:.** .**   
28720 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54 45  SQLITE_LOCKSTATE
28730 5f 4f 46 46 20 20 20 20 6e 6f 20 61 63 74 69 76  _OFF    no activ
28740 65 20 73 71 6c 69 74 65 20 66 69 6c 65 20 6c 6f  e sqlite file lo
28750 63 6b 73 20 6d 61 74 63 68 20 74 68 65 20 73 70  cks match the sp
28760 65 63 69 66 69 65 64 20 70 69 64 0a 2a 2a 20 20  ecified pid.**  
28770 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54   SQLITE_LOCKSTAT
28780 45 5f 4f 4e 20 20 20 20 20 61 63 74 69 76 65 20  E_ON     active 
28790 73 71 6c 69 74 65 20 66 69 6c 65 20 6c 6f 63 6b  sqlite file lock
287a0 73 20 6d 61 74 63 68 20 74 68 65 20 73 70 65 63  s match the spec
287b0 69 66 69 65 64 20 70 69 64 0a 2a 2a 20 20 20 53  ified pid.**   S
287c0 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54 45 5f  QLITE_LOCKSTATE_
287d0 4e 4f 54 41 44 42 20 70 61 74 68 20 70 6f 69 6e  NOTADB path poin
287e0 74 73 20 74 6f 20 61 20 66 69 6c 65 20 74 68 61  ts to a file tha
287f0 74 20 69 73 20 6e 6f 74 20 61 6e 20 73 71 6c 69  t is not an sqli
28800 74 65 20 64 62 20 66 69 6c 65 0a 2a 2a 20 20 20  te db file.**   
28810 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54 45  SQLITE_LOCKSTATE
28820 5f 45 52 52 4f 52 20 20 70 61 74 68 20 77 61 73  _ERROR  path was
28830 20 6e 6f 74 20 76 61 69 6c 64 20 6f 72 20 77 61   not vaild or wa
28840 73 20 75 6e 72 65 61 64 61 62 6c 65 0a 2a 2f 0a  s unreadable.*/.
28850 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c  typedef struct L
28860 6f 63 6b 73 74 61 74 65 50 49 44 20 4c 6f 63 6b  ockstatePID Lock
28870 73 74 61 74 65 50 49 44 3b 0a 73 74 72 75 63 74  statePID;.struct
28880 20 4c 6f 63 6b 73 74 61 74 65 50 49 44 20 7b 0a   LockstatePID {.
28890 20 20 70 69 64 5f 74 20 70 69 64 3b 20 20 20 20    pid_t pid;    
288a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
288b0 50 72 6f 63 65 73 73 20 49 44 20 74 6f 20 74 65  Process ID to te
288c0 73 74 20 2a 2f 0a 20 20 69 6e 74 20 73 74 61 74  st */.  int stat
288d0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
288e0 20 20 20 2f 2a 20 54 68 65 20 73 74 61 74 65 20     /* The state 
288f0 6f 66 20 74 68 65 20 6c 6f 63 6b 20 28 72 65 74  of the lock (ret
28900 75 72 6e 20 76 61 6c 75 65 29 20 2a 2f 0a 7d 3b  urn value) */.};
28910 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 28 53 51 4c  ..#endif /* (SQL
28920 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 50 4c 45  ITE_ENABLE_APPLE
28930 5f 53 50 49 3e 30 29 20 26 26 20 64 65 66 69 6e  _SPI>0) && defin
28940 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 2a 2f  ed(__APPLE__) */
28950 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e  ../*.** Threadin
28960 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23  g interface.*/.#
28970 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  if SQLITE_MAX_WO
28980 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69  RKER_THREADS>0.i
28990 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64  nt sqlite3Thread
289a0 43 72 65 61 74 65 28 53 51 4c 69 74 65 54 68 72  Create(SQLiteThr
289b0 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76  ead**,void*(*)(v
289c0 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e  oid*),void*);.in
289d0 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a  t sqlite3ThreadJ
289e0 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64  oin(SQLiteThread
289f0 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64  *, void**);.#end
28a00 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53  if..#endif /* _S
28a10 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a     QLITEINT_H_ */.