/ Hex Artifact Content
Login

Artifact 4ad823ef8e31448ca333eafa1892ab35759ae6c1:


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 65 55  edef struct PreU
7040: 70 64 61 74 65 20 50 72 65 55 70 64 61 74 65 3b  pdate PreUpdate;
7050: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7060: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
7070: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b  PrintfArguments;
7080: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7090: 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74  RowSet RowSet;.t
70a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 61  ypedef struct Sa
70b0: 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e  vepoint Savepoin
70c0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
70d0: 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b  t Select Select;
70e0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
70f0: 53 51 4c 69 74 65 54 68 72 65 61 64 20 53 51 4c  SQLiteThread SQL
7100: 69 74 65 54 68 72 65 61 64 3b 0a 74 79 70 65 64  iteThread;.typed
7110: 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74  ef struct Select
7120: 44 65 73 74 20 53 65 6c 65 63 74 44 65 73 74 3b  Dest SelectDest;
7130: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7140: 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73 74 3b  SrcList SrcList;
7150: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7160: 53 74 72 41 63 63 75 6d 20 53 74 72 41 63 63 75  StrAccum StrAccu
7170: 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  m;.typedef struc
7180: 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74  t Table Table;.t
7190: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61  ypedef struct Ta
71a0: 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63  bleLock TableLoc
71b0: 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  k;.typedef struc
71c0: 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74  t Token Token;.t
71d0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
71e0: 65 65 56 69 65 77 20 54 72 65 65 56 69 65 77 3b  eeView TreeView;
71f0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7200: 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b  Trigger Trigger;
7210: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7220: 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67  TriggerPrg Trigg
7230: 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73  erPrg;.typedef s
7240: 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
7250: 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74  p TriggerStep;.t
7260: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e  ypedef struct Un
7270: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70  packedRecord Unp
7280: 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70  ackedRecord;.typ
7290: 65 64 65 66 20 73 74 72 75 63 74 20 56 54 61 62  edef struct VTab
72a0: 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64  le VTable;.typed
72b0: 65 66 20 73 74 72 75 63 74 20 56 74 61 62 43 74  ef struct VtabCt
72c0: 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64  x VtabCtx;.typed
72d0: 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72  ef struct Walker
72e0: 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66   Walker;.typedef
72f0: 20 73 74 72 75 63 74 20 57 68 65 72 65 49 6e 66   struct WhereInf
7300: 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70  o WhereInfo;.typ
7310: 65 64 65 66 20 73 74 72 75 63 74 20 57 69 74 68  edef struct With
7320: 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65   With;../*.** De
7330: 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62  fer sourcing vdb
7340: 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20  e.h and btree.h 
7350: 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65 20  until after the 
7360: 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75  "u8" and .** "Bu
7370: 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64  syHandler" typed
7380: 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f  efs. vdbe.h also
7390: 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77 20   requires a few 
73a0: 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a  of the opaque.**
73b0: 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28   pointer types (
73c0: 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65  i.e. FuncDef) de
73d0: 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a  fined above..*/.
73e0: 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e  #include "btree.
73f0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62  h".#include "vdb
7400: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  e.h".#include "p
7410: 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65  ager.h".#include
7420: 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e   "pcache.h"..#in
7430: 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e  clude "os.h".#in
7440: 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a  clude "mutex.h".
7450: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
7460: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65  abase file to be
7470: 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65   accessed by the
7480: 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e   system is an in
7490: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65  stance.** of the
74a0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
74b0: 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65  ture.  There are
74c0: 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66   normally two of
74d0: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
74e0: 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69  s.** in the sqli
74f0: 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20  te.aDb[] array. 
7500: 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d   aDb[0] is the m
7510: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
7520: 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20  e and.** aDb[1] 
7530: 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
7540: 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c  file used to hol
7550: 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  d temporary tabl
7560: 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  es.  Additional.
7570: 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79  ** databases may
7580: 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f   be attached..*/
7590: 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63  .struct Db {.  c
75a0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
75b0: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
75c0: 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
75d0: 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
75e0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a         /* The B*
75f0: 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66  Tree structure f
7600: 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65  or this database
7610: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61   file */.  u8 sa
7620: 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20  fety_level;     
7630: 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76  /* How aggressiv
7640: 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74  e at syncing dat
7650: 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53  a to disk */.  S
7660: 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
7670: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
7680: 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  o database schem
7690: 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72  a (possibly shar
76a0: 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ed) */.};../*.**
76b0: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
76c0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
76d0: 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20 61  ructure stores a
76e0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
76f0: 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68  ..**.** Most Sch
7700: 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ema objects are 
7710: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
7720: 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65 78  a Btree.  The ex
7730: 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68  ception is.** th
7740: 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65  e Schema for the
7750: 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20 28   TEMP databaes (
7760: 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20  sqlite3.aDb[1]) 
7770: 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73 74  which is free-st
7780: 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68  anding..** In sh
7790: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c  ared cache mode,
77a0: 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61   a single Schema
77b0: 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73   object can be s
77c0: 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c  hared by multipl
77d0: 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74  e.** Btrees that
77e0: 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 61   refer to the sa
77f0: 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74  me underlying Bt
7800: 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a  Shared object..*
7810: 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a  * .** Schema obj
7820: 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74  ects are automat
7830: 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74  ically deallocat
7840: 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74  ed when the last
7850: 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72   Btree that.** r
7860: 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69  eferences them i
7870: 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54  s destroyed.   T
7880: 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69  he TEMP Schema i
7890: 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64  s manually freed
78a0: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63   by.** sqlite3_c
78b0: 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74  lose()..*.** A t
78c0: 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f  hread must be ho
78d0: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
78e0: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
78f0: 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65  ng Btree in orde
7900: 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53  r.** to access S
7910: 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20  chema content.  
7920: 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61  This implies tha
7930: 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73  t the thread mus
7940: 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c  t also be.** hol
7950: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
7960: 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e  the sqlite3 conn
7970: 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74  ection pointer t
7980: 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72  hat owns the Btr
7990: 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d  ee..** For a TEM
79a0: 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74  P Schema, only t
79b0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  he connection mu
79c0: 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e  tex is required.
79d0: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d  .*/.struct Schem
79e0: 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61  a {.  int schema
79f0: 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61  _cookie;   /* Da
7a00: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65  tabase schema ve
7a10: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  rsion number for
7a20: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
7a30: 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b  int iGeneration;
7a40: 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69       /* Generati
7a50: 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63  on counter.  Inc
7a60: 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61  remented with ea
7a70: 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48  ch change */.  H
7a80: 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20  ash tblHash;    
7a90: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65      /* All table
7aa0: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
7ab0: 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48  e */.  Hash idxH
7ac0: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
7ad0: 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63  ll (named) indic
7ae0: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
7af0: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69  me */.  Hash tri
7b00: 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  gHash;       /* 
7b10: 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64  All triggers ind
7b20: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
7b30: 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b    Hash fkeyHash;
7b40: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f         /* All fo
7b50: 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65  reign keys by re
7b60: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e  ferenced table n
7b70: 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ame */.  Table *
7b80: 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a  pSeqTab;      /*
7b90: 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   The sqlite_sequ
7ba0: 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20  ence table used 
7bb0: 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  by AUTOINCREMENT
7bc0: 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f   */.  u8 file_fo
7bd0: 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63  rmat;      /* Sc
7be0: 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73  hema format vers
7bf0: 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ion for this fil
7c00: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  e */.  u8 enc;  
7c10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
7c20: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65  ext encoding use
7c30: 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61  d by this databa
7c40: 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65  se */.  u16 sche
7c50: 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  maFlags;     /* 
7c60: 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  Flags associated
7c70: 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d   with this schem
7c80: 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65  a */.  int cache
7c90: 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e  _size;      /* N
7ca0: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
7cb0: 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63  o use in the cac
7cc0: 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  he */.};../*.** 
7cd0: 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
7ce0: 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
7cf0: 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
7d00: 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20  bits in the .** 
7d10: 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  Db.pSchema->flag
7d20: 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
7d30: 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74  ine DbHasPropert
7d40: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28  y(D,I,P)     (((
7d50: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
7d60: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26  ma->schemaFlags&
7d70: 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
7d80: 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65  ne DbHasAnyPrope
7d90: 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44  rty(D,I,P)  (((D
7da0: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
7db0: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28  a->schemaFlags&(
7dc0: 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  P))!=0).#define 
7dd0: 44 62 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c  DbSetProperty(D,
7de0: 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44  I,P)     (D)->aD
7df0: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  b[I].pSchema->sc
7e00: 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23  hemaFlags|=(P).#
7e10: 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72  define DbClearPr
7e20: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
7e30: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
7e40: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
7e50: 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c  &=~(P)../*.** Al
7e60: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
7e70: 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d   the DB.pSchema-
7e80: 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a  >flags field..**
7e90: 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d  .** The DB_Schem
7ea0: 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20  aLoaded flag is 
7eb0: 73 65 74 20 61 66 74 65 72 20 74 68 65 20 64 61  set after the da
7ec0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61  tabase schema ha
7ed0: 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69  s been.** read i
7ee0: 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73  nto internal has
7ef0: 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20  h tables..**.** 
7f00: 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20  DB_UnresetViews 
7f10: 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f  means that one o
7f20: 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76  r more views hav
7f30: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74  e column names t
7f40: 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e  hat.** have been
7f50: 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66   filled out.  If
7f60: 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e   the schema chan
7f70: 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d  ges, these colum
7f80: 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a  n names might.**
7f90: 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20   changes and so 
7fa0: 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65  the view will ne
7fb0: 65 64 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a  ed to be reset..
7fc0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63  */.#define DB_Sc
7fd0: 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78  hemaLoaded    0x
7fe0: 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68  0001  /* The sch
7ff0: 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61  ema has been loa
8000: 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ded */.#define D
8010: 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 20  B_UnresetViews  
8020: 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d    0x0002  /* Som
8030: 65 20 76 69 65 77 73 20 68 61 76 65 20 64 65 66  e views have def
8040: 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  ined column name
8050: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  s */.#define DB_
8060: 45 6d 70 74 79 20 20 20 20 20 20 20 20 20 20 20  Empty           
8070: 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66  0x0004  /* The f
8080: 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65  ile is empty (le
8090: 6e 67 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f  ngth 0 bytes) */
80a0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ../*.** The numb
80b0: 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20  er of different 
80c0: 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20  kinds of things 
80d0: 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69  that can be limi
80e0: 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65  ted.** using the
80f0: 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29   sqlite3_limit()
8100: 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23   interface..*/.#
8110: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f  define SQLITE_N_
8120: 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49  LIMIT (SQLITE_LI
8130: 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MIT_WORKER_THREA
8140: 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f  DS+1)../*.** Loo
8150: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73  kaside malloc is
8160: 20 61 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d   a set of fixed-
8170: 73 69 7a 65 20 62 75 66 66 65 72 73 20 74 68 61  size buffers tha
8180: 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a  t can be used.**
8190: 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c   to satisfy smal
81a0: 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f  l transient memo
81b0: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65  ry allocation re
81c0: 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63  quests for objec
81d0: 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64  ts.** associated
81e0: 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c   with a particul
81f0: 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ar database conn
8200: 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65  ection.  The use
8210: 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65   of.** lookaside
8220: 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73   malloc provides
8230: 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70   a significant p
8240: 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e  erformance enhan
8250: 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f  cement.** (appro
8260: 78 20 31 30 25 29 20 62 79 20 61 76 6f 69 64 69  x 10%) by avoidi
8270: 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c  ng numerous mall
8280: 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73 74 73  oc/free requests
8290: 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a   while parsing.*
82a0: 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  * SQL statements
82b0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b  ..**.** The Look
82c0: 61 73 69 64 65 20 73 74 72 75 63 74 75 72 65 20  aside structure 
82d0: 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74  holds configurat
82e0: 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ion information 
82f0: 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f  about the.** loo
8300: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75  kaside malloc su
8310: 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61  bsystem.  Each a
8320: 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20  vailable memory 
8330: 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a  allocation in.**
8340: 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73   the lookaside s
8350: 75 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72  ubsystem is stor
8360: 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed on a linked l
8370: 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65  ist of Lookaside
8380: 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e  Slot.** objects.
8390: 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65  .**.** Lookaside
83a0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
83b0: 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f   only allowed fo
83c0: 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61  r objects that a
83d0: 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a  re associated.**
83e0: 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c   with a particul
83f0: 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ar database conn
8400: 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20  ection.  Hence, 
8410: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
8420: 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20  on cannot.** be 
8430: 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73  stored in lookas
8440: 69 64 65 20 62 65 63 61 75 73 65 20 69 6e 20 73  ide because in s
8450: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
8460: 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f   the schema info
8470: 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68  rmation.** is sh
8480: 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65  ared by multiple
8490: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
84a0: 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72  tions.  Therefor
84b0: 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  e, while parsing
84c0: 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  .** schema infor
84d0: 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b  mation, the Look
84e0: 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66  aside.bEnabled f
84f0: 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64 20 73  lag is cleared s
8500: 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73  o that.** lookas
8510: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
8520: 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20  are not used to 
8530: 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73 63  construct the sc
8540: 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f  hema objects..*/
8550: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
8560: 65 20 7b 0a 20 20 75 31 36 20 73 7a 3b 20 20 20  e {.  u16 sz;   
8570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8580: 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75   Size of each bu
8590: 66 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f  ffer in bytes */
85a0: 0a 20 20 75 38 20 62 45 6e 61 62 6c 65 64 3b 20  .  u8 bEnabled; 
85b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 61             /* Fa
85c0: 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65 20 6e  lse to disable n
85d0: 65 77 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ew lookaside all
85e0: 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38  ocations */.  u8
85f0: 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20   bMalloced;     
8600: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
8610: 20 70 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64   pStart obtained
8620: 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61   from sqlite3_ma
8630: 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  lloc() */.  int 
8640: 6e 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  nOut;           
8650: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
8660: 20 62 75 66 66 65 72 73 20 63 75 72 72 65 6e 74   buffers current
8670: 6c 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a  ly checked out *
8680: 2f 0a 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20  /.  int mxOut;  
8690: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
86a0: 69 67 68 77 61 74 65 72 20 6d 61 72 6b 20 66 6f  ighwater mark fo
86b0: 72 20 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20  r nOut */.  int 
86c0: 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20  anStat[3];      
86d0: 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20      /* 0: hits. 
86e0: 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e   1: size misses.
86f0: 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73    2: full misses
8700: 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53   */.  LookasideS
8710: 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a  lot *pFree;   /*
8720: 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62   List of availab
8730: 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20  le buffers */.  
8740: 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20  void *pStart;   
8750: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
8760: 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62   byte of availab
8770: 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20  le memory space 
8780: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b  */.  void *pEnd;
8790: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
87a0: 46 69 72 73 74 20 62 79 74 65 20 70 61 73 74 20  First byte past 
87b0: 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  end of available
87c0: 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72   space */.};.str
87d0: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  uct LookasideSlo
87e0: 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53  t {.  LookasideS
87f0: 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f  lot *pNext;    /
8800: 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e  * Next buffer in
8810: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65   the list of fre
8820: 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a  e buffers */.};.
8830: 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74 61  ./*.** A hash ta
8840: 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ble for function
8850: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a   definitions..**
8860: 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75  .** Hash each Fu
8870: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
8880: 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  into one of the 
8890: 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20  FuncDefHash.a[] 
88a0: 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73  slots..** Collis
88b0: 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20  ions are on the 
88c0: 46 75 6e 63 44 65 66 2e 70 48 61 73 68 20 63 68  FuncDef.pHash ch
88d0: 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  ain..*/.struct F
88e0: 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46  uncDefHash {.  F
88f0: 75 6e 63 44 65 66 20 2a 61 5b 32 33 5d 3b 20 20  uncDef *a[23];  
8900: 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62       /* Hash tab
8910: 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73  le for functions
8920: 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53   */.};..#ifdef S
8930: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
8940: 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20  NTICATION./*.** 
8950: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64  Information held
8960: 20 69 6e 20 74 68 65 20 22 73 71 6c 69 74 65 33   in the "sqlite3
8970: 22 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  " database conne
8980: 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64  ction object and
8990: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61   used.** to mana
89a0: 67 65 20 75 73 65 72 20 61 75 74 68 65 6e 74 69  ge user authenti
89b0: 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64  cation..*/.typed
89c0: 65 66 20 73 74 72 75 63 74 20 73 71 6c 69 74 65  ef struct sqlite
89d0: 33 5f 75 73 65 72 61 75 74 68 20 73 71 6c 69 74  3_userauth sqlit
89e0: 65 33 5f 75 73 65 72 61 75 74 68 3b 0a 73 74 72  e3_userauth;.str
89f0: 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72  uct sqlite3_user
8a00: 61 75 74 68 20 7b 0a 20 20 75 38 20 61 75 74 68  auth {.  u8 auth
8a10: 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
8a20: 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
8a30: 74 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  t authentication
8a40: 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20   level */.  int 
8a50: 6e 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20  nAuthPW;        
8a60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
8a70: 65 20 6f 66 20 74 68 65 20 7a 41 75 74 68 50 57  e of the zAuthPW
8a80: 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 63   in bytes */.  c
8a90: 68 61 72 20 2a 7a 41 75 74 68 50 57 3b 20 20 20  har *zAuthPW;   
8aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8ab0: 50 61 73 73 77 6f 72 64 20 75 73 65 64 20 74 6f  Password used to
8ac0: 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f   authenticate */
8ad0: 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68 55 73  .  char *zAuthUs
8ae0: 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
8af0: 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20 75 73   /* User name us
8b00: 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61  ed to authentica
8b10: 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c  te */.};../* All
8b20: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
8b30: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
8b40: 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64  .authLevel */.#d
8b50: 65 66 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e  efine UAUTH_Unkn
8b60: 6f 77 6e 20 20 20 20 20 30 20 20 20 20 20 2f 2a  own     0     /*
8b70: 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   Authentication 
8b80: 6e 6f 74 20 79 65 74 20 63 68 65 63 6b 65 64 20  not yet checked 
8b90: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48  */.#define UAUTH
8ba0: 5f 46 61 69 6c 20 20 20 20 20 20 20 20 31 20 20  _Fail        1  
8bb0: 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65     /* User authe
8bc0: 6e 74 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64  ntication failed
8bd0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54   */.#define UAUT
8be0: 48 5f 55 73 65 72 20 20 20 20 20 20 20 20 32 20  H_User        2 
8bf0: 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63      /* Authentic
8c00: 61 74 65 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c  ated as a normal
8c10: 20 75 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65   user */.#define
8c20: 20 55 41 55 54 48 5f 41 64 6d 69 6e 20 20 20 20   UAUTH_Admin    
8c30: 20 20 20 33 20 20 20 20 20 2f 2a 20 41 75 74 68     3     /* Auth
8c40: 65 6e 74 69 63 61 74 65 64 20 61 73 20 61 6e 20  enticated as an 
8c50: 61 64 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f  administrator */
8c60: 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75  ../* Functions u
8c70: 73 65 64 20 6f 6e 6c 79 20 62 79 20 75 73 65 72  sed only by user
8c80: 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c   authorization l
8c90: 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  ogic */.int sqli
8ca0: 74 65 33 55 73 65 72 41 75 74 68 54 61 62 6c 65  te3UserAuthTable
8cb0: 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  (const char*);.i
8cc0: 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  nt sqlite3UserAu
8cd0: 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c  thCheckLogin(sql
8ce0: 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
8cf0: 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  *,u8*);.void sql
8d00: 69 74 65 33 55 73 65 72 41 75 74 68 49 6e 69 74  ite3UserAuthInit
8d10: 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
8d20: 20 73 71 6c 69 74 65 33 43 72 79 70 74 46 75 6e   sqlite3CryptFun
8d30: 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  c(sqlite3_contex
8d40: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
8d50: 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66  alue**);..#endif
8d60: 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f   /* SQLITE_USER_
8d70: 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a  AUTHENTICATION *
8d80: 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66  /../*.** typedef
8d90: 20 66 6f 72 20 74 68 65 20 61 75 74 68 6f 72 69   for the authori
8da0: 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20  zation callback 
8db0: 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66  function..*/.#if
8dc0: 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f  def SQLITE_USER_
8dd0: 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20  AUTHENTICATION. 
8de0: 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73   typedef int (*s
8df0: 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f  qlite3_xauth)(vo
8e00: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
8e10: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
8e20: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20  const char*,.   
8e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e40: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
8e50: 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
8e60: 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74  har*);.#else.  t
8e70: 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c  ypedef int (*sql
8e80: 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64  ite3_xauth)(void
8e90: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
8ea0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
8eb0: 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20  nst char*,.     
8ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ed0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
8ee0: 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
8ef0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61  ./*.** Each data
8f00: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
8f10: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
8f20: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
8f30: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
8f40: 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20  ruct sqlite3 {. 
8f50: 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56   sqlite3_vfs *pV
8f60: 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  fs;            /
8f70: 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a  * OS Interface *
8f80: 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20  /.  struct Vdbe 
8f90: 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
8fa0: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74    /* List of act
8fb0: 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  ive virtual mach
8fc0: 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  ines */.  CollSe
8fd0: 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20  q *pDfltColl;   
8fe0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
8ff0: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67  efault collating
9000: 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52   sequence (BINAR
9010: 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  Y) */.  sqlite3_
9020: 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20  mutex *mutex;   
9030: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74        /* Connect
9040: 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44  ion mutex */.  D
9050: 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20  b *aDb;         
9060: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9070: 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  All backends */.
9080: 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20    int nDb;      
9090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90a0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63  /* Number of bac
90b0: 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20  kends currently 
90c0: 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20  in use */.  int 
90d0: 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
90e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73            /* Mis
90f0: 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73  cellaneous flags
9100: 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20  . See below */. 
9110: 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20   i64 lastRowid; 
9120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9130: 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20  * ROWID of most 
9140: 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73  recent insert (s
9150: 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69  ee above) */.  i
9160: 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20  64 szMmap;      
9170: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9180: 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a  Default mmap_siz
9190: 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75  e setting */.  u
91a0: 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e  nsigned int open
91b0: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20  Flags;       /* 
91c0: 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
91d0: 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65  sqlite3_vfs.xOpe
91e0: 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  n() */.  int err
91f0: 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
9200: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
9210: 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65  ecent error code
9220: 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20   (SQLITE_*) */. 
9230: 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20   int errMask;   
9240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9250: 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73  * & result codes
9260: 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72   with this befor
9270: 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20  e returning */. 
9280: 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b   u16 dbOptFlags;
9290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
92a0: 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c  * Flags to enabl
92b0: 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69  e/disable optimi
92c0: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20  zations */.  u8 
92d0: 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20  autoCommit;     
92e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
92f0: 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c  e auto-commit fl
9300: 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70  ag. */.  u8 temp
9310: 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20  _store;         
9320: 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c         /* 1: fil
9330: 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64  e 2: memory 0: d
9340: 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d  efault */.  u8 m
9350: 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20  allocFailed;    
9360: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
9370: 65 20 69 66 20 77 65 20 68 61 76 65 20 73 65 65  e if we have see
9380: 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  n a malloc failu
9390: 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c  re */.  u8 dfltL
93a0: 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ockMode;        
93b0: 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
93c0: 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f   locking-mode fo
93d0: 72 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a  r attached dbs *
93e0: 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20  /.  signed char 
93f0: 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20  nextAutovac;    
9400: 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74    /* Autovac set
9410: 74 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55  ting after VACUU
9420: 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38  M if >=0 */.  u8
9430: 20 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20   suppressErr;   
9440: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
9450: 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f  o not issue erro
9460: 72 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72  r messages if tr
9470: 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f  ue */.  u8 vtabO
9480: 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20  nConflict;      
9490: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
94a0: 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f  o return for s3_
94b0: 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74  vtab_on_conflict
94c0: 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61  () */.  u8 isTra
94d0: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
94e0: 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  t;    /* True if
94f0: 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73   the outermost s
9500: 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53  avepoint is a TS
9510: 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61   */.  int nextPa
9520: 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20  gesize;         
9530: 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20      /* Pagesize 
9540: 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20  after VACUUM if 
9550: 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69  >0 */.  u32 magi
9560: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
9570: 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e        /* Magic n
9580: 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74  umber for detect
9590: 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20   library misuse 
95a0: 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65  */.  int nChange
95b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
95c0: 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75     /* Value retu
95d0: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
95e0: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
95f0: 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b  nt nTotalChange;
9600: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9610: 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  Value returned b
9620: 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f  y sqlite3_total_
9630: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
9640: 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  nt aLimit[SQLITE
9650: 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20  _N_LIMIT];   /* 
9660: 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20  Limits */.  int 
9670: 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20  nMaxSorterMmap; 
9680: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
9690: 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67  imum size of reg
96a0: 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73  ions mapped by s
96b0: 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63  orter */.  struc
96c0: 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66  t sqlite3InitInf
96d0: 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  o {      /* Info
96e0: 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72  rmation used dur
96f0: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
9700: 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65  on */.    int ne
9710: 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20  wTnum;          
9720: 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67        /* Rootpag
9730: 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67  e of table being
9740: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
9750: 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20      u8 iDb;     
9760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9770: 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65  /* Which db file
9780: 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61   is being initia
9790: 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20  lized */.    u8 
97a0: 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  busy;           
97b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45           /* TRUE
97c0: 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
97d0: 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20  itializing */.  
97e0: 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67    u8 orphanTrigg
97f0: 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  er;           /*
9800: 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   Last statement 
9810: 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50  is orphaned TEMP
9820: 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20   trigger */.  } 
9830: 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62  init;.  int nVdb
9840: 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20  eActive;        
9850: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
9860: 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74  of VDBEs current
9870: 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20  ly running */.  
9880: 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20  int nVdbeRead;  
9890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
98a0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
98b0: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
98c0: 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20  d or write */.  
98d0: 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20  int nVdbeWrite; 
98e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
98f0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
9900: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
9910: 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20  d and write */. 
9920: 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20   int nVdbeExec; 
9930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9940: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
9950: 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65  ed calls to Vdbe
9960: 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Exec() */.  int 
9970: 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  nExtension;     
9980: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
9990: 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78  ber of loaded ex
99a0: 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f  tensions */.  vo
99b0: 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b  id **aExtension;
99c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
99d0: 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c  rray of shared l
99e0: 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a  ibrary handles *
99f0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63  /.  void (*xTrac
9a00: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
9a10: 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a  har*);        /*
9a20: 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   Trace function 
9a30: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63  */.  void *pTrac
9a40: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
9a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9a60: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
9a70: 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  e trace function
9a80: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72   */.  void (*xPr
9a90: 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  ofile)(void*,con
9aa0: 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20  st char*,u64);  
9ab0: 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e  /* Profiling fun
9ac0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
9ad0: 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20  *pProfileArg;   
9ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9af0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
9b00: 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63   to profile func
9b10: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
9b20: 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20  pCommitArg;     
9b30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
9b40: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d  rgument to xComm
9b50: 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  itCallback() */ 
9b60: 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d    .  int (*xComm
9b70: 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  itCallback)(void
9b80: 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65  *);    /* Invoke
9b90: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
9ba0: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52  t. */.  void *pR
9bb0: 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20  ollbackArg;     
9bc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
9bd0: 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61  ument to xRollba
9be0: 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  ckCallback() */ 
9bf0: 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c    .  void (*xRol
9c00: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76  lbackCallback)(v
9c10: 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65  oid*); /* Invoke
9c20: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
9c30: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  t. */.  void *pU
9c40: 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64  pdateArg;.  void
9c50: 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61   (*xUpdateCallba
9c60: 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  ck)(void*,int, c
9c70: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
9c80: 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e   char*,sqlite_in
9c90: 74 36 34 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  t64);.#ifdef SQL
9ca0: 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50  ITE_ENABLE_PREUP
9cb0: 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f 69 64  DATE_HOOK.  void
9cc0: 20 2a 70 50 72 65 55 70 64 61 74 65 41 72 67 3b   *pPreUpdateArg;
9cd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
9ce0: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78  st argument to x
9cf0: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
9d00: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50  k */.  void (*xP
9d10: 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  reUpdateCallback
9d20: 29 28 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  )(   /* Register
9d30: 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ed using sqlite3
9d40: 5f 70 72 65 75 70 64 61 74 65 5f 68 6f 6f 6b 28  _preupdate_hook(
9d50: 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64 2a 2c 73  ) */.    void*,s
9d60: 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 68 61 72  qlite3*,int,char
9d70: 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20 63 6f 6e   const*,char con
9d80: 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36  st*,sqlite3_int6
9d90: 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 0a  4,sqlite3_int64.
9da0: 20 20 29 3b 0a 20 20 50 72 65 55 70 64 61 74 65    );.  PreUpdate
9db0: 20 2a 70 50 72 65 55 70 64 61 74 65 3b 20 20 20   *pPreUpdate;   
9dc0: 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20       /* Context 
9dd0: 66 6f 72 20 61 63 74 69 76 65 20 70 72 65 2d 75  for active pre-u
9de0: 70 64 61 74 65 20 63 61 6c 6c 62 61 63 6b 20 2a  pdate callback *
9df0: 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  /.#endif /* SQLI
9e00: 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44  TE_ENABLE_PREUPD
9e10: 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69 66 6e  ATE_HOOK */.#ifn
9e20: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
9e30: 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c  WAL.  int (*xWal
9e40: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a  Callback)(void *
9e50: 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  , sqlite3 *, con
9e60: 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b  st char *, int);
9e70: 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67  .  void *pWalArg
9e80: 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28  ;.#endif.  void(
9e90: 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f  *xCollNeeded)(vo
9ea0: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
9eb0: 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20   eTextRep,const 
9ec0: 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a  char*);.  void(*
9ed0: 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76  xCollNeeded16)(v
9ee0: 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e  oid*,sqlite3*,in
9ef0: 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74  t eTextRep,const
9f00: 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20   void*);.  void 
9f10: 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b  *pCollNeededArg;
9f20: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
9f30: 20 2a 70 45 72 72 3b 20 20 20 20 20 20 20 20 20   *pErr;         
9f40: 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20   /* Most recent 
9f50: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f  error message */
9f60: 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76  .  union {.    v
9f70: 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e  olatile int isIn
9f80: 74 65 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72  terrupted; /* Tr
9f90: 75 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e  ue if sqlite3_in
9fa0: 74 65 72 72 75 70 74 20 68 61 73 20 62 65 65 6e  terrupt has been
9fb0: 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64   called */.    d
9fc0: 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20  ouble notUsed1; 
9fd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
9fe0: 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a  acer */.  } u1;.
9ff0: 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b    Lookaside look
a000: 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
a010: 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  /* Lookaside mal
a020: 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  loc configuratio
a030: 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  n */.#ifndef SQL
a040: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49  ITE_OMIT_AUTHORI
a050: 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33  ZATION.  sqlite3
a060: 5f 78 61 75 74 68 20 78 41 75 74 68 3b 20 20 20  _xauth xAuth;   
a070: 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73         /* Access
a080: 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66   authorization f
a090: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
a0a0: 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20  d *pAuthArg;    
a0b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
a0c0: 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  t argument to th
a0d0: 65 20 61 63 63 65 73 73 20 61 75 74 68 20 66 75  e access auth fu
a0e0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66  nction */.#endif
a0f0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
a100: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
a110: 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78  LLBACK.  int (*x
a120: 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a  Progress)(void *
a130: 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72  );     /* The pr
a140: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
a150: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67  */.  void *pProg
a160: 72 65 73 73 41 72 67 3b 20 20 20 20 20 20 20 20  ressArg;        
a170: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
a180: 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  o the progress c
a190: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73  allback */.  uns
a1a0: 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4f  igned nProgressO
a1b0: 70 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ps;        /* Nu
a1c0: 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20  mber of opcodes 
a1d0: 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c  for progress cal
a1e0: 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a  lback */.#endif.
a1f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
a200: 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
a210: 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20  .  int nVTrans; 
a220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a230: 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69   /* Allocated si
a240: 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f  ze of aVTrans */
a250: 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b  .  Hash aModule;
a260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a270: 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79   /* populated by
a280: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
a290: 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74  module() */.  Vt
a2a0: 61 62 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b  abCtx *pVtabCtx;
a2b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
a2c0: 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69 76  ontext for activ
a2d0: 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63  e vtab connect/c
a2e0: 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c  reate */.  VTabl
a2f0: 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20  e **aVTrans;    
a300: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74           /* Virt
a310: 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20  ual tables with 
a320: 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e  open transaction
a330: 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70  s */.  VTable *p
a340: 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 2f  Disconnect;    /
a350: 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65  * Disconnect the
a360: 73 65 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74  se in next sqlit
a370: 65 33 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a  e3_prepare() */.
a380: 23 65 6e 64 69 66 0a 20 20 46 75 6e 63 44 65 66  #endif.  FuncDef
a390: 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20 20  Hash aFunc;     
a3a0: 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74         /* Hash t
a3b0: 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69  able of connecti
a3c0: 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  on functions */.
a3d0: 20 20 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b    Hash aCollSeq;
a3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a3f0: 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67  /* All collating
a400: 20 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20   sequences */.  
a410: 42 75 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79  BusyHandler busy
a420: 48 61 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a  Handler;      /*
a430: 20 42 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a   Busy callback *
a440: 2f 0a 20 20 44 62 20 61 44 62 53 74 61 74 69 63  /.  Db aDbStatic
a450: 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [2];            
a460: 20 20 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63    /* Static spac
a470: 65 20 66 6f 72 20 74 68 65 20 32 20 64 65 66 61  e for the 2 defa
a480: 75 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  ult backends */.
a490: 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61    Savepoint *pSa
a4a0: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
a4b0: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76  /* List of activ
a4c0: 65 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a  e savepoints */.
a4d0: 20 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75    int busyTimeou
a4e0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
a4f0: 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20  /* Busy handler 
a500: 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63  timeout, in msec
a510: 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70   */.  int nSavep
a520: 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  oint;           
a530: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
a540: 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e   non-transaction
a550: 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20   savepoints */. 
a560: 20 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b   int nStatement;
a570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a580: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
a590: 65 64 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  ed statement-tra
a5a0: 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20  nsactions  */.  
a5b0: 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e  i64 nDeferredCon
a5c0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
a5d0: 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 63 6f   Net deferred co
a5e0: 6e 73 74 72 61 69 6e 74 73 20 74 68 69 73 20 74  nstraints this t
a5f0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20  ransaction. */. 
a600: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d   i64 nDeferredIm
a610: 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f  mCons;         /
a620: 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 69  * Net deferred i
a630: 6d 6d 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61  mmediate constra
a640: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70  ints */.  int *p
a650: 6e 42 79 74 65 73 46 72 65 65 64 3b 20 20 20 20  nBytesFreed;    
a660: 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f          /* If no
a670: 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e  t NULL, incremen
a680: 74 20 74 68 69 73 20 69 6e 20 44 62 46 72 65 65  t this in DbFree
a690: 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  () */.#ifdef SQL
a6a0: 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43  ITE_ENABLE_UNLOC
a6b0: 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68  K_NOTIFY.  /* Th
a6c0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69  e following vari
a6d0: 61 62 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72  ables are all pr
a6e0: 6f 74 65 63 74 65 64 20 62 79 20 74 68 65 20 53  otected by the S
a6f0: 54 41 54 49 43 5f 4d 41 53 54 45 52 20 0a 20 20  TATIC_MASTER .  
a700: 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79  ** mutex, not by
a710: 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20   sqlite3.mutex. 
a720: 54 68 65 79 20 61 72 65 20 75 73 65 64 20 62 79  They are used by
a730: 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e   code in notify.
a740: 63 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68  c. .  **.  ** Wh
a750: 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e  en X.pUnlockConn
a760: 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20  ection==Y, that 
a770: 6d 65 61 6e 73 20 74 68 61 74 20 58 20 69 73 20  means that X is 
a780: 77 61 69 74 69 6e 67 20 66 6f 72 20 59 20 74 6f  waiting for Y to
a790: 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20  .  ** unlock so 
a7a0: 74 68 61 74 20 69 74 20 63 61 6e 20 70 72 6f 63  that it can proc
a7b0: 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57  eed..  **.  ** W
a7c0: 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43  hen X.pBlockingC
a7d0: 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68  onnection==Y, th
a7e0: 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 73 6f  at means that so
a7f0: 6d 65 74 68 69 6e 67 20 74 68 61 74 20 58 20 74  mething that X t
a800: 72 69 65 64 0a 20 20 2a 2a 20 74 72 69 65 64 20  ried.  ** tried 
a810: 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79 20 66  to do recently f
a820: 61 69 6c 65 64 20 77 69 74 68 20 61 6e 20 53 51  ailed with an SQ
a830: 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f  LITE_LOCKED erro
a840: 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20  r due to locks. 
a850: 20 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a 20   ** held by Y.. 
a860: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
a870: 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69  BlockingConnecti
a880: 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f  on; /* Connectio
a890: 6e 20 74 68 61 74 20 63 61 75 73 65 64 20 53 51  n that caused SQ
a8a0: 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20  LITE_LOCKED */. 
a8b0: 20 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63   sqlite3 *pUnloc
a8c0: 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20  kConnection;    
a8d0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63         /* Connec
a8e0: 74 69 6f 6e 20 74 6f 20 77 61 74 63 68 20 66 6f  tion to watch fo
a8f0: 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f  r unlock */.  vo
a900: 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20  id *pUnlockArg; 
a910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a920: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
a930: 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79  to xUnlockNotify
a940: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e   */.  void (*xUn
a950: 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64  lockNotify)(void
a960: 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55   **, int);  /* U
a970: 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c  nlock notify cal
a980: 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74  lback */.  sqlit
a990: 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64  e3 *pNextBlocked
a9a0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  ;        /* Next
a9b0: 20 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20   in list of all 
a9c0: 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69  blocked connecti
a9d0: 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ons */.#endif.#i
a9e0: 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52  fdef SQLITE_USER
a9f0: 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a  _AUTHENTICATION.
aa00: 20 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75    sqlite3_userau
aa10: 74 68 20 61 75 74 68 3b 20 20 20 20 20 20 20 20  th auth;        
aa20: 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69  /* User authenti
aa30: 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69  cation informati
aa40: 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  on */.#endif.};.
aa50: 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74  ./*.** A macro t
aa60: 6f 20 64 69 73 63 6f 76 65 72 20 74 68 65 20 65  o discover the e
aa70: 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 64 61 74  ncoding of a dat
aa80: 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  abase..*/.#defin
aa90: 65 20 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d  e ENC(db) ((db)-
aaa0: 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[0].pSchema-
aab0: 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  >enc)../*.** Pos
aac0: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
aad0: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61   the sqlite3.fla
aae0: 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  gs..*/.#define S
aaf0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
ab00: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 31 20       0x00000001 
ab10: 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63   /* True to trac
ab20: 65 20 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e  e VDBE execution
ab30: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ab40: 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
ab50: 20 20 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a    0x00000002  /*
ab60: 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73   Uncommitted Has
ab70: 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20  h table changes 
ab80: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ab90: 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20  E_FullFSync     
aba0: 20 30 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20   0x00000004  /* 
abb0: 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f  Use full fsync o
abc0: 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f  n the backend */
abd0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
abe0: 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30  CkptFullFSync  0
abf0: 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73  x00000008  /* Us
ac00: 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72  e full fsync for
ac10: 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23   checkpoint */.#
ac20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61  define SQLITE_Ca
ac30: 63 68 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30  cheSpill     0x0
ac40: 30 30 30 30 30 31 30 20 20 2f 2a 20 4f 4b 20 74  0000010  /* OK t
ac50: 6f 20 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61  o spill pager ca
ac60: 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  che */.#define S
ac70: 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d  QLITE_FullColNam
ac80: 65 73 20 20 20 30 78 30 30 30 30 30 30 32 30 20  es   0x00000020 
ac90: 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f   /* Show full co
aca0: 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45  lumn names on SE
acb0: 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LECT */.#define 
acc0: 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e  SQLITE_ShortColN
acd0: 61 6d 65 73 20 20 30 78 30 30 30 30 30 30 34 30  ames  0x00000040
ace0: 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20    /* Show short 
acf0: 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f  columns names */
ad00: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ad10: 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30  CountRows      0
ad20: 78 30 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f  x00000080  /* Co
ad30: 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64  unt rows changed
ad40: 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20   by INSERT, */. 
ad50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad70: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45           /*   DE
ad80: 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20  LETE, or UPDATE 
ad90: 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20  and return */.  
ada0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
adb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
adc0: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65          /*   the
add0: 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63   count using a c
ade0: 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66  allback. */.#def
adf0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43  ine SQLITE_NullC
ae00: 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30  allback   0x0000
ae10: 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  0100  /* Invoke 
ae20: 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63  the callback onc
ae30: 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20  e if the */.    
ae40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae60: 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c        /*   resul
ae70: 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a  t set is empty *
ae80: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ae90: 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 20  _SqlTrace       
aea0: 30 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44  0x00000200  /* D
aeb0: 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61  ebug print SQL a
aec0: 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f  s it executes */
aed0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
aee0: 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30  VdbeListing    0
aef0: 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 44 65  x00000400  /* De
af00: 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20  bug listings of 
af10: 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f  VDBE programs */
af20: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
af30: 57 72 69 74 65 53 63 68 65 6d 61 20 20 20 20 30  WriteSchema    0
af40: 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b  x00000800  /* OK
af50: 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54   to update SQLIT
af60: 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66  E_MASTER */.#def
af70: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41  ine SQLITE_VdbeA
af80: 64 64 6f 70 54 72 61 63 65 20 30 78 30 30 30 30  ddopTrace 0x0000
af90: 31 30 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73  1000  /* Trace s
afa0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
afb0: 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69  ) calls */.#defi
afc0: 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65  ne SQLITE_Ignore
afd0: 43 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 32  Checks   0x00002
afe0: 30 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65  000  /* Do not e
aff0: 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e  nforce check con
b000: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
b010: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55  ine SQLITE_ReadU
b020: 6e 63 6f 6d 6d 69 74 74 65 64 20 30 78 30 30 30  ncommitted 0x000
b030: 34 30 30 30 20 20 2f 2a 20 46 6f 72 20 73 68 61  4000  /* For sha
b040: 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a  red-cache mode *
b050: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b060: 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20  _LegacyFileFmt  
b070: 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 43  0x00008000  /* C
b080: 72 65 61 74 65 20 6e 65 77 20 64 61 74 61 62 61  reate new databa
b090: 73 65 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20  ses in format 1 
b0a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b0b0: 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 20  E_RecoveryMode  
b0c0: 20 30 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20   0x00010000  /* 
b0d0: 49 67 6e 6f 72 65 20 73 63 68 65 6d 61 20 65 72  Ignore schema er
b0e0: 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rors */.#define 
b0f0: 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72  SQLITE_ReverseOr
b100: 64 65 72 20 20 20 30 78 30 30 30 32 30 30 30 30  der   0x00020000
b110: 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f    /* Reverse uno
b120: 72 64 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a  rdered SELECTs *
b130: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b140: 5f 52 65 63 54 72 69 67 67 65 72 73 20 20 20 20  _RecTriggers    
b150: 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 45  0x00040000  /* E
b160: 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76 65 20  nable recursive 
b170: 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66  triggers */.#def
b180: 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69  ine SQLITE_Forei
b190: 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30 30 38  gnKeys    0x0008
b1a0: 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65  0000  /* Enforce
b1b0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
b1c0: 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65  straints  */.#de
b1d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f  fine SQLITE_Auto
b1e0: 49 6e 64 65 78 20 20 20 20 20 20 30 78 30 30 31  Index      0x001
b1f0: 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  00000  /* Enable
b200: 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78   automatic index
b210: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
b220: 4c 49 54 45 5f 50 72 65 66 65 72 42 75 69 6c 74  LITE_PreferBuilt
b230: 69 6e 20 20 30 78 30 30 32 30 30 30 30 30 20 20  in  0x00200000  
b240: 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f  /* Preference to
b250: 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20   built-in funcs 
b260: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b270: 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20  E_LoadExtension 
b280: 20 30 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20   0x00400000  /* 
b290: 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65  Enable load_exte
b2a0: 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  nsion */.#define
b2b0: 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72   SQLITE_EnableTr
b2c0: 69 67 67 65 72 20 20 30 78 30 30 38 30 30 30 30  igger  0x0080000
b2d0: 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e  0  /* True to en
b2e0: 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
b2f0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b300: 44 65 66 65 72 46 4b 73 20 20 20 20 20 20 20 30  DeferFKs       0
b310: 78 30 31 30 30 30 30 30 30 20 20 2f 2a 20 44 65  x01000000  /* De
b320: 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74  fer all FK const
b330: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
b340: 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e  e SQLITE_QueryOn
b350: 6c 79 20 20 20 20 20 20 30 78 30 32 30 30 30 30  ly      0x020000
b360: 30 30 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64  00  /* Disable d
b370: 61 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 20  atabase changes 
b380: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b390: 45 5f 56 64 62 65 45 51 50 20 20 20 20 20 20 20  E_VdbeEQP       
b3a0: 20 30 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20   0x04000000  /* 
b3b0: 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55  Debug EXPLAIN QU
b3c0: 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 0a 0a 2f 2a  ERY PLAN */.../*
b3d0: 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20  .** Bits of the 
b3e0: 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61  sqlite3.dbOptFla
b3f0: 67 73 20 66 69 65 6c 64 20 74 68 61 74 20 61 72  gs field that ar
b400: 65 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a  e used by the.**
b410: 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
b420: 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53  ntrol(SQLITE_TES
b430: 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49  TCTRL_OPTIMIZATI
b440: 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61  ONS,...) interfa
b450: 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69  ce to.** selecti
b460: 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72  vely disable var
b470: 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ious optimizatio
b480: 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ns..*/.#define S
b490: 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74  QLITE_QueryFlatt
b4a0: 65 6e 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a  ener 0x0001   /*
b4b0: 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e   Query flattenin
b4c0: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  g */.#define SQL
b4d0: 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20  ITE_ColumnCache 
b4e0: 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43     0x0002   /* C
b4f0: 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23  olumn cache */.#
b500: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72  define SQLITE_Gr
b510: 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30 78 30  oupByOrder   0x0
b520: 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59  004   /* GROUPBY
b530: 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42   cover of ORDERB
b540: 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  Y */.#define SQL
b550: 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e  ITE_FactorOutCon
b560: 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43  st 0x0008   /* C
b570: 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e  onstant factorin
b580: 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20 20 20 20  g */./*         
b590: 20 20 20 20 20 20 20 6e 6f 74 20 75 73 65 64 20         not used 
b5a0: 20 20 20 30 78 30 30 31 30 20 20 20 2f 2f 20 57     0x0010   // W
b5b0: 61 73 3a 20 53 51 4c 49 54 45 5f 49 64 78 52 65  as: SQLITE_IdxRe
b5c0: 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64 65 66 69  alAsInt */.#defi
b5d0: 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e  ne SQLITE_Distin
b5e0: 63 74 4f 70 74 20 20 20 20 30 78 30 30 32 30 20  ctOpt    0x0020 
b5f0: 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73    /* DISTINCT us
b600: 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23  ing indexes */.#
b610: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
b620: 76 65 72 49 64 78 53 63 61 6e 20 20 20 30 78 30  verIdxScan   0x0
b630: 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e  040   /* Coverin
b640: 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f  g index scans */
b650: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b660: 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30  OrderByIdxJoin 0
b670: 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44 45 52  x0080   /* ORDER
b680: 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61   BY of joins via
b690: 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
b6a0: 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43 6f 72  e SQLITE_SubqCor
b6b0: 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30 20 20  outine  0x0100  
b6c0: 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73 75 62   /* Evaluate sub
b6d0: 71 75 65 72 69 65 73 20 61 73 20 63 6f 72 6f 75  queries as corou
b6e0: 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tines */.#define
b6f0: 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69   SQLITE_Transiti
b700: 76 65 20 20 20 20 20 30 78 30 32 30 30 20 20 20  ve     0x0200   
b710: 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f  /* Transitive co
b720: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
b730: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74  fine SQLITE_Omit
b740: 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30 34 30  NoopJoin   0x040
b750: 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73  0   /* Omit unus
b760: 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69  ed tables in joi
b770: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
b780: 4c 49 54 45 5f 53 74 61 74 33 34 20 20 20 20 20  LITE_Stat34     
b790: 20 20 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20      0x0800   /* 
b7a0: 55 73 65 20 53 54 41 54 33 20 6f 72 20 53 54 41  Use STAT3 or STA
b7b0: 54 34 20 64 61 74 61 20 2a 2f 0a 23 64 65 66 69  T4 data */.#defi
b7c0: 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74  ne SQLITE_AllOpt
b7d0: 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20  s        0xffff 
b7e0: 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a    /* All optimiz
b7f0: 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ations */../*.**
b800: 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74   Macros for test
b810: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
b820: 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ot optimizations
b830: 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20   are enabled or 
b840: 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66  disabled..*/.#if
b850: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
b860: 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64  _BUILTIN_TEST.#d
b870: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
b880: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
b890: 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62  ask)  (((db)->db
b8a0: 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29  OptFlags&(mask))
b8b0: 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74  !=0).#define Opt
b8c0: 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64  imizationEnabled
b8d0: 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28  (db, mask)   (((
b8e0: 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26  db)->dbOptFlags&
b8f0: 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73  (mask))==0).#els
b900: 65 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  e.#define Optimi
b910: 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64  zationDisabled(d
b920: 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65 66  b, mask)  0.#def
b930: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
b940: 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  Enabled(db, mask
b950: 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  )   1.#endif../*
b960: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
b970: 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74  if it OK to fact
b980: 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72  or constant expr
b990: 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65  essions into the
b9a0: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a   initialization.
b9b0: 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67  ** code. The arg
b9c0: 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73 65  ument is a Parse
b9d0: 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20   object for the 
b9e0: 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a  code generator..
b9f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74  */.#define Const
ba00: 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29  FactorOk(P) ((P)
ba10: 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29  ->okConstFactor)
ba20: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
ba30: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
ba40: 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65  sqlite.magic fie
ba50: 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ld..** The numbe
ba60: 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20  rs are obtained 
ba70: 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61  at random and ha
ba80: 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65  ve no special me
ba90: 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20  aning, other.** 
baa0: 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69  than being disti
bab0: 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f  nct from one ano
bac0: 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ther..*/.#define
bad0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50   SQLITE_MAGIC_OP
bae0: 45 4e 20 20 20 20 20 30 78 61 30 32 39 61 36 39  EN     0xa029a69
baf0: 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69  7  /* Database i
bb00: 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s open */.#defin
bb10: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43  e SQLITE_MAGIC_C
bb20: 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63 32 64  LOSED   0x9f3c2d
bb30: 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  33  /* Database 
bb40: 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65  is closed */.#de
bb50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
bb60: 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62 37  C_SICK     0x4b7
bb70: 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20  71290  /* Error 
bb80: 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f  and awaiting clo
bb90: 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  se */.#define SQ
bba0: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20  LITE_MAGIC_BUSY 
bbb0: 20 20 20 20 30 78 66 30 33 62 37 39 30 36 20 20      0xf03b7906  
bbc0: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75 72 72  /* Database curr
bbd0: 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a  ently in use */.
bbe0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
bbf0: 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78  AGIC_ERROR    0x
bc00: 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20  b5357930  /* An 
bc10: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72  SQLITE_MISUSE er
bc20: 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a  ror occurred */.
bc30: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
bc40: 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78  AGIC_ZOMBIE   0x
bc50: 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f  64cffc7f  /* Clo
bc60: 73 65 20 77 69 74 68 20 6c 61 73 74 20 73 74 61  se with last sta
bc70: 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a  tement close */.
bc80: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
bc90: 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69  function is defi
bca0: 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ned by an instan
bcb0: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
bcc0: 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  ing.** structure
bcd0: 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  .  A pointer to 
bce0: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
bcf0: 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
bd00: 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a 20  sqlite.aFunc.** 
bd10: 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57 68 65  hash table.  Whe
bd20: 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63 74  n multiple funct
bd30: 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20 73 61  ions have the sa
bd40: 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68 61 73  me name, the has
bd50: 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74  h table.** point
bd60: 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c 69  s to a linked li
bd70: 73 74 20 6f 66 20 74 68 65 73 65 20 73 74 72 75  st of these stru
bd80: 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63  ctures..*/.struc
bd90: 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 31  t FuncDef {.  i1
bda0: 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20  6 nArg;         
bdb0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
bdc0: 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d  arguments.  -1 m
bdd0: 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a  eans unlimited *
bde0: 2f 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61 67  /.  u16 funcFlag
bdf0: 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65  s;       /* Some
be00: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
be10: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f  SQLITE_FUNC_* */
be20: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
be30: 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20  ta;     /* User 
be40: 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a  data parameter *
be50: 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65  /.  FuncDef *pNe
be60: 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
be70: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73   function with s
be80: 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f  ame name */.  vo
be90: 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69  id (*xFunc)(sqli
bea0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
beb0: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
bec0: 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20 66 75  ); /* Regular fu
bed0: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
bee0: 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65   (*xStep)(sqlite
bef0: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
bf00: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
bf10: 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 73 74   /* Aggregate st
bf20: 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  ep */.  void (*x
bf30: 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65  Finalize)(sqlite
bf40: 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20  3_context*);    
bf50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
bf60: 67 67 72 65 67 61 74 65 20 66 69 6e 61 6c 69 7a  ggregate finaliz
bf70: 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e  er */.  char *zN
bf80: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ame;         /* 
bf90: 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  SQL name of the 
bfa0: 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46  function. */.  F
bfb0: 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20  uncDef *pHash;  
bfc0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68      /* Next with
bfd0: 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d   a different nam
bfe0: 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20 68  e but the same h
bff0: 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65 73  ash */.  FuncDes
c000: 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75  tructor *pDestru
c010: 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72  ctor;   /* Refer
c020: 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73  ence counted des
c030: 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e  tructor function
c040: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
c050: 69 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63  is structure enc
c060: 61 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72  apsulates a user
c070: 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75  -function destru
c080: 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61  ctor callback (a
c090: 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
c0a0: 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e  using create_fun
c0b0: 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20  ction_v2()) and 
c0c0: 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  a reference coun
c0d0: 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65  ter. When.** cre
c0e0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
c0f0: 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63  ) is called to c
c100: 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e  reate a function
c110: 20 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74   with a destruct
c120: 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20  or,.** a single 
c130: 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
c140: 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ype is allocated
c150: 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  . FuncDestructor
c160: 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 20  .nRef is set to 
c170: 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
c180: 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  f FuncDef object
c190: 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68 65  s created (eithe
c1a0: 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64  r 1 or 3, depend
c1b0: 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a  ing on whether.*
c1c0: 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65  * or not the spe
c1d0: 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20  cified encoding 
c1e0: 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20  is SQLITE_ANY). 
c1f0: 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73  The FuncDef.pDes
c200: 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65  tructor.** membe
c210: 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65  r of each of the
c220: 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a   new FuncDef obj
c230: 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20 70  ects is set to p
c240: 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f  oint to the allo
c250: 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73  cated.** FuncDes
c260: 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  tructor..**.** T
c270: 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20  hereafter, when 
c280: 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44  one of the FuncD
c290: 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65  ef objects is de
c2a0: 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65 72  leted, the refer
c2b0: 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e  ence.** count on
c2c0: 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20   this object is 
c2d0: 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65  decremented. Whe
c2e0: 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c 20  n it reaches 0, 
c2f0: 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a  the destructor.*
c300: 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64  * is invoked and
c310: 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75 63   the FuncDestruc
c320: 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66 72  tor structure fr
c330: 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  eed..*/.struct F
c340: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a  uncDestructor {.
c350: 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f    int nRef;.  vo
c360: 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76  id (*xDestroy)(v
c370: 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a  oid *);.  void *
c380: 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f  pUserData;.};../
c390: 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
c3a0: 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66  lues for FuncDef
c3b0: 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68  .flags.  Note th
c3c0: 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61  at the _LENGTH a
c3d0: 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61  nd _TYPEOF.** va
c3e0: 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73  lues must corres
c3f0: 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c  pond to OPFLAG_L
c400: 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46  ENGTHARG and OPF
c410: 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20  LAG_TYPEOFARG.  
c420: 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73  There.** are ass
c430: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
c440: 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20   in the code to 
c450: 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2f 0a  verify this..*/.
c460: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
c470: 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30  UNC_ENCMASK  0x0
c480: 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46  03 /* SQLITE_UTF
c490: 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  8, SQLITE_UTF16B
c4a0: 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a  E or UTF16LE */.
c4b0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
c4c0: 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30  UNC_LIKE     0x0
c4d0: 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20  04 /* Candidate 
c4e0: 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74  for the LIKE opt
c4f0: 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65  imization */.#de
c500: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
c510: 5f 43 41 53 45 20 20 20 20 20 30 78 30 30 38 20  _CASE     0x008 
c520: 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76  /* Case-sensitiv
c530: 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63  e LIKE-type func
c540: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
c550: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45  SQLITE_FUNC_EPHE
c560: 4d 20 20 20 20 30 78 30 31 30 20 2f 2a 20 45 70  M    0x010 /* Ep
c570: 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65  hemeral.  Delete
c580: 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64   with VDBE */.#d
c590: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
c5a0: 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 32 30  C_NEEDCOLL 0x020
c5b0: 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75   /* sqlite3GetFu
c5c0: 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68  ncCollSeq() migh
c5d0: 74 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f 0a 23  t be called */.#
c5e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
c5f0: 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 34  NC_LENGTH   0x04
c600: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65  0 /* Built-in le
c610: 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20  ngth() function 
c620: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c630: 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20  E_FUNC_TYPEOF   
c640: 30 78 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69  0x080 /* Built-i
c650: 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  n typeof() funct
c660: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
c670: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54  QLITE_FUNC_COUNT
c680: 20 20 20 20 30 78 31 30 30 20 2f 2a 20 42 75 69      0x100 /* Bui
c690: 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61  lt-in count(*) a
c6a0: 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66  ggregate */.#def
c6b0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
c6c0: 43 4f 41 4c 45 53 43 45 20 30 78 32 30 30 20 2f  COALESCE 0x200 /
c6d0: 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65  * Built-in coale
c6e0: 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28  sce() or ifnull(
c6f0: 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ) */.#define SQL
c700: 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c  ITE_FUNC_UNLIKEL
c710: 59 20 30 78 34 30 30 20 2f 2a 20 42 75 69 6c 74  Y 0x400 /* Built
c720: 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66  -in unlikely() f
c730: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
c740: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
c750: 4f 4e 53 54 41 4e 54 20 30 78 38 30 30 20 2f 2a  ONSTANT 0x800 /*
c760: 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73   Constant inputs
c770: 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74   give a constant
c780: 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69   output */.#defi
c790: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d  ne SQLITE_FUNC_M
c7a0: 49 4e 4d 41 58 20 20 30 78 31 30 30 30 20 2f 2a  INMAX  0x1000 /*
c7b0: 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29 20   True for min() 
c7c0: 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65 67  and max() aggreg
c7d0: 61 74 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  ates */../*.** T
c7e0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72  he following thr
c7f0: 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54  ee macros, FUNCT
c800: 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28  ION(), LIKEFUNC(
c810: 29 20 61 6e 64 20 41 47 47 52 45 47 41 54 45 28  ) and AGGREGATE(
c820: 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  ) are.** used to
c830: 20 63 72 65 61 74 65 20 74 68 65 20 69 6e 69 74   create the init
c840: 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65  ializers for the
c850: 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75   FuncDef structu
c860: 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e  res..**.**   FUN
c870: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
c880: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
c890: 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  unc).**     Used
c8a0: 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61   to create a sca
c8b0: 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  lar function def
c8c0: 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e  inition of a fun
c8d0: 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20  ction zName .** 
c8e0: 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20      implemented 
c8f0: 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78 46  by C function xF
c900: 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74 73  unc that accepts
c910: 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 2e   nArg arguments.
c920: 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75   The.**     valu
c930: 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72 67  e passed as iArg
c940: 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76   is cast to a (v
c950: 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20 61  oid*) and made a
c960: 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20  vailable.**     
c970: 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74 61  as the user-data
c980: 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64   (sqlite3_user_d
c990: 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20 66  ata()) for the f
c9a0: 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a 2a 20  unction. If .** 
c9b0: 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43      argument bNC
c9c0: 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74   is true, then t
c9d0: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  he SQLITE_FUNC_N
c9e0: 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20  EEDCOLL flag is 
c9f0: 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55  set..**.**   VFU
ca00: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
ca10: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
ca20: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b  Func).**     Lik
ca30: 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70  e FUNCTION excep
ca40: 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53  t it omits the S
ca50: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
ca60: 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20  ANT flag..**.** 
ca70: 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d    AGGREGATE(zNam
ca80: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
ca90: 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  NC, xStep, xFina
caa0: 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  l).**     Used t
cab0: 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72  o create an aggr
cac0: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64  egate function d
cad0: 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d  efinition implem
cae0: 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20  ented by.**     
caf0: 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20  the C functions 
cb00: 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c  xStep and xFinal
cb10: 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72  . The first four
cb20: 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20   parameters.**  
cb30: 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74     are interpret
cb40: 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ed in the same w
cb50: 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20  ay as the first 
cb60: 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  4 parameters to.
cb70: 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28  **     FUNCTION(
cb80: 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46  )..**.**   LIKEF
cb90: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
cba0: 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a   pArg, flags).**
cbb0: 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
cbc0: 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e  ate a scalar fun
cbd0: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
cbe0: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a   of a function z
cbf0: 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68 61  Name .**     tha
cc00: 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61  t accepts nArg a
cc10: 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20  rguments and is 
cc20: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61  implemented by a
cc30: 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20   call to C .**  
cc40: 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
cc50: 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
cc60: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
cc70: 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
cc80: 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
cc90: 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
cca0: 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
ccb0: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
ccc0: 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
ccd0: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
cce0: 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
ccf0: 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
cd00: 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
cd10: 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
cd20: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
cd30: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
cd40: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
cd50: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
cd60: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
cd70: 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
cd80: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
cd90: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
cda0: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
cdb0: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
cdc0: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
cdd0: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
cde0: 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  VFUNCTION(zName,
cdf0: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
ce00: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
ce10: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
ce20: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
ce30: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
ce40: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
ce50: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
ce60: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
ce70: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
ce80: 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c  FUNCTION2(zName,
ce90: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
cea0: 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c  , xFunc, extraFl
ceb0: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53  ags) \.  {nArg,S
cec0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
ced0: 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
cee0: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
cef0: 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61  _NEEDCOLL)|extra
cf00: 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54  Flags,\.   SQLIT
cf10: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
cf20: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
cf30: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
cf40: 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55  }.#define STR_FU
cf50: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
cf60: 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78  rg, pArg, bNC, x
cf70: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
cf80: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
cf90: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
cfa0: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
cfb0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
cfc0: 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75 6e     pArg, 0, xFun
cfd0: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
cfe0: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 4c   0, 0}.#define L
cff0: 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
d000: 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29  Arg, arg, flags)
d010: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
d020: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
d030: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61  |SQLITE_UTF8|fla
d040: 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a  gs, \.   (void *
d050: 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e  )arg, 0, likeFun
d060: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
d070: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 41   0, 0}.#define A
d080: 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
d090: 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
d0a0: 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a  Step, xFinal) \.
d0b0: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
d0c0: 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
d0d0: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
d0e0: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
d0f0: 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
d100: 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c  0, xStep,xFinal,
d110: 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 23 64 65 66  #zName,0,0}.#def
d120: 69 6e 65 20 41 47 47 52 45 47 41 54 45 32 28 7a  ine AGGREGATE2(z
d130: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
d140: 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e   nc, xStep, xFin
d150: 61 6c 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  al, extraFlags) 
d160: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
d170: 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54  E_UTF8|(nc*SQLIT
d180: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
d190: 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20  |extraFlags, \. 
d1a0: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
d1b0: 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c 20  PTR(arg), 0, 0, 
d1c0: 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e  xStep,xFinal,#zN
d1d0: 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20  ame,0,0}../*.** 
d1e0: 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65  All current save
d1f0: 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65  points are store
d200: 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d in a linked li
d210: 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a  st starting at.*
d220: 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70  * sqlite3.pSavep
d230: 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20  oint. The first 
d240: 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c  element in the l
d250: 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20  ist is the most 
d260: 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e  recently.** open
d270: 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61  ed savepoint. Sa
d280: 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64  vepoints are add
d290: 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62  ed to the list b
d2a0: 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50  y the vdbe.** OP
d2b0: 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
d2c0: 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  uction..*/.struc
d2d0: 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20  t Savepoint {.  
d2e0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
d2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d300: 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74      /* Savepoint
d310: 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69   name (nul-termi
d320: 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20  nated) */.  i64 
d330: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
d340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d350: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
d360: 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69  erred fk violati
d370: 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ons */.  i64 nDe
d380: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
d390: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d3a0: 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
d3b0: 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20  ed imm fk. */.  
d3c0: 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74  Savepoint *pNext
d3d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d3e0: 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61      /* Parent sa
d3f0: 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29  vepoint (if any)
d400: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
d410: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
d420: 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63 6f  used as the seco
d430: 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  nd parameter to 
d440: 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
d450: 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68  (),.** and as th
d460: 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
d470: 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e   the OP_Savepoin
d480: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
d490: 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  /.#define SAVEPO
d4a0: 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30  INT_BEGIN      0
d4b0: 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
d4c0: 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a  NT_RELEASE    1.
d4d0: 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
d4e0: 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a  T_ROLLBACK   2..
d4f0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69  ./*.** Each SQLi
d500: 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75  te module (virtu
d510: 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  al table definit
d520: 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20  ion) is defined 
d530: 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
d540: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
d550: 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73 74  ng structure, st
d560: 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
d570: 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68  te3.aModule.** h
d580: 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74  ash table..*/.st
d590: 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20  ruct Module {.  
d5a0: 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
d5b0: 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20  dule *pModule;  
d5c0: 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
d5d0: 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63   pointers */.  c
d5e0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
d5f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d600: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73      /* Name pass
d610: 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64  ed to create_mod
d620: 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ule() */.  void 
d630: 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20 20  *pAux;          
d640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d650: 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20 74  /* pAux passed t
d660: 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  o create_module(
d670: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44  ) */.  void (*xD
d680: 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b  estroy)(void *);
d690: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
d6a0: 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72  odule destructor
d6b0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a   function */.};.
d6c0: 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ./*.** informati
d6d0: 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f  on about each co
d6e0: 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74  lumn of an SQL t
d6f0: 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20  able is held in 
d700: 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f  an instance.** o
d710: 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
d720: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75  ..*/.struct Colu
d730: 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  mn {.  char *zNa
d740: 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  me;     /* Name 
d750: 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  of this column *
d760: 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b  /.  Expr *pDflt;
d770: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
d780: 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
d790: 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  lumn */.  char *
d7a0: 7a 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 4f 72  zDflt;     /* Or
d7b0: 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74  iginal text of t
d7c0: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
d7d0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 79 70   */.  char *zTyp
d7e0: 65 3b 20 20 20 20 20 2f 2a 20 44 61 74 61 20 74  e;     /* Data t
d7f0: 79 70 65 20 66 6f 72 20 74 68 69 73 20 63 6f 6c  ype for this col
d800: 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  umn */.  char *z
d810: 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  Coll;     /* Col
d820: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e  lating sequence.
d830: 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74    If NULL, use t
d840: 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  he default */.  
d850: 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20  u8 notNull;     
d860: 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20   /* An OE_ code 
d870: 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e  for handling a N
d880: 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
d890: 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  nt */.  char aff
d8a0: 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20  inity;   /* One 
d8b0: 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  of the SQLITE_AF
d8c0: 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a  F_... values */.
d8d0: 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20    u8 szEst;     
d8e0: 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
d8f0: 73 69 7a 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  size of this col
d900: 75 6d 6e 2e 20 20 49 4e 54 3d 3d 31 20 2a 2f 0a  umn.  INT==1 */.
d910: 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20    u8 colFlags;  
d920: 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72     /* Boolean pr
d930: 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43  operties.  See C
d940: 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20  OLFLAG_ defines 
d950: 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  below */.};../* 
d960: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
d970: 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61  or Column.colFla
d980: 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  gs:.*/.#define C
d990: 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20  OLFLAG_PRIMKEY  
d9a0: 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c  0x0001    /* Col
d9b0: 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74  umn is part of t
d9c0: 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a  he primary key *
d9d0: 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
d9e0: 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30 30  G_HIDDEN   0x000
d9f0: 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e  2    /* A hidden
da00: 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72   column in a vir
da10: 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f  tual table */../
da20: 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e  *.** A "Collatin
da30: 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64  g Sequence" is d
da40: 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73  efined by an ins
da50: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
da60: 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74  lowing.** struct
da70: 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c  ure. Conceptuall
da80: 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73  y, a collating s
da90: 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73  equence consists
daa0: 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a   of a name and.*
dab0: 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72  * a comparison r
dac0: 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69  outine that defi
dad0: 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66  nes the order of
dae0: 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a   that sequence..
daf0: 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71  **.** If CollSeq
db00: 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69  .xCmp is NULL, i
db10: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t means that the
db20: 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
db30: 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69  quence is undefi
db40: 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75  ned.  Indices bu
db50: 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69  ilt on an undefi
db60: 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  ned.** collating
db70: 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f   sequence may no
db80: 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69  t be read or wri
db90: 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tten..*/.struct 
dba0: 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72  CollSeq {.  char
dbb0: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
dbc0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
dbd0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
dbe0: 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64  nce, UTF-8 encod
dbf0: 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ed */.  u8 enc; 
dc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
dc10: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68   Text encoding h
dc20: 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29  andled by xCmp()
dc30: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
dc40: 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  r;          /* F
dc50: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
dc60: 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74   xCmp() */.  int
dc70: 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69   (*xCmp)(void*,i
dc80: 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  nt, const void*,
dc90: 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64   int, const void
dca0: 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  *);.  void (*xDe
dcb0: 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44  l)(void*);  /* D
dcc0: 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55  estructor for pU
dcd0: 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ser */.};../*.**
dce0: 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61   A sort order ca
dcf0: 6e 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20  n be either ASC 
dd00: 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66  or DESC..*/.#def
dd10: 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53  ine SQLITE_SO_AS
dd20: 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f  C       0  /* So
dd30: 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
dd40: 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  order */.#define
dd50: 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20   SQLITE_SO_DESC 
dd60: 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20       1  /* Sort 
dd70: 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
dd80: 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c  er */../*.** Col
dd90: 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70  umn affinity typ
dda0: 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20  es..**.** These 
ddb0: 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65  used to have mne
ddc0: 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20  monic name like 
ddd0: 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41  'i' for SQLITE_A
dde0: 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a  FF_INTEGER and.*
ddf0: 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45  * 't' for SQLITE
de00: 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20  _AFF_TEXT.  But 
de10: 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69  we can save a li
de20: 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69  ttle space and i
de30: 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70  mprove.** the sp
de40: 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20  eed a little by 
de50: 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61  numbering the va
de60: 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65  lues consecutive
de70: 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20  ly.  .**.** But 
de80: 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72  rather than star
de90: 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77  t with 0 or 1, w
dea0: 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 41 27  e begin with 'A'
deb0: 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20  .  That way,.** 
dec0: 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66  when multiple af
ded0: 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65  finity types are
dee0: 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e   concatenated in
def0: 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a  to a string and.
df00: 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50  ** used as the P
df10: 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20  4 operand, they 
df20: 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61  will be more rea
df30: 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  dable..**.** Not
df40: 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20  e also that the 
df50: 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72  numeric types ar
df60: 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68  e grouped togeth
df70: 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69  er so that testi
df80: 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65  ng.** for a nume
df90: 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69  ric type is a si
dfa0: 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  ngle comparison.
dfb0: 20 20 41 6e 64 20 74 68 65 20 4e 4f 4e 45 20 74    And the NONE t
dfc0: 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f  ype is first..*/
dfd0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dfe0: 41 46 46 5f 4e 4f 4e 45 20 20 20 20 20 27 41 27  AFF_NONE     'A'
dff0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e000: 41 46 46 5f 54 45 58 54 20 20 20 20 20 27 42 27  AFF_TEXT     'B'
e010: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e020: 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27  AFF_NUMERIC  'C'
e030: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e040: 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27  AFF_INTEGER  'D'
e050: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e060: 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27  AFF_REAL     'E'
e070: 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ..#define sqlite
e080: 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  3IsNumericAffini
e090: 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c  ty(X)  ((X)>=SQL
e0a0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29  ITE_AFF_NUMERIC)
e0b0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
e0c0: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75  TE_AFF_MASK valu
e0d0: 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65  es masks off the
e0e0: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74   significant bit
e0f0: 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e  s of an.** affin
e100: 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23  ity value. .*/.#
e110: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
e120: 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34 37 0a  F_MASK     0x47.
e130: 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61  ./*.** Additiona
e140: 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61  l bit values tha
e150: 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69  t can be ORed wi
e160: 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77  th an affinity w
e170: 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69  ithout.** changi
e180: 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e  ng the affinity.
e190: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  .**.** The SQLIT
e1a0: 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69  E_NOTNULL flag i
e1b0: 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  s a combination 
e1c0: 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55  of NULLEQ and JU
e1d0: 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20  MPIFNULL..** It 
e1e0: 63 61 75 73 65 73 20 61 6e 20 61 73 73 65 72 74  causes an assert
e1f0: 28 29 20 74 6f 20 66 69 72 65 20 69 66 20 65 69  () to fire if ei
e200: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74 6f 20  ther operand to 
e210: 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20  a comparison.** 
e220: 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c  operator is NULL
e230: 2e 20 20 49 74 20 69 73 20 61 64 64 65 64 20 74  .  It is added t
e240: 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70 61 72  o certain compar
e250: 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 74  ison operators t
e260: 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61 74 20  o.** prove that 
e270: 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61 72 65  the operands are
e280: 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c   always NOT NULL
e290: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
e2a0: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20  ITE_JUMPIFNULL  
e2b0: 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20   0x10  /* jumps 
e2c0: 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
e2d0: 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65  d is NULL */.#de
e2e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52  fine SQLITE_STOR
e2f0: 45 50 32 20 20 20 20 20 20 30 78 32 30 20 20 2f  EP2      0x20  /
e300: 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
e310: 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72  n reg[P2] rather
e320: 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64   than jump */.#d
e330: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c  efine SQLITE_NUL
e340: 4c 45 51 20 20 20 20 20 20 20 30 78 38 30 20 20  LEQ       0x80  
e350: 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a  /* NULL=NULL */.
e360: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
e370: 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78 39 30  OTNULL      0x90
e380: 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
e390: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 65   operands are ne
e3a0: 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a  ver NULL */../*.
e3b0: 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20  ** An object of 
e3c0: 74 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65  this type is cre
e3d0: 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69  ated for each vi
e3e0: 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73  rtual table pres
e3f0: 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61  ent in.** the da
e400: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 0a  tabase schema. .
e410: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74  **.** If the dat
e420: 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
e430: 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65  shared, then the
e440: 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e  re is one instan
e450: 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74  ce of this.** st
e460: 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68  ructure for each
e470: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
e480: 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20  tion (sqlite3*) 
e490: 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68  that uses the sh
e4a0: 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20  ared.** schema. 
e4b0: 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20  This is because 
e4c0: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
e4d0: 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65  nnection require
e4e0: 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65  s its own unique
e4f0: 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
e500: 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
e510: 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f  * handle used to
e520: 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
e530: 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20 69 6d  ual table .** im
e540: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71  plementation. sq
e550: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
e560: 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73  les can not be s
e570: 68 61 72 65 64 20 62 65 74 77 65 65 6e 20 0a 2a  hared between .*
e580: 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * database conne
e590: 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65  ctions, even whe
e5a0: 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68  n the rest of th
e5b0: 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61  e in-memory data
e5c0: 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d 61 20  base .** schema 
e5d0: 69 73 20 73 68 61 72 65 64 2c 20 61 73 20 74 68  is shared, as th
e5e0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
e5f0: 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68   often stores th
e600: 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
e610: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
e620: 70 61 73 73 65 64 20 74 6f 20 69 74 20 76 69 61  passed to it via
e630: 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20   the xConnect() 
e640: 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d 65 74  or xCreate() met
e650: 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e  hod.** during in
e660: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74  itialization int
e670: 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61  ernally. This da
e680: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
e690: 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20  n handle may.** 
e6a0: 74 68 65 6e 20 62 65 20 75 73 65 64 20 62 79 20  then be used by 
e6b0: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
e6c0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
e6d0: 20 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20   to access real 
e6e0: 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74 68 69  tables .** withi
e6f0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  n the database. 
e700: 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70  So that they app
e710: 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74  ear as part of t
e720: 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a 20 74  he callers .** t
e730: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73  ransaction, thes
e740: 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20  e accesses need 
e750: 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74  to be made via t
e760: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
e770: 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   .** connection 
e780: 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20  as that used to 
e790: 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72  execute SQL oper
e7a0: 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69  ations on the vi
e7b0: 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a  rtual table..**.
e7c0: 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62  ** All VTable ob
e7d0: 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65  jects that corre
e7e0: 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c  spond to a singl
e7f0: 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61  e table in a sha
e800: 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  red.** database 
e810: 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69  schema are initi
e820: 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61  ally stored in a
e830: 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69   linked-list poi
e840: 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68  nted to by.** th
e850: 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20  e Table.pVTable 
e860: 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20  member variable 
e870: 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
e880: 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63  ding Table objec
e890: 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71  t..** When an sq
e8a0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
e8b0: 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71  operation is req
e8c0: 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20  uired to access 
e8d0: 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  the virtual.** t
e8e0: 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65  able, it searche
e8f0: 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74  s the list for t
e900: 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63  he VTable that c
e910: 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
e920: 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f  e.** database co
e930: 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74  nnection doing t
e940: 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20  he preparing so 
e950: 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f  as to use the co
e960: 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33  rrect.** sqlite3
e970: 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e  _vtab* handle in
e980: 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75   the compiled qu
e990: 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ery..**.** When 
e9a0: 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62  an in-memory Tab
e9b0: 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c  le object is del
e9c0: 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c  eted (for exampl
e9d0: 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63  e when the.** sc
e9e0: 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65  hema is being re
e9f0: 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20  loaded for some 
ea00: 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61  reason), the VTa
ea10: 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ble objects are 
ea20: 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65 64 20  not .** deleted 
ea30: 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f  and the sqlite3_
ea40: 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72  vtab* handles ar
ea50: 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63  e not xDisconnec
ea60: 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65 64 69  t()ed .** immedi
ea70: 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20  ately. Instead, 
ea80: 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66  they are moved f
ea90: 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56  rom the Table.pV
eaa0: 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a  Table list to.**
eab0: 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20   another linked 
eac0: 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74  list headed by t
ead0: 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  he sqlite3.pDisc
eae0: 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66  onnect member of
eaf0: 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
eb00: 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74  nding sqlite3 st
eb10: 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72  ructure. They ar
eb20: 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78  e then deleted/x
eb30: 44 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a  Disconnected .**
eb40: 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61   next time a sta
eb50: 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72  tement is prepar
eb60: 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71  ed using said sq
eb70: 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20  lite3*. This is 
eb80: 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64  done.** to avoid
eb90: 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73   deadlock issues
eba0: 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69   involving multi
ebb0: 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65  ple sqlite3.mute
ebc0: 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65  x mutexes..** Re
ebd0: 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20  fer to comments 
ebe0: 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73  above function s
ebf0: 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
ec00: 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a  List() for an.**
ec10: 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20   explanation as 
ec20: 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66  to why it is saf
ec30: 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72  e to add an entr
ec40: 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e  y to an sqlite3.
ec50: 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c  pDisconnect.** l
ec60: 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64  ist without hold
ec70: 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f  ing the correspo
ec80: 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75  nding sqlite3.mu
ec90: 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a  tex mutex..**.**
eca0: 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20   The memory for 
ecb0: 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20  objects of this 
ecc0: 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61  type is always a
ecd0: 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a 20  llocated by .** 
ece0: 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28  sqlite3DbMalloc(
ecf0: 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e  ), using the con
ed00: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73  nection handle s
ed10: 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e  tored in VTable.
ed20: 64 62 20 61 73 20 0a 2a 2a 20 74 68 65 20 66 69  db as .** the fi
ed30: 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f  rst argument..*/
ed40: 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b  .struct VTable {
ed50: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
ed60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ed70: 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  Database connect
ed80: 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ion associated w
ed90: 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ith this table *
eda0: 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64  /.  Module *pMod
edb0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
edc0: 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75   Pointer to modu
edd0: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
ede0: 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  n */.  sqlite3_v
edf0: 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20  tab *pVtab;     
ee00: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
ee10: 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a  tab instance */.
ee20: 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
ee30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
ee40: 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
ee50: 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  s to this struct
ee60: 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e  ure */.  u8 bCon
ee70: 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20  straint;        
ee80: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f     /* True if co
ee90: 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73 75  nstraints are su
eea0: 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74  pported */.  int
eeb0: 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20   iSavepoint;    
eec0: 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20         /* Depth 
eed0: 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54  of the SAVEPOINT
eee0: 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62   stack */.  VTab
eef0: 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  le *pNext;      
ef00: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e        /* Next in
ef10: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65   linked list (se
ef20: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a  e above) */.};..
ef30: 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 74  /*.** Each SQL t
ef40: 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e  able is represen
ef50: 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79  ted in memory by
ef60: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
ef70: 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67  the.** following
ef80: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
ef90: 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65 20 69 73  * Table.zName is
efa0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
efb0: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 63 61 73   table.  The cas
efc0: 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61  e of the origina
efd0: 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54 41 42 4c  l.** CREATE TABL
efe0: 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73  E statement is s
eff0: 74 6f 72 65 64 2c 20 62 75 74 20 63 61 73 65 20  tored, but case 
f000: 69 73 20 6e 6f 74 20 73 69 67 6e 69 66 69 63 61  is not significa
f010: 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72  nt for.** compar
f020: 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62  isons..**.** Tab
f030: 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68 65 20 6e  le.nCol is the n
f040: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
f050: 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20   in this table. 
f060: 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69 73 20 61   Table.aCol is a
f070: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  .** pointer to a
f080: 6e 20 61 72 72 61 79 20 6f 66 20 43 6f 6c 75 6d  n array of Colum
f090: 6e 20 73 74 72 75 63 74 75 72 65 73 2c 20 6f 6e  n structures, on
f0a0: 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  e for each colum
f0b0: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  n..**.** If the 
f0c0: 74 61 62 6c 65 20 68 61 73 20 61 6e 20 49 4e 54  table has an INT
f0d0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
f0e0: 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e 69 50 4b  , then Table.iPK
f0f0: 65 79 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  ey is the index 
f100: 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c 75 6d 6e  of.** the column
f110: 20 74 68 61 74 20 69 73 20 74 68 61 74 20 6b 65   that is that ke
f120: 79 2e 20 20 20 4f 74 68 65 72 77 69 73 65 20 54  y.   Otherwise T
f130: 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 6e 65  able.iPKey is ne
f140: 67 61 74 69 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a  gative.  Note.**
f150: 20 74 68 61 74 20 74 68 65 20 64 61 74 61 74 79   that the dataty
f160: 70 65 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52  pe of the PRIMAR
f170: 59 20 4b 45 59 20 6d 75 73 74 20 62 65 20 49 4e  Y KEY must be IN
f180: 54 45 47 45 52 20 66 6f 72 20 74 68 69 73 20 66  TEGER for this f
f190: 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65 20 73 65  ield to.** be se
f1a0: 74 2e 20 20 41 6e 20 49 4e 54 45 47 45 52 20 50  t.  An INTEGER P
f1b0: 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 75 73  RIMARY KEY is us
f1c0: 65 64 20 61 73 20 74 68 65 20 72 6f 77 69 64 20  ed as the rowid 
f1d0: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 0a  for each row of.
f1e0: 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  ** the table.  I
f1f0: 66 20 61 20 74 61 62 6c 65 20 68 61 73 20 6e 6f  f a table has no
f200: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
f210: 20 4b 45 59 2c 20 74 68 65 6e 20 61 20 72 61 6e   KEY, then a ran
f220: 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20 69 73 20  dom rowid.** is 
f230: 67 65 6e 65 72 61 74 65 64 20 66 6f 72 20 65 61  generated for ea
f240: 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74 61  ch row of the ta
f250: 62 6c 65 2e 20 20 54 46 5f 48 61 73 50 72 69 6d  ble.  TF_HasPrim
f260: 61 72 79 4b 65 79 20 69 73 20 73 65 74 20 69 66  aryKey is set if
f270: 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 68 61  .** the table ha
f280: 73 20 61 6e 79 20 50 52 49 4d 41 52 59 20 4b 45  s any PRIMARY KE
f290: 59 2c 20 49 4e 54 45 47 45 52 20 6f 72 20 6f 74  Y, INTEGER or ot
f2a0: 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  herwise..**.** T
f2b0: 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20 74 68 65  able.tnum is the
f2c0: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72   page number for
f2d0: 20 74 68 65 20 72 6f 6f 74 20 42 54 72 65 65 20   the root BTree 
f2e0: 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c  page of the tabl
f2f0: 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64 61 74 61  e in the.** data
f300: 62 61 73 65 20 66 69 6c 65 2e 20 20 49 66 20 54  base file.  If T
f310: 61 62 6c 65 2e 69 44 62 20 69 73 20 74 68 65 20  able.iDb is the 
f320: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
f330: 61 62 61 73 65 20 74 61 62 6c 65 20 62 61 63 6b  abase table back
f340: 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c 69 74 65  end.** in sqlite
f350: 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73 20 66 6f  .aDb[].  0 is fo
f360: 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  r the main datab
f370: 61 73 65 20 61 6e 64 20 31 20 69 73 20 66 6f 72  ase and 1 is for
f380: 20 74 68 65 20 66 69 6c 65 20 74 68 61 74 0a 2a   the file that.*
f390: 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f 72 61 72  * holds temporar
f3a0: 79 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  y tables and ind
f3b0: 69 63 65 73 2e 20 20 49 66 20 54 46 5f 45 70 68  ices.  If TF_Eph
f3c0: 65 6d 65 72 61 6c 20 69 73 20 73 65 74 0a 2a 2a  emeral is set.**
f3d0: 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
f3e0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 66  is stored in a f
f3f0: 69 6c 65 20 74 68 61 74 20 69 73 20 61 75 74 6f  ile that is auto
f400: 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65  matically delete
f410: 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20 56 44  d.** when the VD
f420: 42 45 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65  BE cursor to the
f430: 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64   table is closed
f440: 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  .  In this case 
f450: 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72  Table.tnum .** r
f460: 65 66 65 72 73 20 56 44 42 45 20 63 75 72 73 6f  efers VDBE curso
f470: 72 20 6e 75 6d 62 65 72 20 74 68 61 74 20 68 6f  r number that ho
f480: 6c 64 73 20 74 68 65 20 74 61 62 6c 65 20 6f 70  lds the table op
f490: 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65 20 72  en, not to the r
f4a0: 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75 6d 62  oot.** page numb
f4b0: 65 72 2e 20 20 54 72 61 6e 73 69 65 6e 74 20 74  er.  Transient t
f4c0: 61 62 6c 65 73 20 61 72 65 20 75 73 65 64 20 74  ables are used t
f4d0: 6f 20 68 6f 6c 64 20 74 68 65 20 72 65 73 75 6c  o hold the resul
f4e0: 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62 2d 71  ts of a.** sub-q
f4f0: 75 65 72 79 20 74 68 61 74 20 61 70 70 65 61 72  uery that appear
f500: 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 72  s instead of a r
f510: 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 20 69  eal table name i
f520: 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
f530: 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c 45 43  e .** of a SELEC
f540: 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  T statement..*/.
f550: 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20  struct Table {. 
f560: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
f570: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
f580: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   the table or vi
f590: 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a  ew */.  Column *
f5a0: 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  aCol;        /* 
f5b0: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
f5c0: 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  t each column */
f5d0: 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78  .  Index *pIndex
f5e0: 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  ;       /* List 
f5f0: 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f  of SQL indexes o
f600: 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f  n this table. */
f610: 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65  .  Select *pSele
f620: 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20  ct;     /* NULL 
f630: 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69  for tables.  Poi
f640: 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f  nts to definitio
f650: 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a  n if a view. */.
f660: 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20    FKey *pFKey;  
f670: 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64         /* Linked
f680: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72   list of all for
f690: 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69  eign keys in thi
f6a0: 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61  s table */.  cha
f6b0: 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
f6c0: 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
f6d0: 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
f6e0: 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
f6f0: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
f700: 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20  TE_OMIT_CHECK.  
f710: 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b  ExprList *pCheck
f720: 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43  ;    /* All CHEC
f730: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  K constraints */
f740: 0a 23 65 6e 64 69 66 0a 20 20 4c 6f 67 45 73 74  .#endif.  LogEst
f750: 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f   nRowLogEst;   /
f760: 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73  * Estimated rows
f770: 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d   in table - from
f780: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61   sqlite_stat1 ta
f790: 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75  ble */.  int tnu
f7a0: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
f7b0: 20 52 6f 6f 74 20 42 54 72 65 65 20 6e 6f 64 65   Root BTree node
f7c0: 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20   for this table 
f7d0: 28 73 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 29  (see note above)
f7e0: 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b   */.  i16 iPKey;
f7f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66             /* If
f800: 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75   not negative, u
f810: 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61  se aCol[iPKey] a
f820: 73 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  s the primary ke
f830: 79 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b  y */.  i16 nCol;
f840: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
f850: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
f860: 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a   in this table *
f870: 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20  /.  u16 nRef;   
f880: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
f890: 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
f8a0: 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a  o this Table */.
f8b0: 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f    LogEst szTabRo
f8c0: 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61  w;     /* Estima
f8d0: 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68  ted size of each
f8e0: 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79   table row in by
f8f0: 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  tes */.#ifdef SQ
f900: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54  LITE_ENABLE_COST
f910: 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f  MULT.  LogEst co
f920: 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43  stMult;     /* C
f930: 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20 66  ost multiplier f
f940: 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20 74 61  or using this ta
f950: 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ble */.#endif.  
f960: 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20  u8 tabFlags;    
f970: 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
f980: 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  TF_* values */. 
f990: 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20   u8 keyConf;    
f9a0: 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f        /* What to
f9b0: 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75   do in case of u
f9c0: 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69  niqueness confli
f9d0: 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23  ct on iPKey */.#
f9e0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
f9f0: 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20  IT_ALTERTABLE.  
fa00: 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74  int addColOffset
fa10: 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69  ;    /* Offset i
fa20: 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  n CREATE TABLE s
fa30: 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77  tmt to add a new
fa40: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69   column */.#endi
fa50: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
fa60: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
fa70: 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65  LE.  int nModule
fa80: 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  Arg;      /* Num
fa90: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
faa0: 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a   to the module *
fab0: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64  /.  char **azMod
fac0: 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65 78 74  uleArg;  /* Text
fad0: 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20 61   of all module a
fae0: 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64 75  rgs. [0] is modu
faf0: 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 56 54 61  le name */.  VTa
fb00: 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20  ble *pVTable;   
fb10: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61    /* List of VTa
fb20: 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a  ble objects. */.
fb30: 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72  #endif.  Trigger
fb40: 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a   *pTrigger;   /*
fb50: 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   List of trigger
fb60: 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68  s stored in pSch
fb70: 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ema */.  Schema 
fb80: 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  *pSchema;     /*
fb90: 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e   Schema that con
fba0: 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65  tains this table
fbb0: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65   */.  Table *pNe
fbc0: 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65  xtZombie;  /* Ne
fbd0: 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e  xt on the Parse.
fbe0: 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20  pZombieTab list 
fbf0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
fc00: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
fc10: 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a  Table.tabFlags..
fc20: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65  */.#define TF_Re
fc30: 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78  adonly        0x
fc40: 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e  01    /* Read-on
fc50: 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20  ly system table 
fc60: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70  */.#define TF_Ep
fc70: 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78  hemeral       0x
fc80: 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65  02    /* An ephe
fc90: 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23  meral table */.#
fca0: 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69  define TF_HasPri
fcb0: 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20 20  maryKey   0x04  
fcc0: 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61    /* Table has a
fcd0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
fce0: 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69  #define TF_Autoi
fcf0: 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38 20  ncrement   0x08 
fd00: 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72     /* Integer pr
fd10: 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75 74  imary key is aut
fd20: 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64  oincrement */.#d
fd30: 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61 6c  efine TF_Virtual
fd40: 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20 20           0x10   
fd50: 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61 6c   /* Is a virtual
fd60: 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
fd70: 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69  e TF_WithoutRowi
fd80: 64 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20  d    0x20    /* 
fd90: 4e 6f 20 72 6f 77 69 64 20 75 73 65 64 2e 20 50  No rowid used. P
fda0: 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68  RIMARY KEY is th
fdb0: 65 20 6b 65 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  e key */.../*.**
fdc0: 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65   Test to see whe
fdd0: 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61  ther or not a ta
fde0: 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c  ble is a virtual
fdf0: 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73   table.  This is
fe00: 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61  .** done as a ma
fe10: 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77  cro so that it w
fe20: 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64  ill be optimized
fe30: 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61   out when virtua
fe40: 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f  l.** table suppo
fe50: 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  rt is omitted fr
fe60: 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f  om the build..*/
fe70: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
fe80: 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
fe90: 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  E.#  define IsVi
fea0: 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28  rtual(X)      ((
feb0: 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
fec0: 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29 0a  TF_Virtual)!=0).
fed0: 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
fee0: 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58  enColumn(X) (((X
fef0: 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
ff00: 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
ff10: 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  ).#else.#  defin
ff20: 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20  e IsVirtual(X)  
ff30: 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20      0.#  define 
ff40: 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
ff50: 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44  ) 0.#endif../* D
ff60: 6f 65 73 20 74 68 65 20 74 61 62 6c 65 20 68 61  oes the table ha
ff70: 76 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64  ve a rowid */.#d
ff80: 65 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58  efine HasRowid(X
ff90: 29 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62  )     (((X)->tab
ffa0: 46 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f  Flags & TF_Witho
ffb0: 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a  utRowid)==0)../*
ffc0: 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e  .** Each foreign
ffd0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
ffe0: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
fff0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
10000 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
10010 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69   A foreign key i
10020 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
10030 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54  h two tables.  T
10040 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20  he "from" table 
10050 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  is.** the table 
10060 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
10070 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
10080 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73  use that creates
10090 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
100a0 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74  key.  The "to" t
100b0 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c  able is the tabl
100c0 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20  e that is named 
100d0 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  in the REFERENCE
100e0 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e  S clause..** Con
100f0 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70  sider this examp
10100 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  le:.**.**     CR
10110 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a  EATE TABLE ex1(.
10120 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47  **       a INTEG
10130 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
10140 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47  **       b INTEG
10150 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b  ER CONSTRAINT fk
10160 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32  1 REFERENCES ex2
10170 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a  (x).**     );.**
10180 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20  .** For foreign 
10190 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66  key "fk1", the f
101a0 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78  rom-table is "ex
101b0 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61  1" and the to-ta
101c0 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a  ble is "ex2"..**
101d0 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65   Equivalent name
101e0 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f  s:.**.**     fro
101f0 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64  m-table == child
10200 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  -table.**       
10210 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65  to-table == pare
10220 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45  nt-table.**.** E
10230 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63  ach REFERENCES c
10240 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20  lause generates 
10250 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
10260 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
10270 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20  ucture.** which 
10280 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
10290 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20  he from-table.  
102a0 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65  The to-table nee
102b0 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e  d not exist when
102c0 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  .** the from-tab
102d0 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20  le is created.  
102e0 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66  The existence of
102f0 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
10300 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a   not checked..**
10310 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20  .** The list of 
10320 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20  all parents for 
10330 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73  child Table X is
10340 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79   held at X.pFKey
10350 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ..**.** A list o
10360 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66  f all children f
10370 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64  or a table named
10380 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20   Z (which might 
10390 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a  not even exist).
103a0 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63  ** is held in Sc
103b0 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69  hema.fkeyHash wi
103c0 74 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66  th a hash key of
103d0 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b   Z..*/.struct FK
103e0 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46  ey {.  Table *pF
103f0 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c  rom;     /* Tabl
10400 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
10410 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
10420 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20  se (aka: Child) 
10430 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
10440 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46  From;  /* Next F
10450 4b 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d  Key with the sam
10460 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74  e in pFrom. Next
10470 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d   parent of pFrom
10480 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b   */.  char *zTo;
10490 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
104a0 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  of table that th
104b0 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20  e key points to 
104c0 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f  (aka: Parent) */
104d0 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f  .  FKey *pNextTo
104e0 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74  ;    /* Next wit
104f0 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20  h the same zTo. 
10500 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54  Next child of zT
10510 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50  o. */.  FKey *pP
10520 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65  revTo;    /* Pre
10530 76 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73  vious with the s
10540 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74  ame zTo */.  int
10550 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f   nCol;         /
10560 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
10570 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20  mns in this key 
10580 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30  */.  /* EV: R-30
10590 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75  323-21917 */.  u
105a0 38 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20  8 isDeferred;   
105b0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
105c0 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69  onstraint checki
105d0 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74  ng is deferred t
105e0 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20  ill COMMIT */.  
105f0 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20  u8 aAction[2];  
10600 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45        /* ON DELE
10610 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45  TE and ON UPDATE
10620 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63   actions, respec
10630 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67  tively */.  Trig
10640 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32  ger *apTrigger[2
10650 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f  ];/* Triggers fo
10660 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69  r aAction[] acti
10670 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ons */.  struct 
10680 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f  sColMap {      /
10690 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c  * Mapping of col
106a0 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f  umns in pFrom to
106b0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20   columns in zTo 
106c0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d  */.    int iFrom
106d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
106e0 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20  Index of column 
106f0 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20  in pFrom */.    
10700 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20  char *zCol;     
10710 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
10720 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20   column in zTo. 
10730 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49   If NULL use PRI
10740 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20  MARY KEY */.  } 
10750 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20  aCol[1];        
10760 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
10770 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f   for each of nCo
10780 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a  l columns */.};.
10790 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75  ./*.** SQLite su
107a0 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66  pports many diff
107b0 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65  erent ways to re
107c0 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69  solve a constrai
107d0 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f  nt.** error.  RO
107e0 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e  LLBACK processin
107f0 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63  g means that a c
10800 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
10810 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68  ion.** causes th
10820 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
10830 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61  rocess to fail a
10840 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  nd for the curre
10850 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
10860 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  * to be rolled b
10870 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63  ack.  ABORT proc
10880 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65  essing means the
10890 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
108a0 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61  ocess.** fails a
108b0 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61  nd any prior cha
108c0 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f  nges from that o
108d0 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  ne operation are
108e0 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20   backed out,.** 
108f0 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74  but the transact
10900 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65  ion is not rolle
10910 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72  d back.  FAIL pr
10920 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
10930 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61  hat.** the opera
10940 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
10950 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72   stops and retur
10960 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65  ns an error code
10970 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20  .  But prior.** 
10980 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74  changes due to t
10990 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
109a0 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64  n are not backed
109b0 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c   out and no roll
109c0 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20  back.** occurs. 
109d0 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68   IGNORE means th
109e0 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61  at the particula
109f0 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65  r row that cause
10a00 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  d the constraint
10a10 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74  .** error is not
10a20 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64   inserted or upd
10a30 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ated.  Processin
10a40 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
10a50 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72  no error.** is r
10a60 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43  eturned.  REPLAC
10a70 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65  E means that pre
10a80 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
10a90 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73  e rows that caus
10aa0 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63  ed.** a UNIQUE c
10ab0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
10ac0 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ion are removed 
10ad0 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20  so that the new 
10ae0 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64  insert or.** upd
10af0 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e  ate can proceed.
10b00 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
10b10 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
10b20 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e  ror is reported.
10b30 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c  .**.** RESTRICT,
10b40 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41   SETNULL, and CA
10b50 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70  SCADE actions ap
10b60 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65  ply only to fore
10b70 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53  ign keys..** RES
10b80 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d  TRICT is the sam
10b90 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49  e as ABORT for I
10ba0 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e  MMEDIATE foreign
10bb0 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a   keys and the.**
10bc0 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43   same as ROLLBAC
10bd0 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b  K for DEFERRED k
10be0 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65  eys.  SETNULL me
10bf0 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72  ans that the for
10c00 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73  eign.** key is s
10c10 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53  et to NULL.  CAS
10c20 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20  CADE means that 
10c30 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  a DELETE or UPDA
10c40 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66  TE of the.** ref
10c50 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f  erenced table ro
10c60 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20  w is propagated 
10c70 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61  into the row tha
10c80 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66  t holds the.** f
10c90 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a  oreign key..** .
10ca0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
10cb0 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73   symbolic values
10cc0 20 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63   are used to rec
10cd0 6f 72 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a  ord which type.*
10ce0 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74  * of action to t
10cf0 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ake..*/.#define 
10d00 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20  OE_None     0   
10d10 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63  /* There is no c
10d20 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65  onstraint to che
10d30 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  ck */.#define OE
10d40 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a  _Rollback 1   /*
10d50 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74   Fail the operat
10d60 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b  ion and rollback
10d70 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
10d80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41   */.#define OE_A
10d90 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42  bort    2   /* B
10da0 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20  ack out changes 
10db0 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61  but do no rollba
10dc0 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  ck transaction *
10dd0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69  /.#define OE_Fai
10de0 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f  l     3   /* Sto
10df0 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  p the operation 
10e00 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72  but leave all pr
10e10 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ior changes */.#
10e20 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65  define OE_Ignore
10e30 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65     4   /* Ignore
10e40 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e   the error. Do n
10e50 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54  ot do the INSERT
10e60 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64   or UPDATE */.#d
10e70 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65  efine OE_Replace
10e80 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20    5   /* Delete 
10e90 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c  existing record,
10ea0 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20   then do INSERT 
10eb0 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64  or UPDATE */..#d
10ec0 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63  efine OE_Restric
10ed0 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72  t 6   /* OE_Abor
10ee0 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c  t for IMMEDIATE,
10ef0 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72   OE_Rollback for
10f00 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65   DEFERRED */.#de
10f10 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20  fine OE_SetNull 
10f20 20 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   7   /* Set the 
10f30 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
10f40 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65  e to NULL */.#de
10f50 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20  fine OE_SetDflt 
10f60 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   8   /* Set the 
10f70 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
10f80 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74  e to its default
10f90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43   */.#define OE_C
10fa0 61 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43  ascade  9   /* C
10fb0 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67  ascade the chang
10fc0 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f  es */..#define O
10fd0 45 5f 44 65 66 61 75 6c 74 20 20 31 30 20 20 2f  E_Default  10  /
10fe0 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20 74 68  * Do whatever th
10ff0 65 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e  e default action
11000 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41   is */.../*.** A
11010 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
11020 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
11030 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20  cture is passed 
11040 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  as the first.** 
11050 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69  argument to sqli
11060 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72  te3VdbeKeyCompar
11070 65 20 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f  e and is used to
11080 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a   control the .**
11090 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74   comparison of t
110a0 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79  he two index key
110b0 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68  s..**.** Note th
110c0 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20  at aSortOrder[] 
110d0 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65  and aColl[] have
110e0 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e   nField+1 slots.
110f0 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e    There.** are n
11100 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20  Field slots for 
11110 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61  the columns of a
11120 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65  n index then one
11130 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66   extra slot.** f
11140 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 74 20  or the rowid at 
11150 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
11160 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75  ct KeyInfo {.  u
11170 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  32 nRef;        
11180 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11190 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68  references to th
111a0 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63  is KeyInfo objec
111b0 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  t */.  u8 enc;  
111c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
111d0 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e  xt encoding - on
111e0 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f  e of the SQLITE_
111f0 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  UTF* values */. 
11200 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20   u16 nField;    
11210 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
11220 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e  f key columns in
11230 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20   the index */.  
11240 75 31 36 20 6e 58 46 69 65 6c 64 3b 20 20 20 20  u16 nXField;    
11250 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11260 20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20   columns beyond 
11270 74 68 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20  the key columns 
11280 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
11290 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
112a0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
112b0 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  ion */.  u8 *aSo
112c0 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20  rtOrder;     /* 
112d0 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65  Sort order for e
112e0 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20  ach column. */. 
112f0 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b   CollSeq *aColl[
11300 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e  1];  /* Collatin
11310 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65  g sequence for e
11320 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20  ach term of the 
11330 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  key */.};../*.**
11340 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
11350 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
11360 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e  ructure holds in
11370 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
11380 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65  a.** single inde
11390 78 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61  x record that ha
113a0 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 70  s already been p
113b0 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69  arsed out into i
113c0 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c  ndividual.** val
113d0 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63  ues..**.** A rec
113e0 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74  ord is an object
113f0 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f   that contains o
11400 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64  ne or more field
11410 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65  s of data..** Re
11420 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20 74  cords are used t
11430 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74  o store the cont
11440 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72  ent of a table r
11450 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a  ow and to store.
11460 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e  ** the key of an
11470 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20   index.  A blob 
11480 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65  encoding of a re
11490 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64 20  cord is created 
114a0 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b  by.** the OP_Mak
114b0 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f  eRecord opcode o
114c0 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20 69  f the VDBE and i
114d0 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62  s disassembled b
114e0 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75  y the.** OP_Colu
114f0 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  mn opcode..**.**
11500 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
11510 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20 74  holds a record t
11520 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79 20  hat has already 
11530 62 65 65 6e 20 64 69 73 61 73 73 65 6d 62 6c 65  been disassemble
11540 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f  d.** into its co
11550 6e 73 74 69 74 75 65 6e 74 20 66 69 65 6c 64 73  nstituent fields
11560 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61  ..**.** The r1 a
11570 6e 64 20 72 32 20 6d 65 6d 62 65 72 20 76 61 72  nd r2 member var
11580 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20  iables are only 
11590 75 73 65 64 20 62 79 20 74 68 65 20 6f 70 74 69  used by the opti
115a0 6d 69 7a 65 64 20 63 6f 6d 70 61 72 69 73 6f 6e  mized comparison
115b0 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 76 64  .** functions vd
115c0 62 65 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 49  beRecordCompareI
115d0 6e 74 28 29 20 61 6e 64 20 76 64 62 65 52 65 63  nt() and vdbeRec
115e0 6f 72 64 43 6f 6d 70 61 72 65 53 74 72 69 6e 67  ordCompareString
115f0 28 29 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e  ()..*/.struct Un
11600 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20  packedRecord {. 
11610 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
11620 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f  fo;  /* Collatio
11630 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72  n and sort-order
11640 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
11650 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
11660 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
11670 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70  of entries in ap
11680 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65  Mem[] */.  i8 de
11690 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f  fault_rc;      /
116a0 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73  * Comparison res
116b0 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65 20  ult if keys are 
116c0 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72  equal */.  u8 er
116d0 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f  rCode;         /
116e0 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74 65 64  * Error detected
116f0 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61   by xRecordCompa
11700 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e  re (CORRUPT or N
11710 4f 4d 45 4d 29 20 2a 2f 0a 20 20 4d 65 6d 20 2a  OMEM) */.  Mem *
11720 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  aMem;          /
11730 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  * Values */.  in
11740 74 20 72 31 3b 20 20 20 20 20 20 20 20 20 20 20  t r1;           
11750 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
11760 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72  turn if (lhs > r
11770 68 73 29 20 2a 2f 0a 20 20 69 6e 74 20 72 32 3b  hs) */.  int r2;
11780 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11790 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
117a0 69 66 20 28 72 68 73 20 3c 20 6c 68 73 29 20 2a  if (rhs < lhs) *
117b0 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  /.};.../*.** Eac
117c0 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72  h SQL index is r
117d0 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
117e0 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  mory by an.** in
117f0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
11800 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
11810 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c  e..**.** The col
11820 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c  umns of the tabl
11830 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65  e that are to be
11840 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73   indexed are des
11850 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65  cribed.** by the
11860 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c   aiColumn[] fiel
11870 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  d of this struct
11880 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ure.  For exampl
11890 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65  e, suppose.** we
118a0 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77   have the follow
118b0 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e  ing table and in
118c0 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  dex:.**.**     C
118d0 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28  REATE TABLE Ex1(
118e0 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20  c1 int, c2 int, 
118f0 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20  c3 text);.**    
11900 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78   CREATE INDEX Ex
11910 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b  2 ON Ex1(c3,c1);
11920 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61  .**.** In the Ta
11930 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65  ble structure de
11940 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43  scribing Ex1, nC
11950 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68  ol==3 because th
11960 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65  ere are.** three
11970 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
11980 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49  table.  In the I
11990 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64  ndex structure d
119a0 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32  escribing.** Ex2
119b0 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e  , nColumn==2 sin
119c0 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f  ce 2 of the 3 co
119d0 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65  lumns of Ex1 are
119e0 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65   indexed..** The
119f0 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75   value of aiColu
11a00 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61  mn is {2, 0}.  a
11a10 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65  iColumn[0]==2 be
11a20 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69  cause the .** fi
11a30 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  rst column to be
11a40 20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68 61   indexed (c3) ha
11a50 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20  s an index of 2 
11a60 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a  in Ex1.aCol[]..*
11a70 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c  * The second col
11a80 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65  umn to be indexe
11a90 64 20 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e  d (c1) has an in
11aa0 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45  dex of 0 in.** E
11ab0 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65  x1.aCol[], hence
11ac0 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d   Ex2.aiColumn[1]
11ad0 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ==0..**.** The I
11ae0 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65  ndex.onError fie
11af0 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  ld determines wh
11b00 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
11b10 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73   indexed columns
11b20 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71  .** must be uniq
11b30 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64  ue and what to d
11b40 6f 20 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f  o if they are no
11b50 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f  t.  When Index.o
11b60 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a  nError=OE_None,.
11b70 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73  ** it means this
11b80 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65   is not a unique
11b90 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69   index.  Otherwi
11ba0 73 65 20 69 74 20 69 73 20 61 20 75 6e 69 71 75  se it is a uniqu
11bb0 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74  e index.** and t
11bc0 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65  he value of Inde
11bd0 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61  x.onError indica
11be0 74 65 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e  te the which con
11bf0 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
11c00 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74   .** algorithm t
11c10 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65  o employ wheneve
11c20 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  r an attempt is 
11c30 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61  made to insert a
11c40 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65   non-unique.** e
11c50 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  lement..*/.struc
11c60 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72  t Index {.  char
11c70 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
11c80 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
11c90 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
11ca0 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20  i16 *aiColumn;  
11cb0 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
11cc0 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  h columns are us
11cd0 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78  ed by this index
11ce0 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20  .  1st is 0 */. 
11cf0 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f   LogEst *aiRowLo
11d00 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f  gEst;     /* Fro
11d10 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20  m ANALYZE: Est. 
11d20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79  rows selected by
11d30 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
11d40 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b    Table *pTable;
11d50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
11d60 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e  e SQL table bein
11d70 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63  g indexed */.  c
11d80 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
11d90 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e          /* Strin
11da0 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
11db0 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
11dc0 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
11dd0 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  x *pNext;       
11de0 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74       /* The next
11df0 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65   index associate
11e00 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  d with the same 
11e10 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d  table */.  Schem
11e20 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
11e30 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
11e40 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e  ntaining this in
11e50 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  dex */.  u8 *aSo
11e60 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
11e70 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f    /* for each co
11e80 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43  lumn: True==DESC
11e90 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a  , False==ASC */.
11ea0 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b    char **azColl;
11eb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
11ec0 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e  ray of collation
11ed0 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20   sequence names 
11ee0 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45  for index */.  E
11ef0 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68 65  xpr *pPartIdxWhe
11f00 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45  re;     /* WHERE
11f10 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74   clause for part
11f20 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20  ial indices */. 
11f30 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
11f40 66 6f 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 4b  fo;       /* A K
11f50 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 73 75  eyInfo object su
11f60 69 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73 20  itable for this 
11f70 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 74  index */.  int t
11f80 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
11f90 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63      /* DB Page c
11fa0 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f  ontaining root o
11fb0 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
11fc0 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52 6f    LogEst szIdxRo
11fd0 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73  w;         /* Es
11fe0 74 69 6d 61 74 65 64 20 61 76 65 72 61 67 65 20  timated average 
11ff0 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74 65  row size in byte
12000 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43  s */.  u16 nKeyC
12010 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ol;             
12020 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
12030 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68 65  umns forming the
12040 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43   key */.  u16 nC
12050 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
12060 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
12070 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20 69  columns stored i
12080 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  n the index */. 
12090 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20   u8 onError;    
120a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f            /* OE_
120b0 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65  Abort, OE_Ignore
120c0 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72  , OE_Replace, or
120d0 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e   OE_None */.  un
120e0 73 69 67 6e 65 64 20 69 64 78 54 79 70 65 3a 32  signed idxType:2
120f0 3b 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49  ;      /* 1==UNI
12100 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20  QUE, 2==PRIMARY 
12110 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49  KEY, 0==CREATE I
12120 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  NDEX */.  unsign
12130 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b  ed bUnordered:1;
12140 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69     /* Use this i
12150 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49  ndex for == or I
12160 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a  N queries only *
12170 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69  /.  unsigned uni
12180 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20  qNotNull:1;  /* 
12190 54 72 75 65 20 69 66 20 55 4e 49 51 55 45 20 61  True if UNIQUE a
121a0 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20  nd NOT NULL for 
121b0 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  all columns */. 
121c0 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73 69   unsigned isResi
121d0 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75  zed:1;    /* Tru
121e0 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65 78  e if resizeIndex
121f0 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62 65 65  Object() has bee
12200 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e  n called */.  un
12210 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69 6e  signed isCoverin
12220 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69  g:1;   /* True i
12230 66 20 74 68 69 73 20 69 73 20 61 20 63 6f 76 65  f this is a cove
12240 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ring index */.  
12250 75 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69 70 53  unsigned noSkipS
12260 63 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f 20 6e  can:1;   /* Do n
12270 6f 74 20 74 72 79 20 74 6f 20 75 73 65 20 73 6b  ot try to use sk
12280 69 70 2d 73 63 61 6e 20 69 66 20 74 72 75 65 20  ip-scan if true 
12290 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
122a0 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
122b0 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61  _STAT4.  int nSa
122c0 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  mple;           
122d0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
122e0 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70  lements in aSamp
122f0 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  le[] */.  int nS
12300 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20  ampleCol;       
12310 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e     /* Size of In
12320 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d  dexSample.anEq[]
12330 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20   and so on */.  
12340 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b  tRowcnt *aAvgEq;
12350 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72           /* Aver
12360 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66  age nEq values f
12370 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61  or keys not in a
12380 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65  Sample */.  Inde
12390 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65  xSample *aSample
123a0 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20  ;    /* Samples 
123b0 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  of the left-most
123c0 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e   key */.  tRowcn
123d0 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20 20  t *aiRowEst;    
123e0 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69     /* Non-logari
123f0 74 68 6d 69 63 20 73 74 61 74 31 20 64 61 74 61  thmic stat1 data
12400 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20   for this index 
12410 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f  */.  tRowcnt nRo
12420 77 45 73 74 30 3b 20 20 20 20 20 20 20 20 2f 2a  wEst0;        /*
12430 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63   Non-logarithmic
12440 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
12450 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  in the index */.
12460 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
12470 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
12480 66 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70  for Index.idxTyp
12490 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e.*/.#define SQL
124a0 49 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44  ITE_IDXTYPE_APPD
124b0 45 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43  EF      0   /* C
124c0 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45  reated using CRE
124d0 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65  ATE INDEX */.#de
124e0 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
124f0 59 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20  YPE_UNIQUE      
12500 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74  1   /* Implement
12510 73 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  s a UNIQUE const
12520 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  raint */.#define
12530 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
12540 50 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20  PRIMARYKEY  2   
12550 2f 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41 52  /* Is the PRIMAR
12560 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61  Y KEY for the ta
12570 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72  ble */../* Retur
12580 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20  n true if index 
12590 58 20 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b  X is a PRIMARY K
125a0 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  EY index */.#def
125b0 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79  ine IsPrimaryKey
125c0 49 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e  Index(X)  ((X)->
125d0 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  idxType==SQLITE_
125e0 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b  IDXTYPE_PRIMARYK
125f0 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74  EY)../* Return t
12600 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69  rue if index X i
12610 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78  s a UNIQUE index
12620 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e   */.#define IsUn
12630 69 71 75 65 49 6e 64 65 78 28 58 29 20 20 20 20  iqueIndex(X)    
12640 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21    ((X)->onError!
12650 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 0a 2a 2a  =OE_None)../*.**
12660 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f   Each sample sto
12670 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74  red in the sqlit
12680 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73  e_stat3 table is
12690 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
126a0 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e 67  memory .** using
126b0 20 61 20 73 74 72 75 63 74 75 72 65 20 6f 66 20   a structure of 
126c0 74 68 69 73 20 74 79 70 65 2e 20 20 53 65 65 20  this type.  See 
126d0 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74  documentation at
126e0 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a   the top of the.
126f0 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75  ** analyze.c sou
12700 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64  rce file for add
12710 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
12720 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ion..*/.struct I
12730 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76  ndexSample {.  v
12740 6f 69 64 20 2a 70 3b 20 20 20 20 20 20 20 20 20  oid *p;         
12750 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73   /* Pointer to s
12760 61 6d 70 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f  ampled record */
12770 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20  .  int n;       
12780 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
12790 72 65 63 6f 72 64 20 69 6e 20 62 79 74 65 73 20  record in bytes 
127a0 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e  */.  tRowcnt *an
127b0 45 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e  Eq;    /* Est. n
127c0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68  umber of rows wh
127d0 65 72 65 20 74 68 65 20 6b 65 79 20 65 71 75 61  ere the key equa
127e0 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  ls this sample *
127f0 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c  /.  tRowcnt *anL
12800 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75  t;    /* Est. nu
12810 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65  mber of rows whe
12820 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74  re key is less t
12830 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20  han this sample 
12840 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e  */.  tRowcnt *an
12850 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e  DLt;   /* Est. n
12860 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63  umber of distinc
12870 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e  t keys less than
12880 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
12890 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74  };../*.** Each t
128a0 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20  oken coming out 
128b0 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69 73 20  of the lexer is 
128c0 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a  an instance of.*
128d0 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  * this structure
128e0 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c  .  Tokens are al
128f0 73 6f 20 75 73 65 64 20 61 73 20 70 61 72 74 20  so used as part 
12900 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  of an expression
12910 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20  ..**.** Note if 
12920 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20  Token.z==0 then 
12930 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f  Token.dyn and To
12940 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69  ken.n are undefi
12950 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63  ned and.** may c
12960 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61  ontain random va
12970 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61  lues.  Do not ma
12980 6b 65 20 61 6e 79 20 61 73 73 75 6d 70 74 69 6f  ke any assumptio
12990 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64  ns about Token.d
129a0 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e  yn.** and Token.
129b0 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d  n when Token.z==
129c0 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b  0..*/.struct Tok
129d0 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  en {.  const cha
129e0 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78  r *z;     /* Tex
129f0 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20  t of the token. 
12a00 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e   Not NULL-termin
12a10 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67  ated! */.  unsig
12a20 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a  ned int n;    /*
12a30 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61   Number of chara
12a40 63 74 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f  cters in this to
12a50 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ken */.};../*.**
12a60 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
12a70 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
12a80 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
12a90 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65  ion needed to ge
12aa0 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66  nerate.** code f
12ab0 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68 61 74  or a SELECT that
12ac0 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67   contains aggreg
12ad0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  ate functions..*
12ae0 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d  *.** If Expr.op=
12af0 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f  =TK_AGG_COLUMN o
12b00 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  r TK_AGG_FUNCTIO
12b10 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67  N then Expr.pAgg
12b20 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69  Info is a.** poi
12b30 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
12b40 75 63 74 75 72 65 2e 20 20 54 68 65 20 45 78 70  ucture.  The Exp
12b50 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20  r.iColumn field 
12b60 69 73 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a  is the index in.
12b70 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b  ** AggInfo.aCol[
12b80 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75  ] or AggInfo.aFu
12b90 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74  nc[] of informat
12ba0 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65  ion needed to ge
12bb0 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66  nerate.** code f
12bc0 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a  or that node..**
12bd0 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f  .** AggInfo.pGro
12be0 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f  upBy and AggInfo
12bf0 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69  .aFunc.pExpr poi
12c00 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74  nt to fields wit
12c10 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69  hin the.** origi
12c20 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63  nal Select struc
12c30 74 75 72 65 20 74 68 61 74 20 64 65 73 63 72 69  ture that descri
12c40 62 65 73 20 74 68 65 20 53 45 4c 45 43 54 20 73  bes the SELECT s
12c50 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65  tatement.  These
12c60 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f  .** fields do no
12c70 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65  t need to be fre
12c80 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61  ed when dealloca
12c90 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f  ting the AggInfo
12ca0 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
12cb0 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a  truct AggInfo {.
12cc0 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b    u8 directMode;
12cd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72            /* Dir
12ce0 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f  ect rendering mo
12cf0 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61  de means take da
12d00 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20  ta directly.    
12d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f        ** from so
12d30 75 72 63 65 20 74 61 62 6c 65 73 20 72 61 74 68  urce tables rath
12d40 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63  er than from acc
12d50 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75  umulators */.  u
12d60 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b  8 useSortingIdx;
12d70 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72         /* In dir
12d80 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65  ect mode, refere
12d90 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20  nce the sorting 
12da0 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20 20 20  index rather.   
12db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12dc0 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74         ** than t
12dd0 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
12de0 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67  */.  int sorting
12df0 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Idx;         /* 
12e00 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
12e10 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
12e20 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74  ex */.  int sort
12e30 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20 20 20  ingIdxPTab;     
12e40 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
12e50 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65   of pseudo-table
12e60 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69   */.  int nSorti
12e70 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a  ngColumn;     /*
12e80 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
12e90 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e  ns in the sortin
12ea0 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  g index */.  int
12eb0 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20 20   mnReg, mxReg;  
12ec0 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66       /* Range of
12ed0 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63   registers alloc
12ee0 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e  ated for aCol an
12ef0 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70  d aFunc */.  Exp
12f00 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b  rList *pGroupBy;
12f10 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75       /* The grou
12f20 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20  p by clause */. 
12f30 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f   struct AggInfo_
12f40 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20  col {    /* For 
12f50 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64  each column used
12f60 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65   in source table
12f70 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a  s */.    Table *
12f80 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
12f90 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c    /* Source tabl
12fa0 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61  e */.    int iTa
12fb0 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
12fc0 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
12fd0 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65  er of the source
12fe0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
12ff0 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  t iColumn;      
13000 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e         /* Column
13010 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74   number within t
13020 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
13030 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74  */.    int iSort
13040 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20  erColumn;       
13050 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* Column number
13060 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20   in the sorting 
13070 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74  index */.    int
13080 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   iMem;          
13090 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
130a0 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63  location that ac
130b0 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f  ts as accumulato
130c0 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  r */.    Expr *p
130d0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
130e0 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61    /* The origina
130f0 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  l expression */.
13100 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74    } *aCol;.  int
13110 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   nColumn;       
13120 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13130 66 20 75 73 65 64 20 65 6e 74 72 69 65 73 20 69  f used entries i
13140 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e  n aCol[] */.  in
13150 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20  t nAccumulator; 
13160 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13170 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  of columns that 
13180 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20  show through to 
13190 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20  the output..    
131a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131b0 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f        ** Additio
131c0 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  nal columns are 
131d0 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72  used only as par
131e0 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20  ameters to.     
131f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13200 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74       ** aggregat
13210 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20  e functions */. 
13220 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f   struct AggInfo_
13230 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20  func {   /* For 
13240 65 61 63 68 20 61 67 67 72 65 67 61 74 65 20 66  each aggregate f
13250 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45  unction */.    E
13260 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
13270 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65          /* Expre
13280 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74  ssion encoding t
13290 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  he function */. 
132a0 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e     FuncDef *pFun
132b0 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  c;          /* T
132c0 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  he aggregate fun
132d0 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61  ction implementa
132e0 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  tion */.    int 
132f0 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  iMem;           
13300 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c       /* Memory l
13310 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74  ocation that act
13320 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72  s as accumulator
13330 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73   */.    int iDis
13340 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20  tinct;          
13350 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61   /* Ephemeral ta
13360 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f  ble used to enfo
13370 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a  rce DISTINCT */.
13380 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e    } *aFunc;.  in
13390 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20  t nFunc;        
133a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
133b0 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46  of entries in aF
133c0 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  unc[] */.};../*.
133d0 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65 20  ** The datatype 
133e0 79 6e 56 61 72 20 69 73 20 61 20 73 69 67 6e 65  ynVar is a signe
133f0 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65  d integer, eithe
13400 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62  r 16-bit or 32-b
13410 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69  it..** Usually i
13420 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42  t is 16-bits.  B
13430 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ut if SQLITE_MAX
13440 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
13450 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74   is greater.** t
13460 68 61 6e 20 33 32 37 36 37 20 77 65 20 68 61 76  han 32767 we hav
13470 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d  e to make it 32-
13480 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20  bit.  16-bit is 
13490 70 72 65 66 65 72 72 65 64 20 62 65 63 61 75 73  preferred becaus
134a0 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73  e.** it uses les
134b0 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20  s memory in the 
134c0 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69  Expr object, whi
134d0 63 68 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f  ch is a big memo
134e0 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79  ry user.** in sy
134f0 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20  stems with lots 
13500 6f 66 20 70 72 65 70 61 72 65 64 20 73 74 61 74  of prepared stat
13510 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77  ements.  And few
13520 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a   applications.**
13530 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20   need more than 
13540 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76  about 10 or 20 v
13550 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73  ariables.  But s
13560 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73 65 72  ome extreme user
13570 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76  s want.** to hav
13580 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
13590 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20  ments with over 
135a0 33 32 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c  32767 variables,
135b0 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a   and for them.**
135c0 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61   the option is a
135d0 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d  vailable (at com
135e0 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23  pile-time)..*/.#
135f0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  if SQLITE_MAX_VA
13600 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33  RIABLE_NUMBER<=3
13610 32 37 36 37 0a 74 79 70 65 64 65 66 20 69 31 36  2767.typedef i16
13620 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79   ynVar;.#else.ty
13630 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b  pedef int ynVar;
13640 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
13650 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65  ach node of an e
13660 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
13670 20 70 61 72 73 65 20 74 72 65 65 20 69 73 20 61   parse tree is a
13680 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
13690 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
136a0 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69  .**.** Expr.op i
136b0 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68  s the opcode. Th
136c0 65 20 69 6e 74 65 67 65 72 20 70 61 72 73 65 72  e integer parser
136d0 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65   token codes are
136e0 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70   reused.** as op
136f0 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20  codes here. For 
13700 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72  example, the par
13710 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47  ser defines TK_G
13720 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  E to be an integ
13730 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65  er.** code repre
13740 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22  senting the ">="
13750 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20   operator. This 
13760 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64  same integer cod
13770 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74  e is reused.** t
13780 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68 65 20  o represent the 
13790 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d  greater-than-or-
137a0 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f  equal-to operato
137b0 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73  r in the express
137c0 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a  ion.** tree..**.
137d0 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
137e0 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c  sion is an SQL l
137f0 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47  iteral (TK_INTEG
13800 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b  ER, TK_FLOAT, TK
13810 5f 42 4c 4f 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b  _BLOB, .** or TK
13820 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45  _STRING), then E
13830 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
13840 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66 20 74  ns the text of t
13850 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20  he SQL literal. 
13860 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73  If.** the expres
13870 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62  sion is a variab
13880 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29  le (TK_VARIABLE)
13890 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  , then Expr.toke
138a0 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 0a  n contains the .
138b0 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65  ** variable name
138c0 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68  . Finally, if th
138d0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
138e0 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  an SQL function 
138f0 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a  (TK_FUNCTION),.*
13900 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  * then Expr.toke
13910 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e  n contains the n
13920 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
13930 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ion..**.** Expr.
13940 70 52 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e  pRight and Expr.
13950 70 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c 65  pLeft are the le
13960 66 74 20 61 6e 64 20 72 69 67 68 74 20 73 75 62  ft and right sub
13970 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61  expressions of a
13980 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61  .** binary opera
13990 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62  tor. Either or b
139a0 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e  oth may be NULL.
139b0 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c  .**.** Expr.x.pL
139c0 69 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66  ist is a list of
139d0 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68   arguments if th
139e0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
139f0 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c  an SQL function,
13a00 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72 65  .** a CASE expre
13a10 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65  ssion or an IN e
13a20 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
13a30 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
13a40 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a  (<y>, <z>...)"..
13a50 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  ** Expr.x.pSelec
13a60 74 20 69 73 20 75 73 65 64 20 69 66 20 74 68 65  t is used if the
13a70 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
13a80 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61   sub-select or a
13a90 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a  n expression of.
13aa0 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68  ** the form "<lh
13ab0 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e  s> IN (SELECT ..
13ac0 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78  .)". If the EP_x
13ad0 49 73 53 65 6c 65 63 74 20 62 69 74 20 69 73 20  IsSelect bit is 
13ae0 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78  set in the.** Ex
13af0 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
13b00 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65  hen Expr.x.pSele
13b10 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68  ct is valid. Oth
13b20 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70  erwise, Expr.x.p
13b30 4c 69 73 74 20 69 73 20 0a 2a 2a 20 76 61 6c 69  List is .** vali
13b40 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72  d..**.** An expr
13b50 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f  ession of the fo
13b60 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72  rm ID or ID.ID r
13b70 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d  efers to a colum
13b80 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a  n in a table..**
13b90 20 46 6f 72 20 73 75 63 68 20 65 78 70 72 65 73   For such expres
13ba0 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69  sions, Expr.op i
13bb0 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55  s set to TK_COLU
13bc0 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62  MN and Expr.iTab
13bd0 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74  le is.** the int
13be0 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62  eger cursor numb
13bf0 65 72 20 6f 66 20 61 20 56 44 42 45 20 63 75 72  er of a VDBE cur
13c00 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20  sor pointing to 
13c10 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a  that table and.*
13c20 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69  * Expr.iColumn i
13c30 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d  s the column num
13c40 62 65 72 20 66 6f 72 20 74 68 65 20 73 70 65 63  ber for the spec
13c50 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66  ific column.  If
13c60 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69   the.** expressi
13c70 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20 61 20  on is used as a 
13c80 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67  result in an agg
13c90 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74  regate SELECT, t
13ca0 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65  hen the.** value
13cb0 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20   is also stored 
13cc0 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67 67  in the Expr.iAgg
13cd0 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61   column in the a
13ce0 67 67 72 65 67 61 74 65 20 73 6f 20 74 68 61 74  ggregate so that
13cf0 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63  .** it can be ac
13d00 63 65 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c  cessed after all
13d10 20 61 67 67 72 65 67 61 74 65 73 20 61 72 65 20   aggregates are 
13d20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  computed..**.** 
13d30 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
13d40 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20  n is an unbound 
13d50 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20  variable marker 
13d60 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b  (a question mark
13d70 20 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27   .** character '
13d80 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e  ?' in the origin
13d90 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65  al SQL) then the
13da0 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c   Expr.iTable hol
13db0 64 73 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  ds the index .**
13dc0 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74   number for that
13dd0 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a   variable..**.**
13de0 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
13df0 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65 72 79  on is a subquery
13e00 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75   then Expr.iColu
13e10 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  mn holds an inte
13e20 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  ger.** register 
13e30 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e  number containin
13e40 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  g the result of 
13e50 74 68 65 20 73 75 62 71 75 65 72 79 2e 20 20 49  the subquery.  I
13e60 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72  f the.** subquer
13e70 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61  y gives a consta
13e80 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20  nt result, then 
13e90 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49  iTable is -1.  I
13ea0 66 20 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a  f the subquery.*
13eb0 2a 20 67 69 76 65 73 20 61 20 64 69 66 66 65 72  * gives a differ
13ec0 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64 69  ent answer at di
13ed0 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75  fferent times du
13ee0 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70  ring statement p
13ef0 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65  rocessing.** the
13f00 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68 65 20  n iTable is the 
13f10 61 64 64 72 65 73 73 20 6f 66 20 61 20 73 75 62  address of a sub
13f20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d  routine that com
13f30 70 75 74 65 73 20 74 68 65 20 73 75 62 71 75 65  putes the subque
13f40 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ry..**.** If the
13f50 20 45 78 70 72 20 69 73 20 6f 66 20 74 79 70 65   Expr is of type
13f60 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20   OP_Column, and 
13f70 74 68 65 20 74 61 62 6c 65 20 69 74 20 69 73 20  the table it is 
13f80 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a  selecting from.*
13f90 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c  * is a disk tabl
13fa0 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22  e or the "old.*"
13fb0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74   pseudo-table, t
13fc0 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20  hen pTab points 
13fd0 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73  to the.** corres
13fe0 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65  ponding table de
13ff0 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  finition..**.** 
14000 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53  ALLOCATION NOTES
14010 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a  :.**.** Expr obj
14020 65 63 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c  ects can use a l
14030 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61  ot of memory spa
14040 63 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 73  ce in database s
14050 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65  chema.  To.** he
14060 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79  lp reduce memory
14070 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73   requirements, s
14080 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72  ometimes an Expr
14090 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a   object will be.
140a0 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41  ** truncated.  A
140b0 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74 68 65  nd to reduce the
140c0 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   number of memor
140d0 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73  y allocations, s
140e0 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20  ometimes.** two 
140f0 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a  or more Expr obj
14100 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f  ects will be sto
14110 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20  red in a single 
14120 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
14130 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77  n,.** together w
14140 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20  ith Expr.zToken 
14150 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49  strings..**.** I
14160 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  f the EP_Reduced
14170 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   and EP_TokenOnl
14180 79 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20  y flags are set 
14190 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20  when.** an Expr 
141a0 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61  object is trunca
141b0 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65  ted.  When EP_Re
141c0 64 75 63 65 64 20 69 73 20 73 65 74 2c 20 74 68  duced is set, th
141d0 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68  en all.** the ch
141e0 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73  ild Expr objects
141f0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65   in the Expr.pLe
14200 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67  ft and Expr.pRig
14210 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61  ht subtrees.** a
14220 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  re contained wit
14230 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d  hin the same mem
14240 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20  ory allocation. 
14250 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20   Note, however, 
14260 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74  that.** the subt
14270 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70  rees in Expr.x.p
14280 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70  List or Expr.x.p
14290 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79  Select are alway
142a0 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20  s separately.** 
142b0 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72  allocated, regar
142c0 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
142d0 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63   or not EP_Reduc
142e0 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74  ed is set..*/.st
142f0 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38  ruct Expr {.  u8
14300 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
14310 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f       /* Operatio
14320 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74  n performed by t
14330 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68  his node */.  ch
14340 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20  ar affinity;    
14350 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
14360 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75  nity of the colu
14370 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61  mn or 0 if not a
14380 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32   column */.  u32
14390 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20   flags;         
143a0 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66      /* Various f
143b0 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20  lags.  EP_* See 
143c0 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e  below */.  union
143d0 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f   {.    char *zTo
143e0 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ken;          /*
143f0 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65   Token value. Ze
14400 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e  ro terminated an
14410 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20  d dequoted */.  
14420 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20    int iValue;   
14430 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d           /* Non-
14440 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67 65 72  negative integer
14450 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74   value if EP_Int
14460 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a  Value */.  } u;.
14470 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f  .  /* If the EP_
14480 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69  TokenOnly flag i
14490 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70  s set in the Exp
144a0 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
144b0 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65  en no.  ** space
144c0 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f   is allocated fo
144d0 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c  r the fields bel
144e0 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41  ow this point. A
144f0 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a  n attempt to.  *
14500 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69  * access them wi
14510 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73  ll result in a s
14520 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75  egfault or malfu
14530 6e 63 74 69 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a  nction. .  *****
14540 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14550 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14560 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14570 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14580 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74  /..  Expr *pLeft
14590 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
145a0 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20  eft subnode */. 
145b0 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20   Expr *pRight;  
145c0 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74          /* Right
145d0 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e   subnode */.  un
145e0 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69  ion {.    ExprLi
145f0 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f  st *pList;     /
14600 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54  * op = IN, EXIST
14610 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53 45 2c  S, SELECT, CASE,
14620 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45   FUNCTION, BETWE
14630 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  EN */.    Select
14640 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
14650 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 61  * EP_xIsSelect a
14660 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53  nd op = IN, EXIS
14670 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20  TS, SELECT */.  
14680 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  } x;..  /* If th
14690 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
146a0 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20  g is set in the 
146b0 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
146c0 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70   then no.  ** sp
146d0 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ace is allocated
146e0 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20   for the fields 
146f0 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74  below this point
14700 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a  . An attempt to.
14710 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d    ** access them
14720 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20   will result in 
14730 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61  a segfault or ma
14740 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a  lfunction..  ***
14750 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14760 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14770 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14780 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14790 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  **/..#if SQLITE_
147a0 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30  MAX_EXPR_DEPTH>0
147b0 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20  .  int nHeight; 
147c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69            /* Hei
147d0 67 68 74 20 6f 66 20 74 68 65 20 74 72 65 65 20  ght of the tree 
147e0 68 65 61 64 65 64 20 62 79 20 74 68 69 73 20 6e  headed by this n
147f0 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
14800 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
14810 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c         /* TK_COL
14820 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62  UMN: cursor numb
14830 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64  er of table hold
14840 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20  ing column.     
14850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14860 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54      ** TK_REGIST
14870 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d  ER: register num
14880 62 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  ber.            
14890 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
148a0 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e  TK_TRIGGER: 1 ->
148b0 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20   new, 0 -> old. 
148c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148d0 20 20 20 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e          ** EP_Un
148e0 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32 31 37 37  likely:  1342177
148f0 32 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68  28 times likelih
14900 6f 6f 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69  ood */.  ynVar i
14910 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
14920 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f  /* TK_COLUMN: co
14930 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20  lumn index.  -1 
14940 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20  for rowid..     
14950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14960 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42      ** TK_VARIAB
14970 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d  LE: variable num
14980 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31  ber (always >= 1
14990 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67  ). */.  i16 iAgg
149a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
149b0 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e  * Which entry in
149c0 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b   pAggInfo->aCol[
149d0 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a  ] or ->aFunc[] *
149e0 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f  /.  i16 iRightJo
149f0 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66  inTable;   /* If
14a00 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68   EP_FromJoin, th
14a10 65 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66  e right table of
14a20 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75   the join */.  u
14a30 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20  8 op2;          
14a40 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49        /* TK_REGI
14a50 53 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76  STER: original v
14a60 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a  alue of Expr.op.
14a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a80 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43           ** TK_C
14a90 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65  OLUMN: the value
14aa0 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f   of p5 for OP_Co
14ab0 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
14ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
14ad0 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e   TK_AGG_FUNCTION
14ae0 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20  : nesting depth 
14af0 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41  */.  AggInfo *pA
14b00 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55  ggInfo;     /* U
14b10 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f  sed by TK_AGG_CO
14b20 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f  LUMN and TK_AGG_
14b30 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61  FUNCTION */.  Ta
14b40 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
14b50 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f       /* Table fo
14b60 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72  r TK_COLUMN expr
14b70 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a  essions. */.};..
14b80 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
14b90 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e  ing are the mean
14ba0 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20  ings of bits in 
14bb0 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66  the Expr.flags f
14bc0 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
14bd0 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78   EP_FromJoin  0x
14be0 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e  000001 /* Origin
14bf0 61 74 65 64 20 69 6e 20 4f 4e 20 6f 72 20 55 53  ated in ON or US
14c00 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
14c10 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
14c20 45 50 5f 41 67 67 20 20 20 20 20 20 20 30 78 30  EP_Agg       0x0
14c30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e  00002 /* Contain
14c40 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  s one or more ag
14c50 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
14c60 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
14c70 52 65 73 6f 6c 76 65 64 20 20 30 78 30 30 30 30  Resolved  0x0000
14c80 30 34 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62  04 /* IDs have b
14c90 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20  een resolved to 
14ca0 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69  COLUMNs */.#defi
14cb0 6e 65 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20  ne EP_Error     
14cc0 30 78 30 30 30 30 30 38 20 2f 2a 20 45 78 70 72  0x000008 /* Expr
14cd0 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20  ession contains 
14ce0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f  one or more erro
14cf0 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rs */.#define EP
14d00 5f 44 69 73 74 69 6e 63 74 20 20 30 78 30 30 30  _Distinct  0x000
14d10 30 31 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65  010 /* Aggregate
14d20 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44   function with D
14d30 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20  ISTINCT keyword 
14d40 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61  */.#define EP_Va
14d50 72 53 65 6c 65 63 74 20 30 78 30 30 30 30 32 30  rSelect 0x000020
14d60 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63   /* pSelect is c
14d70 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63  orrelated, not c
14d80 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69  onstant */.#defi
14d90 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20  ne EP_DblQuoted 
14da0 30 78 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65  0x000040 /* toke
14db0 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c  n.z was original
14dc0 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23  ly in "..." */.#
14dd0 64 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46  define EP_InfixF
14de0 75 6e 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20  unc 0x000080 /* 
14df0 54 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69  True for an infi
14e00 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45  x function: LIKE
14e10 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23  , GLOB, etc */.#
14e20 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74  define EP_Collat
14e30 65 20 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20  e   0x000100 /* 
14e40 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20  Tree contains a 
14e50 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61  TK_COLLATE opera
14e60 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  tor */.#define E
14e70 50 5f 47 65 6e 65 72 69 63 20 20 20 30 78 30 30  P_Generic   0x00
14e80 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43  0200 /* Ignore C
14e90 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66 69 6e 69  OLLATE or affini
14ea0 74 79 20 6f 6e 20 74 68 69 73 20 74 72 65 65 20  ty on this tree 
14eb0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e  */.#define EP_In
14ec0 74 56 61 6c 75 65 20 20 30 78 30 30 30 34 30 30  tValue  0x000400
14ed0 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
14ee0 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75  e contained in u
14ef0 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69  .iValue */.#defi
14f00 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20  ne EP_xIsSelect 
14f10 30 78 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53  0x000800 /* x.pS
14f20 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 20 28  elect is valid (
14f30 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73  otherwise x.pLis
14f40 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65  t is) */.#define
14f50 20 45 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78   EP_Skip      0x
14f60 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54  001000 /* COLLAT
14f70 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45  E, AS, or UNLIKE
14f80 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  LY */.#define EP
14f90 5f 52 65 64 75 63 65 64 20 20 20 30 78 30 30 32  _Reduced   0x002
14fa0 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75  000 /* Expr stru
14fb0 63 74 20 45 58 50 52 5f 52 45 44 55 43 45 44 53  ct EXPR_REDUCEDS
14fc0 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a  IZE bytes only *
14fd0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b  /.#define EP_Tok
14fe0 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20  enOnly 0x004000 
14ff0 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45  /* Expr struct E
15000 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a  XPR_TOKENONLYSIZ
15010 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a  E bytes only */.
15020 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69  #define EP_Stati
15030 63 20 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a  c    0x008000 /*
15040 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20   Held in memory 
15050 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  not obtained fro
15060 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64  m malloc() */.#d
15070 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65  efine EP_MemToke
15080 6e 20 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e  n  0x010000 /* N
15090 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62  eed to sqlite3Db
150a0 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b  Free() Expr.zTok
150b0 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  en */.#define EP
150c0 5f 4e 6f 52 65 64 75 63 65 20 20 30 78 30 32 30  _NoReduce  0x020
150d0 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58  000 /* Cannot EX
150e0 50 52 44 55 50 5f 52 45 44 55 43 45 20 74 68 69  PRDUP_REDUCE thi
150f0 73 20 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e  s Expr */.#defin
15100 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30  e EP_Unlikely  0
15110 78 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b  x040000 /* unlik
15120 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68  ely() or likelih
15130 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ood() function *
15140 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e  /.#define EP_Con
15150 73 74 61 6e 74 20 20 30 78 30 38 30 30 30 30 20  stant  0x080000 
15160 2f 2a 20 4e 6f 64 65 20 69 73 20 61 20 63 6f 6e  /* Node is a con
15170 73 74 61 6e 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  stant */../*.** 
15180 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
15190 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
151a0 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
151b0 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20  bits in the .** 
151c0 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
151d0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70  ..*/.#define Exp
151e0 72 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50  rHasProperty(E,P
151f0 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61  )     (((E)->fla
15200 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
15210 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72  ine ExprHasAllPr
15220 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 28 28  operty(E,P)  (((
15230 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d  E)->flags&(P))==
15240 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70  (P)).#define Exp
15250 72 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50  rSetProperty(E,P
15260 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73  )     (E)->flags
15270 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78  |=(P).#define Ex
15280 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28  prClearProperty(
15290 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67  E,P)   (E)->flag
152a0 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20  s&=~(P)../* The 
152b0 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
152c0 74 79 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73  ty() macro is us
152d0 65 64 20 66 6f 72 20 56 65 72 69 66 69 63 61 74  ed for Verificat
152e0 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c  ion, Validation,
152f0 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65 64 69 74  .** and Accredit
15300 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20  ation only.  It 
15310 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70 72 53  works like ExprS
15320 65 74 50 72 6f 70 65 72 74 79 28 29 20 64 75 72  etProperty() dur
15330 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65  ing VVA.** proce
15340 73 73 65 73 20 62 75 74 20 69 73 20 61 20 6e 6f  sses but is a no
15350 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76 65 72 79  -op for delivery
15360 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
15370 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e  TE_DEBUG.# defin
15380 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70  e ExprSetVVAProp
15390 65 72 74 79 28 45 2c 50 29 20 20 28 45 29 2d 3e  erty(E,P)  (E)->
153a0 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65  flags|=(P).#else
153b0 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65  .# define ExprSe
153c0 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50  tVVAProperty(E,P
153d0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
153e0 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d  Macros to determ
153f0 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ine the number o
15400 66 20 62 79 74 65 73 20 72 65 71 75 69 72 65 64  f bytes required
15410 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70   by a normal Exp
15420 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e  r .** struct, an
15430 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74   Expr struct wit
15440 68 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  h the EP_Reduced
15450 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70   flag set in Exp
15460 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61 6e 64 20  r.flags .** and 
15470 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77  an Expr struct w
15480 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e  ith the EP_Token
15490 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a  Only flag set..*
154a0 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46  /.#define EXPR_F
154b0 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20  ULLSIZE         
154c0 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20    sizeof(Expr)  
154d0 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c           /* Full
154e0 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65   size */.#define
154f0 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a   EXPR_REDUCEDSIZ
15500 45 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f  E        offseto
15510 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20  f(Expr,iTable)  
15520 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72  /* Common featur
15530 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  es */.#define EX
15540 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45  PR_TOKENONLYSIZE
15550 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45        offsetof(E
15560 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20  xpr,pLeft)   /* 
15570 46 65 77 65 72 20 66 65 61 74 75 72 65 73 20 2a  Fewer features *
15580 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70  /../*.** Flags p
15590 61 73 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c  assed to the sql
155a0 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66 75  ite3ExprDup() fu
155b0 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20  nction. See the 
155c0 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 0a  header comment .
155d0 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33  ** above sqlite3
155e0 45 78 70 72 44 75 70 28 29 20 66 6f 72 20 64 65  ExprDup() for de
155f0 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tails..*/.#defin
15600 65 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  e EXPRDUP_REDUCE
15610 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20           0x0001 
15620 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65 64   /* Used reduced
15630 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73  -size Expr nodes
15640 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73   */../*.** A lis
15650 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
15660 2e 20 20 45 61 63 68 20 65 78 70 72 65 73 73 69  .  Each expressi
15670 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c  on may optionall
15680 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65  y have a.** name
15690 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20  .  An expr/name 
156a0 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20  combination can 
156b0 62 65 20 75 73 65 64 20 69 6e 20 73 65 76 65 72  be used in sever
156c0 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a  al ways, such.**
156d0 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20   as the list of 
156e0 22 65 78 70 72 20 41 53 20 49 44 22 20 66 69 65  "expr AS ID" fie
156f0 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20  lds following a 
15700 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74  "SELECT" or in t
15710 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49  he.** list of "I
15720 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20  D = expr" items 
15730 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41  in an UPDATE.  A
15740 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
15750 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f  ions can.** also
15760 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
15770 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75  argument to a fu
15780 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68  nction, in which
15790 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d   case the a.zNam
157a0 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f  e.** field is no
157b0 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79  t used..**.** By
157c0 20 64 65 66 61 75 6c 74 20 74 68 65 20 45 78 70   default the Exp
157d0 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f  r.zSpan field ho
157e0 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64  lds a human-read
157f0 61 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e  able description
15800 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   of.** the expre
15810 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73  ssion that is us
15820 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
15830 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65  tion of error me
15840 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f  ssages and.** co
15850 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e  lumn labels.  In
15860 20 74 68 69 73 20 63 61 73 65 2c 20 45 78 70 72   this case, Expr
15870 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63 61  .zSpan is typica
15880 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66 20  lly the text of 
15890 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72  a.** column expr
158a0 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69  ession as it exi
158b0 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20  sts in a SELECT 
158c0 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65  statement.  Howe
158d0 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62  ver, if.** the b
158e0 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69  SpanIsTab flag i
158f0 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61  s set, then zSpa
15900 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20  n is overloaded 
15910 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65  to mean the name
15920 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c  .** of the resul
15930 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  t column in the 
15940 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54  form: DATABASE.T
15950 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68  ABLE.COLUMN.  Th
15960 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d  is later.** form
15970 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d   is used for nam
15980 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74  e resolution wit
15990 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c  h nested FROM cl
159a0 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  auses..*/.struct
159b0 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e   ExprList {.  in
159c0 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20  t nExpr;        
159d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
159e0 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e  f expressions on
159f0 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73   the list */.  s
15a00 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69  truct ExprList_i
15a10 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63  tem { /* For eac
15a20 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  h expression in 
15a30 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20  the list */.    
15a40 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
15a50 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c          /* The l
15a60 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
15a70 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  ns */.    char *
15a80 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
15a90 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63    /* Token assoc
15aa0 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
15ab0 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
15ac0 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20    char *zSpan;  
15ad0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69            /* Ori
15ae0 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68  ginal text of th
15af0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  e expression */.
15b00 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72      u8 sortOrder
15b10 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31  ;           /* 1
15b20 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66   for DESC or 0 f
15b30 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e  or ASC */.    un
15b40 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20  signed done :1; 
15b50 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20        /* A flag 
15b60 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e  to indicate when
15b70 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66   processing is f
15b80 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75  inished */.    u
15b90 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54  nsigned bSpanIsT
15ba0 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20  ab :1; /* zSpan 
15bb0 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43  holds DB.TABLE.C
15bc0 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73  OLUMN */.    uns
15bd0 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a  igned reusable :
15be0 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  1;   /* Constant
15bf0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72   expression is r
15c00 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75  eusable */.    u
15c10 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74 72  nion {.      str
15c20 75 63 74 20 7b 0a 20 20 20 20 20 20 20 20 75 31  uct {.        u1
15c30 36 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20  6 iOrderByCol;  
15c40 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52      /* For ORDER
15c50 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62   BY, column numb
15c60 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74  er in result set
15c70 20 2a 2f 0a 20 20 20 20 20 20 20 20 75 31 36 20   */.        u16 
15c80 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20  iAlias;         
15c90 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20    /* Index into 
15ca0 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66  Parse.aAlias[] f
15cb0 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20  or zName */.    
15cc0 20 20 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e 74    } x;.      int
15cd0 20 69 43 6f 6e 73 74 45 78 70 72 52 65 67 3b 20   iConstExprReg; 
15ce0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
15cf0 20 69 6e 20 77 68 69 63 68 20 45 78 70 72 20 76   in which Expr v
15d00 61 6c 75 65 20 69 73 20 63 61 63 68 65 64 20 2a  alue is cached *
15d10 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20 2a  /.    } u;.  } *
15d20 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a;              
15d30 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70      /* Alloc a p
15d40 6f 77 65 72 20 6f 66 20 74 77 6f 20 67 72 65 61  ower of two grea
15d50 74 65 72 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  ter or equal to 
15d60 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  nExpr */.};../*.
15d70 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
15d80 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
15d90 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20   is used by the 
15da0 70 61 72 73 65 72 20 74 6f 20 72 65 63 6f 72 64  parser to record
15db0 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61 72   both.** the par
15dc0 73 65 20 74 72 65 65 20 66 6f 72 20 61 6e 20 65  se tree for an e
15dd0 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68  xpression and th
15de0 65 20 73 70 61 6e 20 6f 66 20 69 6e 70 75 74 20  e span of input 
15df0 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65  text for an.** e
15e00 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74  xpression..*/.st
15e10 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 7b 0a  ruct ExprSpan {.
15e20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
15e30 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65          /* The e
15e40 78 70 72 65 73 73 69 6f 6e 20 70 61 72 73 65 20  xpression parse 
15e50 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  tree */.  const 
15e60 63 68 61 72 20 2a 7a 53 74 61 72 74 3b 20 20 20  char *zStart;   
15e70 2f 2a 20 46 69 72 73 74 20 63 68 61 72 61 63 74  /* First charact
15e80 65 72 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  er of input text
15e90 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
15ea0 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f   *zEnd;     /* O
15eb0 6e 65 20 63 68 61 72 61 63 74 65 72 20 70 61 73  ne character pas
15ec0 74 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70  t the end of inp
15ed0 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f  ut text */.};../
15ee0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
15ef0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
15f00 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69  re can hold a si
15f10 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65  mple list of ide
15f20 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63  ntifiers,.** suc
15f30 68 20 61 73 20 74 68 65 20 6c 69 73 74 20 22 61  h as the list "a
15f40 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c  ,b,c" in the fol
15f50 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  lowing statement
15f60 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e  s:.**.**      IN
15f70 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c  SERT INTO t(a,b,
15f80 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a  c) VALUES ...;.*
15f90 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e  *      CREATE IN
15fa0 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62  DEX idx ON t(a,b
15fb0 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45  ,c);.**      CRE
15fc0 41 54 45 20 54 52 49 47 47 45 52 20 74 72 69 67  ATE TRIGGER trig
15fd0 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f   BEFORE UPDATE O
15fe0 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a  N t(a,b,c) ...;.
15ff0 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74  **.** The IdList
16000 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20  .a.idx field is 
16010 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 49 64  used when the Id
16020 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74 73 20  List represents 
16030 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63  the list of.** c
16040 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65  olumn names afte
16050 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69  r a table name i
16060 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  n an INSERT stat
16070 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73  ement.  In the s
16080 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20  tatement.**.**  
16090 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
160a0 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a  (a,b,c) ....**.*
160b0 2a 20 49 66 20 22 61 22 20 69 73 20 74 68 65 20  * If "a" is the 
160c0 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  k-th column of t
160d0 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49  able "t", then I
160e0 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d  dList.a[0].idx==
160f0 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c  k..*/.struct IdL
16100 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49  ist {.  struct I
16110 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  dList_item {.   
16120 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
16130 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
16140 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a  e identifier */.
16150 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20      int idx;    
16160 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
16170 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f  n some Table.aCo
16180 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  l[] of a column 
16190 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20  named zName */. 
161a0 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64   } *a;.  int nId
161b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
161c0 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65  ber of identifie
161d0 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  rs on the list *
161e0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
161f0 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65  bitmask datatype
16200 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69   defined below i
16210 73 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f  s used for vario
16220 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
16230 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67  ..**.** Changing
16240 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d   this from a 64-
16250 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20  bit to a 32-bit 
16260 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20  type limits the 
16270 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62  number of.** tab
16280 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f  les in a join to
16290 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36   32 instead of 6
162a0 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20  4.  But it also 
162b0 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65  reduces the size
162c0 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61  .** of the libra
162d0 72 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20  ry by 738 bytes 
162e0 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74 79 70 65  on ix86..*/.type
162f0 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b  def u64 Bitmask;
16300 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ../*.** The numb
16310 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20  er of bits in a 
16320 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20  Bitmask.  "BMS" 
16330 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53  means "BitMask S
16340 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ize"..*/.#define
16350 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a   BMS  ((int)(siz
16360 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29  eof(Bitmask)*8))
16370 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e  ../*.** A bit in
16380 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64   a Bitmask.*/.#d
16390 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29  efine MASKBIT(n)
163a0 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29     (((Bitmask)1)
163b0 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d  <<(n)).#define M
163c0 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75  ASKBIT32(n) (((u
163d0 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c  nsigned int)1)<<
163e0 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  (n))../*.** The 
163f0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
16400 75 72 65 20 64 65 73 63 72 69 62 65 73 20 74 68  ure describes th
16410 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
16420 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
16430 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62  ent..** Each tab
16440 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69  le or subquery i
16450 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
16460 65 20 69 73 20 61 20 73 65 70 61 72 61 74 65 20  e is a separate 
16470 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68  element of.** th
16480 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72  e SrcList.a[] ar
16490 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20  ray..**.** With 
164a0 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20  the addition of 
164b0 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73  multiple databas
164c0 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66  e support, the f
164d0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
164e0 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62  re.** can also b
164f0 65 20 75 73 65 64 20 74 6f 20 64 65 73 63 72 69  e used to descri
16500 62 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  be a particular 
16510 74 61 62 6c 65 20 73 75 63 68 20 61 73 20 74 68  table such as th
16520 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20  e table that.** 
16530 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61  is modified by a
16540 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45  n INSERT, DELETE
16550 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74  , or UPDATE stat
16560 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64  ement.  In stand
16570 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68  ard SQL,.** such
16580 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65   a table must be
16590 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20   a simple name: 
165a0 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69  ID.  But in SQLi
165b0 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61  te, the table ca
165c0 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e  n.** now be iden
165d0 74 69 66 69 65 64 20 62 79 20 61 20 64 61 74 61  tified by a data
165e0 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74  base name, a dot
165f0 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  , then the table
16600 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a   name: ID.ID..**
16610 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65  .** The jointype
16620 20 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77   starts out show
16630 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70  ing the join typ
16640 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 63 75  e between the cu
16650 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61  rrent table.** a
16660 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c  nd the next tabl
16670 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20  e on the list.  
16680 54 68 65 20 70 61 72 73 65 72 20 62 75 69 6c 64  The parser build
16690 73 20 74 68 65 20 6c 69 73 74 20 74 68 69 73 20  s the list this 
166a0 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69  way..** But sqli
166b0 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a  te3SrcListShiftJ
166c0 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20  oinType() later 
166d0 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74  shifts the joint
166e0 79 70 65 73 20 73 6f 20 74 68 61 74 20 65 61 63  ypes so that eac
166f0 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78  h.** jointype ex
16700 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e  presses the join
16710 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 61 62   between the tab
16720 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69  le and the previ
16730 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  ous table..**.**
16740 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20   In the colUsed 
16750 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d  field, the high-
16760 6f 72 64 65 72 20 62 69 74 20 28 62 69 74 20 36  order bit (bit 6
16770 33 29 20 69 73 20 73 65 74 20 69 66 20 74 68 65  3) is set if the
16780 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69   table.** contai
16790 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20  ns more than 63 
167a0 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20  columns and the 
167b0 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63  64-th or later c
167c0 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a  olumn is used..*
167d0 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  /.struct SrcList
167e0 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20   {.  int nSrc;  
167f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16800 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62  of tables or sub
16810 71 75 65 72 69 65 73 20 69 6e 20 74 68 65 20 46  queries in the F
16820 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
16830 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  u32 nAlloc;     
16840 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
16850 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20  tries allocated 
16860 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a  in a[] below */.
16870 20 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74    struct SrcList
16880 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65  _item {.    Sche
16890 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a  ma *pSchema;  /*
168a0 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68   Schema to which
168b0 20 74 68 69 73 20 69 74 65 6d 20 69 73 20 66 69   this item is fi
168c0 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  xed */.    char 
168d0 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20  *zDatabase;  /* 
168e0 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65  Name of database
168f0 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61   holding this ta
16900 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ble */.    char 
16910 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  *zName;      /* 
16920 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  Name of the tabl
16930 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
16940 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68  Alias;     /* Th
16950 65 20 22 42 22 20 70 61 72 74 20 6f 66 20 61 20  e "B" part of a 
16960 22 41 20 41 53 20 42 22 20 70 68 72 61 73 65 2e  "A AS B" phrase.
16970 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22    zName is the "
16980 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20  A" */.    Table 
16990 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41  *pTab;      /* A
169a0 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72  n SQL table corr
169b0 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61  esponding to zNa
169c0 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  me */.    Select
169d0 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41   *pSelect;  /* A
169e0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
169f0 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20  t used in place 
16a00 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20  of a table name 
16a10 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46  */.    int addrF
16a20 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72  illSub;  /* Addr
16a30 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e  ess of subroutin
16a40 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20  e to manifest a 
16a50 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20  subquery */.    
16a60 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20  int regReturn;  
16a70 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
16a80 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64  lding return add
16a90 72 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c  ress of addrFill
16aa0 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  Sub */.    int r
16ab0 65 67 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20  egResult;    /* 
16ac0 52 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e  Registers holdin
16ad0 67 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63  g results of a c
16ae0 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20  o-routine */.   
16af0 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20   u8 jointype;   
16b00 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f     /* Type of jo
16b10 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20  in between this 
16b20 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65  able and the pre
16b30 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 75 6e 73  vious */.    uns
16b40 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64  igned notIndexed
16b50 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20   :1;    /* True 
16b60 69 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f  if there is a NO
16b70 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65  T INDEXED clause
16b80 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
16b90 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31   isCorrelated :1
16ba0 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75  ;  /* True if su
16bb0 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65  b-query is corre
16bc0 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73  lated */.    uns
16bd0 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69  igned viaCorouti
16be0 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65  ne :1;  /* Imple
16bf0 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72  mented as a co-r
16c00 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 75 6e  outine */.    un
16c10 73 69 67 6e 65 64 20 69 73 52 65 63 75 72 73 69  signed isRecursi
16c20 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  ve :1;   /* True
16c30 20 66 6f 72 20 72 65 63 75 72 73 69 76 65 20 72   for recursive r
16c40 65 66 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48  eference in WITH
16c50 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
16c60 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
16c70 20 20 20 20 75 38 20 69 53 65 6c 65 63 74 49 64      u8 iSelectId
16c80 3b 20 20 20 20 20 2f 2a 20 49 66 20 70 53 65 6c  ;     /* If pSel
16c90 65 63 74 21 3d 30 2c 20 74 68 65 20 69 64 20 6f  ect!=0, the id o
16ca0 66 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74  f the sub-select
16cb0 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69   in EQP */.#endi
16cc0 66 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f  f.    int iCurso
16cd0 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56  r;      /* The V
16ce0 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  DBE cursor numbe
16cf0 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73  r used to access
16d00 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
16d10 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20     Expr *pOn;   
16d20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63       /* The ON c
16d30 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
16d40 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70  */.    IdList *p
16d50 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20  Using;   /* The 
16d60 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20  USING clause of 
16d70 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69  a join */.    Bi
16d80 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20  tmask colUsed;  
16d90 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20  /* Bit N (1<<N) 
16da0 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20  set if column N 
16db0 6f 66 20 70 54 61 62 20 69 73 20 75 73 65 64 20  of pTab is used 
16dc0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 49 6e  */.    char *zIn
16dd0 64 65 78 3b 20 20 20 20 20 2f 2a 20 49 64 65 6e  dex;     /* Iden
16de0 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44  tifier from "IND
16df0 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e  EXED BY <zIndex>
16e00 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  " clause */.    
16e10 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20  Index *pIndex;  
16e20 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63    /* Index struc
16e30 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  ture correspondi
16e40 6e 67 20 74 6f 20 7a 49 6e 64 65 78 2c 20 69 66  ng to zIndex, if
16e50 20 61 6e 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d   any */.  } a[1]
16e60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16e70 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   One entry for e
16e80 61 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f  ach identifier o
16e90 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
16ea0 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65  ../*.** Permitte
16eb0 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20  d values of the 
16ec0 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79  SrcList.a.jointy
16ed0 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66  pe field.*/.#def
16ee0 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20  ine JT_INNER    
16ef0 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e   0x0001    /* An
16f00 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20  y kind of inner 
16f10 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f  or cross join */
16f20 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53  .#define JT_CROS
16f30 53 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20  S     0x0002    
16f40 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20  /* Explicit use 
16f50 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79  of the CROSS key
16f60 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
16f70 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30  JT_NATURAL   0x0
16f80 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66  004    /* True f
16f90 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a  or a "natural" j
16fa0 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
16fb0 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30  T_LEFT      0x00
16fc0 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75  08    /* Left ou
16fd0 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
16fe0 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20  ine JT_RIGHT    
16ff0 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69   0x0010    /* Ri
17000 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  ght outer join *
17010 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54  /.#define JT_OUT
17020 45 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20  ER     0x0020   
17030 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20   /* The "OUTER" 
17040 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65  keyword is prese
17050 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  nt */.#define JT
17060 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34  _ERROR     0x004
17070 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20  0    /* unknown 
17080 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a  or unsupported j
17090 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a  oin type */.../*
170a0 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70  .** Flags approp
170b0 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63  riate for the wc
170c0 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74  trlFlags paramet
170d0 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65  er of sqlite3Whe
170e0 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64  reBegin().** and
170f0 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77   the WhereInfo.w
17100 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72  ctrlFlags member
17110 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  ..*/.#define WHE
17120 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41  RE_ORDERBY_NORMA
17130 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f  L   0x0000 /* No
17140 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  -op */.#define W
17150 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e  HERE_ORDERBY_MIN
17160 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20        0x0001 /* 
17170 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
17180 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75  ing for min() fu
17190 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
171a0 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20  ERE_ORDERBY_MAX 
171b0 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f       0x0002 /* O
171c0 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69  RDER BY processi
171d0 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e  ng for max() fun
171e0 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  c */.#define WHE
171f0 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52  RE_ONEPASS_DESIR
17200 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61  ED  0x0004 /* Wa
17210 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73  nt to do one-pas
17220 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20  s UPDATE/DELETE 
17230 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
17240 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20  _DUPLICATES_OK  
17250 20 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20 74    0x0008 /* Ok t
17260 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d  o return a row m
17270 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f  ore than once */
17280 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
17290 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20 20  MIT_OPEN_CLOSE  
172a0 30 78 30 30 31 30 20 2f 2a 20 54 61 62 6c 65 20  0x0010 /* Table 
172b0 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 72 65  cursors are alre
172c0 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66  ady open */.#def
172d0 69 6e 65 20 57 48 45 52 45 5f 46 4f 52 43 45 5f  ine WHERE_FORCE_
172e0 54 41 42 4c 45 20 20 20 20 20 20 30 78 30 30 32  TABLE      0x002
172f0 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20  0 /* Do not use 
17300 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73 65  an index-only se
17310 61 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20  arch */.#define 
17320 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f  WHERE_ONETABLE_O
17330 4e 4c 59 20 20 20 20 30 78 30 30 34 30 20 2f 2a  NLY    0x0040 /*
17340 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65 20 31   Only code the 1
17350 73 74 20 74 61 62 6c 65 20 69 6e 20 70 54 61 62  st table in pTab
17360 4c 69 73 74 20 2a 2f 0a 20 20 20 20 20 20 20 20  List */.        
17370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17380 20 20 2f 2a 20 20 20 30 78 30 30 38 30 20 2f 2f    /*   0x0080 //
17390 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75   not currently u
173a0 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  sed */.#define W
173b0 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20  HERE_GROUPBY    
173c0 20 20 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20        0x0100 /* 
173d0 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61 6c  pOrderBy is real
173e0 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f  ly a GROUP BY */
173f0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
17400 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20 20  ISTINCTBY       
17410 30 78 30 32 30 30 20 2f 2a 20 70 4f 72 64 65 72  0x0200 /* pOrder
17420 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44  by is really a D
17430 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a  ISTINCT clause *
17440 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
17450 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20  WANT_DISTINCT   
17460 20 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c 20 6f   0x0400 /* All o
17470 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62  utput needs to b
17480 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64  e distinct */.#d
17490 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54  efine WHERE_SORT
174a0 42 59 47 52 4f 55 50 20 20 20 20 20 20 30 78 30  BYGROUP      0x0
174b0 38 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73  800 /* Support s
174c0 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72  qlite3WhereIsSor
174d0 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ted() */.#define
174e0 20 57 48 45 52 45 5f 52 45 4f 50 45 4e 5f 49 44   WHERE_REOPEN_ID
174f0 58 20 20 20 20 20 20 20 30 78 31 30 30 30 20 2f  X       0x1000 /
17500 2a 20 54 72 79 20 74 6f 20 75 73 65 20 4f 50 5f  * Try to use OP_
17510 52 65 6f 70 65 6e 49 64 78 20 2a 2f 0a 0a 2f 2a  ReopenIdx */../*
17520 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20   Allowed return 
17530 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69  values from sqli
17540 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e  te3WhereIsDistin
17550 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ct().*/.#define 
17560 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e  WHERE_DISTINCT_N
17570 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44  OOP      0  /* D
17580 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20  ISTINCT keyword 
17590 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66  not used */.#def
175a0 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
175b0 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20  CT_UNIQUE    1  
175c0 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73  /* No duplicates
175d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
175e0 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52  E_DISTINCT_ORDER
175f0 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64  ED   2  /* All d
17600 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 61 64  uplicates are ad
17610 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  jacent */.#defin
17620 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
17630 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a  _UNORDERED 3  /*
17640 20 44 75 70 6c 69 63 61 74 65 73 20 61 72 65 20   Duplicates are 
17650 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a  scattered */../*
17660 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78  .** A NameContex
17670 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74  t defines a cont
17680 65 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20  ext in which to 
17690 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e  resolve table an
176a0 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65  d column.** name
176b0 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20  s.  The context 
176c0 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69  consists of a li
176d0 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68  st of tables (th
176e0 65 20 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c  e pSrcList) fiel
176f0 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20  d and.** a list 
17700 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73  of named express
17710 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54  ion (pEList).  T
17720 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73  he named express
17730 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20  ion list may.** 
17740 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53  be NULL.  The pS
17750 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  rc corresponds t
17760 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  o the FROM claus
17770 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72  e of a SELECT or
17780 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65  .** to the table
17790 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20   being operated 
177a0 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50  on by INSERT, UP
177b0 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e  DATE, or DELETE.
177c0 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20    The.** pEList 
177d0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
177e0 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66  he result set of
177f0 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73   a SELECT and is
17800 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68   NULL for.** oth
17810 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  er statements..*
17820 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  *.** NameContext
17830 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e  s can be nested.
17840 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67    When resolving
17850 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65   names, the inne
17860 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74 65  r-most .** conte
17870 78 74 20 69 73 20 73 65 61 72 63 68 65 64 20 66  xt is searched f
17880 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74  irst.  If no mat
17890 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
178a0 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63   next outer.** c
178b0 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b 65  ontext is checke
178c0 64 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  d.  If there is 
178d0 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20  still no match, 
178e0 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74  the next context
178f0 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20  .** is checked. 
17900 20 54 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f   This process co
17910 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69  ntinues until ei
17920 74 68 65 72 20 61 20 6d 61 74 63 68 20 69 73 20  ther a match is 
17930 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20  found.** or all 
17940 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68 65  contexts are che
17950 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63  ck.  When a matc
17960 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
17970 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a  nRef member of.*
17980 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f  * the context co
17990 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74  ntaining the mat
179a0 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  ch is incremente
179b0 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73  d. .**.** Each s
179c0 75 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e  ubquery gets a n
179d0 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20  ew NameContext. 
179e0 20 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64   The pNext field
179f0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
17a00 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e  * NameContext in
17a10 20 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72   the parent quer
17a20 79 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f  y.  Thus the pro
17a30 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67  cess of scanning
17a40 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
17a50 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70  ext list corresp
17a60 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e  onds to searchin
17a70 67 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73  g through succes
17a80 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20  sively outer.** 
17a90 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69  subqueries looki
17aa0 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a  ng for a match..
17ab0 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f  */.struct NameCo
17ac0 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20  ntext {.  Parse 
17ad0 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f  *pParse;       /
17ae0 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a  * The parser */.
17af0 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c    SrcList *pSrcL
17b00 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72  ist;   /* One or
17b10 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65   more tables use
17b20 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d  d to resolve nam
17b30 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  es */.  ExprList
17b40 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20   *pEList;    /* 
17b50 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66  Optional list of
17b60 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75   result-set colu
17b70 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f  mns */.  AggInfo
17b80 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a   *pAggInfo;   /*
17b90 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
17ba0 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61 74  ut aggregates at
17bb0 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20   this level */. 
17bc0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
17bd0 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75  ext;  /* Next ou
17be0 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74  ter name context
17bf0 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65  .  NULL for oute
17c00 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  rmost */.  int n
17c10 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
17c20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d  /* Number of nam
17c30 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74  es resolved by t
17c40 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  his context */. 
17c50 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
17c60 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
17c70 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e  of errors encoun
17c80 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f  tered while reso
17c90 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20  lving names */. 
17ca0 20 75 31 36 20 6e 63 46 6c 61 67 73 3b 20 20 20   u16 ncFlags;   
17cb0 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72        /* Zero or
17cc0 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73   more NC_* flags
17cd0 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a   defined below *
17ce0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
17cf0 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74  wed values for t
17d00 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20  he NameContext, 
17d10 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ncFlags field..*
17d20 2a 0a 2a 2a 20 4e 6f 74 65 3a 20 20 4e 43 5f 4d  *.** Note:  NC_M
17d30 69 6e 4d 61 78 41 67 67 20 6d 75 73 74 20 68 61  inMaxAgg must ha
17d40 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  ve the same valu
17d50 65 20 61 73 20 53 46 5f 4d 69 6e 4d 61 78 41 67  e as SF_MinMaxAg
17d60 67 20 61 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f  g and.** SQLITE_
17d70 46 55 4e 43 5f 4d 49 4e 4d 41 58 2e 0a 2a 2a 20  FUNC_MINMAX..** 
17d80 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41  .*/.#define NC_A
17d90 6c 6c 6f 77 41 67 67 20 20 30 78 30 30 30 31 20  llowAgg  0x0001 
17da0 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75   /* Aggregate fu
17db0 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f  nctions are allo
17dc0 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66  wed here */.#def
17dd0 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20  ine NC_HasAgg   
17de0 20 30 78 30 30 30 32 20 20 2f 2a 20 4f 6e 65 20   0x0002  /* One 
17df0 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
17e00 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e  e functions seen
17e10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
17e20 73 43 68 65 63 6b 20 20 20 30 78 30 30 30 34 20  sCheck   0x0004 
17e30 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
17e40 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61  lving names in a
17e50 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
17e60 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  t */.#define NC_
17e70 49 6e 41 67 67 46 75 6e 63 20 30 78 30 30 30 38  InAggFunc 0x0008
17e80 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61    /* True if ana
17e90 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73  lyzing arguments
17ea0 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20   to an agg func 
17eb0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61  */.#define NC_Pa
17ec0 72 74 49 64 78 20 20 20 30 78 30 30 31 30 20 20  rtIdx   0x0010  
17ed0 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
17ee0 76 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69  ving a partial i
17ef0 6e 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64  ndex WHERE */.#d
17f00 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41  efine NC_MinMaxA
17f10 67 67 20 30 78 31 30 30 30 20 20 2f 2a 20 6d 69  gg 0x1000  /* mi
17f20 6e 2f 6d 61 78 20 61 67 67 72 65 67 61 74 65 73  n/max aggregates
17f30 20 73 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65   seen.  See note
17f40 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   above */../*.**
17f50 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
17f60 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
17f70 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
17f80 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   all information
17f90 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65  .** needed to ge
17fa0 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20  nerate code for 
17fb0 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20  a single SELECT 
17fc0 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
17fd0 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74 20 74   nLimit is set t
17fe0 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20 69 73  o -1 if there is
17ff0 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65   no LIMIT clause
18000 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20 73 65  .  nOffset is se
18010 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68  t to 0..** If th
18020 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54 20 63  ere is a LIMIT c
18030 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72 73 65  lause, the parse
18040 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f  r sets nLimit to
18050 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
18060 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e  e.** limit and n
18070 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20 76 61  Offset to the va
18080 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66 73 65  lue of the offse
18090 74 20 28 6f 72 20 30 20 69 66 20 74 68 65 72 65  t (or 0 if there
180a0 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65   is not.** offse
180b0 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72 20 6f  t).  But later o
180c0 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f  n, nLimit and nO
180d0 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74 68 65  ffset become the
180e0 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
180f0 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44 42 45  s.** in the VDBE
18100 20 74 68 61 74 20 72 65 63 6f 72 64 20 74 68 65   that record the
18110 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66 73 65   limit and offse
18120 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a  t counters..**.*
18130 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d  * addrOpenEphm[]
18140 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e   entries contain
18150 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
18160 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
18170 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65   opcodes..** The
18180 73 65 20 61 64 64 72 65 73 73 65 73 20 6d 75 73  se addresses mus
18190 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74  t be stored so t
181a0 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61  hat we can go ba
181b0 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a  ck and fill in.*
181c0 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f  * the P4_KEYINFO
181d0 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65   and P2 paramete
181e0 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68  rs later.  Neith
181f0 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e  er the KeyInfo n
18200 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  or.** the number
18210 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50   of columns in P
18220 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65  2 can be compute
18230 64 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69  d at the same ti
18240 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f  me.** as the OP_
18250 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63  OpenEphm instruc
18260 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65  tion is coded be
18270 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f  cause not.** eno
18280 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ugh information 
18290 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75  about the compou
182a0 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77  nd query is know
182b0 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e  n at that point.
182c0 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  .** The KeyInfo 
182d0 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e  for addrOpenTran
182e0 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74  [0] and [1] cont
182f0 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ains collating s
18300 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20  equences.** for 
18310 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20  the result set. 
18320 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72   The KeyInfo for
18330 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d   addrOpenEphm[2]
18340 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74   contains collat
18350 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73  ing.** sequences
18360 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42   for the ORDER B
18370 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72  Y clause..*/.str
18380 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45  uct Select {.  E
18390 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b  xprList *pEList;
183a0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65        /* The fie
183b0 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c  lds of the resul
183c0 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20  t */.  u8 op;   
183d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
183e0 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f   One of: TK_UNIO
183f0 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45  N TK_ALL TK_INTE
18400 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20  RSECT TK_EXCEPT 
18410 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46 6c 61 67  */.  u16 selFlag
18420 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  s;          /* V
18430 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75  arious SF_* valu
18440 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d  es */.  int iLim
18450 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f  it, iOffset;   /
18460 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  * Memory registe
18470 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54  rs holding LIMIT
18480 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65   & OFFSET counte
18490 72 73 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54  rs */.#if SELECT
184a0 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20  TRACE_ENABLED.  
184b0 63 68 61 72 20 7a 53 65 6c 4e 61 6d 65 5b 31 32  char zSelName[12
184c0 5d 3b 20 20 20 20 20 2f 2a 20 53 79 6d 62 6f 6c  ];     /* Symbol
184d0 69 63 20 6e 61 6d 65 20 6f 66 20 74 68 69 73 20  ic name of this 
184e0 53 45 4c 45 43 54 20 75 73 65 20 66 6f 72 20 64  SELECT use for d
184f0 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 65 6e 64  ebugging */.#end
18500 69 66 0a 20 20 69 6e 74 20 61 64 64 72 4f 70 65  if.  int addrOpe
18510 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f  nEphm[2];   /* O
18520 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f  P_OpenEphem opco
18530 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74  des related to t
18540 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20  his select */.  
18550 75 36 34 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20  u64 nSelectRow; 
18560 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
18570 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65  ted number of re
18580 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20 53  sult rows */.  S
18590 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20 20 20  rcList *pSrc;   
185a0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46 52 4f        /* The FRO
185b0 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  M clause */.  Ex
185c0 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20  pr *pWhere;     
185d0 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52       /* The WHER
185e0 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  E clause */.  Ex
185f0 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79  prList *pGroupBy
18600 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52 4f 55  ;    /* The GROU
18610 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  P BY clause */. 
18620 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67 3b 20   Expr *pHaving; 
18630 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 48          /* The H
18640 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a  AVING clause */.
18650 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64    ExprList *pOrd
18660 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20  erBy;    /* The 
18670 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
18680 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 50 72  */.  Select *pPr
18690 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 50  ior;        /* P
186a0 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e 20 61  rior select in a
186b0 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74   compound select
186c0 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20   statement */.  
186d0 53 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20 20  Select *pNext;  
186e0 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 73         /* Next s
186f0 65 6c 65 63 74 20 74 6f 20 74 68 65 20 6c 65 66  elect to the lef
18700 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t in a compound 
18710 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d 69  */.  Expr *pLimi
18720 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  t;          /* L
18730 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  IMIT expression.
18740 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20   NULL means not 
18750 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70 72 20  used. */.  Expr 
18760 2a 70 4f 66 66 73 65 74 3b 20 20 20 20 20 20 20  *pOffset;       
18770 20 20 2f 2a 20 4f 46 46 53 45 54 20 65 78 70 72    /* OFFSET expr
18780 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61  ession. NULL mea
18790 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a  ns not used. */.
187a0 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20    With *pWith;  
187b0 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54 48           /* WITH
187c0 20 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64   clause attached
187d0 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 2e   to this select.
187e0 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a   Or NULL. */.};.
187f0 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
18800 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74  alues for Select
18810 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20  .selFlags.  The 
18820 22 53 46 22 20 70 72 65 66 69 78 20 73 74 61 6e  "SF" prefix stan
18830 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63  ds for.** "Selec
18840 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a 23 64 65 66  t Flag"..*/.#def
18850 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20  ine SF_Distinct 
18860 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f         0x0001  /
18870 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20  * Output should 
18880 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23  be DISTINCT */.#
18890 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76  define SF_Resolv
188a0 65 64 20 20 20 20 20 20 20 20 30 78 30 30 30 32  ed        0x0002
188b0 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73    /* Identifiers
188c0 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c   have been resol
188d0 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ved */.#define S
188e0 46 5f 41 67 67 72 65 67 61 74 65 20 20 20 20 20  F_Aggregate     
188f0 20 20 30 78 30 30 30 34 20 20 2f 2a 20 43 6f 6e    0x0004  /* Con
18900 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
18910 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  functions */.#de
18920 66 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65  fine SF_UsesEphe
18930 6d 65 72 61 6c 20 20 20 30 78 30 30 30 38 20 20  meral   0x0008  
18940 2f 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e  /* Uses the Open
18950 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65  Ephemeral opcode
18960 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45   */.#define SF_E
18970 78 70 61 6e 64 65 64 20 20 20 20 20 20 20 20 30  xpanded        0
18980 78 30 30 31 30 20 20 2f 2a 20 73 71 6c 69 74 65  x0010  /* sqlite
18990 33 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20  3SelectExpand() 
189a0 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a  called on this *
189b0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73  /.#define SF_Has
189c0 54 79 70 65 49 6e 66 6f 20 20 20 20 20 30 78 30  TypeInfo     0x0
189d0 30 32 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62  020  /* FROM sub
189e0 71 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62  queries have Tab
189f0 6c 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23  le metadata */.#
18a00 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75  define SF_Compou
18a10 6e 64 20 20 20 20 20 20 20 20 30 78 30 30 34 30  nd        0x0040
18a20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63    /* Part of a c
18a30 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f  ompound query */
18a40 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75  .#define SF_Valu
18a50 65 73 20 20 20 20 20 20 20 20 20 20 30 78 30 30  es          0x00
18a60 38 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a  80  /* Synthesiz
18a70 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63  ed from VALUES c
18a80 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 20  lause */.       
18a90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
18aa0 20 20 20 20 30 78 30 31 30 30 20 20 4e 4f 54 20      0x0100  NOT 
18ab0 55 53 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20  USED */.#define 
18ac0 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20  SF_NestedFrom   
18ad0 20 20 20 30 78 30 32 30 30 20 20 2f 2a 20 50 61     0x0200  /* Pa
18ae0 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65  rt of a parenthe
18af0 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73  sized FROM claus
18b00 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
18b10 4d 61 79 62 65 43 6f 6e 76 65 72 74 20 20 20 20  MaybeConvert    
18b20 30 78 30 34 30 30 20 20 2f 2a 20 4e 65 65 64 20  0x0400  /* Need 
18b30 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
18b40 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
18b50 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ) */.#define SF_
18b60 52 65 63 75 72 73 69 76 65 20 20 20 20 20 20 20  Recursive       
18b70 30 78 30 38 30 30 20 20 2f 2a 20 54 68 65 20 72  0x0800  /* The r
18b80 65 63 75 72 73 69 76 65 20 70 61 72 74 20 6f 66  ecursive part of
18b90 20 61 20 72 65 63 75 72 73 69 76 65 20 43 54 45   a recursive CTE
18ba0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
18bb0 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 20 30  inMaxAgg       0
18bc0 78 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67  x1000  /* Aggreg
18bd0 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d  ate containing m
18be0 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f  in() or max() */
18bf0 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73  .../*.** The res
18c00 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54  ults of a SELECT
18c10 20 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75   can be distribu
18c20 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  ted in several w
18c30 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a  ays, as defined.
18c40 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65  ** by one of the
18c50 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
18c60 73 2e 20 20 54 68 65 20 22 53 52 54 22 20 70 72  s.  The "SRT" pr
18c70 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45  efix means "SELE
18c80 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70  CT Result.** Typ
18c90 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  e"..**.**     SR
18ca0 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74  T_Union       St
18cb0 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 61  ore results as a
18cc0 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72   key in a tempor
18cd0 61 72 79 20 69 6e 64 65 78 20 0a 2a 2a 20 20 20  ary index .**   
18ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cf0 20 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20    identified by 
18d00 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
18d10 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78  **.**     SRT_Ex
18d20 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76 65  cept      Remove
18d30 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68   results from th
18d40 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65  e temporary inde
18d50 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  x pDest->iSDParm
18d60 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
18d70 45 78 69 73 74 73 20 20 20 20 20 20 53 74 6f 72  Exists      Stor
18d80 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20  e a 1 in memory 
18d90 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44 50  cell pDest->iSDP
18da0 61 72 6d 20 69 66 20 74 68 65 20 72 65 73 75 6c  arm if the resul
18db0 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
18dc0 20 20 20 20 20 20 20 20 20 73 65 74 20 69 73 20           set is 
18dd0 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a  not empty..**.**
18de0 20 20 20 20 20 53 52 54 5f 44 69 73 63 61 72 64       SRT_Discard
18df0 20 20 20 20 20 54 68 72 6f 77 20 74 68 65 20 72       Throw the r
18e00 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54 68  esults away.  Th
18e10 69 73 20 69 73 20 75 73 65 64 20 62 79 20 53 45  is is used by SE
18e20 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20 20  LECT.**         
18e30 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
18e40 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72  ements within tr
18e50 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c  iggers whose onl
18e60 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20  y purpose is.** 
18e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e80 20 20 20 20 74 68 65 20 73 69 64 65 2d 65 66 66      the side-eff
18e90 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e  ects of function
18ea0 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20  s..**.** All of 
18eb0 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 66 72  the above are fr
18ec0 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65  ee to ignore the
18ed0 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  ir ORDER BY clau
18ee0 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a 2a  se. Those that.*
18ef0 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f  * follow must ho
18f00 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59  nor the ORDER BY
18f10 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   clause..**.**  
18f20 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20     SRT_Output   
18f30 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 72 6f     Generate a ro
18f40 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73 69  w of output (usi
18f50 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c 74  ng the OP_Result
18f60 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  Row.**          
18f70 20 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f 64             opcod
18f80 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  e) for each row 
18f90 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  in the result se
18fa0 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
18fb0 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c  _Mem         Onl
18fc0 79 20 76 61 6c 69 64 20 69 66 20 74 68 65 20 72  y valid if the r
18fd0 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67 6c  esult is a singl
18fe0 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20  e column..**    
18ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19000 20 53 74 6f 72 65 20 74 68 65 20 66 69 72 73 74   Store the first
19010 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66   column of the f
19020 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77 0a  irst result row.
19030 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19040 20 20 20 20 20 20 20 69 6e 20 72 65 67 69 73 74         in regist
19050 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  er pDest->iSDPar
19060 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74  m then abandon t
19070 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20 20  he rest.**      
19080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
19090 66 20 74 68 65 20 71 75 65 72 79 2e 20 20 54 68  f the query.  Th
190a0 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69  is destination i
190b0 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31 22  mplies "LIMIT 1"
190c0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
190d0 53 65 74 20 20 20 20 20 20 20 20 20 54 68 65 20  Set         The 
190e0 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61  result must be a
190f0 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20   single column. 
19100 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20   Store each.**  
19110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19120 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74     row of result
19130 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20 74   as the key in t
19140 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
19150 61 72 6d 2e 20 0a 2a 2a 20 20 20 20 20 20 20 20  arm. .**        
19160 20 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70               App
19170 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ly the affinity 
19180 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62  pDest->affSdst b
19190 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a  efore storing.**
191a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191b0 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55       results.  U
191c0 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
191d0 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e   "IN (SELECT ...
191e0 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  )"..**.**     SR
191f0 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43 72  T_EphemTab    Cr
19200 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72  eate an temporar
19210 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
19220 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65  SDParm and store
19230 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19240 20 20 20 20 20 20 20 20 74 68 65 20 72 65 73 75          the resu
19250 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20 63 75  lt there. The cu
19260 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65  rsor is left ope
19270 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20  n after.**      
19280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
19290 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20  eturning.  This 
192a0 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  is like SRT_Tabl
192b0 65 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a  e except that.**
192c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192d0 20 20 20 20 20 74 68 69 73 20 64 65 73 74 69 6e       this destin
192e0 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70  ation uses OP_Op
192f0 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63  enEphemeral to c
19300 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20  reate.**        
19310 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
19320 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a   table first..**
19330 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f  .**     SRT_Coro
19340 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65  utine   Generate
19350 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68   a co-routine th
19360 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77  at returns a new
19370 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20   row of.**      
19380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
19390 65 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65  esults each time
193a0 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20   it is invoked. 
193b0 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74   The entry point
193c0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
193d0 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63          of the c
193e0 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f  o-routine is sto
193f0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
19400 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a  pDest->iSDParm.*
19410 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19420 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 72 65        and the re
19430 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72  sult row is stor
19440 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65  ed in pDest->nDe
19450 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  st registers.** 
19460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19470 20 20 20 20 73 74 61 72 74 69 6e 67 20 77 69 74      starting wit
19480 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a  h pDest->iSdst..
19490 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61  **.**     SRT_Ta
194a0 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65 20  ble       Store 
194b0 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f  results in tempo
194c0 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
194d0 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
194e0 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20    SRT_Fifo      
194f0 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
19500 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65  RT_EphemTab exce
19510 70 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c  pt that the tabl
19520 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
19530 20 20 20 20 20 20 20 20 20 69 73 20 61 73 73 75           is assu
19540 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62  med to already b
19550 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66  e open.  SRT_Fif
19560 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20  o has.**        
19570 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
19580 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70   additional prop
19590 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62  erty of being ab
195a0 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20  le to ignore.** 
195b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195c0 20 20 20 20 74 68 65 20 4f 52 44 45 52 20 42 59      the ORDER BY
195d0 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   clause..**.**  
195e0 20 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20     SRT_DistFifo 
195f0 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
19600 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20   in a temporary 
19610 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
19620 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20  Parm..**        
19630 20 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74               But
19640 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72   also use tempor
19650 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
19660 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a  >iSDParm+1 as.**
19670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19680 20 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66       a record of
19690 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c   all prior resul
196a0 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e  ts and ignore an
196b0 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20  y duplicate.**  
196c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196d0 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d     rows.  Name m
196e0 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74  eans:  "Distinct
196f0 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   Fifo"..**.**   
19700 20 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20    SRT_Queue     
19710 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
19720 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75  in priority queu
19730 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
19740 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20   (really.**     
19750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19760 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65  an index).  Appe
19770 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75  nd a sequence nu
19780 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c  mber so that all
19790 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20   entries.**     
197a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197b0 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a  are distinct..**
197c0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74  .**     SRT_Dist
197d0 51 75 65 75 65 20 20 20 53 74 6f 72 65 20 72 65  Queue   Store re
197e0 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74  sults in priorit
197f0 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69  y queue pDest->i
19800 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a  SDParm only if.*
19810 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19820 20 20 20 20 20 20 74 68 65 20 73 61 6d 65 20 72        the same r
19830 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20  ecord has never 
19840 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f  been stored befo
19850 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20  re.  The.**     
19860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19870 69 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e  index at pDest->
19880 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61  iSDParm+1 hold a
19890 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e  ll prior stores.
198a0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f  .*/.#define SRT_
198b0 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20  Union        1  
198c0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
198d0 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  as keys in an in
198e0 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
198f0 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 20  RT_Except       
19900 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73  2  /* Remove res
19910 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e  ult from a UNION
19920 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
19930 65 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20  e SRT_Exists    
19940 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31     3  /* Store 1
19950 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69   if the result i
19960 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23  s not empty */.#
19970 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61  define SRT_Disca
19980 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f  rd      4  /* Do
19990 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72 65   not save the re
199a0 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a  sults anywhere *
199b0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69  /.#define SRT_Fi
199c0 66 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a  fo         5  /*
199d0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
199e0 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75   data with an au
199f0 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f  tomatic rowid */
19a00 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
19a10 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20  tFifo     6  /* 
19a20 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62  Like SRT_Fifo, b
19a30 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74  ut unique result
19a40 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
19a50 65 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20  e SRT_Queue     
19a60 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72     7  /* Store r
19a70 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75  esult in an queu
19a80 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
19a90 5f 44 69 73 74 51 75 65 75 65 20 20 20 20 38 20  _DistQueue    8 
19aa0 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65   /* Like SRT_Que
19ab0 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72  ue, but unique r
19ac0 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a  esults only */..
19ad0 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
19ae0 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65  clause is ignore
19af0 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65  d for all of the
19b00 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e   above */.#defin
19b10 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72  e IgnorableOrder
19b20 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74  by(X) ((X->eDest
19b30 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65  )<=SRT_DistQueue
19b40 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f  )..#define SRT_O
19b50 75 74 70 75 74 20 20 20 20 20 20 20 39 20 20 2f  utput       9  /
19b60 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f  * Output each ro
19b70 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23  w of result */.#
19b80 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20  define SRT_Mem  
19b90 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74         10  /* St
19ba0 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ore result in a 
19bb0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23  memory cell */.#
19bc0 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20  define SRT_Set  
19bd0 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74         11  /* St
19be0 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b  ore results as k
19bf0 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
19c00 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
19c10 70 68 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f  phemTab    12  /
19c20 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73 69 65  * Create transie
19c30 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65  nt tab and store
19c40 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20   like SRT_Table 
19c50 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43  */.#define SRT_C
19c60 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f  oroutine   13  /
19c70 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e  * Generate a sin
19c80 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  gle row of resul
19c90 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
19ca0 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31 34 20  _Table       14 
19cb0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
19cc0 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e   as data with an
19cd0 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64   automatic rowid
19ce0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
19cf0 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f  stance of this o
19d00 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20  bject describes 
19d10 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20  where to put of 
19d20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a  the results of.*
19d30 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  * a SELECT state
19d40 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
19d50 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75  SelectDest {.  u
19d60 38 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20  8 eDest;        
19d70 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69      /* How to di
19d80 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73  spose of the res
19d90 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54  ults.  On of SRT
19da0 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63  _* above. */.  c
19db0 68 61 72 20 61 66 66 53 64 73 74 3b 20 20 20 20  har affSdst;    
19dc0 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20      /* Affinity 
19dd0 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d  used when eDest=
19de0 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e  =SRT_Set */.  in
19df0 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20  t iSDParm;      
19e00 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65     /* A paramete
19e10 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44  r used by the eD
19e20 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74  est disposal met
19e30 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64  hod */.  int iSd
19e40 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  st;           /*
19e50 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20 77   Base register w
19e60 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72 65  here results are
19e70 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e   written */.  in
19e80 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20  t nSdst;        
19e90 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
19ea0 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61  registers alloca
19eb0 74 65 64 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  ted */.  ExprLis
19ec0 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a  t *pOrderBy;  /*
19ed0 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72   Key columns for
19ee0 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53   SRT_Queue and S
19ef0 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a  RT_DistQueue */.
19f00 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67  };../*.** During
19f10 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e   code generation
19f20 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74   of statements t
19f30 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69  hat do inserts i
19f40 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  nto AUTOINCREMEN
19f50 54 20 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68  T .** tables, th
19f60 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f  e following info
19f70 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63  rmation is attac
19f80 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65  hed to the Table
19f90 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20  .u.autoInc.p.** 
19fa0 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20  pointer of each 
19fb0 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61  autoincrement ta
19fc0 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f  ble to record so
19fd0 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74  me side informat
19fe0 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ion that.** the 
19ff0 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e  code generator n
1a000 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74  eeds.  We have t
1a010 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65  o keep per-table
1a020 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a   autoincrement.*
1a030 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e  * information in
1a040 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72   case inserts ar
1a050 65 20 64 6f 77 6e 20 77 69 74 68 69 6e 20 74 72  e down within tr
1a060 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72  iggers.  Trigger
1a070 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d  s do not.** norm
1a080 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20  ally coordinate 
1a090 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73  their activities
1a0a0 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64  , but we do need
1a0b0 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74   to coordinate t
1a0c0 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e  he.** loading an
1a0d0 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f  d saving of auto
1a0e0 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d  increment inform
1a0f0 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
1a100 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20   AutoincInfo {. 
1a110 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e   AutoincInfo *pN
1a120 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69  ext;   /* Next i
1a130 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c  nfo block in a l
1a140 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20  ist of them all 
1a150 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
1a160 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ;          /* Ta
1a170 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c  ble this info bl
1a180 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f  ock refers to */
1a190 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
1a1a0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
1a1b0 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62  x in sqlite3.aDb
1a1c0 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  [] of database h
1a1d0 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20  olding pTab */. 
1a1e0 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20   int regCtr;    
1a1f0 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
1a200 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   register holdin
1a210 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e  g the rowid coun
1a220 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ter */.};../*.**
1a230 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c   Size of the col
1a240 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66  umn cache.*/.#if
1a250 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  ndef SQLITE_N_CO
1a260 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20  LCACHE.# define 
1a270 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
1a280 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E 10.#endif../*.
1a290 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20  ** At least one 
1a2a0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
1a2b0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1a2c0 75 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ure is created f
1a2d0 6f 72 20 65 61 63 68 20 0a 2a 2a 20 74 72 69 67  or each .** trig
1a2e0 67 65 72 20 74 68 61 74 20 6d 61 79 20 62 65 20  ger that may be 
1a2f0 66 69 72 65 64 20 77 68 69 6c 65 20 70 61 72 73  fired while pars
1a300 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55  ing an INSERT, U
1a310 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a  PDATE or DELETE.
1a320 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c  ** statement. Al
1a330 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61  l such objects a
1a340 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  re stored in the
1a350 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61   linked list hea
1a360 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e  ded at.** Parse.
1a370 70 54 72 69 67 67 65 72 50 72 67 20 61 6e 64 20  pTriggerPrg and 
1a380 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61  deleted once sta
1a390 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69  tement compilati
1a3a0 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63  on has been.** c
1a3b0 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  ompleted..**.** 
1a3c0 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72  A Vdbe sub-progr
1a3d0 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e  am that implemen
1a3e0 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20  ts the body and 
1a3f0 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
1a400 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65  rigger.** Trigge
1a410 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61  rPrg.pTrigger, a
1a420 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c  ssuming a defaul
1a430 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  t ON CONFLICT cl
1a440 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67  ause of.** Trigg
1a450 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73  erPrg.orconf, is
1a460 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54   stored in the T
1a470 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72  riggerPrg.pProgr
1a480 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20  am variable..** 
1a490 54 68 65 20 50 61 72 73 65 2e 70 54 72 69 67 67  The Parse.pTrigg
1a4a0 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72  erPrg list never
1a4b0 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e   contains two en
1a4c0 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20 73  tries with the s
1a4d0 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f  ame.** values fo
1a4e0 72 20 62 6f 74 68 20 70 54 72 69 67 67 65 72 20  r both pTrigger 
1a4f0 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a  and orconf..**.*
1a500 2a 20 54 68 65 20 54 72 69 67 67 65 72 50 72 67  * The TriggerPrg
1a510 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72  .aColmask[0] var
1a520 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20  iable is set to 
1a530 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  a mask of old.* 
1a540 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73  columns.** acces
1a550 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30  sed (or set to 0
1a560 20 66 6f 72 20 74 72 69 67 67 65 72 73 20 66 69   for triggers fi
1a570 72 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  red as a result 
1a580 6f 66 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74  of INSERT .** st
1a590 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c  atements). Simil
1a5a0 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65  arly, the Trigge
1a5b0 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d  rPrg.aColmask[1]
1a5c0 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
1a5d0 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66   to.** a mask of
1a5e0 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75   new.* columns u
1a5f0 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72  sed by the progr
1a600 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72  am..*/.struct Tr
1a610 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69  iggerPrg {.  Tri
1a620 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
1a630 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
1a640 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73  this program was
1a650 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20   coded from */. 
1a660 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65   TriggerPrg *pNe
1a670 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
1a680 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e   entry in Parse.
1a690 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74  pTriggerPrg list
1a6a0 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d   */.  SubProgram
1a6b0 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a   *pProgram;   /*
1a6c0 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65   Program impleme
1a6d0 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f  nting pTrigger/o
1a6e0 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f  rconf */.  int o
1a6f0 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
1a700 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e     /* Default ON
1a710 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79   CONFLICT policy
1a720 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61   */.  u32 aColma
1a730 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  sk[2];        /*
1a740 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c   Masks of old.*,
1a750 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61   new.* columns a
1a760 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f  ccessed */.};../
1a770 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b  *.** The yDbMask
1a780 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68   datatype for th
1a790 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c  e bitmask of all
1a7a0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
1a7b0 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  ses..*/.#if SQLI
1a7c0 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e  TE_MAX_ATTACHED>
1a7d0 33 30 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73  30.  typedef uns
1a7e0 69 67 6e 65 64 20 63 68 61 72 20 79 44 62 4d 61  igned char yDbMa
1a7f0 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41  sk[(SQLITE_MAX_A
1a800 54 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23  TTACHED+9)/8];.#
1a810 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65   define DbMaskTe
1a820 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29  st(M,I)    (((M)
1a830 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29  [(I)/8]&(1<<((I)
1a840 26 37 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69  &7)))!=0).# defi
1a850 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29  ne DbMaskZero(M)
1a860 20 20 20 20 20 20 6d 65 6d 73 65 74 28 28 4d 29        memset((M)
1a870 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20  ,0,sizeof(M)).# 
1a880 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74  define DbMaskSet
1a890 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b 28 49  (M,I)     (M)[(I
1a8a0 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37  )/8]|=(1<<((I)&7
1a8b0 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
1a8c0 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73  skAllZero(M)   s
1a8d0 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
1a8e0 65 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65 20  ero(M).# define 
1a8f0 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29  DbMaskNonZero(M)
1a900 20 20 20 28 73 71 6c 69 74 65 33 44 62 4d 61 73     (sqlite3DbMas
1a910 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a  kAllZero(M)==0).
1a920 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20  #else.  typedef 
1a930 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62  unsigned int yDb
1a940 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44  Mask;.# define D
1a950 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20  bMaskTest(M,I)  
1a960 20 20 28 28 28 4d 29 26 28 28 28 79 44 62 4d 61    (((M)&(((yDbMa
1a970 73 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d 30 29  sk)1)<<(I)))!=0)
1a980 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1a990 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 28 4d 29  Zero(M)      (M)
1a9a0 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  =0.# define DbMa
1a9b0 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28  skSet(M,I)     (
1a9c0 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29 31  M)|=(((yDbMask)1
1a9d0 29 3c 3c 28 49 29 29 0a 23 20 64 65 66 69 6e 65  )<<(I)).# define
1a9e0 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d   DbMaskAllZero(M
1a9f0 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66  )   (M)==0.# def
1aa00 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72  ine DbMaskNonZer
1aa10 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23 65  o(M)   (M)!=0.#e
1aa20 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53  ndif../*.** An S
1aa30 51 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78  QL parser contex
1aa40 74 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68  t.  A copy of th
1aa50 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
1aa60 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a  passed through.*
1aa70 2a 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64  * the parser and
1aa80 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74   down into all t
1aa90 68 65 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e  he parser action
1aaa0 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65   routine in orde
1aab0 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72  r to.** carry ar
1aac0 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ound information
1aad0 20 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20   that is global 
1aae0 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70 61  to the entire pa
1aaf0 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  rse..**.** The s
1ab00 74 72 75 63 74 75 72 65 20 69 73 20 64 69 76 69  tructure is divi
1ab10 64 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72  ded into two par
1ab20 74 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61  ts.  When the pa
1ab30 72 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a  rser and code.**
1ab40 20 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74   generate call t
1ab50 68 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73  hemselves recurs
1ab60 69 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74  ively, the first
1ab70 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 72   part of the str
1ab80 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e  ucture.** is con
1ab90 73 74 61 6e 74 20 62 75 74 20 74 68 65 20 73 65  stant but the se
1aba0 63 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65 73  cond part is res
1abb0 65 74 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  et at the beginn
1abc0 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a  ing and end of.*
1abd0 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e  * each recursion
1abe0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62  ..**.** The nTab
1abf0 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c  leLock and aTabl
1ac00 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20  eLock variables 
1ac10 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66  are only used if
1ac20 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68   the shared-cach
1ac30 65 20 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73  e .** feature is
1ac40 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c   enabled (if sql
1ac50 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68  ite3Tsd()->useSh
1ac60 61 72 65 64 44 61 74 61 20 69 73 20 74 72 75 65  aredData is true
1ac70 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75  ). They are.** u
1ac80 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
1ac90 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f   set of table-lo
1aca0 63 6b 73 20 72 65 71 75 69 72 65 64 20 62 79 20  cks required by 
1acb0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65  the statement be
1acc0 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e  ing.** compiled.
1acd0 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65   Function sqlite
1ace0 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20  3TableLock() is 
1acf0 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72  used to add entr
1ad00 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69  ies to the.** li
1ad10 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61  st..*/.struct Pa
1ad20 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  rse {.  sqlite3 
1ad30 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  *db;         /* 
1ad40 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  The main databas
1ad50 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20  e structure */. 
1ad60 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20   char *zErrMsg; 
1ad70 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f        /* An erro
1ad80 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56  r message */.  V
1ad90 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20  dbe *pVdbe;     
1ada0 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65      /* An engine
1adb0 20 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64   for executing d
1adc0 61 74 61 62 61 73 65 20 62 79 74 65 63 6f 64 65  atabase bytecode
1add0 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20   */.  int rc;   
1ade0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1adf0 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65  turn code from e
1ae00 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  xecution */.  u8
1ae10 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20   colNamesSet;   
1ae20 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72     /* TRUE after
1ae30 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68   OP_ColumnName h
1ae40 61 73 20 62 65 65 6e 20 69 73 73 75 65 64 20 74  as been issued t
1ae50 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20  o pVdbe */.  u8 
1ae60 63 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20  checkSchema;    
1ae70 20 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65    /* Causes sche
1ae80 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20  ma cookie check 
1ae90 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a  after an error *
1aea0 2f 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20  /.  u8 nested;  
1aeb0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1aec0 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c  er of nested cal
1aed0 6c 73 20 74 6f 20 74 68 65 20 70 61 72 73 65 72  ls to the parser
1aee0 2f 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20  /code generator 
1aef0 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67  */.  u8 nTempReg
1af00 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
1af10 62 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79  ber of temporary
1af20 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 61 54   registers in aT
1af30 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38  empReg[] */.  u8
1af40 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20   isMultiWrite;  
1af50 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74     /* True if st
1af60 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69  atement may modi
1af70 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70  fy/insert multip
1af80 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20  le rows */.  u8 
1af90 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20  mayAbort;       
1afa0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61    /* True if sta
1afb0 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77  tement may throw
1afc0 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74   an ABORT except
1afd0 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73 43  ion */.  u8 hasC
1afe0 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a  ompound;      /*
1aff0 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20   Need to invoke 
1b000 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
1b010 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
1b020 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73  ) */.  u8 okCons
1b030 74 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f  tFactor;    /* O
1b040 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f 75 74 20  K to factor out 
1b050 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 69  constants */.  i
1b060 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20  nt aTempReg[8]; 
1b070 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61      /* Holding a
1b080 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  rea for temporar
1b090 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20  y registers */. 
1b0a0 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20   int nRangeReg; 
1b0b0 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
1b0c0 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72   the temporary r
1b0d0 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
1b0e0 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67  .  int iRangeReg
1b0f0 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74  ;       /* First
1b100 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d   register in tem
1b110 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
1b120 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  block */.  int n
1b130 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
1b140 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
1b150 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  ors seen */.  in
1b160 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20  t nTab;         
1b170 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1b180 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63  previously alloc
1b190 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72  ated VDBE cursor
1b1a0 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b  s */.  int nMem;
1b1b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1b1c0 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
1b1d0 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61  cells used so fa
1b1e0 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b  r */.  int nSet;
1b1f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1b200 75 6d 62 65 72 20 6f 66 20 73 65 74 73 20 75 73  umber of sets us
1b210 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
1b220 6e 74 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20  nt nOnce;       
1b230 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1b240 20 4f 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63   OP_Once instruc
1b250 74 69 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a  tions so far */.
1b260 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20    int nOpAlloc; 
1b270 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b280 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61   of slots alloca
1b290 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70  ted for Vdbe.aOp
1b2a0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 46 69 78  [] */.  int iFix
1b2b0 65 64 4f 70 3b 20 20 20 20 20 20 20 20 2f 2a 20  edOp;        /* 
1b2c0 4e 65 76 65 72 20 62 61 63 6b 20 6f 75 74 20 6f  Never back out o
1b2d0 70 63 6f 64 65 73 20 69 46 69 78 65 64 4f 70 2d  pcodes iFixedOp-
1b2e0 31 20 6f 72 20 65 61 72 6c 69 65 72 20 2a 2f 0a  1 or earlier */.
1b2f0 20 20 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20    int ckBase;   
1b300 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72         /* Base r
1b310 65 67 69 73 74 65 72 20 6f 66 20 64 61 74 61 20  egister of data 
1b320 64 75 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e  during check con
1b330 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  straints */.  in
1b340 74 20 69 50 61 72 74 49 64 78 54 61 62 3b 20 20  t iPartIdxTab;  
1b350 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 72 72     /* Table corr
1b360 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 61 20 70  esponding to a p
1b370 61 72 74 69 61 6c 20 69 6e 64 65 78 20 2a 2f 0a  artial index */.
1b380 20 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65    int iCacheLeve
1b390 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63  l;     /* ColCac
1b3a0 68 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43  he valid when aC
1b3b0 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c  olCache[].iLevel
1b3c0 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f  <=iCacheLevel */
1b3d0 0a 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74  .  int iCacheCnt
1b3e0 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74  ;       /* Count
1b3f0 65 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72  er used to gener
1b400 61 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e  ate aColCache[].
1b410 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  lru values */.  
1b420 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20  int nLabel;     
1b430 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1b440 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f  f labels used */
1b450 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20  .  int *aLabel; 
1b460 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
1b470 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62   to hold the lab
1b480 65 6c 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  els */.  struct 
1b490 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20  yColCache {.    
1b4a0 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
1b4b0 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63        /* Table c
1b4c0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ursor number */.
1b4d0 20 20 20 20 69 31 36 20 69 43 6f 6c 75 6d 6e 3b      i16 iColumn;
1b4e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
1b4f0 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  le column number
1b500 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52   */.    u8 tempR
1b510 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  eg;           /*
1b520 20 69 52 65 67 20 69 73 20 61 20 74 65 6d 70 20   iReg is a temp 
1b530 72 65 67 69 73 74 65 72 20 74 68 61 74 20 6e 65  register that ne
1b540 65 64 73 20 74 6f 20 62 65 20 66 72 65 65 64 20  eds to be freed 
1b550 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65  */.    int iLeve
1b560 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
1b570 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f  Nesting level */
1b580 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20  .    int iReg;  
1b590 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1b5a0 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20  g with value of 
1b5b0 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d  this column. 0 m
1b5c0 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20  eans none. */.  
1b5d0 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20    int lru;      
1b5e0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74          /* Least
1b5f0 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65   recently used e
1b600 6e 74 72 79 20 68 61 73 20 74 68 65 20 73 6d 61  ntry has the sma
1b610 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20  llest value */. 
1b620 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c   } aColCache[SQL
1b630 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b  ITE_N_COLCACHE];
1b640 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63    /* One for eac
1b650 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65  h column cache e
1b660 6e 74 72 79 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ntry */.  ExprLi
1b670 73 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f  st *pConstExpr;/
1b680 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
1b690 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65  ssions */.  Toke
1b6a0 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65  n constraintName
1b6b0 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  ;/* Name of the 
1b6c0 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65  constraint curre
1b6d0 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65  ntly being parse
1b6e0 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77  d */.  yDbMask w
1b6f0 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53  riteMask;   /* S
1b700 74 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61  tart a write tra
1b710 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73  nsaction on thes
1b720 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20  e databases */. 
1b730 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d   yDbMask cookieM
1b740 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b  ask;  /* Bitmask
1b750 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66   of schema verif
1b760 69 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ied databases */
1b770 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61 6c  .  int cookieVal
1b780 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  ue[SQLITE_MAX_AT
1b790 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56  TACHED+2];  /* V
1b7a0 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73  alues of cookies
1b7b0 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20 20   to verify */.  
1b7c0 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20  int regRowid;   
1b7d0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
1b7e0 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f   holding rowid o
1b7f0 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65  f CREATE TABLE e
1b800 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65  ntry */.  int re
1b810 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f  gRoot;         /
1b820 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
1b830 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  ng root page num
1b840 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65  ber for new obje
1b850 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61  cts */.  int nMa
1b860 78 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  xArg;         /*
1b870 20 4d 61 78 20 61 72 67 73 20 70 61 73 73 65 64   Max args passed
1b880 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f   to user functio
1b890 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d  n by sub-program
1b8a0 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52   */.#if SELECTTR
1b8b0 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 69 6e  ACE_ENABLED.  in
1b8c0 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20 20 20  t nSelect;      
1b8d0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1b8e0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1b8f0 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  s seen */.  int 
1b900 6e 53 65 6c 65 63 74 49 6e 64 65 6e 74 3b 20 20  nSelectIndent;  
1b910 20 2f 2a 20 48 6f 77 20 66 61 72 20 74 6f 20 69   /* How far to i
1b920 6e 64 65 6e 74 20 53 45 4c 45 43 54 54 52 41 43  ndent SELECTTRAC
1b930 45 28 29 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65  E() output */.#e
1b940 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
1b950 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
1b960 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62  CACHE.  int nTab
1b970 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f  leLock;        /
1b980 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b  * Number of lock
1b990 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20  s in aTableLock 
1b9a0 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a  */.  TableLock *
1b9b0 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52  aTableLock; /* R
1b9c0 65 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f  equired table lo
1b9d0 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63  cks for shared-c
1b9e0 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e  ache mode */.#en
1b9f0 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  dif.  AutoincInf
1ba00 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e  o *pAinc;  /* In
1ba10 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
1ba20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f  AUTOINCREMENT co
1ba30 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20  unters */..  /* 
1ba40 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  Information used
1ba50 20 77 68 69 6c 65 20 63 6f 64 69 6e 67 20 74 72   while coding tr
1ba60 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 20  igger programs. 
1ba70 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70  */.  Parse *pTop
1ba80 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72  level;    /* Par
1ba90 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  se structure for
1baa0 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f   main program (o
1bab0 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62  r NULL) */.  Tab
1bac0 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b  le *pTriggerTab;
1bad0 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67    /* Table trigg
1bae0 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f  ers are being co
1baf0 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74  ded for */.  int
1bb00 20 61 64 64 72 43 72 54 61 62 3b 20 20 20 20 20   addrCrTab;     
1bb10 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20    /* Address of 
1bb20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f  OP_CreateTable o
1bb30 70 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45 20  pcode on CREATE 
1bb40 54 41 42 4c 45 20 2a 2f 0a 20 20 69 6e 74 20 61  TABLE */.  int a
1bb50 64 64 72 53 6b 69 70 50 4b 3b 20 20 20 20 20 20  ddrSkipPK;      
1bb60 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 69 6e  /* Address of in
1bb70 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 73 6b 69  struction to ski
1bb80 70 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e  p PRIMARY KEY in
1bb90 64 65 78 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75  dex */.  u32 nQu
1bba0 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a  eryLoop;      /*
1bbb0 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69   Est number of i
1bbc0 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71  terations of a q
1bbd0 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29  uery (10*log2(N)
1bbe0 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61  ) */.  u32 oldma
1bbf0 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  sk;         /* M
1bc00 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c  ask of old.* col
1bc10 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20  umns referenced 
1bc20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b  */.  u32 newmask
1bc30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
1bc40 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
1bc50 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f  ns referenced */
1bc60 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f 70  .  u8 eTriggerOp
1bc70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50  ;       /* TK_UP
1bc80 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20  DATE, TK_INSERT 
1bc90 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a  or TK_DELETE */.
1bca0 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20    u8 eOrconf;   
1bcb0 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1bcc0 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
1bcd0 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65 72  licy for trigger
1bce0 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64   steps */.  u8 d
1bcf0 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20  isableTriggers; 
1bd00 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61   /* True to disa
1bd10 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ble triggers */.
1bd20 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  /************
1bd30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bd40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bd50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bd60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a  ************.  *
1bd70 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74  * Above is const
1bd80 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75  ant between recu
1bd90 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69  rsions.  Below i
1bda0 73 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61  s reset before a
1bdb0 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61  nd after.  ** ea
1bdc0 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54  ch recursion.  T
1bdd0 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77  he boundary betw
1bde0 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65  een these two re
1bdf0 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69  gions is determi
1be00 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f  ned.  ** using o
1be10 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 6e 56  ffsetof(Parse,nV
1be20 61 72 29 20 73 6f 20 74 68 65 20 6e 56 61 72 20  ar) so the nVar 
1be30 66 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74 68  field must be th
1be40 65 20 66 69 72 73 74 20 66 69 65 6c 64 0a 20 20  e first field.  
1be50 2a 2a 20 69 6e 20 74 68 65 20 72 65 63 75 72 73  ** in the recurs
1be60 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a  ive region..  **
1be70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1be80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1be90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1beb0 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e 74 20 6e  ******/..  int n
1bec0 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Var;            
1bed0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1bee0 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20  f '?' variables 
1bef0 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20  seen in the SQL 
1bf00 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1bf10 6e 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20 20  nzVar;          
1bf20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1bf30 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f  of available slo
1bf40 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f  ts in azVar[] */
1bf50 0a 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64  .  u8 iPkSortOrd
1bf60 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
1bf70 41 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20  ASC or DESC for 
1bf80 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
1bf90 4b 45 59 20 2a 2f 0a 20 20 75 38 20 62 46 72 65  KEY */.  u8 bFre
1bfa0 65 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20  eWith;          
1bfb0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 57     /* True if pW
1bfc0 69 74 68 20 73 68 6f 75 6c 64 20 62 65 20 66 72  ith should be fr
1bfd0 65 65 64 20 77 69 74 68 20 70 61 72 73 65 72 20  eed with parser 
1bfe0 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b  */.  u8 explain;
1bff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c000 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 45 58  * True if the EX
1c010 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f  PLAIN flag is fo
1c020 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79  und on the query
1c030 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
1c040 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1c050 41 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72  ABLE.  u8 declar
1c060 65 56 74 61 62 3b 20 20 20 20 20 20 20 20 20 20  eVtab;          
1c070 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69   /* True if insi
1c080 64 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  de sqlite3_decla
1c090 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69  re_vtab() */.  i
1c0a0 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20  nt nVtabLock;   
1c0b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1c0c0 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61  er of virtual ta
1c0d0 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a  bles to lock */.
1c0e0 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 41 6c  #endif.  int nAl
1c0f0 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ias;            
1c100 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1c110 61 6c 69 61 73 65 64 20 72 65 73 75 6c 74 20 73  aliased result s
1c120 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  et columns */.  
1c130 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20  int nHeight;    
1c140 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
1c150 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69  ression tree hei
1c160 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73  ght of current s
1c170 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66  ub-select */.#if
1c180 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1c190 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69  _EXPLAIN.  int i
1c1a0 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20  SelectId;       
1c1b0 20 20 20 20 20 2f 2a 20 49 44 20 6f 66 20 63 75       /* ID of cu
1c1c0 72 72 65 6e 74 20 73 65 6c 65 63 74 20 66 6f 72  rrent select for
1c1d0 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20   EXPLAIN output 
1c1e0 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74 53 65  */.  int iNextSe
1c1f0 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 2f  lectId;        /
1c200 2a 20 4e 65 78 74 20 61 76 61 69 6c 61 62 6c 65  * Next available
1c210 20 73 65 6c 65 63 74 20 49 44 20 66 6f 72 20 45   select ID for E
1c220 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f  XPLAIN output */
1c230 0a 23 65 6e 64 69 66 0a 20 20 63 68 61 72 20 2a  .#endif.  char *
1c240 2a 61 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20  *azVar;         
1c250 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 73 20      /* Pointers 
1c260 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70 61 72 61  to names of para
1c270 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56 64 62 65  meters */.  Vdbe
1c280 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20 20   *pReprepare;   
1c290 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e        /* VM bein
1c2a0 67 20 72 65 70 72 65 70 61 72 65 64 20 28 73 71  g reprepared (sq
1c2b0 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28 29  lite3Reprepare()
1c2c0 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  ) */.  const cha
1c2d0 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20  r *zTail;       
1c2e0 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74   /* All SQL text
1c2f0 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 73   past the last s
1c300 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20  emicolon parsed 
1c310 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77  */.  Table *pNew
1c320 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f  Table;         /
1c330 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20  * A table being 
1c340 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43  constructed by C
1c350 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20  REATE TABLE */. 
1c360 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72   Trigger *pNewTr
1c370 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72  igger;     /* Tr
1c380 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73  igger under cons
1c390 74 72 75 63 74 20 62 79 20 61 20 43 52 45 41 54  truct by a CREAT
1c3a0 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63  E TRIGGER */.  c
1c3b0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68  onst char *zAuth
1c3c0 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20  Context; /* The 
1c3d0 36 74 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f  6th parameter to
1c3e0 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62   db->xAuth callb
1c3f0 61 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  acks */.  Token 
1c400 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20  sNameToken;     
1c410 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74      /* Token wit
1c420 68 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63  h unqualified sc
1c430 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65  hema object name
1c440 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73   */.  Token sLas
1c450 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20  tToken;         
1c460 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65  /* The last toke
1c470 6e 20 70 61 72 73 65 64 20 2a 2f 0a 23 69 66 6e  n parsed */.#ifn
1c480 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1c490 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54  VIRTUALTABLE.  T
1c4a0 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20  oken sArg;      
1c4b0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70           /* Comp
1c4c0 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d  lete text of a m
1c4d0 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a  odule argument *
1c4e0 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74  /.  Table **apVt
1c4f0 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a  abLock;       /*
1c500 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74   Pointer to virt
1c510 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69  ual tables needi
1c520 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65  ng locking */.#e
1c530 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a  ndif.  Table *pZ
1c540 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20 20  ombieTab;       
1c550 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c   /* List of Tabl
1c560 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c  e objects to del
1c570 65 74 65 20 61 66 74 65 72 20 63 6f 64 65 20 67  ete after code g
1c580 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50  en */.  TriggerP
1c590 72 67 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b  rg *pTriggerPrg;
1c5a0 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74    /* Linked list
1c5b0 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67 65   of coded trigge
1c5c0 72 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57  rs */.  With *pW
1c5d0 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  ith;            
1c5e0 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 57 49 54    /* Current WIT
1c5f0 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c  H clause, or NUL
1c600 4c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52  L */.};../*.** R
1c610 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 63 75  eturn true if cu
1c620 72 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61  rrently inside a
1c630 6e 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  n sqlite3_declar
1c640 65 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a  e_vtab() call..*
1c650 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
1c660 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
1c670 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44  E.  #define IN_D
1c680 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65  ECLARE_VTAB 0.#e
1c690 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  lse.  #define IN
1c6a0 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70  _DECLARE_VTAB (p
1c6b0 50 61 72 73 65 2d 3e 64 65 63 6c 61 72 65 56 74  Parse->declareVt
1c6c0 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ab).#endif../*.*
1c6d0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1c6e0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1c6f0 74 72 75 63 74 75 72 65 20 63 61 6e 20 62 65 20  tructure can be 
1c700 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74  declared on a st
1c710 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ack and used.** 
1c720 74 6f 20 73 61 76 65 20 74 68 65 20 50 61 72 73  to save the Pars
1c730 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76  e.zAuthContext v
1c740 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74 20  alue so that it 
1c750 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20  can be restored 
1c760 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74  later..*/.struct
1c770 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20   AuthContext {. 
1c780 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75   const char *zAu
1c790 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20  thContext;   /* 
1c7a0 50 75 74 20 73 61 76 65 64 20 50 61 72 73 65 2e  Put saved Parse.
1c7b0 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72  zAuthContext her
1c7c0 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50  e */.  Parse *pP
1c7d0 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
1c7e0 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20     /* The Parse 
1c7f0 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a  structure */.};.
1c800 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20  ./*.** Bitfield 
1c810 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c  flags for P5 val
1c820 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70  ue in various op
1c830 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  codes..**.** Not
1c840 65 20 74 68 61 74 20 74 68 65 20 76 61 6c 75 65  e that the value
1c850 73 20 66 6f 72 20 49 53 4e 4f 4f 50 20 61 6e 64  s for ISNOOP and
1c860 20 4c 45 4e 47 54 48 41 52 47 20 61 72 65 20 74   LENGTHARG are t
1c870 68 65 20 73 61 6d 65 2e 20 20 42 75 74 20 61 73  he same.  But as
1c880 20 0a 2a 2a 20 74 68 6f 73 65 20 62 69 74 73 20   .** those bits 
1c890 61 72 65 20 6e 65 76 65 72 20 75 73 65 64 20 6f  are never used o
1c8a0 6e 20 74 68 65 20 73 61 6d 65 20 6f 70 63 6f 64  n the same opcod
1c8b0 65 2c 20 74 68 65 20 6f 76 65 72 6c 61 70 20 69  e, the overlap i
1c8c0 73 20 68 61 72 6d 6c 65 73 73 2e 0a 2a 2f 0a 23  s harmless..*/.#
1c8d0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43  define OPFLAG_NC
1c8e0 48 41 4e 47 45 20 20 20 20 20 20 20 30 78 30 31  HANGE       0x01
1c8f0 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70      /* Set to up
1c900 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65  date db->nChange
1c910 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1c920 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20  AG_EPHEM        
1c930 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43   0x01    /* OP_C
1c940 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c  olumn: Ephemeral
1c950 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f   output is ok */
1c960 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1c970 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20 30 78  LASTROWID     0x
1c980 30 32 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20  02    /* Set to 
1c990 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52  update db->lastR
1c9a0 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
1c9b0 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
1c9c0 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20       0x04    /* 
1c9d0 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69  This OP_Insert i
1c9e0 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20  s an sql UPDATE 
1c9f0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1ca00 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20 20  G_APPEND        
1ca10 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20  0x08    /* This 
1ca20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
1ca30 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65  an append */.#de
1ca40 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53  fine OPFLAG_USES
1ca50 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20  EEKRESULT 0x10  
1ca60 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69    /* Try to avoi
1ca70 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65  d a seek in Btre
1ca80 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65  eInsert() */.#de
1ca90 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 4e 4f  fine OPFLAG_ISNO
1caa0 4f 50 20 20 20 20 20 20 20 20 30 78 34 30 20 20  OP        0x40  
1cab0 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 20 64    /* OP_Delete d
1cac0 6f 65 73 20 70 72 65 2d 75 70 64 61 74 65 2d 68  oes pre-update-h
1cad0 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  ook only */.#def
1cae0 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54  ine OPFLAG_LENGT
1caf0 48 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20  HARG     0x40   
1cb00 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
1cb10 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67  ly used for leng
1cb20 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  th() */.#define 
1cb30 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
1cb40 20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20       0x80    /* 
1cb50 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75  OP_Column only u
1cb60 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29  sed for typeof()
1cb70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1cb80 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20  AG_BULKCSR      
1cb90 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x01    /* OP_O
1cba0 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70  pen** used to op
1cbb0 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a  en bulk cursor *
1cbc0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1cbd0 5f 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30  _P2ISREG       0
1cbe0 78 30 32 20 20 20 20 2f 2a 20 50 32 20 74 6f 20  x02    /* P2 to 
1cbf0 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72  OP_Open** is a r
1cc00 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a  egister number *
1cc10 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1cc20 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30  _PERMUTE       0
1cc30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d  x01    /* OP_Com
1cc40 70 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65  pare: use the pe
1cc50 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a  rmutation */../*
1cc60 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72  . * Each trigger
1cc70 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
1cc80 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
1cc90 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20  is stored as an 
1cca0 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73  instance of. * s
1ccb0 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 0a  truct Trigger. .
1ccc0 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74   *. * Pointers t
1ccd0 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  o instances of s
1cce0 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72  truct Trigger ar
1ccf0 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20  e stored in two 
1cd00 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74  ways.. * 1. In t
1cd10 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61  he "trigHash" ha
1cd20 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f  sh table (part o
1cd30 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74  f the sqlite3* t
1cd40 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74  hat represents t
1cd50 68 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62 61  he . *    databa
1cd60 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73  se). This allows
1cd70 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75   Trigger structu
1cd80 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65  res to be retrie
1cd90 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20  ved by name.. * 
1cda0 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  2. All triggers 
1cdb0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1cdc0 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66  a single table f
1cdd0 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73  orm a linked lis
1cde0 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20  t, using the. * 
1cdf0 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20     pNext member 
1ce00 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
1ce10 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  r. A pointer to 
1ce20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
1ce30 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c  t of the. *    l
1ce40 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74  inked list is st
1ce50 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72  ored as the "pTr
1ce60 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66  igger" member of
1ce70 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a   the associated.
1ce80 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62   *    struct Tab
1ce90 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73  le.. *. * The "s
1cea0 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
1ceb0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
1cec0 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
1ced0 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a  a linked list. *
1cee0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1cef0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73  SQL statements s
1cf00 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20  pecified as the 
1cf10 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
1cf20 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
1cf30 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  ger {.  char *zN
1cf40 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
1cf50 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  /* The name of t
1cf60 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20  he trigger      
1cf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf80 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62    */.  char *tab
1cf90 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
1cfa0 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76  * The table or v
1cfb0 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65  iew to which the
1cfc0 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73   trigger applies
1cfd0 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
1cfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1cff0 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
1d000 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
1d010 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20  _INSERT         
1d020 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20  */.  u8 tr_tm;  
1d030 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d040 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42  One of TRIGGER_B
1d050 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41  EFORE, TRIGGER_A
1d060 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a  FTER */.  Expr *
1d070 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20  pWhen;          
1d080 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c    /* The WHEN cl
1d090 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72  ause of the expr
1d0a0 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e  ession (may be N
1d0b0 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74  ULL) */.  IdList
1d0c0 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20   *pColumns;     
1d0d0 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20    /* If this is 
1d0e0 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f  an UPDATE OF <co
1d0f0 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67  lumn-list> trigg
1d100 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  er,.            
1d110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d120 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73   the <column-lis
1d130 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72  t> is stored her
1d140 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
1d150 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f  Schema;        /
1d160 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
1d170 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
1d180 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61  */.  Schema *pTa
1d190 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  bSchema;     /* 
1d1a0 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
1d1b0 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  g the table */. 
1d1c0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74   TriggerStep *st
1d1d0 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b  ep_list; /* Link
1d1e0 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   list of trigger
1d1f0 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20   program steps  
1d200 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
1d210 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20  Trigger *pNext; 
1d220 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
1d230 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74  trigger associat
1d240 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c  ed with the tabl
1d250 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  e */.};../*.** A
1d260 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68   trigger is eith
1d270 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61  er a BEFORE or a
1d280 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e  n AFTER trigger.
1d290 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
1d2a0 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74  constants.** det
1d2b0 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a  ermine which. .*
1d2c0 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72  *.** If there ar
1d2d0 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67  e multiple trigg
1d2e0 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f  ers, you might o
1d2f0 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e  f some BEFORE an
1d300 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a  d some AFTER..**
1d310 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20   In that cases, 
1d320 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65  the constants be
1d330 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20  low can be ORed 
1d340 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65  together..*/.#de
1d350 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46  fine TRIGGER_BEF
1d360 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54  ORE  1.#define T
1d370 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32  RIGGER_AFTER   2
1d380 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61  ../*. * An insta
1d390 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72  nce of struct Tr
1d3a0 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65  iggerStep is use
1d3b0 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e  d to store a sin
1d3c0 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  gle SQL statemen
1d3d0 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70  t. * that is a p
1d3e0 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72  art of a trigger
1d3f0 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a  -program. . *. *
1d400 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   Instances of st
1d410 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
1d420 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
1d430 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c   singly linked l
1d440 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75  ist (linked. * u
1d450 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22  sing the "pNext"
1d460 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e   member) referen
1d470 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70  ced by the "step
1d480 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66  _list" member of
1d490 20 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69 61   the . * associa
1d4a0 74 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67  ted struct Trigg
1d4b0 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65  er instance. The
1d4c0 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
1d4d0 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  f the linked lis
1d4e0 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73  t is. * the firs
1d4f0 74 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72  t step of the tr
1d500 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20  igger-program.. 
1d510 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d  * . * The "op" m
1d520 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20  ember indicates 
1d530 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20  whether this is 
1d540 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53  a "DELETE", "INS
1d550 45 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f  ERT", "UPDATE" o
1d560 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74  r. * "SELECT" st
1d570 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61  atement. The mea
1d580 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68  nings of the oth
1d590 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65  er members is de
1d5a0 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
1d5b0 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70  . * value of "op
1d5c0 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a  " as follows:. *
1d5d0 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e  . * (op == TK_IN
1d5e0 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20  SERT). * orconf 
1d5f0 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65     -> stores the
1d600 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
1d610 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63  orithm. * pSelec
1d620 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
1d630 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
1d640 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20   ... SELECT ... 
1d650 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a  statement, then.
1d660 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1d670 74 68 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f  this stores a po
1d680 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c  inter to the SEL
1d690 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f  ECT statement. O
1d6a0 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
1d6b0 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41  * target    -> A
1d6c0 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74   token holding t
1d6d0 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f  he quoted name o
1d6e0 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69  f the table to i
1d6f0 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70  nsert into.. * p
1d700 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74  ExprList -> If t
1d710 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
1d720 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53   INTO ... VALUES
1d730 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20   ... statement, 
1d740 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20  then. *         
1d750 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73       this stores
1d760 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e   values to be in
1d770 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73  serted. Otherwis
1d780 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69  e NULL.. * pIdLi
1d790 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  st   -> If this 
1d7a0 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
1d7b0 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e  O ... (<column-n
1d7c0 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e  ames>) VALUES ..
1d7d0 2e 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  . . *           
1d7e0 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68     statement, th
1d7f0 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74  en this stores t
1d800 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20  he column-names 
1d810 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20  to be. *        
1d820 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69        inserted i
1d830 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  nto.. *. * (op =
1d840 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20  = TK_DELETE). * 
1d850 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74  target    -> A t
1d860 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65  oken holding the
1d870 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20   quoted name of 
1d880 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c  the table to del
1d890 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68  ete from.. * pWh
1d8a0 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
1d8b0 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
1d8c0 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  e DELETE stateme
1d8d0 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
1d8e0 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
1d8f0 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
1d900 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28  e NULL.. * . * (
1d910 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29  op == TK_UPDATE)
1d920 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e  . * target    ->
1d930 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67   A token holding
1d940 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65   the quoted name
1d950 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
1d960 20 75 70 64 61 74 65 20 72 6f 77 73 20 6f 66 2e   update rows of.
1d970 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e  . * pWhere    ->
1d980 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
1d990 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  e of the UPDATE 
1d9a0 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65  statement if one
1d9b0 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20   is specified.. 
1d9c0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f  *              O
1d9d0 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
1d9e0 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41  * pExprList -> A
1d9f0 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c   list of the col
1da00 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61  umns to update a
1da10 6e 64 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  nd the expressio
1da20 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20  ns to update. * 
1da30 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1da40 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65  m to. See sqlite
1da50 33 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65  3Update() docume
1da60 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61  ntation of "pCha
1da70 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20  nges". *        
1da80 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a        argument..
1da90 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54   * . */.struct T
1daa0 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75  riggerStep {.  u
1dab0 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
1dac0 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
1dad0 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
1dae0 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54  TE, TK_INSERT, T
1daf0 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38  K_SELECT */.  u8
1db00 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20   orconf;        
1db10 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63     /* OE_Rollbac
1db20 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67  k etc. */.  Trig
1db30 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20  ger *pTrig;     
1db40 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20   /* The trigger 
1db50 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69  that this step i
1db60 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20  s a part of */. 
1db70 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
1db80 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20  ;     /* SELECT 
1db90 73 74 61 74 6d 65 6e 74 20 6f 72 20 52 48 53 20  statment or RHS 
1dba0 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  of INSERT INTO .
1dbb0 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a  . SELECT ... */.
1dbc0 20 20 54 6f 6b 65 6e 20 74 61 72 67 65 74 3b 20    Token target; 
1dbd0 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74         /* Target
1dbe0 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54   table for DELET
1dbf0 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52  E, UPDATE, INSER
1dc00 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  T */.  Expr *pWh
1dc10 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  ere;        /* T
1dc20 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
1dc30 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50  for DELETE or UP
1dc40 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20  DATE steps */.  
1dc50 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c  ExprList *pExprL
1dc60 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75  ist; /* SET clau
1dc70 73 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a  se for UPDATE. *
1dc80 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c  /.  IdList *pIdL
1dc90 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75  ist;     /* Colu
1dca0 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53  mn names for INS
1dcb0 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ERT */.  Trigger
1dcc0 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a  Step *pNext;  /*
1dcd0 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e   Next in the lin
1dce0 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67  k-list */.  Trig
1dcf0 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20  gerStep *pLast; 
1dd00 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74   /* Last element
1dd10 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56   in link-list. V
1dd20 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65  alid for 1st ele
1dd30 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  m only */.};../*
1dd40 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
1dd50 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  g structure cont
1dd60 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ains information
1dd70 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c   used by the sql
1dd80 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75  iteFix....** rou
1dd90 74 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61  tines as they wa
1dda0 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65  lk the parse tre
1ddb0 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61  e to make databa
1ddc0 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a  se references.**
1ddd0 20 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a   explicit.  .*/.
1dde0 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44  typedef struct D
1ddf0 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a  bFixer DbFixer;.
1de00 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b  struct DbFixer {
1de10 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
1de20 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61  ;      /* The pa
1de30 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20  rsing context.  
1de40 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77  Error messages w
1de50 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20  ritten here */. 
1de60 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
1de70 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d  ;    /* Fix item
1de80 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61  s to this schema
1de90 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e   */.  int bVarOn
1dea0 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65  ly;       /* Che
1deb0 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20  ck for variable 
1dec0 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20  references only 
1ded0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1dee0 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65  *zDb;    /* Make
1def0 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74   sure all object
1df00 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  s are contained 
1df10 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65  in this database
1df20 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1df30 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70   *zType;  /* Typ
1df40 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
1df50 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
1df60 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
1df70 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70    const Token *p
1df80 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66  Name; /* Name of
1df90 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
1dfa0 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
1dfb0 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a  messages */.};..
1dfc0 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65  /*.** An objecte
1dfd0 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75  d used to accumu
1dfe0 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66  late the text of
1dff0 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20   a string where 
1e000 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63  we.** do not nec
1e010 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f  essarily know ho
1e020 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67  w big the string
1e030 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20   will be in the 
1e040 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  end..*/.struct S
1e050 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69  trAccum {.  sqli
1e060 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
1e070 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74   /* Optional dat
1e080 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73  abase for lookas
1e090 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c  ide.  Can be NUL
1e0a0 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61  L */.  char *zBa
1e0b0 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  se;         /* A
1e0c0 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e   base allocation
1e0d0 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c  .  Not from mall
1e0e0 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  oc. */.  char *z
1e0f0 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Text;         /*
1e100 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c   The string coll
1e110 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a  ected so far */.
1e120 20 20 69 6e 74 20 20 6e 43 68 61 72 3b 20 20 20    int  nChar;   
1e130 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68         /* Length
1e140 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73   of the string s
1e150 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20  o far */.  int  
1e160 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20  nAlloc;         
1e170 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61  /* Amount of spa
1e180 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20  ce allocated in 
1e190 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 20  zText */.  int  
1e1a0 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20  mxAlloc;        
1e1b0 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77  /* Maximum allow
1e1c0 65 64 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  ed string length
1e1d0 20 2a 2f 0a 20 20 75 38 20 20 20 75 73 65 4d 61   */.  u8   useMa
1e1e0 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 30 3a  lloc;      /* 0:
1e1f0 20 6e 6f 6e 65 2c 20 20 31 3a 20 73 71 6c 69 74   none,  1: sqlit
1e200 65 33 44 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20  e3DbMalloc,  2: 
1e210 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a  sqlite3_malloc *
1e220 2f 0a 20 20 75 38 20 20 20 61 63 63 45 72 72 6f  /.  u8   accErro
1e230 72 3b 20 20 20 20 20 20 20 2f 2a 20 53 54 52 41  r;       /* STRA
1e240 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54  CCUM_NOMEM or ST
1e250 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f  RACCUM_TOOBIG */
1e260 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41  .};.#define STRA
1e270 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23  CCUM_NOMEM   1.#
1e280 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f  define STRACCUM_
1e290 54 4f 4f 42 49 47 20 20 32 0a 0a 2f 2a 0a 2a 2a  TOOBIG  2../*.**
1e2a0 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
1e2b0 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
1e2c0 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63  used to communic
1e2d0 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ate information.
1e2e0 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49  ** from sqlite3I
1e2f0 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65  nit and OP_Parse
1e300 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20  Schema into the 
1e310 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
1e320 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ack..*/.typedef 
1e330 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74  struct {.  sqlit
1e340 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
1e350 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62  * The database b
1e360 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
1e370 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45   */.  char **pzE
1e380 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72  rrMsg;    /* Err
1e390 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65  or message store
1e3a0 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20  d here */.  int 
1e3b0 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
1e3c0 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61  /* 0 for main da
1e3d0 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54  tabase.  1 for T
1e3e0 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54  EMP, 2.. for ATT
1e3f0 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72  ACHed */.  int r
1e400 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
1e410 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74  * Result code st
1e420 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49  ored here */.} I
1e430 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20  nitData;../*.** 
1e440 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  Structure contai
1e450 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66  ning global conf
1e460 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66  iguration data f
1e470 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69  or the SQLite li
1e480 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  brary..**.** Thi
1e490 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f  s structure also
1e4a0 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73   contains some s
1e4b0 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tate information
1e4c0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69  ..*/.struct Sqli
1e4d0 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e  te3Config {.  in
1e4e0 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20  t bMemstat;     
1e4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e500 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
1e510 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20  e memory status 
1e520 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75  */.  int bCoreMu
1e530 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
1e540 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1e550 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75  o enable core mu
1e560 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  texing */.  int 
1e570 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20  bFullMutex;     
1e580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e590 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
1e5a0 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f  full mutexing */
1e5b0 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b  .  int bOpenUri;
1e5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5d0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1e5e0 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61  interpret filena
1e5f0 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20  mes as URIs */. 
1e600 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20   int bUseCis;   
1e610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e620 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69     /* Use coveri
1e630 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66  ng indices for f
1e640 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69  ull-scans */.  i
1e650 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20  nt mxStrlen;    
1e660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e670 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69   /* Maximum stri
1e680 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69  ng length */.  i
1e690 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b  nt neverCorrupt;
1e6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6b0 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20   /* Database is 
1e6c0 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d  always well-form
1e6d0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f  ed */.  int szLo
1e6e0 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
1e6f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1e700 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62  ault lookaside b
1e710 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20  uffer size */.  
1e720 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20  int nLookaside; 
1e730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e740 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f    /* Default loo
1e750 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 63 6f  kaside buffer co
1e760 75 6e 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  unt */.  sqlite3
1e770 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20  _mem_methods m; 
1e780 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
1e790 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61  w-level memory a
1e7a0 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66  llocation interf
1e7b0 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ace */.  sqlite3
1e7c0 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d  _mutex_methods m
1e7d0 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f  utex;      /* Lo
1e7e0 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e  w-level mutex in
1e7f0 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c  terface */.  sql
1e800 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68  ite3_pcache_meth
1e810 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f  ods2 pcache2;  /
1e820 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65  * Low-level page
1e830 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61 63 65  -cache interface
1e840 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61   */.  void *pHea
1e850 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
1e860 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20          /* Heap 
1e870 73 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f  storage space */
1e880 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20  .  int nHeap;   
1e890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8a0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
1e8b0 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pHeap[] */.  int
1e8c0 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20   mnReq, mxReq;  
1e8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e8e0 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65  * Min and max he
1e8f0 61 70 20 72 65 71 75 65 73 74 73 20 73 69 7a 65  ap requests size
1e900 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69  s */.  sqlite3_i
1e910 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20  nt64 szMmap;    
1e920 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70           /* mmap
1e930 28 29 20 73 70 61 63 65 20 70 65 72 20 6f 70 65  () space per ope
1e940 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69  n file */.  sqli
1e950 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70  te3_int64 mxMmap
1e960 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1e970 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66   Maximum value f
1e980 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76  or szMmap */.  v
1e990 6f 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20  oid *pScratch;  
1e9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9b0 20 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f   /* Scratch memo
1e9c0 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63  ry */.  int szSc
1e9d0 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
1e9e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
1e9f0 65 20 6f 66 20 65 61 63 68 20 73 63 72 61 74 63  e of each scratc
1ea00 68 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e  h buffer */.  in
1ea10 74 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20  t nScratch;     
1ea20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea30 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72  /* Number of scr
1ea40 61 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a  atch buffers */.
1ea50 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20    void *pPage;  
1ea60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea70 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68      /* Page cach
1ea80 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e  e memory */.  in
1ea90 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20  t szPage;       
1eaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eab0 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
1eac0 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20  page in pPage[] 
1ead0 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20  */.  int nPage; 
1eae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eaf0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1eb00 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61   of pages in pPa
1eb10 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78  ge[] */.  int mx
1eb20 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20  ParserStack;    
1eb30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d              /* m
1eb40 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20  aximum depth of 
1eb50 74 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b  the parser stack
1eb60 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64   */.  int shared
1eb70 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20  CacheEnabled;   
1eb80 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20          /* true 
1eb90 69 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  if shared-cache 
1eba0 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a  mode enabled */.
1ebb0 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d    /* The above m
1ebc0 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69  ight be initiali
1ebd0 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e  zed to non-zero.
1ebe0 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
1ebf0 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20  need to always. 
1ec00 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65   ** initially be
1ec10 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20   zero, however. 
1ec20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b  */.  int isInit;
1ec30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec40 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
1ec50 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74  fter initializat
1ec60 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64  ion has finished
1ec70 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67   */.  int inProg
1ec80 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20  ress;           
1ec90 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1eca0 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61  while initializa
1ecb0 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
1ecc0 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65   */.  int isMute
1ecd0 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  xInit;          
1ece0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1ecf0 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72  after mutexes ar
1ed00 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  e initialized */
1ed10 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49  .  int isMallocI
1ed20 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
1ed30 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
1ed40 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
1ed50 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
1ed60 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20  t isPCacheInit; 
1ed70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed80 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
1ed90 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
1eda0 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  zed */.  int nRe
1edb0 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  fInitMutex;     
1edc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1edd0 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66  mber of users of
1ede0 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20   pInitMutex */. 
1edf0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
1ee00 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  pInitMutex;     
1ee10 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64     /* Mutex used
1ee20 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74   by sqlite3_init
1ee30 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f  ialize() */.  vo
1ee40 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a  id (*xLog)(void*
1ee50 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
1ee60 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66  ); /* Function f
1ee70 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20  or logging */.  
1ee80 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20  void *pLogArg;  
1ee90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eea0 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
1eeb0 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29  gument to xLog()
1eec0 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
1eed0 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a  E_ENABLE_SQLLOG.
1eee0 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29    void(*xSqllog)
1eef0 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
1ef00 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
1ef10 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c  );.  void *pSqll
1ef20 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69  ogArg;.#endif.#i
1ef30 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45  fdef SQLITE_VDBE
1ef40 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54  _COVERAGE.  /* T
1ef50 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
1ef60 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55  lback (if not NU
1ef70 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f  LL) is invoked o
1ef80 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61  n every VDBE bra
1ef90 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69  nch.  ** operati
1efa0 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c  on.  Set the cal
1efb0 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49  lback using SQLI
1efc0 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45  TE_TESTCTRL_VDBE
1efd0 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a  _COVERAGE..  */.
1efe0 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72    void (*xVdbeBr
1eff0 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20  anch)(void*,int 
1f000 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69  iSrcLine,u8 eThi
1f010 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43  s,u8 eMx);  /* C
1f020 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
1f030 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72  d *pVdbeBranchAr
1f040 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
1f050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f060 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72         /* 1st ar
1f070 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66  gument */.#endif
1f080 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1f090 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
1f0a0 54 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43  T.  int (*xTestC
1f0b0 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20  allback)(int);  
1f0c0 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64        /* Invoked
1f0d0 20 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74   by sqlite3Fault
1f0e0 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  Sim() */.#endif.
1f0f0 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65    int bLocaltime
1f100 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20  Fault;          
1f110 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66      /* True to f
1f120 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20  ail localtime() 
1f130 63 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  calls */.};../*.
1f140 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73  ** This macro is
1f150 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20   used inside of 
1f160 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
1f170 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20  nts to indicate 
1f180 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73 65  that.** the asse
1f190 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  rt is only valid
1f1a0 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65   on a well-forme
1f1b0 64 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e 73  d database.  Ins
1f1c0 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20  tead of:.**.**  
1f1d0 20 20 20 61 73 73 65 72 74 28 20 58 20 29 3b 0a     assert( X );.
1f1e0 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73  **.** One writes
1f1f0 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
1f200 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50 54  rt( X || CORRUPT
1f210 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52  _DB );.**.** COR
1f220 52 55 50 54 5f 44 42 20 69 73 20 74 72 75 65 20  RUPT_DB is true 
1f230 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70  during normal op
1f240 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50  eration.  CORRUP
1f250 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e  T_DB does not in
1f260 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20 74  dicate.** that t
1f270 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 64  he database is d
1f280 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75 70  efinitely corrup
1f290 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74 20  t, only that it 
1f2a0 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75 70 74  might be corrupt
1f2b0 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65  ..** For most te
1f2c0 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55 50  st cases, CORRUP
1f2d0 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20 66  T_DB is set to f
1f2e0 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70 65  alse using a spe
1f2f0 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  cial.** sqlite3_
1f300 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20  test_control(). 
1f310 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61 73   This enables as
1f320 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
1f330 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68  s to prove.** th
1f340 69 6e 67 73 20 74 68 61 74 20 61 72 65 20 61 6c  ings that are al
1f350 77 61 79 73 20 74 72 75 65 20 66 6f 72 20 77 65  ways true for we
1f360 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61  ll-formed databa
1f370 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ses..*/.#define 
1f380 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71 6c  CORRUPT_DB  (sql
1f390 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72  ite3Config.never
1f3a0 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a  Corrupt==0)../*.
1f3b0 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74  ** Context point
1f3c0 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74  er passed down t
1f3d0 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d  hrough the tree-
1f3e0 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  walk..*/.struct 
1f3f0 57 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28  Walker {.  int (
1f400 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28  *xExprCallback)(
1f410 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
1f420 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
1f430 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73   for expressions
1f440 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c   */.  int (*xSel
1f450 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  ectCallback)(Wal
1f460 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20  ker*,Select*);  
1f470 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20  /* Callback for 
1f480 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69  SELECTs */.  voi
1f490 64 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62  d (*xSelectCallb
1f4a0 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65  ack2)(Walker*,Se
1f4b0 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64  lect*);/* Second
1f4c0 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45   callback for SE
1f4d0 4c 45 43 54 73 20 2a 2f 0a 20 20 50 61 72 73 65  LECTs */.  Parse
1f4e0 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
1f4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f500 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63       /* Parser c
1f510 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e  ontext.  */.  in
1f520 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20  t walkerDepth;  
1f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f540 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1f550 72 20 6f 66 20 73 75 62 71 75 65 72 69 65 73 20  r of subqueries 
1f560 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b 20 20  */.  u8 eCode;  
1f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f590 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73  * A small proces
1f5a0 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75  sing code */.  u
1f5b0 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20  nion {          
1f5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5d0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72           /* Extr
1f5e0 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62  a data for callb
1f5f0 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43  ack */.    NameC
1f600 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20  ontext *pNC;    
1f610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f620 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20        /* Naming 
1f630 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69  context */.    i
1f640 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
1f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f660 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63            /* A c
1f670 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e  ounter */.    in
1f680 74 20 69 43 75 72 3b 20 20 20 20 20 20 20 20 20  t iCur;         
1f690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6a0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 75           /* A cu
1f6b0 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  rsor number */. 
1f6c0 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63     SrcList *pSrc
1f6d0 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  List;           
1f6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f6f0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
1f700 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43 6f      struct SrcCo
1f710 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20  unt *pSrcCount; 
1f720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f730 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d  * Counting colum
1f740 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a  n references */.
1f750 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f    } u;.};../* Fo
1f760 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f  rward declaratio
1f770 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  ns */.int sqlite
1f780 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72  3WalkExpr(Walker
1f790 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
1f7a0 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69  qlite3WalkExprLi
1f7b0 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  st(Walker*, Expr
1f7c0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
1f7d0 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61  te3WalkSelect(Wa
1f7e0 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
1f7f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
1f800 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65  SelectExpr(Walke
1f810 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
1f820 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
1f830 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c  ectFrom(Walker*,
1f840 20 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a   Select*);../*.*
1f850 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72  * Return code fr
1f860 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72 65  om the parse-tre
1f870 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74  e walking primit
1f880 69 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a  ives and their.*
1f890 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a  * callbacks..*/.
1f8a0 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74  #define WRC_Cont
1f8b0 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43  inue    0   /* C
1f8c0 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74  ontinue down int
1f8d0 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64  o children */.#d
1f8e0 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20  efine WRC_Prune 
1f8f0 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69        1   /* Omi
1f900 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63  t children but c
1f910 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20  ontinue walking 
1f920 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66  siblings */.#def
1f930 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20  ine WRC_Abort   
1f940 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64      2   /* Aband
1f950 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b  on the tree walk
1f960 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
1f970 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
1f980 74 72 75 63 74 75 72 65 20 72 65 70 72 65 73 65  tructure represe
1f990 6e 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65  nts a set of one
1f9a0 20 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a   or more CTEs.**
1f9b0 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65   (common table e
1f9c0 78 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61  xpressions) crea
1f9d0 74 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20  ted by a single 
1f9e0 57 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a  WITH clause..*/.
1f9f0 73 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20  struct With {.  
1fa00 69 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20  int nCte;       
1fa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45  /* Number of CTE
1fa30 73 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c  s in the WITH cl
1fa40 61 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a  ause */.  With *
1fa50 70 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20 20  pOuter;         
1fa60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
1fa70 74 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61  taining WITH cla
1fa80 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  use, or NULL */.
1fa90 20 20 73 74 72 75 63 74 20 43 74 65 20 7b 20 20    struct Cte {  
1faa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fab0 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54    /* For each CT
1fac0 45 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c  E in the WITH cl
1fad0 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20  ause.... */.    
1fae0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
1faf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb00 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
1fb10 43 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c  CTE */.    ExprL
1fb20 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20  ist *pCols;     
1fb30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69             /* Li
1fb40 73 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63  st of explicit c
1fb50 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20  olumn names, or 
1fb60 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65  NULL */.    Sele
1fb70 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
1fb80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1fb90 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  he definition of
1fba0 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20   this CTE */.   
1fbb0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 72   const char *zEr
1fbc0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
1fbd0 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67   /* Error messag
1fbe0 65 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72  e for circular r
1fbf0 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d  eferences */.  }
1fc00 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65   a[1];.};..#ifde
1fc10 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
1fc20 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1fc30 20 6f 66 20 74 68 65 20 54 72 65 65 56 69 65 77   of the TreeView
1fc40 20 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64 20   object is used 
1fc50 66 6f 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65  for printing the
1fc60 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64   content of.** d
1fc70 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 6f  ata structures o
1fc80 6e 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72  n sqlite3DebugPr
1fc90 69 6e 74 66 28 29 20 75 73 69 6e 67 20 61 20 74  intf() using a t
1fca0 72 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a  ree-like view..*
1fcb0 2f 0a 73 74 72 75 63 74 20 54 72 65 65 56 69 65  /.struct TreeVie
1fcc0 77 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c  w {.  int iLevel
1fcd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1fce0 20 57 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20   Which level of 
1fcf0 74 68 65 20 74 72 65 65 20 77 65 20 61 72 65 20  the tree we are 
1fd00 6f 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e  on */.  u8  bLin
1fd10 65 5b 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20  e[100];         
1fd20 2f 2a 20 44 72 61 77 20 76 65 72 74 69 63 61 6c  /* Draw vertical
1fd30 20 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20   in column i if 
1fd40 62 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65  bLine[i] is true
1fd50 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a   */.};.#endif /*
1fd60 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
1fd70 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67  ../*.** Assuming
1fd80 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74   zIn points to t
1fd90 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
1fda0 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74   a UTF-8 charact
1fdb0 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a  er,.** advance z
1fdc0 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  In to point to t
1fdd0 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
1fde0 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20   the next UTF-8 
1fdf0 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64  character..*/.#d
1fe00 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49  efine SQLITE_SKI
1fe10 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20  P_UTF8(zIn) {   
1fe20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe30 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28       \.  if( (*(
1fe40 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b  zIn++))>=0xc0 ){
1fe50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
1fe70 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e      while( (*zIn
1fe80 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29   & 0xc0)==0x80 )
1fe90 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20  { zIn++; }      
1fea0 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20         \.  }    
1feb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fee0 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  \.}../*.** The S
1fef0 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63  QLITE_*_BKPT mac
1ff00 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75  ros are substitu
1ff10 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f  tes for the erro
1ff20 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20  r codes with.** 
1ff30 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75  the same name bu
1ff40 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42  t without the _B
1ff50 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65  KPT suffix.  The
1ff60 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65  se macros invoke
1ff70 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61  .** routines tha
1ff80 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e  t report the lin
1ff90 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63  e-number on whic
1ffa0 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67  h the error orig
1ffb0 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20  inated.** using 
1ffc0 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20  sqlite3_log().  
1ffd0 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73  The routines als
1ffe0 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76  o provide a conv
1fff0 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20  enient place.** 
20000 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65  to set a debugge
20010 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f  r breakpoint..*/
20020 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72  .int sqlite3Corr
20030 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69  uptError(int);.i
20040 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65  nt sqlite3Misuse
20050 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20  Error(int);.int 
20060 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45  sqlite3CantopenE
20070 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69  rror(int);.#defi
20080 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  ne SQLITE_CORRUP
20090 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f  T_BKPT sqlite3Co
200a0 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e  rruptError(__LIN
200b0 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c  E__).#define SQL
200c0 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20  ITE_MISUSE_BKPT 
200d0 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72  sqlite3MisuseErr
200e0 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65  or(__LINE__).#de
200f0 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54  fine SQLITE_CANT
20100 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65  OPEN_BKPT sqlite
20110 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f  3CantopenError(_
20120 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a  _LINE__).../*.**
20130 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20   FTS4 is really 
20140 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72  an extension for
20150 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e   FTS3.  It is en
20160 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a  abled using the.
20170 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ** SQLITE_ENABLE
20180 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75  _FTS3 macro.  Bu
20190 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75  t to avoid confu
201a0 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c  sion we also cal
201b0 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  l.** the SQLITE_
201c0 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72  ENABLE_FTS4 macr
201d0 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e  o to serve as an
201e0 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54   alias for SQLIT
201f0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a  E_ENABLE_FTS3..*
20200 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
20210 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
20220 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
20230 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
20240 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
20250 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23 65  E_ENABLE_FTS3.#e
20260 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
20270 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69  ctype.h header i
20280 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e  s needed for non
20290 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20  -ASCII systems. 
202a0 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e   It is also.** n
202b0 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68  eeded by FTS3 wh
202c0 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75  en FTS3 is inclu
202d0 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67  ded in the amalg
202e0 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  amation..*/.#if 
202f0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
20300 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20  ASCII) || \.    
20310 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  (defined(SQLITE_
20320 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20  ENABLE_FTS3) && 
20330 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
20340 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20  MALGAMATION)).# 
20350 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68  include <ctype.h
20360 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  >.#endif../*.** 
20370 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
20380 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73  cros mimic the s
20390 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20  tandard library 
203a0 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65  functions touppe
203b0 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28  r(),.** isspace(
203c0 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73  ), isalnum(), is
203d0 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64  digit() and isxd
203e0 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69  igit(), respecti
203f0 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c  vely. The.** sql
20400 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c  ite versions onl
20410 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49  y work for ASCII
20420 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67   characters, reg
20430 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c  ardless of local
20440 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  e..*/.#ifdef SQL
20450 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69  ITE_ASCII.# defi
20460 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65  ne sqlite3Touppe
20470 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c  r(x)  ((x)&~(sql
20480 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
20490 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
204a0 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65  &0x20)).# define
204b0 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28   sqlite3Isspace(
204c0 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
204d0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
204e0 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a  char)(x)]&0x01).
204f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20500 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71  Isalnum(x)   (sq
20510 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
20520 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
20530 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65  ]&0x06).# define
20540 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28   sqlite3Isalpha(
20550 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
20560 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
20570 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a  char)(x)]&0x02).
20580 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20590 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71  Isdigit(x)   (sq
205a0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
205b0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
205c0 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65  ]&0x04).# define
205d0 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
205e0 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79  (x)  (sqlite3Cty
205f0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
20600 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a  char)(x)]&0x08).
20610 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20620 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71  Tolower(x)   (sq
20630 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
20640 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r[(unsigned char
20650 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64  )(x)]).#else.# d
20660 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75  efine sqlite3Tou
20670 70 70 65 72 28 78 29 20 20 20 74 6f 75 70 70 65  pper(x)   touppe
20680 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
20690 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
206a0 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29  qlite3Isspace(x)
206b0 20 20 20 69 73 73 70 61 63 65 28 28 75 6e 73 69     isspace((unsi
206c0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
206d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
206e0 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c  salnum(x)   isal
206f0 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68  num((unsigned ch
20700 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
20710 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28   sqlite3Isalpha(
20720 78 29 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e  x)   isalpha((un
20730 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
20740 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20750 33 49 73 64 69 67 69 74 28 78 29 20 20 20 69 73  3Isdigit(x)   is
20760 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20  digit((unsigned 
20770 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
20780 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  ne sqlite3Isxdig
20790 69 74 28 78 29 20 20 69 73 78 64 69 67 69 74 28  it(x)  isxdigit(
207a0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
207b0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
207c0 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20  ite3Tolower(x)  
207d0 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e   tolower((unsign
207e0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 65 6e  ed char)(x)).#en
207f0 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  dif.int sqlite3I
20800 73 49 64 43 68 61 72 28 75 38 29 3b 0a 0a 2f 2a  sIdChar(u8);../*
20810 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e  .** Internal fun
20820 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73  ction prototypes
20830 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  .*/.#define sqli
20840 74 65 33 53 74 72 49 43 6d 70 20 73 71 6c 69 74  te3StrICmp sqlit
20850 65 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20 73  e3_stricmp.int s
20860 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63  qlite3Strlen30(c
20870 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65  onst char*);.#de
20880 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e  fine sqlite3StrN
20890 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72  ICmp sqlite3_str
208a0 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74  nicmp..int sqlit
208b0 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69  e3MallocInit(voi
208c0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
208d0 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b  MallocEnd(void);
208e0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
208f0 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20  lloc(u64);.void 
20900 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65  *sqlite3MallocZe
20910 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  ro(u64);.void *s
20920 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
20930 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34  ro(sqlite3*, u64
20940 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
20950 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69  DbMallocRaw(sqli
20960 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72  te3*, u64);.char
20970 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75   *sqlite3DbStrDu
20980 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
20990 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73   char*);.char *s
209a0 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28  qlite3DbStrNDup(
209b0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
209c0 68 61 72 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  har*, u64);.void
209d0 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63   *sqlite3Realloc
209e0 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f  (void*, u64);.vo
209f0 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61  id *sqlite3DbRea
20a00 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74  llocOrFree(sqlit
20a10 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36  e3 *, void *, u6
20a20 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
20a30 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74  3DbRealloc(sqlit
20a40 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36  e3 *, void *, u6
20a50 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  4);.void sqlite3
20a60 44 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c  DbFree(sqlite3*,
20a70 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c   void*);.int sql
20a80 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76  ite3MallocSize(v
20a90 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
20aa0 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73  e3DbMallocSize(s
20ab0 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
20ac0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63  .void *sqlite3Sc
20ad0 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29  ratchMalloc(int)
20ae0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63  ;.void sqlite3Sc
20af0 72 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29  ratchFree(void*)
20b00 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50  ;.void *sqlite3P
20b10 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  ageMalloc(int);.
20b20 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65  void sqlite3Page
20b30 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  Free(void*);.voi
20b40 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44  d sqlite3MemSetD
20b50 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f  efault(void);.vo
20b60 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e  id sqlite3Benign
20b70 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64  MallocHooks(void
20b80 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64   (*)(void), void
20b90 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74   (*)(void));.int
20ba0 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72   sqlite3HeapNear
20bb0 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f  lyFull(void);../
20bc0 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20  *.** On systems 
20bd0 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b  with ample stack
20be0 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20   space and that 
20bf0 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29  support alloca()
20c00 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66  , make.** use of
20c10 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74   alloca() to obt
20c20 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61  ain space for la
20c30 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62  rge automatic ob
20c40 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75  jects.  By defau
20c50 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70  lt,.** obtain sp
20c60 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ace from malloc(
20c70 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c  )..**.** The all
20c80 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65  oca() routine ne
20c90 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  ver returns NULL
20ca0 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75  .  This will cau
20cb0 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a  se code paths.**
20cc0 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20   that deal with 
20cd0 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
20ce0 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20  c() failures to 
20cf0 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a  be unreachable..
20d00 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
20d10 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65  _USE_ALLOCA.# de
20d20 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
20d30 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
20d40 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66   alloca(N).# def
20d50 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
20d60 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
20d70 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29  memset(alloca(N)
20d80 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65  , 0, N).# define
20d90 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
20da0 65 28 44 2c 50 29 20 20 20 20 20 20 20 0a 23 65  e(D,P)       .#e
20db0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
20dc0 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61  ite3StackAllocRa
20dd0 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33  w(D,N)   sqlite3
20de0 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  DbMallocRaw(D,N)
20df0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20e00 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28  3StackAllocZero(
20e10 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d  D,N)  sqlite3DbM
20e20 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23  allocZero(D,N).#
20e30 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
20e40 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20  tackFree(D,P)   
20e50 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
20e60 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23  e(D,P).#endif..#
20e70 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
20e80 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73  BLE_MEMSYS3.cons
20e90 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  t sqlite3_mem_me
20ea0 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65  thods *sqlite3Me
20eb0 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64  mGetMemsys3(void
20ec0 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  );.#endif.#ifdef
20ed0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
20ee0 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c  EMSYS5.const sql
20ef0 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
20f00 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d   *sqlite3MemGetM
20f10 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65  emsys5(void);.#e
20f20 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53  ndif...#ifndef S
20f30 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54  QLITE_MUTEX_OMIT
20f40 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
20f50 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a  _methods const *
20f60 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75  sqlite3DefaultMu
20f70 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c  tex(void);.  sql
20f80 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
20f90 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
20fa0 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29  3NoopMutex(void)
20fb0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
20fc0 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41  x *sqlite3MutexA
20fd0 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74  lloc(int);.  int
20fe0 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69   sqlite3MutexIni
20ff0 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73  t(void);.  int s
21000 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76  qlite3MutexEnd(v
21010 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e  oid);.#endif..in
21020 74 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56  t sqlite3StatusV
21030 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20  alue(int);.void 
21040 73 71 6c 69 74 65 33 53 74 61 74 75 73 41 64 64  sqlite3StatusAdd
21050 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  (int, int);.void
21060 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 53 65   sqlite3StatusSe
21070 74 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69  t(int, int);..#i
21080 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
21090 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
210a0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73  .  int sqlite3Is
210b0 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c  NaN(double);.#el
210c0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
210d0 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23  te3IsNaN(X)  0.#
210e0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
210f0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
21100 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
21110 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d  ure holds inform
21120 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a  ation about SQL.
21130 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67  ** functions arg
21140 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65 20  uments that are 
21150 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 74  the parameters t
21160 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29 20 66  o the printf() f
21170 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  unction..*/.stru
21180 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e  ct PrintfArgumen
21190 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b  ts {.  int nArg;
211a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211b0 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20  /* Total number 
211c0 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
211d0 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20    int nUsed;    
211e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
211f0 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
21200 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
21210 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
21220 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54   **apArg;   /* T
21230 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75  he argument valu
21240 65 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e  es */.};..#defin
21250 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
21260 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 0a 23 64  INTERNAL 0x01.#d
21270 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49  efine SQLITE_PRI
21280 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30  NTF_SQLFUNC  0x0
21290 32 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58  2.void sqlite3VX
212a0 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a  Printf(StrAccum*
212b0 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61  , u32, const cha
212c0 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f  r*, va_list);.vo
212d0 69 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74  id sqlite3XPrint
212e0 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 75 33 32  f(StrAccum*, u32
212f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
21300 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..);.char *sqlit
21310 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65  e3MPrintf(sqlite
21320 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
21330 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ...);.char *sqli
21340 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69  te3VMPrintf(sqli
21350 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
21360 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72  , va_list);.char
21370 20 2a 73 71 6c 69 74 65 33 4d 41 70 70 65 6e 64   *sqlite3MAppend
21380 66 28 73 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a  f(sqlite3*,char*
21390 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e  ,const char*,...
213a0 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
213b0 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 64  QLITE_TEST) || d
213c0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
213d0 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  BUG).  void sqli
213e0 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63  te3DebugPrintf(c
213f0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
21400 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
21410 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
21420 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  ).  void *sqlite
21430 33 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63  3TestTextToPtr(c
21440 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e  onst char*);.#en
21450 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  dif..#if defined
21460 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20  (SQLITE_DEBUG). 
21470 20 54 72 65 65 56 69 65 77 20 2a 73 71 6c 69 74   TreeView *sqlit
21480 65 33 54 72 65 65 56 69 65 77 50 75 73 68 28 54  e3TreeViewPush(T
21490 72 65 65 56 69 65 77 2a 2c 75 38 29 3b 0a 20 20  reeView*,u8);.  
214a0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
214b0 56 69 65 77 50 6f 70 28 54 72 65 65 56 69 65 77  ViewPop(TreeView
214c0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
214d0 65 33 54 72 65 65 56 69 65 77 4c 69 6e 65 28 54  e3TreeViewLine(T
214e0 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
214f0 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 76  char*, ...);.  v
21500 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
21510 69 65 77 49 74 65 6d 28 54 72 65 65 56 69 65 77  iewItem(TreeView
21520 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
21530 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  u8);.  void sqli
21540 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72 28  te3TreeViewExpr(
21550 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
21560 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76   Expr*, u8);.  v
21570 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
21580 69 65 77 45 78 70 72 4c 69 73 74 28 54 72 65 65  iewExprList(Tree
21590 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70  View*, const Exp
215a0 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73  rList*, u8, cons
215b0 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
215c0 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
215d0 53 65 6c 65 63 74 28 54 72 65 65 56 69 65 77 2a  Select(TreeView*
215e0 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c  , const Select*,
215f0 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76   u8);.#endif...v
21600 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74  oid sqlite3SetSt
21610 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71  ring(char **, sq
21620 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
21630 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20  ar*, ...);.void 
21640 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
21650 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
21660 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73  ar*, ...);.int s
21670 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68  qlite3Dequote(ch
21680 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
21690 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e  3KeywordCode(con
216a0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
216b0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
216c0 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61  ite3RunParser(Pa
216d0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
216e0 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69  *, char **);.voi
216f0 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43  d sqlite3FinishC
21700 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69  oding(Parse*);.i
21710 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
21720 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f  pReg(Parse*);.vo
21730 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
21740 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c  eTempReg(Parse*,
21750 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
21760 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61  3GetTempRange(Pa
21770 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
21780 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
21790 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
217a0 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
217b0 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65  lite3ClearTempRe
217c0 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a  gCache(Parse*);.
217d0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
217e0 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  rAlloc(sqlite3*,
217f0 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  int,const Token*
21800 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
21810 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33  ite3Expr(sqlite3
21820 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
21830 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21840 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65  ExprAttachSubtre
21850 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  es(sqlite3*,Expr
21860 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  *,Expr*,Expr*);.
21870 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78  Expr *sqlite3PEx
21880 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  pr(Parse*, int, 
21890 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f  Expr*, Expr*, co
218a0 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70  nst Token*);.Exp
218b0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e  r *sqlite3ExprAn
218c0 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  d(sqlite3*,Expr*
218d0 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  , Expr*);.Expr *
218e0 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74  sqlite3ExprFunct
218f0 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ion(Parse*,ExprL
21900 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ist*, Token*);.v
21910 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
21920 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50  ssignVarNumber(P
21930 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
21940 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44  oid sqlite3ExprD
21950 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
21960 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74  Expr*);.ExprList
21970 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
21980 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45  tAppend(Parse*,E
21990 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  xprList*,Expr*);
219a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
219b0 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72  rListSetName(Par
219c0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f  se*,ExprList*,To
219d0 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ken*,int);.void 
219e0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
219f0 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78  etSpan(Parse*,Ex
21a00 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61 6e  prList*,ExprSpan
21a10 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21a20 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73  ExprListDelete(s
21a30 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73  qlite3*, ExprLis
21a40 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
21a50 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63  Init(sqlite3*, c
21a60 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har**);.int sqli
21a70 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
21a80 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72  void*, int, char
21a90 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69  **, char**);.voi
21aa0 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28  d sqlite3Pragma(
21ab0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
21ac0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29  ken*,Token*,int)
21ad0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
21ae0 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
21af0 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65  onnection(sqlite
21b00 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
21b10 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
21b20 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
21b30 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61  oid sqlite3Colla
21b40 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79  pseDatabaseArray
21b50 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
21b60 20 73 71 6c 69 74 65 33 42 65 67 69 6e 50 61 72   sqlite3BeginPar
21b70 73 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  se(Parse*,int);.
21b80 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d  void sqlite3Comm
21b90 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65  itInternalChange
21ba0 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 54 61 62  s(sqlite3*);.Tab
21bb0 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c  le *sqlite3Resul
21bc0 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72  tSetOfSelect(Par
21bd0 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f  se*,Select*);.vo
21be0 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61  id sqlite3OpenMa
21bf0 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20  sterTable(Parse 
21c00 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a  *, int);.Index *
21c10 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65  sqlite3PrimaryKe
21c20 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a  yIndex(Table*);.
21c30 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  i16 sqlite3Colum
21c40 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c  nOfIndex(Index*,
21c50 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69   i16);.void sqli
21c60 74 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61  te3StartTable(Pa
21c70 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
21c80 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  n*,int,int,int,i
21c90 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21ca0 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  3AddColumn(Parse
21cb0 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  *,Token*);.void 
21cc0 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c  sqlite3AddNotNul
21cd0 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  l(Parse*, int);.
21ce0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50  void sqlite3AddP
21cf0 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a  rimaryKey(Parse*
21d00 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
21d10 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
21d20 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63  d sqlite3AddChec
21d30 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  kConstraint(Pars
21d40 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
21d50 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d   sqlite3AddColum
21d60 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 54 6f 6b  nType(Parse*,Tok
21d70 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
21d80 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75  e3AddDefaultValu
21d90 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70 61  e(Parse*,ExprSpa
21da0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
21db0 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28  3AddCollateType(
21dc0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
21dd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64  .void sqlite3End
21de0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
21df0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65  en*,Token*,u8,Se
21e00 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
21e10 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73  te3ParseUri(cons
21e20 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
21e30 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74  ar*,unsigned int
21e40 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
21e50 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76         sqlite3_v
21e60 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72  fs**,char**,char
21e70 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c   **);.Btree *sql
21e80 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65  ite3DbNameToBtre
21e90 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  e(sqlite3*,const
21ea0 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
21eb0 69 74 65 33 43 6f 64 65 4f 6e 63 65 28 50 61 72  ite3CodeOnce(Par
21ec0 73 65 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53  se *);..#ifdef S
21ed0 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
21ee0 49 4e 5f 54 45 53 54 0a 23 20 64 65 66 69 6e 65  IN_TEST.# define
21ef0 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
21f00 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65  (X) SQLITE_OK.#e
21f10 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  lse.  int sqlite
21f20 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a  3FaultSim(int);.
21f30 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a  #endif..Bitvec *
21f40 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72 65  sqlite3BitvecCre
21f50 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71  ate(u32);.int sq
21f60 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74 28  lite3BitvecTest(
21f70 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69  Bitvec*, u32);.i
21f80 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
21f90 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  Set(Bitvec*, u32
21fa0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
21fb0 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65  itvecClear(Bitve
21fc0 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b  c*, u32, void*);
21fd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
21fe0 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65  vecDestroy(Bitve
21ff0 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  c*);.u32 sqlite3
22000 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65  BitvecSize(Bitve
22010 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  c*);.int sqlite3
22020 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73  BitvecBuiltinTes
22030 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52 6f  t(int,int*);..Ro
22040 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77  wSet *sqlite3Row
22050 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  SetInit(sqlite3*
22060 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65  , void*, unsigne
22070 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  d int);.void sql
22080 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28  ite3RowSetClear(
22090 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73  RowSet*);.void s
220a0 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
220b0 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29  rt(RowSet*, i64)
220c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
220d0 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c  SetTest(RowSet*,
220e0 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34   int iBatch, i64
220f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
22100 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a  wSetNext(RowSet*
22110 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73  , i64*);..void s
22120 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77  qlite3CreateView
22130 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
22140 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c  oken*,Token*,Sel
22150 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a  ect*,int,int);..
22160 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
22170 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c  ITE_OMIT_VIEW) |
22180 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  | !defined(SQLIT
22190 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
221a0 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74  BLE).  int sqlit
221b0 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
221c0 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c  ames(Parse*,Tabl
221d0 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  e*);.#else.# def
221e0 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77 47  ine sqlite3ViewG
221f0 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c  etColumnNames(A,
22200 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66  B) 0.#endif..#if
22210 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41   SQLITE_MAX_ATTA
22220 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73 71  CHED>30.  int sq
22230 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
22240 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e  ro(yDbMask);.#en
22250 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
22260 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
22270 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c  , SrcList*, int,
22280 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
22290 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65  te3CodeDropTable
222a0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
222b0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
222c0 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61   sqlite3DeleteTa
222d0 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61  ble(sqlite3*, Ta
222e0 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  ble*);.#ifndef S
222f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
22300 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20  NCREMENT.  void 
22310 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
22320 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65 20  mentBegin(Parse 
22330 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69 64  *pParse);.  void
22340 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
22350 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20 2a  ementEnd(Parse *
22360 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23  pParse);.#else.#
22370 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
22380 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69  utoincrementBegi
22390 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71  n(X).# define sq
223a0 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
223b0 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a  ntEnd(X).#endif.
223c0 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65  void sqlite3Inse
223d0 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rt(Parse*, SrcLi
223e0 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64  st*, Select*, Id
223f0 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  List*, int);.voi
22400 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41  d *sqlite3ArrayA
22410 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a  llocate(sqlite3*
22420 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c  ,void*,int,int*,
22430 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73  int*);.IdList *s
22440 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70 65  qlite3IdListAppe
22450 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c  nd(sqlite3*, IdL
22460 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ist*, Token*);.i
22470 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74  nt sqlite3IdList
22480 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f  Index(IdList*,co
22490 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c  nst char*);.SrcL
224a0 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
224b0 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74  istEnlarge(sqlit
224c0 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  e3*, SrcList*, i
224d0 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73  nt, int);.SrcLis
224e0 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
224f0 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a  tAppend(sqlite3*
22500 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
22510 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63  n*, Token*);.Src
22520 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
22530 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65  ListAppendFromTe
22540 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rm(Parse*, SrcLi
22550 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
22560 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  en*,.           
22570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22580 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e             Token
22590 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72  *, Select*, Expr
225a0 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69  *, IdList*);.voi
225b0 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
225c0 49 6e 64 65 78 65 64 42 79 28 50 61 72 73 65 20  IndexedBy(Parse 
225d0 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f  *, SrcList *, To
225e0 6b 65 6e 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ken *);.int sqli
225f0 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b  te3IndexedByLook
22600 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75  up(Parse *, stru
22610 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
22620 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22630 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e  SrcListShiftJoin
22640 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a  Type(SrcList*);.
22650 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
22660 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73  istAssignCursors
22670 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
22680 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22690 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  IdListDelete(sql
226a0 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b  ite3*, IdList*);
226b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
226c0 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
226d0 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  e3*, SrcList*);.
226e0 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c  Index *sqlite3Al
226f0 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63  locateIndexObjec
22700 74 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69  t(sqlite3*,i16,i
22710 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e 64 65  nt,char**);.Inde
22720 78 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65  x *sqlite3Create
22730 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b  Index(Parse*,Tok
22740 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69  en*,Token*,SrcLi
22750 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  st*,ExprList*,in
22760 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20  t,Token*,.      
22770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22780 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20      Expr*, int, 
22790 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
227a0 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73  e3DropIndex(Pars
227b0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
227c0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  t);.int sqlite3S
227d0 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65  elect(Parse*, Se
227e0 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73  lect*, SelectDes
227f0 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
22800 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61  ite3SelectNew(Pa
22810 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  rse*,ExprList*,S
22820 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
22830 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  prList*,.       
22840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22850 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74    Expr*,ExprList
22860 2a 2c 75 31 36 2c 45 78 70 72 2a 2c 45 78 70 72  *,u16,Expr*,Expr
22870 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22880 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c  SelectDelete(sql
22890 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ite3*, Select*);
228a0 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53  .Table *sqlite3S
228b0 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72  rcListLookup(Par
228c0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
228d0 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61  int sqlite3IsRea
228e0 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61  dOnly(Parse*, Ta
228f0 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ble*, int);.void
22900 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
22910 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43  e(Parse*, int iC
22920 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62  ur, int iDb, Tab
22930 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64  le*, int);.#if d
22940 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
22950 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
22960 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65  TE_LIMIT) && !de
22970 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
22980 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72  T_SUBQUERY).Expr
22990 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68   *sqlite3LimitWh
229a0 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69  ere(Parse*,SrcLi
229b0 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
229c0 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c  st*,Expr*,Expr*,
229d0 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76  char*);.#endif.v
229e0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
229f0 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72  eFrom(Parse*, Sr
22a00 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  cList*, Expr*);.
22a10 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64 61  void sqlite3Upda
22a20 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  te(Parse*, SrcLi
22a30 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  st*, ExprList*, 
22a40 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65  Expr*, int);.Whe
22a50 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57  reInfo *sqlite3W
22a60 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a  hereBegin(Parse*
22a70 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
22a80 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ExprList*,ExprLi
22a90 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f  st*,u16,int);.vo
22aa0 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45  id sqlite3WhereE
22ab0 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nd(WhereInfo*);.
22ac0 75 36 34 20 73 71 6c 69 74 65 33 57 68 65 72 65  u64 sqlite3Where
22ad0 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57  OutputRowCount(W
22ae0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
22af0 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69  sqlite3WhereIsDi
22b00 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f  stinct(WhereInfo
22b10 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
22b20 68 65 72 65 49 73 4f 72 64 65 72 65 64 28 57 68  hereIsOrdered(Wh
22b30 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
22b40 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72  qlite3WhereIsSor
22b50 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  ted(WhereInfo*);
22b60 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
22b70 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57  eContinueLabel(W
22b80 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
22b90 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61  sqlite3WhereBrea
22ba0 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  kLabel(WhereInfo
22bb0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
22bc0 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68  hereOkOnePass(Wh
22bd0 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b  ereInfo*, int*);
22be0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
22bf0 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61  CodeGetColumn(Pa
22c00 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
22c10 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  t, int, int, u8)
22c20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
22c30 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f  prCodeGetColumnO
22c40 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61  fTable(Vdbe*, Ta
22c50 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
22c60 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22c70 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50  e3ExprCodeMove(P
22c80 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
22c90 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
22ca0 74 65 33 45 78 70 72 43 61 63 68 65 53 74 6f 72  te3ExprCacheStor
22cb0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
22cc0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
22cd0 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50  qlite3ExprCacheP
22ce0 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ush(Parse*);.voi
22cf0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
22d00 68 65 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a 76  hePop(Parse*);.v
22d10 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
22d20 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65  acheRemove(Parse
22d30 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
22d40 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
22d50 63 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29  cheClear(Parse*)
22d60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
22d70 70 72 43 61 63 68 65 41 66 66 69 6e 69 74 79 43  prCacheAffinityC
22d80 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e  hange(Parse*, in
22d90 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
22da0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61  lite3ExprCode(Pa
22db0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
22dc0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
22dd0 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c  xprCodeFactorabl
22de0 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
22df0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
22e00 74 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69  te3ExprCodeAtIni
22e10 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
22e20 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
22e30 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 65  qlite3ExprCodeTe
22e40 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  mp(Parse*, Expr*
22e50 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
22e60 69 74 65 33 45 78 70 72 43 6f 64 65 54 61 72 67  ite3ExprCodeTarg
22e70 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  et(Parse*, Expr*
22e80 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
22e90 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43  ite3ExprCodeAndC
22ea0 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70  ache(Parse*, Exp
22eb0 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
22ec0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45 78 70  lite3ExprCodeExp
22ed0 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78  rList(Parse*, Ex
22ee0 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 75 38  prList*, int, u8
22ef0 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  );.#define SQLIT
22f00 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20  E_ECEL_DUP      
22f10 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e  0x01  /* Deep, n
22f20 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65  ot shallow copie
22f30 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
22f40 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20  ITE_ECEL_FACTOR 
22f50 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f    0x02  /* Facto
22f60 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74  r out constant t
22f70 65 72 6d 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c  erms */.void sql
22f80 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28 50  ite3ExprIfTrue(P
22f90 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
22fa0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
22fb0 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65  lite3ExprIfFalse
22fc0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
22fd0 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65  int, int);.Table
22fe0 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62   *sqlite3FindTab
22ff0 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  le(sqlite3*,cons
23000 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
23010 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  har*);.Table *sq
23020 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
23030 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69  (Parse*,int isVi
23040 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  ew,const char*, 
23050 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61  const char*);.Ta
23060 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
23070 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73  teTableItem(Pars
23080 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 73 74  e*,int isView,st
23090 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
230a0 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  m *);.Index *sql
230b0 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71  ite3FindIndex(sq
230c0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
230d0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
230e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
230f0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
23100 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  le(sqlite3*,int,
23110 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
23120 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
23130 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73  AndDeleteIndex(s
23140 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
23150 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
23160 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61 72  qlite3Vacuum(Par
23170 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
23180 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a  3RunVacuum(char*
23190 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68  *, sqlite3*);.ch
231a0 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46  ar *sqlite3NameF
231b0 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33  romToken(sqlite3
231c0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
231d0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61  sqlite3ExprCompa
231e0 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  re(Expr*, Expr*,
231f0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
23200 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72  e3ExprListCompar
23210 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  e(ExprList*, Exp
23220 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  rList*, int);.in
23230 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70  t sqlite3ExprImp
23240 6c 69 65 73 45 78 70 72 28 45 78 70 72 2a 2c 20  liesExpr(Expr*, 
23250 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
23260 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
23270 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e  lyzeAggregates(N
23280 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
23290 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
232a0 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c  3ExprAnalyzeAggL
232b0 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  ist(NameContext*
232c0 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74  ,ExprList*);.int
232d0 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e   sqlite3Function
232e0 55 73 65 73 54 68 69 73 53 72 63 28 45 78 70 72  UsesThisSrc(Expr
232f0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64  *, SrcList*);.Vd
23300 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64  be *sqlite3GetVd
23310 62 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  be(Parse*);.void
23320 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65   sqlite3PrngSave
23330 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69  State(void);.voi
23340 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73  d sqlite3PrngRes
23350 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b  toreState(void);
23360 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
23370 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33  lbackAll(sqlite3
23380 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
23390 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
233a0 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74  hema(Parse*, int
233b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
233c0 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63  odeVerifyNamedSc
233d0 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e  hema(Parse*, con
233e0 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76  st char *zDb);.v
233f0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
23400 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
23410 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
23420 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e  qlite3CommitTran
23430 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b  saction(Parse*);
23440 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
23450 6c 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e  lbackTransaction
23460 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
23470 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28  qlite3Savepoint(
23480 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b  Parse*, int, Tok
23490 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
234a0 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
234b0 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f  s(sqlite3 *);.vo
234c0 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d  id sqlite3LeaveM
234d0 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62  utexAndCloseZomb
234e0 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ie(sqlite3*);.in
234f0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
23500 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a  onstant(Expr*);.
23510 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
23520 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e  sConstantNotJoin
23530 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
23540 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
23550 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70  ntOrFunction(Exp
23560 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  r*, u8);.int sql
23570 69 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43  ite3ExprIsTableC
23580 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e  onstant(Expr*,in
23590 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
235a0 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78 70  xprIsInteger(Exp
235b0 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
235c0 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e  qlite3ExprCanBeN
235d0 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29  ull(const Expr*)
235e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
235f0 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79  rNeedsNoAffinity
23600 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70  Change(const Exp
23610 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73  r*, char);.int s
23620 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f  qlite3IsRowid(co
23630 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
23640 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
23650 52 6f 77 44 65 6c 65 74 65 28 50 61 72 73 65 2a  RowDelete(Parse*
23660 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a  ,Table*,Trigger*
23670 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36  ,int,int,int,i16
23680 2c 75 38 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64  ,u8,u8,u8);.void
23690 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
236a0 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50  RowIndexDelete(P
236b0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
236c0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a  nt, int, int*);.
236d0 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72  int sqlite3Gener
236e0 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73  ateIndexKey(Pars
236f0 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c  e*, Index*, int,
23700 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
23710 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Index*,int);.voi
23720 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
23730 50 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72  PartIdxLabel(Par
23740 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  se*,int);.void s
23750 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f  qlite3GenerateCo
23760 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50  nstraintChecks(P
23770 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
23780 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
23790 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
237a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237b0 20 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e          u8,u8,in
237c0 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71  t,int*);.void sq
237d0 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73  lite3CompleteIns
237e0 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61  ertion(Parse*,Ta
237f0 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ble*,int,int,int
23800 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  ,int*,int,int,in
23810 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
23820 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63  penTableAndIndic
23830 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  es(Parse*, Table
23840 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2a  *, int, int, u8*
23850 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76  , int*, int*);.v
23860 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
23870 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50  WriteOperation(P
23880 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
23890 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75  ;.void sqlite3Mu
238a0 6c 74 69 57 72 69 74 65 28 50 61 72 73 65 2a 29  ltiWrite(Parse*)
238b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
238c0 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a  yAbort(Parse*);.
238d0 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74  void sqlite3Halt
238e0 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
238f0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61  *, int, int, cha
23900 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69  r*, i8, u8);.voi
23910 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65 43  d sqlite3UniqueC
23920 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
23930 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a  , int, Index*);.
23940 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 69  void sqlite3Rowi
23950 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  dConstraint(Pars
23960 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29  e*, int, Table*)
23970 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
23980 78 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  xprDup(sqlite3*,
23990 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72  Expr*,int);.Expr
239a0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
239b0 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  rListDup(sqlite3
239c0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29  *,ExprList*,int)
239d0 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
239e0 65 33 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c  e3SrcListDup(sql
239f0 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69  ite3*,SrcList*,i
23a00 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c  nt);.IdList *sql
23a10 69 74 65 33 49 64 4c 69 73 74 44 75 70 28 73 71  ite3IdListDup(sq
23a20 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b  lite3*,IdList*);
23a30 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33  .Select *sqlite3
23a40 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65  SelectDup(sqlite
23a50 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b  3*,Select*,int);
23a60 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45  .#if SELECTTRACE
23a70 5f 45 4e 41 42 4c 45 44 0a 76 6f 69 64 20 73 71  _ENABLED.void sq
23a80 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61  lite3SelectSetNa
23a90 6d 65 28 53 65 6c 65 63 74 2a 2c 63 6f 6e 73 74  me(Select*,const
23aa0 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23   char*);.#else.#
23ab0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
23ac0 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 41 2c 42  electSetName(A,B
23ad0 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
23ae0 6c 69 74 65 33 46 75 6e 63 44 65 66 49 6e 73 65  lite3FuncDefInse
23af0 72 74 28 46 75 6e 63 44 65 66 48 61 73 68 2a 2c  rt(FuncDefHash*,
23b00 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63   FuncDef*);.Func
23b10 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  Def *sqlite3Find
23b20 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
23b30 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
23b40 74 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f  t,int,u8,u8);.vo
23b50 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
23b60 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  erBuiltinFunctio
23b70 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  ns(sqlite3*);.vo
23b80 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
23b90 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69  erDateTimeFuncti
23ba0 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
23bb0 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 47  sqlite3RegisterG
23bc0 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28 76  lobalFunctions(v
23bd0 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
23be0 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73  3SafetyCheckOk(s
23bf0 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
23c00 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
23c10 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33  SickOrOk(sqlite3
23c20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23c30 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72  ChangeCookie(Par
23c40 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20  se*, int);..#if 
23c50 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
23c60 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21 64  OMIT_VIEW) && !d
23c70 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
23c80 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64  IT_TRIGGER).void
23c90 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c   sqlite3Material
23ca0 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20  izeView(Parse*, 
23cb0 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Table*, Expr*, i
23cc0 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  nt);.#endif..#if
23cd0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
23ce0 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20  _TRIGGER.  void 
23cf0 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67  sqlite3BeginTrig
23d00 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ger(Parse*, Toke
23d10 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e  n*,Token*,int,in
23d20 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73  t,IdList*,SrcLis
23d30 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
23d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
23d50 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a  xpr*,int, int);.
23d60 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69    void sqlite3Fi
23d70 6e 69 73 68 54 72 69 67 67 65 72 28 50 61 72 73  nishTrigger(Pars
23d80 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  e*, TriggerStep*
23d90 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69  , Token*);.  voi
23da0 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  d sqlite3DropTri
23db0 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63  gger(Parse*, Src
23dc0 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  List*, int);.  v
23dd0 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
23de0 72 69 67 67 65 72 50 74 72 28 50 61 72 73 65 2a  riggerPtr(Parse*
23df0 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54  , Trigger*);.  T
23e00 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54  rigger *sqlite3T
23e10 72 69 67 67 65 72 73 45 78 69 73 74 28 50 61 72  riggersExist(Par
23e20 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  se *, Table*, in
23e30 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  t, ExprList*, in
23e40 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69  t *pMask);.  Tri
23e50 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69  gger *sqlite3Tri
23e60 67 67 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a  ggerList(Parse *
23e70 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f  , Table *);.  vo
23e80 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  id sqlite3CodeRo
23e90 77 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  wTrigger(Parse*,
23ea0 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c   Trigger *, int,
23eb0 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
23ec0 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20   Table *,.      
23ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ee0 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20        int, int, 
23ef0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
23f00 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
23f10 65 72 44 69 72 65 63 74 28 50 61 72 73 65 20 2a  erDirect(Parse *
23f20 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62  , Trigger *, Tab
23f30 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  le *, int, int, 
23f40 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
23f50 69 74 65 56 69 65 77 54 72 69 67 67 65 72 73 28  iteViewTriggers(
23f60 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
23f70 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72  Expr*, int, Expr
23f80 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73  List*);.  void s
23f90 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
23fa0 67 65 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a  gerStep(sqlite3*
23fb0 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b  , TriggerStep*);
23fc0 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
23fd0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 53 65  sqlite3TriggerSe
23fe0 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74 65 33  lectStep(sqlite3
23ff0 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72  *,Select*);.  Tr
24000 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
24010 65 33 54 72 69 67 67 65 72 49 6e 73 65 72 74 53  e3TriggerInsertS
24020 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
24030 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20  en*, IdList*,.  
24040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24060 20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c 75 38        Select*,u8
24070 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
24080 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
24090 55 70 64 61 74 65 53 74 65 70 28 73 71 6c 69 74  UpdateStep(sqlit
240a0 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  e3*,Token*,ExprL
240b0 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29  ist*, Expr*, u8)
240c0 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
240d0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44  *sqlite3TriggerD
240e0 65 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74 65  eleteStep(sqlite
240f0 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a  3*,Token*, Expr*
24100 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
24110 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73  3DeleteTrigger(s
24120 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
24130 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
24140 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
24150 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
24160 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
24170 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65  *);.  u32 sqlite
24180 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
24190 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c  Parse*,Trigger*,
241a0 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e  ExprList*,int,in
241b0 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23  t,Table*,int);.#
241c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
241d0 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
241e0 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20  ((p)->pToplevel 
241f0 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c  ? (p)->pToplevel
24200 20 3a 20 28 70 29 29 0a 23 65 6c 73 65 0a 23 20   : (p)).#else.# 
24210 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
24220 69 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c  iggersExist(B,C,
24230 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e  D,E,F) 0.# defin
24240 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  e sqlite3DeleteT
24250 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65  rigger(A,B).# de
24260 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70  fine sqlite3Drop
24270 54 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a  TriggerPtr(A,B).
24280 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24290 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
242a0 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20  rigger(A,B,C).# 
242b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
242c0 64 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42  deRowTrigger(A,B
242d0 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a  ,C,D,E,F,G,H,I).
242e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
242f0 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69  CodeRowTriggerDi
24300 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  rect(A,B,C,D,E,F
24310 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
24320 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c  e3TriggerList(X,
24330 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73   Y) 0.# define s
24340 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65  qlite3ParseTople
24350 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e  vel(p) p.# defin
24360 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
24370 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c  Colmask(A,B,C,D,
24380 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a  E,F,G) 0.#endif.
24390 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e  .int sqlite3Join
243a0 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
243b0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
243c0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
243d0 65 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b  e3CreateForeignK
243e0 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  ey(Parse*, ExprL
243f0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78  ist*, Token*, Ex
24400 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76  prList*, int);.v
24410 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72  oid sqlite3Defer
24420 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65  ForeignKey(Parse
24430 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  *, int);.#ifndef
24440 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
24450 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69  HORIZATION.  voi
24460 64 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  d sqlite3AuthRea
24470 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53  d(Parse*,Expr*,S
24480 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29  chema*,SrcList*)
24490 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41  ;.  int sqlite3A
244a0 75 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c  uthCheck(Parse*,
244b0 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
244c0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
244d0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
244e0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43  oid sqlite3AuthC
244f0 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65  ontextPush(Parse
24500 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c  *, AuthContext*,
24510 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
24520 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
24530 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68  hContextPop(Auth
24540 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74  Context*);.  int
24550 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
24560 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  Col(Parse*, cons
24570 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20  t char *, const 
24580 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65  char *, int);.#e
24590 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
245a0 69 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62  ite3AuthRead(a,b
245b0 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73  ,c,d).# define s
245c0 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28  qlite3AuthCheck(
245d0 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51  a,b,c,d,e)    SQ
245e0 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65  LITE_OK.# define
245f0 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
24600 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23  extPush(a,b,c).#
24610 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
24620 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29  uthContextPop(a)
24630 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65    ((void)(a)).#e
24640 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
24650 33 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Attach(Parse*, 
24660 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78  Expr*, Expr*, Ex
24670 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
24680 65 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c  e3Detach(Parse*,
24690 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
246a0 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46  lite3FixInit(DbF
246b0 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69  ixer*, Parse*, i
246c0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
246d0 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
246e0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72  int sqlite3FixSr
246f0 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20  cList(DbFixer*, 
24700 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  SrcList*);.int s
24710 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28  qlite3FixSelect(
24720 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74  DbFixer*, Select
24730 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
24740 69 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c  ixExpr(DbFixer*,
24750 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
24760 69 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28  ite3FixExprList(
24770 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69  DbFixer*, ExprLi
24780 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
24790 33 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28  3FixTriggerStep(
247a0 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65  DbFixer*, Trigge
247b0 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c  rStep*);.int sql
247c0 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63  ite3AtoF(const c
247d0 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c  har *z, double*,
247e0 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
247f0 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63  qlite3GetInt32(c
24800 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
24810 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
24820 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  toi(const char*)
24830 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66  ;.int sqlite3Utf
24840 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20  16ByteLen(const 
24850 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74  void *pData, int
24860 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c   nChar);.int sql
24870 69 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28  ite3Utf8CharLen(
24880 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74  const char *pDat
24890 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75  a, int nByte);.u
248a0 33 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65  32 sqlite3Utf8Re
248b0 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a  ad(const u8**);.
248c0 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
248d0 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73  gEst(u64);.LogEs
248e0 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41  t sqlite3LogEstA
248f0 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74  dd(LogEst,LogEst
24900 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
24910 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
24920 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  BLE.LogEst sqlit
24930 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62  e3LogEstFromDoub
24940 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64  le(double);.#end
24950 69 66 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f  if.u64 sqlite3Lo
24960 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74  gEstToInt(LogEst
24970 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e  );../*.** Routin
24980 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77  es to read and w
24990 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65  rite variable-le
249a0 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20  ngth integers.  
249b0 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a  These used to.**
249c0 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61   be defined loca
249d0 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20  lly, but now we 
249e0 75 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72  use the varint r
249f0 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75  outines in the u
24a00 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  til.c.** file..*
24a10 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74  /.int sqlite3Put
24a20 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20  Varint(unsigned 
24a30 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20  char*, u64);.u8 
24a40 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
24a50 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
24a60 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a  char *, u64 *);.
24a70 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
24a80 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69  int32(const unsi
24a90 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32  gned char *, u32
24aa0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
24ab0 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29  VarintLen(u64 v)
24ac0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  ;../*.** The com
24ad0 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20  mon case is for 
24ae0 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61  a varint to be a
24af0 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54   single byte.  T
24b00 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  hey following.**
24b10 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74   macros handle t
24b20 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77  he common case w
24b30 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75  ithout a procedu
24b40 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65  re call, but the
24b50 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72  n call.** the pr
24b60 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67  ocedure for larg
24b70 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23  er varints..*/.#
24b80 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
24b90 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38  32(A,B)  \.  (u8
24ba0 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30  )((*(A)<(u8)0x80
24bb0 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29  )?((B)=(u32)*(A)
24bc0 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61  ),1:sqlite3GetVa
24bd0 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20  rint32((A),(u32 
24be0 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65  *)&(B))).#define
24bf0 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42   putVarint32(A,B
24c00 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33  )  \.  (u8)(((u3
24c10 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29  2)(B)<(u32)0x80)
24c20 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64  ?(*(A)=(unsigned
24c30 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20   char)(B)),1:\. 
24c40 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
24c50 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66  t((A),(B))).#def
24c60 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20  ine getVarint   
24c70 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
24c80 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72  t.#define putVar
24c90 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75  int    sqlite3Pu
24ca0 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20  tVarint...const 
24cb0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64  char *sqlite3Ind
24cc0 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 56 64  exAffinityStr(Vd
24cd0 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a  be *, Index *);.
24ce0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
24cf0 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c  eAffinity(Vdbe*,
24d00 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63   Table*, int);.c
24d10 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61  har sqlite3Compa
24d20 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20  reAffinity(Expr 
24d30 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66  *pExpr, char aff
24d40 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  2);.int sqlite3I
24d50 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45  ndexAffinityOk(E
24d60 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
24d70 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a   idx_affinity);.
24d80 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72  char sqlite3Expr
24d90 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
24da0 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Expr);.int sqlit
24db0 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63  e3Atoi64(const c
24dc0 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c  har*, i64*, int,
24dd0 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
24de0 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63  3DecOrHexToI64(c
24df0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a  onst char*, i64*
24e00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
24e10 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69  rrorWithMsg(sqli
24e20 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
24e30 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69   char*,...);.voi
24e40 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73  d sqlite3Error(s
24e50 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
24e60 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f  id *sqlite3HexTo
24e70 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63  Blob(sqlite3*, c
24e80 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e  onst char *z, in
24e90 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  t n);.u8 sqlite3
24ea0 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b  HexToInt(int h);
24eb0 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50  .int sqlite3TwoP
24ec0 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c  artName(Parse *,
24ed0 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
24ee0 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23  *, Token **);..#
24ef0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
24f00 45 5f 54 45 53 54 29 20 0a 63 6f 6e 73 74 20 63  E_TEST) .const c
24f10 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e  har *sqlite3ErrN
24f20 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66  ame(int);.#endif
24f30 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ..const char *sq
24f40 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29  lite3ErrStr(int)
24f50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61  ;.int sqlite3Rea
24f60 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70  dSchema(Parse *p
24f70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  Parse);.CollSeq 
24f80 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c  *sqlite3FindColl
24f90 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20  Seq(sqlite3*,u8 
24fa0 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  enc, const char*
24fb0 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  ,int);.CollSeq *
24fc0 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c  sqlite3LocateCol
24fd0 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72  lSeq(Parse *pPar
24fe0 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a  se, const char*z
24ff0 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  Name);.CollSeq *
25000 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53  sqlite3ExprCollS
25010 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
25020 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  , Expr *pExpr);.
25030 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
25040 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e  rAddCollateToken
25050 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
25060 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  Expr*, const Tok
25070 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  en*);.Expr *sqli
25080 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74  te3ExprAddCollat
25090 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c 45  eString(Parse*,E
250a0 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  xpr*,const char*
250b0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
250c0 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28  ExprSkipCollate(
250d0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
250e0 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28  te3CheckCollSeq(
250f0 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71  Parse *, CollSeq
25100 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
25110 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28  CheckObjectName(
25120 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63  Parse *, const c
25130 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  har *);.void sql
25140 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67  ite3VdbeSetChang
25150 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e  es(sqlite3 *, in
25160 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  t);.int sqlite3A
25170 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ddInt64(i64*,i64
25180 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75  );.int sqlite3Su
25190 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  bInt64(i64*,i64)
251a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c  ;.int sqlite3Mul
251b0 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
251c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49  .int sqlite3AbsI
251d0 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65  nt32(int);.#ifde
251e0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
251f0 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73  8_3_NAMES.void s
25200 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78  qlite3FileSuffix
25210 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  3(const char*, c
25220 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  har*);.#else.# d
25230 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c  efine sqlite3Fil
25240 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65  eSuffix3(X,Y).#e
25250 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47  ndif.u8 sqlite3G
25260 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20  etBoolean(const 
25270 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f  char *z,u8);..co
25280 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  nst void *sqlite
25290 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74  3ValueText(sqlit
252a0 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a  e3_value*, u8);.
252b0 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65  int sqlite3Value
252c0 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61  Bytes(sqlite3_va
252d0 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20  lue*, u8);.void 
252e0 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53  sqlite3ValueSetS
252f0 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  tr(sqlite3_value
25300 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  *, int, const vo
25310 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20 20 20 20  id *,u8, .      
25320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25330 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29    void(*)(void*)
25340 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
25350 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69  alueSetNull(sqli
25360 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69  te3_value*);.voi
25370 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  d sqlite3ValueFr
25380 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ee(sqlite3_value
25390 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75  *);.sqlite3_valu
253a0 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e  e *sqlite3ValueN
253b0 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63  ew(sqlite3 *);.c
253c0 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31  har *sqlite3Utf1
253d0 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20  6to8(sqlite3 *, 
253e0 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
253f0 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
25400 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28  e3ValueFromExpr(
25410 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20  sqlite3 *, Expr 
25420 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74  *, u8, u8, sqlit
25430 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f  e3_value **);.vo
25440 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41  id sqlite3ValueA
25450 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c  pplyAffinity(sql
25460 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38  ite3_value *, u8
25470 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53  , u8);.#ifndef S
25480 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
25490 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ON.extern const 
254a0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
254b0 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65  lite3OpcodePrope
254c0 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  rty[];.extern co
254d0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
254e0 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f  r sqlite3UpperTo
254f0 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20  Lower[];.extern 
25500 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
25510 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70 65  har sqlite3Ctype
25520 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  Map[];.extern co
25530 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65  nst Token sqlite
25540 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78  3IntTokens[];.ex
25550 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20  tern SQLITE_WSD 
25560 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f  struct Sqlite3Co
25570 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66  nfig sqlite3Conf
25580 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54  ig;.extern SQLIT
25590 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48 61 73  E_WSD FuncDefHas
255a0 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46  h sqlite3GlobalF
255b0 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65  unctions;.#ifnde
255c0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
255d0 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c  D.extern int sql
255e0 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b  ite3PendingByte;
255f0 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76  .#endif.#endif.v
25600 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50  oid sqlite3RootP
25610 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33  ageMoved(sqlite3
25620 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
25630 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
25640 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54  eindex(Parse*, T
25650 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
25660 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
25670 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  rFunctions(void)
25680 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
25690 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50  terRenameTable(P
256a0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
256b0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
256c0 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f  lite3GetToken(co
256d0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
256e0 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69  r *, int *);.voi
256f0 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50  d sqlite3NestedP
25700 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e  arse(Parse*, con
25710 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
25720 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 69  void sqlite3Expi
25730 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
25740 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ents(sqlite3*);.
25750 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53  int sqlite3CodeS
25760 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 20 2a  ubselect(Parse *
25770 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69  , Expr *, int, i
25780 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25790 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72 73  3SelectPrep(Pars
257a0 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d  e*, Select*, Nam
257b0 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20  eContext*);.int 
257c0 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e  sqlite3MatchSpan
257d0 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Name(const char*
257e0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
257f0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
25800 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
25810 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72  lite3ResolveExpr
25820 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  Names(NameContex
25830 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
25840 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53   sqlite3ResolveS
25850 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65  electNames(Parse
25860 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65  *, Select*, Name
25870 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20  Context*);.void 
25880 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65  sqlite3ResolveSe
25890 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61 72 73  lfReference(Pars
258a0 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78  e*,Table*,int,Ex
258b0 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a  pr*,ExprList*);.
258c0 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
258d0 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50  veOrderGroupBy(P
258e0 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
258f0 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
25900 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
25910 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75  lite3ColumnDefau
25920 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65  lt(Vdbe *, Table
25930 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
25940 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
25950 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28  FinishAddColumn(
25960 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Parse *, Token *
25970 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
25980 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75  lterBeginAddColu
25990 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  mn(Parse *, SrcL
259a0 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  ist *);.CollSeq 
259b0 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53  *sqlite3GetCollS
259c0 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43  eq(Parse*, u8, C
259d0 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20  ollSeq *, const 
259e0 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c  char*);.char sql
259f0 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70 65  ite3AffinityType
25a00 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 38  (const char*, u8
25a10 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25a20 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20  Analyze(Parse*, 
25a30 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
25a40 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f  .int sqlite3Invo
25a50 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75  keBusyHandler(Bu
25a60 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74  syHandler*);.int
25a70 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73   sqlite3FindDb(s
25a80 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29  qlite3*, Token*)
25a90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
25aa0 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20  dDbName(sqlite3 
25ab0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
25ac0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61  ;.int sqlite3Ana
25ad0 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65  lysisLoad(sqlite
25ae0 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69  3*,int iDB);.voi
25af0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49  d sqlite3DeleteI
25b00 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69  ndexSamples(sqli
25b10 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f  te3*,Index*);.vo
25b20 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c  id sqlite3Defaul
25b30 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b  tRowEst(Index*);
25b40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
25b50 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f  isterLikeFunctio
25b60 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ns(sqlite3*, int
25b70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
25b80 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c  LikeFunction(sql
25b90 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a  ite3*,Expr*,int*
25ba0 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,char*);.void sq
25bb0 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69 6c 65  lite3MinimumFile
25bc0 46 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c 20 69  Format(Parse*, i
25bd0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
25be0 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61  qlite3SchemaClea
25bf0 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d  r(void *);.Schem
25c00 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61  a *sqlite3Schema
25c10 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42  Get(sqlite3 *, B
25c20 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  tree *);.int sql
25c30 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65  ite3SchemaToInde
25c40 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53  x(sqlite3 *db, S
25c50 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66  chema *);.KeyInf
25c60 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
25c70 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  oAlloc(sqlite3*,
25c80 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
25c90 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72  qlite3KeyInfoUnr
25ca0 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65  ef(KeyInfo*);.Ke
25cb0 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
25cc0 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f  yInfoRef(KeyInfo
25cd0 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
25ce0 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64  ite3KeyInfoOfInd
25cf0 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78  ex(Parse*, Index
25d00 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  *);.#ifdef SQLIT
25d10 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69  E_DEBUG.int sqli
25d20 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74  te3KeyInfoIsWrit
25d30 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b  eable(KeyInfo*);
25d40 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
25d50 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73 71  te3CreateFunc(sq
25d60 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
25d70 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  har *, int, int,
25d80 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f 69 64   void *, .  void
25d90 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
25da0 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
25db0 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76  3_value **),.  v
25dc0 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
25dd0 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
25de0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20  ite3_value **), 
25df0 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
25e00 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75  _context*),.  Fu
25e10 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44  ncDestructor *pD
25e20 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 69 6e 74  estructor.);.int
25e30 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
25e40 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74  sqlite3 *db, int
25e50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
25e60 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28 50  enTempDatabase(P
25e70 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73  arse *);..void s
25e80 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e  qlite3StrAccumIn
25e90 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 68  it(StrAccum*, ch
25ea0 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  ar*, int, int);.
25eb0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
25ec0 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63  ccumAppend(StrAc
25ed0 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  cum*,const char*
25ee0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
25ef0 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e  te3StrAccumAppen
25f00 64 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63  dAll(StrAccum*,c
25f10 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
25f20 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64 43  d sqlite3AppendC
25f30 68 61 72 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e  har(StrAccum*,in
25f40 74 2c 63 68 61 72 29 3b 0a 63 68 61 72 20 2a 73  t,char);.char *s
25f50 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69  qlite3StrAccumFi
25f60 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b  nish(StrAccum*);
25f70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
25f80 41 63 63 75 6d 52 65 73 65 74 28 53 74 72 41 63  AccumReset(StrAc
25f90 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
25fa0 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69  te3SelectDestIni
25fb0 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e  t(SelectDest*,in
25fc0 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  t,int);.Expr *sq
25fd0 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d  lite3CreateColum
25fe0 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  nExpr(sqlite3 *,
25ff0 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c   SrcList *, int,
26000 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c   int);..void sql
26010 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72  ite3BackupRestar
26020 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  t(sqlite3_backup
26030 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
26040 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71  3BackupUpdate(sq
26050 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20  lite3_backup *, 
26060 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a  Pgno, const u8 *
26070 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
26080 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
26090 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71 6c  R_STAT4.void sql
260a0 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74  ite3AnalyzeFunct
260b0 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20  ions(void);.int 
260c0 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
260d0 65 53 65 74 56 61 6c 75 65 28 50 61 72 73 65 2a  eSetValue(Parse*
260e0 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64  ,Index*,Unpacked
260f0 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 75  Record**,Expr*,u
26100 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74  8,int,int*);.int
26110 20 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c   sqlite3Stat4Val
26120 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65  ueFromExpr(Parse
26130 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71  *, Expr*, u8, sq
26140 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
26150 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
26160 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63  4ProbeFree(Unpac
26170 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74  kedRecord*);.int
26180 20 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c   sqlite3Stat4Col
26190 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  umn(sqlite3*, co
261a0 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
261b0 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  int, sqlite3_val
261c0 75 65 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ue**);.#endif../
261d0 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
261e0 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d  ce to the LEMON-
261f0 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72  generated parser
26200 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
26210 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69  3ParserAlloc(voi
26220 64 2a 28 2a 29 28 75 36 34 29 29 3b 0a 76 6f 69  d*(*)(u64));.voi
26230 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46  d sqlite3ParserF
26240 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28  ree(void*, void(
26250 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64  *)(void*));.void
26260 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 76   sqlite3Parser(v
26270 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e  oid*, int, Token
26280 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65  , Parse*);.#ifde
26290 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43  f YYTRACKMAXSTAC
262a0 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c  KDEPTH.  int sql
262b0 69 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50  ite3ParserStackP
262c0 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64  eak(void*);.#end
262d0 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  if..void sqlite3
262e0 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f  AutoLoadExtensio
262f0 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69  ns(sqlite3*);.#i
26300 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
26310 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e  T_LOAD_EXTENSION
26320 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
26330 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73  loseExtensions(s
26340 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a  qlite3*);.#else.
26350 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
26360 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
26370 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  X).#endif..#ifnd
26380 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
26390 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f  HARED_CACHE.  vo
263a0 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  id sqlite3TableL
263b0 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74  ock(Parse *, int
263c0 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74  , int, u8, const
263d0 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a   char *);.#else.
263e0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
263f0 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78  3TableLock(v,w,x
26400 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ,y,z).#endif..#i
26410 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
26420 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74  .  int sqlite3Ut
26430 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63  f8To8(unsigned c
26440 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  har*);.#endif..#
26450 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
26460 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23  T_VIRTUALTABLE.#
26470 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
26480 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20  VtabClear(Y).#  
26490 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
264a0 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49  abSync(X,Y) SQLI
264b0 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20  TE_OK.#  define 
264c0 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62  sqlite3VtabRollb
264d0 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ack(X).#  define
264e0 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d   sqlite3VtabComm
264f0 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  it(X).#  define 
26500 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e  sqlite3VtabInSyn
26510 63 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e  c(db) 0.#  defin
26520 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63  e sqlite3VtabLoc
26530 6b 28 58 29 20 0a 23 20 20 64 65 66 69 6e 65 20  k(X) .#  define 
26540 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
26550 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
26560 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
26570 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e  List(X).#  defin
26580 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  e sqlite3VtabSav
26590 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20  epoint(X, Y, Z) 
265a0 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66  SQLITE_OK.#  def
265b0 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56 54  ine sqlite3GetVT
265c0 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61  able(X,Y)  ((VTa
265d0 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20  ble*)0).#else.  
265e0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
265f0 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a  bClear(sqlite3 *
26600 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20  db, Table*);.   
26610 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
26620 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74  Disconnect(sqlit
26630 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70  e3 *db, Table *p
26640 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
26650 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65  3VtabSync(sqlite
26660 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20  3 *db, Vdbe*);. 
26670 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
26680 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65  bRollback(sqlite
26690 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73  3 *db);.   int s
266a0 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74  qlite3VtabCommit
266b0 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
266c0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
266d0 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29  abLock(VTable *)
266e0 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
266f0 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62  3VtabUnlock(VTab
26700 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  le *);.   void s
26710 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
26720 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a  List(sqlite3*);.
26730 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
26740 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69  abSavepoint(sqli
26750 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  te3 *, int, int)
26760 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
26770 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
26780 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33  g(Vdbe*, sqlite3
26790 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62  _vtab*);.   VTab
267a0 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54  le *sqlite3GetVT
267b0 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
267c0 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e  able*);.#  defin
267d0 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53  e sqlite3VtabInS
267e0 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e  ync(db) ((db)->n
267f0 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29  VTrans>0 && (db)
26800 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65  ->aVTrans==0).#e
26810 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
26820 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c  3VtabMakeWritabl
26830 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29  e(Parse*,Table*)
26840 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
26850 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72  abBeginParse(Par
26860 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
26870 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74  en*, Token*, int
26880 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
26890 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50  tabFinishParse(P
268a0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
268b0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
268c0 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b  ArgInit(Parse*);
268d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
268e0 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65  bArgExtend(Parse
268f0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
26900 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
26910 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  reate(sqlite3*, 
26920 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  int, const char 
26930 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74  *, char **);.int
26940 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
26950 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20  Connect(Parse*, 
26960 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Table*);.int sql
26970 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74  ite3VtabCallDest
26980 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  roy(sqlite3*, in
26990 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  t, const char *)
269a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
269b0 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a  bBegin(sqlite3 *
269c0 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e  , VTable *);.Fun
269d0 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61  cDef *sqlite3Vta
269e0 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f  bOverloadFunctio
269f0 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63  n(sqlite3 *,Func
26a00 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20  Def*, int nArg, 
26a10 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
26a20 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74  ite3InvalidFunct
26a30 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ion(sqlite3_cont
26a40 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
26a50 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74  _value**);.sqlit
26a60 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33  e3_int64 sqlite3
26a70 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28  StmtCurrentTime(
26a80 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
26a90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  );.int sqlite3Vd
26aa0 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78  beParameterIndex
26ab0 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68  (Vdbe*, const ch
26ac0 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  ar*, int);.int s
26ad0 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69  qlite3TransferBi
26ae0 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73  ndings(sqlite3_s
26af0 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73  tmt *, sqlite3_s
26b00 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  tmt *);.void sql
26b10 69 74 65 33 50 61 72 73 65 72 52 65 73 65 74 28  ite3ParserReset(
26b20 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
26b30 69 74 65 33 52 65 70 72 65 70 61 72 65 28 56 64  ite3Reprepare(Vd
26b40 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  be*);.void sqlit
26b50 65 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c  e3ExprListCheckL
26b60 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78  ength(Parse*, Ex
26b70 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63  prList*, const c
26b80 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  har*);.CollSeq *
26b90 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d  sqlite3BinaryCom
26ba0 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73  pareCollSeq(Pars
26bb0 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70  e *, Expr *, Exp
26bc0 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
26bd0 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f  3TempInMemory(co
26be0 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63  nst sqlite3*);.c
26bf0 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
26c00 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d  e3JournalModenam
26c10 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  e(int);.#ifndef 
26c20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
26c30 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65    int sqlite3Che
26c40 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a  ckpoint(sqlite3*
26c50 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
26c60 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73  , int*);.  int s
26c70 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74  qlite3WalDefault
26c80 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74  Hook(void*,sqlit
26c90 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
26ca0 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  int);.#endif.#if
26cb0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
26cc0 5f 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c  _CTE.  With *sql
26cd0 69 74 65 33 57 69 74 68 41 64 64 28 50 61 72 73  ite3WithAdd(Pars
26ce0 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c  e*,With*,Token*,
26cf0 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74  ExprList*,Select
26d00 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
26d10 65 33 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c  e3WithDelete(sql
26d20 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20  ite3*,With*);.  
26d30 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68  void sqlite3With
26d40 50 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74  Push(Parse*, Wit
26d50 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23  h*, u8);.#else.#
26d60 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69  define sqlite3Wi
26d70 74 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64  thPush(x,y,z).#d
26d80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74  efine sqlite3Wit
26d90 68 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e  hDelete(x,y).#en
26da0 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74  dif../* Declarat
26db0 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f  ions for functio
26dc0 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c  ns in fkey.c. Al
26dd0 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72  l of these are r
26de0 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f  eplaced by.** no
26df0 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d  -op macros if OM
26e00 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
26e10 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68  s defined. In th
26e20 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69  is case no forei
26e30 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69  gn.** key functi
26e40 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c  onality is avail
26e50 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52  able. If OMIT_TR
26e60 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64  IGGER is defined
26e70 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52   but.** OMIT_FOR
26e80 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c  EIGN_KEY is not,
26e90 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68   only some of th
26ea0 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
26eb0 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74  no-oped. In.** t
26ec0 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e  his case foreign
26ed0 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64   keys are parsed
26ee0 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66  , but no other f
26ef0 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
26f00 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e  .** provided (en
26f10 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20  forcement of FK 
26f20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75  constraints requ
26f30 69 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72  ires the trigger
26f40 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a  s sub-system)..*
26f50 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
26f60 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
26f70 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69  GN_KEY) && !defi
26f80 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
26f90 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20  TRIGGER).  void 
26fa0 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50  sqlite3FkCheck(P
26fb0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
26fc0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
26fd0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
26fe0 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50  te3FkDropTable(P
26ff0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a  arse*, SrcList *
27000 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69  , Table*);.  voi
27010 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f  d sqlite3FkActio
27020 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ns(Parse*, Table
27030 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
27040 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  t, int*, int);. 
27050 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65   int sqlite3FkRe
27060 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54  quired(Parse*, T
27070 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  able*, int*, int
27080 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
27090 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a  FkOldmask(Parse*
270a0 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65  , Table*);.  FKe
270b0 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65  y *sqlite3FkRefe
270c0 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b  rences(Table *);
270d0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
270e0 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
270f0 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20  s(a,b,c,d,e,f). 
27100 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
27110 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c  FkCheck(a,b,c,d,
27120 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
27130 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c  qlite3FkDropTabl
27140 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69  e(a,b,c).  #defi
27150 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  ne sqlite3FkOldm
27160 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20  ask(a,b)        
27170 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
27180 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61  ite3FkRequired(a
27190 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 23 65 6e  ,b,c,d)    0.#en
271a0 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
271b0 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
271c0 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  KEY.  void sqlit
271d0 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74  e3FkDelete(sqlit
271e0 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  e3 *, Table*);. 
271f0 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f   int sqlite3FkLo
27200 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  cateIndex(Parse*
27210 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e  ,Table*,FKey*,In
27220 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65  dex**,int**);.#e
27230 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
27240 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c  lite3FkDelete(a,
27250 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  b).  #define sql
27260 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
27270 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e  x(a,b,c,d,e).#en
27280 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69  dif.../*.** Avai
27290 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65  lable fault inje
272a0 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62  ctors.  Should b
272b0 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e  e numbered begin
272c0 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a  ning with 0..*/.
272d0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
272e0 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c  AULTINJECTOR_MAL
272f0 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e  LOC     0.#defin
27300 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
27310 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20  JECTOR_COUNT    
27320 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69    1../*.** The i
27330 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
27340 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20  code in fault.c 
27350 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66  used for identif
27360 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a  ying "benign".**
27370 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73   malloc failures
27380 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70  . This is only p
27390 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45  resent if SQLITE
273a0 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
273b0 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66  ST.** is not def
273c0 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ined..*/.#ifndef
273d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
273e0 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64  LTIN_TEST.  void
273f0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
27400 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
27410 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
27420 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76  ndBenignMalloc(v
27430 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  oid);.#else.  #d
27440 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67  efine sqlite3Beg
27450 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
27460 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
27470 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
27480 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  c().#endif../*.*
27490 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e  * Allowed return
274a0 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c   values from sql
274b0 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
274c0 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  ).*/.#define IN_
274d0 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20  INDEX_ROWID     
274e0 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63 68     1   /* Search
274f0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
27500 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  e table */.#defi
27510 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20  ne IN_INDEX_EPH 
27520 20 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20           2   /* 
27530 53 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d 65  Search an epheme
27540 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64  ral b-tree */.#d
27550 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49  efine IN_INDEX_I
27560 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20 20 20  NDEX_ASC    3   
27570 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65  /* Existing inde
27580 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23  x ASCENDING */.#
27590 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
275a0 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20 20  INDEX_DESC   4  
275b0 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64   /* Existing ind
275c0 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f  ex DESCENDING */
275d0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
275e0 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20 35  X_NOOP         5
275f0 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61     /* No table a
27600 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f  vailable. Use co
27610 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a  mparisons */./*.
27620 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73  ** Allowed flags
27630 20 66 6f 72 20 74 68 65 20 33 72 64 20 70 61 72   for the 3rd par
27640 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
27650 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a  3FindInIndex()..
27660 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
27670 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20  DEX_NOOP_OK     
27680 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f  0x0001  /* OK to
27690 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58   return IN_INDEX
276a0 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65  _NOOP */.#define
276b0 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52   IN_INDEX_MEMBER
276c0 53 48 49 50 20 20 30 78 30 30 30 32 20 20 2f 2a  SHIP  0x0002  /*
276d0 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65   IN operator use
276e0 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69 70  d for membership
276f0 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65   test */.#define
27700 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20   IN_INDEX_LOOP  
27710 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
27720 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65   IN operator use
27730 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69  d as a loop */.i
27740 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  nt sqlite3FindIn
27750 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45  Index(Parse *, E
27760 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a  xpr *, u32, int*
27770 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
27780 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f  E_ENABLE_ATOMIC_
27790 57 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69  WRITE.  int sqli
277a0 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  te3JournalOpen(s
277b0 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f  qlite3_vfs *, co
277c0 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69  nst char *, sqli
277d0 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c  te3_file *, int,
277e0 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c   int);.  int sql
277f0 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28  ite3JournalSize(
27800 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a  sqlite3_vfs *);.
27810 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
27820 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74  rnalCreate(sqlit
27830 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 20 20 69 6e  e3_file *);.  in
27840 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
27850 45 78 69 73 74 73 28 73 71 6c 69 74 65 33 5f 66  Exists(sqlite3_f
27860 69 6c 65 20 2a 70 29 3b 0a 23 65 6c 73 65 0a 20  ile *p);.#else. 
27870 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
27880 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70 56 66 73  JournalSize(pVfs
27890 29 20 28 28 70 56 66 73 29 2d 3e 73 7a 4f 73 46  ) ((pVfs)->szOsF
278a0 69 6c 65 29 0a 20 20 23 64 65 66 69 6e 65 20 73  ile).  #define s
278b0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69  qlite3JournalExi
278c0 73 74 73 28 70 29 20 31 0a 23 65 6e 64 69 66 0a  sts(p) 1.#endif.
278d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d  .void sqlite3Mem
278e0 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69  JournalOpen(sqli
278f0 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74  te3_file *);.int
27900 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
27910 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e  alSize(void);.in
27920 74 20 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f  t sqlite3IsMemJo
27930 75 72 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66 69  urnal(sqlite3_fi
27940 6c 65 20 2a 29 3b 0a 0a 23 69 66 20 53 51 4c 49  le *);..#if SQLI
27950 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
27960 48 3e 30 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  H>0.  void sqlit
27970 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74 28  e3ExprSetHeight(
27980 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
27990 78 70 72 20 2a 70 29 3b 0a 20 20 69 6e 74 20 73  xpr *p);.  int s
279a0 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72  qlite3SelectExpr
279b0 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29  Height(Select *)
279c0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45  ;.  int sqlite3E
279d0 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 50  xprCheckHeight(P
279e0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  arse*, int);.#el
279f0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
27a00 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68  ite3ExprSetHeigh
27a10 74 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65  t(x,y).  #define
27a20 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
27a30 70 72 48 65 69 67 68 74 28 78 29 20 30 0a 20 20  prHeight(x) 0.  
27a40 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45  #define sqlite3E
27a50 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 78  xprCheckHeight(x
27a60 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20  ,y).#endif..u32 
27a70 73 71 6c 69 74 65 33 47 65 74 34 62 79 74 65 28  sqlite3Get4byte(
27a80 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64  const u8*);.void
27a90 20 73 71 6c 69 74 65 33 50 75 74 34 62 79 74 65   sqlite3Put4byte
27aa0 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66  (u8*, u32);..#if
27ab0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
27ac0 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a  E_UNLOCK_NOTIFY.
27ad0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
27ae0 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28  nnectionBlocked(
27af0 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74  sqlite3 *, sqlit
27b00 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  e3 *);.  void sq
27b10 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
27b20 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  nlocked(sqlite3 
27b30 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  *db);.  void sql
27b40 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c  ite3ConnectionCl
27b50 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  osed(sqlite3 *db
27b60 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
27b70 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
27b80 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29  tionBlocked(x,y)
27b90 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
27ba0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
27bb0 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e  cked(x).  #defin
27bc0 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
27bd0 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e  ionClosed(x).#en
27be0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
27bf0 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20  TE_DEBUG.  void 
27c00 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61  sqlite3ParserTra
27c10 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a  ce(FILE*, char *
27c20 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
27c30 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45   If the SQLITE_E
27c40 4e 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78  NABLE IOTRACE ex
27c50 69 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c  ists then the gl
27c60 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a  obal variable.**
27c70 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
27c80 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
27c90 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f  a printf-like ro
27ca0 75 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a  utine used to.**
27cb0 20 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69   print I/O traci
27cc0 6e 67 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f  ng messages. .*/
27cd0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
27ce0 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20  NABLE_IOTRACE.# 
27cf0 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41  define IOTRACE(A
27d00 29 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f  )  if( sqlite3Io
27d10 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33  Trace ){ sqlite3
27d20 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76  IoTrace A; }.  v
27d30 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 49  oid sqlite3VdbeI
27d40 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29  OTraceSql(Vdbe*)
27d50 3b 0a 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20  ;.SQLITE_EXTERN 
27d60 76 6f 69 64 20 28 2a 73 71 6c 69 74 65 33 49 6f  void (*sqlite3Io
27d70 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61  Trace)(const cha
27d80 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23  r*,...);.#else.#
27d90 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28   define IOTRACE(
27da0 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  A).# define sqli
27db0 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
27dc0 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  l(X).#endif../*.
27dd0 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65  ** These routine
27de0 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
27df0 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64  for the mem2.c d
27e00 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20  ebugging memory 
27e10 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c  allocator.** onl
27e20 79 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65  y.  They are use
27e30 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  d to verify that
27e40 20 64 69 66 66 65 72 65 6e 74 20 22 74 79 70 65   different "type
27e50 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20  s" of memory.** 
27e60 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
27e70 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64  properly tracked
27e80 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a   by the system..
27e90 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  **.** sqlite3Mem
27ea0 64 65 62 75 67 53 65 74 54 79 70 65 28 29 20 73  debugSetType() s
27eb0 65 74 73 20 74 68 65 20 22 74 79 70 65 22 20 6f  ets the "type" o
27ec0 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  f an allocation 
27ed0 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65  to one of.** the
27ee0 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f   MEMTYPE_* macro
27ef0 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e  s defined below.
27f00 20 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20    The type must 
27f10 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74  be a bitmask wit
27f20 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69  h.** a single bi
27f30 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  t set..**.** sql
27f40 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
27f50 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72  ype() returns tr
27f60 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65  ue if any of the
27f70 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63   bits in its sec
27f80 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  ond.** argument 
27f90 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73  match the type s
27fa0 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f  et by the previo
27fb0 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  us sqlite3Memdeb
27fc0 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20  ugSetType()..** 
27fd0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
27fe0 61 73 54 79 70 65 28 29 20 69 73 20 69 6e 74 65  asType() is inte
27ff0 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73  nded for use ins
28000 69 64 65 20 61 73 73 65 72 74 28 29 20 73 74 61  ide assert() sta
28010 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73  tements..**.** s
28020 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
28030 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74  Type() returns t
28040 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74  rue if none of t
28050 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73  he bits in its s
28060 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e  econd.** argumen
28070 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65  t match the type
28080 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76   set by the prev
28090 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64  ious sqlite3Memd
280a0 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a  ebugSetType()..*
280b0 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65  *.** Perhaps the
280c0 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20   most important 
280d0 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69 66  point is the dif
280e0 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
280f0 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20  MEMTYPE_HEAP.** 
28100 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b  and MEMTYPE_LOOK
28110 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c  ASIDE.  If an al
28120 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54  location is MEMT
28130 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74  YPE_LOOKASIDE, t
28140 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20  hat means.** it 
28150 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
28160 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f  allocated by loo
28170 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74 20 74  kaside, except t
28180 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61  he allocation wa
28190 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f  s.** too large o
281a0 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20  r lookaside was 
281b0 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49  already full.  I
281c0 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  t is important t
281d0 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74  o verify.** that
281e0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61   allocations tha
281f0 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
28200 6e 20 73 61 74 69 73 66 69 65 64 20 62 79 20 6c  n satisfied by l
28210 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74  ookaside are not
28220 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20  .** passed back 
28230 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65  to non-lookaside
28240 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73   free() routines
28250 2e 20 20 41 73 73 65 72 74 73 20 73 75 63 68 20  .  Asserts such 
28260 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c  as the.** exampl
28270 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63  e above are plac
28280 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f  ed on the non-lo
28290 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72  okaside free() r
282a0 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66  outines to verif
282b0 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72  y.** this constr
282c0 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c  aint. .**.** All
282d0 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f   of this is no-o
282e0 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69  p for a producti
282f0 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e  on build.  It on
28300 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a  ly comes into.**
28310 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53   play when the S
28320 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63  QLITE_MEMDEBUG c
28330 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
28340 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23  on is used..*/.#
28350 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d  ifdef SQLITE_MEM
28360 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
28370 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
28380 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20  ype(void*,u8);. 
28390 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64   int sqlite3Memd
283a0 65 62 75 67 48 61 73 54 79 70 65 28 76 6f 69 64  ebugHasType(void
283b0 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c  *,u8);.  int sql
283c0 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
283d0 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65  pe(void*,u8);.#e
283e0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
283f0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
28400 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d  ype(X,Y)  /* no-
28410 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73  op */.# define s
28420 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
28430 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20  sType(X,Y)  1.# 
28440 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
28450 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59  mdebugNoType(X,Y
28460 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65  )   1.#endif.#de
28470 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41  fine MEMTYPE_HEA
28480 50 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a  P       0x01  /*
28490 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c   General heap al
284a0 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
284b0 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f  fine MEMTYPE_LOO
284c0 4b 41 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a  KASIDE  0x02  /*
284d0 20 48 65 61 70 20 74 68 61 74 20 6d 69 67 68 74   Heap that might
284e0 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61   have been looka
284f0 73 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  side */.#define 
28500 4d 45 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20  MEMTYPE_SCRATCH 
28510 20 20 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61     0x04  /* Scra
28520 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  tch allocations 
28530 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
28540 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78  PE_PCACHE     0x
28550 30 38 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68  08  /* Page cach
28560 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  e allocations */
28570 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e  ../*.** Threadin
28580 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23  g interface.*/.#
28590 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  if SQLITE_MAX_WO
285a0 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69  RKER_THREADS>0.i
285b0 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64  nt sqlite3Thread
285c0 43 72 65 61 74 65 28 53 51 4c 69 74 65 54 68 72  Create(SQLiteThr
285d0 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76  ead**,void*(*)(v
285e0 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e  oid*),void*);.in
285f0 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a  t sqlite3ThreadJ
28600 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64  oin(SQLiteThread
28610 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64  *, void**);.#end
28620 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53  if..#endif /* _S
28630 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a     QLITEINT_H_ */.