/ Hex Artifact Content
Login

Artifact c5d6a3bd2f2514ed08e3b842201b211ad3795d25:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75 73  .** The previous
0540: 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20 77   paragraph was w
0550: 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e 20  ritten in 2005. 
0560: 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70 68   (This paragraph
0570: 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 6f   is written.** o
0580: 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20 54  n 2008-11-28.) T
0590: 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20 4c  hese days, all L
05a0: 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75 70  inux kernels sup
05b0: 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65 73  port large files
05c0: 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f 75  , so.** you shou
05d0: 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61 76  ld probably leav
05e0: 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20 20  e LFS enabled.  
05f0: 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64 65  But some embedde
0600: 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67 68  d platforms migh
0610: 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69 6e  t.** lack LFS in
0620: 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
0630: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0640: 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20 73  FS macro might s
0650: 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e 0a  till be useful..
0660: 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73  **.** Similar is
0670: 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53   true for Mac OS
0680: 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79   X.  LFS is only
0690: 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61   supported on Ma
06a0: 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74  c OS X 9 and lat
06b0: 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  er..*/.#ifndef S
06c0: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46  QLITE_DISABLE_LF
06d0: 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  S.# define _LARG
06e0: 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23  E_FILE       1.#
06f0: 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46   ifndef _FILE_OF
0700: 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65  FSET_BITS.#   de
0710: 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45  fine _FILE_OFFSE
0720: 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69  T_BITS 64.# endi
0730: 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  f.# define _LARG
0740: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23  EFILE_SOURCE 1.#
0750: 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65 65 64 65 64  endif../* Needed
0760: 20 66 6f 72 20 76 61 72 69 6f 75 73 20 64 65 66   for various def
0770: 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20 2a 2f 0a 23  initions... */.#
0780: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55  if defined(__GNU
0790: 43 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  C__) && !defined
07a0: 28 5f 47 4e 55 5f 53 4f 55 52 43 45 29 0a 23 20  (_GNU_SOURCE).# 
07b0: 64 65 66 69 6e 65 20 5f 47 4e 55 5f 53 4f 55 52  define _GNU_SOUR
07c0: 43 45 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  CE.#endif..#if d
07d0: 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44  efined(__OpenBSD
07e0: 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  __) && !defined(
07f0: 5f 42 53 44 5f 53 4f 55 52 43 45 29 0a 23 20 64  _BSD_SOURCE).# d
0800: 65 66 69 6e 65 20 5f 42 53 44 5f 53 4f 55 52 43  efine _BSD_SOURC
0810: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
0820: 46 6f 72 20 4d 69 6e 47 57 2c 20 63 68 65 63 6b  For MinGW, check
0830: 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 63 61   to see if we ca
0840: 6e 20 69 6e 63 6c 75 64 65 20 74 68 65 20 68 65  n include the he
0850: 61 64 65 72 20 66 69 6c 65 20 63 6f 6e 74 61 69  ader file contai
0860: 6e 69 6e 67 20 69 74 73 0a 2a 2a 20 76 65 72 73  ning its.** vers
0870: 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c  ion information,
0880: 20 61 6d 6f 6e 67 20 6f 74 68 65 72 20 74 68 69   among other thi
0890: 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20  ngs.  Normally, 
08a0: 74 68 69 73 20 69 6e 74 65 72 6e 61 6c 20 4d 69  this internal Mi
08b0: 6e 47 57 0a 2a 2a 20 68 65 61 64 65 72 20 66 69  nGW.** header fi
08c0: 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e 6c 79 5d 20  le would [only] 
08d0: 62 65 20 69 6e 63 6c 75 64 65 64 20 61 75 74 6f  be included auto
08e0: 6d 61 74 69 63 61 6c 6c 79 20 62 79 20 6f 74 68  matically by oth
08f0: 65 72 20 4d 69 6e 47 57 20 68 65 61 64 65 72 0a  er MinGW header.
0900: 2a 2a 20 66 69 6c 65 73 3b 20 68 6f 77 65 76 65  ** files; howeve
0910: 72 2c 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 64  r, the contained
0920: 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61   version informa
0930: 74 69 6f 6e 20 69 73 20 6e 6f 77 20 72 65 71 75  tion is now requ
0940: 69 72 65 64 20 62 79 20 74 68 69 73 0a 2a 2a 20  ired by this.** 
0950: 68 65 61 64 65 72 20 66 69 6c 65 20 74 6f 20 77  header file to w
0960: 6f 72 6b 20 61 72 6f 75 6e 64 20 62 69 6e 61 72  ork around binar
0970: 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  y compatibility 
0980: 69 73 73 75 65 73 20 28 73 65 65 20 62 65 6c 6f  issues (see belo
0990: 77 29 20 61 6e 64 0a 2a 2a 20 74 68 69 73 20 69  w) and.** this i
09a0: 73 20 74 68 65 20 6f 6e 6c 79 20 6b 6e 6f 77 6e  s the only known
09b0: 20 77 61 79 20 74 6f 20 72 65 6c 69 61 62 6c 79   way to reliably
09c0: 20 6f 62 74 61 69 6e 20 69 74 2e 20 20 54 68 69   obtain it.  Thi
09d0: 73 20 65 6e 74 69 72 65 20 23 69 66 20 62 6c 6f  s entire #if blo
09e0: 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20 62 65 20 63  ck.** would be c
09f0: 6f 6d 70 6c 65 74 65 6c 79 20 75 6e 6e 65 63 65  ompletely unnece
0a00: 73 73 61 72 79 20 69 66 20 74 68 65 72 65 20 77  ssary if there w
0a10: 61 73 20 61 6e 79 20 6f 74 68 65 72 20 77 61 79  as any other way
0a20: 20 6f 66 20 64 65 74 65 63 74 69 6e 67 0a 2a 2a   of detecting.**
0a30: 20 4d 69 6e 47 57 20 76 69 61 20 74 68 65 69 72   MinGW via their
0a40: 20 70 72 65 70 72 6f 63 65 73 73 6f 72 20 28 65   preprocessor (e
0a50: 2e 67 2e 20 69 66 20 74 68 65 79 20 63 75 73 74  .g. if they cust
0a60: 6f 6d 69 7a 65 64 20 74 68 65 69 72 20 47 43 43  omized their GCC
0a70: 20 74 6f 20 64 65 66 69 6e 65 0a 2a 2a 20 73 6f   to define.** so
0a80: 6d 65 20 4d 69 6e 47 57 2d 73 70 65 63 69 66 69  me MinGW-specifi
0a90: 63 20 6d 61 63 72 6f 73 29 2e 20 20 57 68 65 6e  c macros).  When
0aa0: 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 4d   compiling for M
0ab0: 69 6e 47 57 2c 20 65 69 74 68 65 72 20 74 68 65  inGW, either the
0ac0: 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49 4e 47 57 5f  .** _HAVE_MINGW_
0ad0: 48 20 6f 72 20 5f 48 41 56 45 5f 5f 4d 49 4e 47  H or _HAVE__MING
0ae0: 57 5f 48 20 28 6e 6f 74 65 20 74 68 65 20 65 78  W_H (note the ex
0af0: 74 72 61 20 75 6e 64 65 72 73 63 6f 72 65 29 20  tra underscore) 
0b00: 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 0a 2a 2a  macro must be.**
0b10: 20 64 65 66 69 6e 65 64 3b 20 6f 74 68 65 72 77   defined; otherw
0b20: 69 73 65 2c 20 64 65 74 65 63 74 69 6f 6e 20 6f  ise, detection o
0b30: 66 20 63 6f 6e 64 69 74 69 6f 6e 73 20 73 70 65  f conditions spe
0b40: 63 69 66 69 63 20 74 6f 20 4d 69 6e 47 57 20 77  cific to MinGW w
0b50: 69 6c 6c 20 62 65 0a 2a 2a 20 64 69 73 61 62 6c  ill be.** disabl
0b60: 65 64 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ed..*/.#if defin
0b70: 65 64 28 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48  ed(_HAVE_MINGW_H
0b80: 29 0a 23 20 69 6e 63 6c 75 64 65 20 22 6d 69 6e  ).# include "min
0b90: 67 77 2e 68 22 0a 23 65 6c 69 66 20 64 65 66 69  gw.h".#elif defi
0ba0: 6e 65 64 28 5f 48 41 56 45 5f 5f 4d 49 4e 47 57  ned(_HAVE__MINGW
0bb0: 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20 22 5f  _H).# include "_
0bc0: 6d 69 6e 67 77 2e 68 22 0a 23 65 6e 64 69 66 0a  mingw.h".#endif.
0bd0: 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57  ./*.** For MinGW
0be0: 20 76 65 72 73 69 6f 6e 20 34 2e 78 20 28 61 6e   version 4.x (an
0bf0: 64 20 68 69 67 68 65 72 29 2c 20 63 68 65 63 6b  d higher), check
0c00: 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 5f   to see if the _
0c10: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
0c20: 0a 2a 2a 20 64 65 66 69 6e 65 20 69 73 20 72 65  .** define is re
0c30: 71 75 69 72 65 64 20 74 6f 20 6d 61 69 6e 74 61  quired to mainta
0c40: 69 6e 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74  in binary compat
0c50: 69 62 69 6c 69 74 79 20 77 69 74 68 20 74 68 65  ibility with the
0c60: 20 4d 53 56 43 20 72 75 6e 74 69 6d 65 0a 2a 2a   MSVC runtime.**
0c70: 20 6c 69 62 72 61 72 79 20 69 6e 20 75 73 65 20   library in use 
0c80: 28 65 2e 67 2e 20 66 6f 72 20 57 69 6e 64 6f 77  (e.g. for Window
0c90: 73 20 58 50 29 2e 0a 2a 2f 0a 23 69 66 20 21 64  s XP)..*/.#if !d
0ca0: 65 66 69 6e 65 64 28 5f 55 53 45 5f 33 32 42 49  efined(_USE_32BI
0cb0: 54 5f 54 49 4d 45 5f 54 29 20 26 26 20 21 64 65  T_TIME_T) && !de
0cc0: 66 69 6e 65 64 28 5f 55 53 45 5f 36 34 42 49 54  fined(_USE_64BIT
0cd0: 5f 54 49 4d 45 5f 54 29 20 26 26 20 5c 0a 20 20  _TIME_T) && \.  
0ce0: 20 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32    defined(_WIN32
0cf0: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57  ) && !defined(_W
0d00: 49 4e 36 34 29 20 26 26 20 5c 0a 20 20 20 20 64  IN64) && \.    d
0d10: 65 66 69 6e 65 64 28 5f 5f 4d 49 4e 47 57 5f 4d  efined(__MINGW_M
0d20: 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 29 20 26 26  AJOR_VERSION) &&
0d30: 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56   __MINGW_MAJOR_V
0d40: 45 52 53 49 4f 4e 20 3e 3d 20 34 20 26 26 20 5c  ERSION >= 4 && \
0d50: 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d  .    defined(__M
0d60: 53 56 43 52 54 5f 5f 29 0a 23 20 64 65 66 69 6e  SVCRT__).# defin
0d70: 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49 4d  e _USE_32BIT_TIM
0d80: 45 5f 54 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54  E_T.#endif../* T
0d90: 68 65 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65  he public SQLite
0da0: 20 69 6e 74 65 72 66 61 63 65 2e 20 20 54 68 65   interface.  The
0db0: 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49   _FILE_OFFSET_BI
0dc0: 54 53 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70  TS macro must ap
0dd0: 70 65 61 72 0a 2a 2a 20 66 69 72 73 74 20 69 6e  pear.** first in
0de0: 20 51 4e 58 2e 20 20 41 6c 73 6f 2c 20 74 68 65   QNX.  Also, the
0df0: 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45   _USE_32BIT_TIME
0e00: 5f 54 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70  _T macro must ap
0e10: 70 65 61 72 20 66 69 72 73 74 20 66 6f 72 0a 2a  pear first for.*
0e20: 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a 23 69 6e 63  * MinGW..*/.#inc
0e30: 6c 75 64 65 20 22 73 71 6c 69 74 65 33 2e 68 22  lude "sqlite3.h"
0e40: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0e50: 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  the configuratio
0e60: 6e 20 68 65 61 64 65 72 20 6f 75 74 70 75 74 20  n header output 
0e70: 62 79 20 27 63 6f 6e 66 69 67 75 72 65 27 20 69  by 'configure' i
0e80: 66 20 77 65 27 72 65 20 75 73 69 6e 67 20 74 68  f we're using th
0e90: 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e 66 2d 62 61  e.** autoconf-ba
0ea0: 73 65 64 20 62 75 69 6c 64 0a 2a 2f 0a 23 69 66  sed build.*/.#if
0eb0: 64 65 66 20 5f 48 41 56 45 5f 53 51 4c 49 54 45  def _HAVE_SQLITE
0ec0: 5f 43 4f 4e 46 49 47 5f 48 0a 23 69 6e 63 6c 75  _CONFIG_H.#inclu
0ed0: 64 65 20 22 63 6f 6e 66 69 67 2e 68 22 0a 23 65  de "config.h".#e
0ee0: 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22  ndif..#include "
0ef0: 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a  sqliteLimit.h"..
0f00: 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61  /* Disable nuisa
0f10: 6e 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20  nce warnings on 
0f20: 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72  Borland compiler
0f30: 73 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  s */.#if defined
0f40: 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23  (__BORLANDC__).#
0f50: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68  pragma warn -rch
0f60: 20 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20   /* unreachable 
0f70: 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20  code */.#pragma 
0f80: 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e  warn -ccc /* Con
0f90: 64 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73  dition is always
0fa0: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a   true or false *
0fb0: 2f 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  /.#pragma warn -
0fc0: 61 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20  aus /* Assigned 
0fd0: 76 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75  value is never u
0fe0: 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  sed */.#pragma w
0ff0: 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70  arn -csu /* Comp
1000: 61 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64  aring signed and
1010: 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72   unsigned */.#pr
1020: 61 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f  agma warn -spa /
1030: 2a 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69  * Suspicious poi
1040: 6e 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20  nter arithmetic 
1050: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
1060: 20 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72   Include standar
1070: 64 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61  d header files a
1080: 73 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23  s necessary.*/.#
1090: 69 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e  ifdef HAVE_STDIN
10a0: 54 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  T_H.#include <st
10b0: 64 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23  dint.h>.#endif.#
10c0: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59  ifdef HAVE_INTTY
10d0: 50 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c  PES_H.#include <
10e0: 69 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64  inttypes.h>.#end
10f0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
1100: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61  llowing macros a
1110: 72 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20  re used to cast 
1120: 70 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65  pointers to inte
1130: 67 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65  gers and.** inte
1140: 67 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73  gers to pointers
1150: 2e 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64  .  The way you d
1160: 6f 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72  o this varies fr
1170: 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a  om one compiler.
1180: 2a 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20  ** to the next, 
1190: 73 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c  so we have devel
11a0: 6f 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69  oped the followi
11b0: 6e 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74  ng set of #if st
11c0: 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67  atements.** to g
11d0: 65 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69  enerate appropri
11e0: 61 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61  ate macros for a
11f0: 20 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63   wide range of c
1200: 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20  ompilers..**.** 
1210: 54 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53  The correct "ANS
1220: 49 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69  I" way to do thi
1230: 73 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20  s is to use the 
1240: 69 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 20 0a  intptr_t type. .
1250: 2a 2a 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79  ** Unfortunately
1260: 2c 20 74 68 61 74 20 74 79 70 65 64 65 66 20 69  , that typedef i
1270: 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20  s not available 
1280: 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73  on all compilers
1290: 2c 20 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73  , or.** if it is
12a0: 20 61 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72   available, it r
12b0: 65 71 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c  equires an #incl
12c0: 75 64 65 20 6f 66 20 73 70 65 63 69 66 69 63 20  ude of specific 
12d0: 68 65 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20  headers.** that 
12e0: 76 61 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61  vary from one ma
12f0: 63 68 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78  chine to the nex
1300: 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  t..**.** Ticket 
1310: 23 33 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d  #3860:  The llvm
1320: 2d 67 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65  -gcc-4.2 compile
1330: 72 20 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f  r from Apple cho
1340: 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28  kes on.** the ((
1350: 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30  void*)&((char*)0
1360: 29 5b 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e  )[X]) construct.
1370: 20 20 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65    But MSVC choke
1380: 73 20 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29  s on ((void*)(X)
1390: 29 2e 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65  )..** So we have
13a0: 20 74 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d   to define the m
13b0: 61 63 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65  acros in differe
13c0: 6e 74 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e  nt ways dependin
13d0: 67 20 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  g on the.** comp
13e0: 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  iler..*/.#if def
13f0: 69 6e 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54  ined(__PTRDIFF_T
1400: 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20  YPE__)  /* This 
1410: 63 61 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b  case should work
1420: 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65   for GCC */.# de
1430: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f  fine SQLITE_INT_
1440: 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69  TO_PTR(X)  ((voi
1450: 64 2a 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59  d*)(__PTRDIFF_TY
1460: 50 45 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69  PE__)(X)).# defi
1470: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
1480: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
1490: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
14a0: 29 28 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66  )(X)).#elif !def
14b0: 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20  ined(__GNUC__)  
14c0: 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f       /* Works fo
14d0: 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65  r compilers othe
14e0: 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23  r than LLVM */.#
14f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
1500: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
1510: 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30  void*)&((char*)0
1520: 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53  )[X]).# define S
1530: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
1540: 28 58 29 20 20 28 28 69 6e 74 29 28 28 28 63 68  (X)  ((int)(((ch
1550: 61 72 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29  ar*)X)-(char*)0)
1560: 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28  ).#elif defined(
1570: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20  HAVE_STDINT_H)  
1580: 20 2f 2a 20 55 73 65 20 74 68 69 73 20 63 61 73   /* Use this cas
1590: 65 20 69 66 20 77 65 20 68 61 76 65 20 41 4e 53  e if we have ANS
15a0: 49 20 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64  I headers */.# d
15b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
15c0: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
15d0: 69 64 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58  id*)(intptr_t)(X
15e0: 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  )).# define SQLI
15f0: 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29  TE_PTR_TO_INT(X)
1600: 20 20 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f    ((int)(intptr_
1610: 74 29 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20  t)(X)).#else    
1620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1630: 20 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74        /* Generat
1640: 65 73 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62  es a warning - b
1650: 75 74 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72  ut it always wor
1660: 6b 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  ks */.# define S
1670: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
1680: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29  (X)  ((void*)(X)
1690: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
16a0: 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20  E_PTR_TO_INT(X) 
16b0: 20 28 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64   ((int)(X)).#end
16c0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72  if../*.** A macr
16d0: 6f 20 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65  o to hint to the
16e0: 20 63 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61   compiler that a
16f0: 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64   function should
1700: 20 6e 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e   not be.** inlin
1710: 65 64 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ed..*/.#if defin
1720: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20  ed(__GNUC__).#  
1730: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
1740: 49 4e 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62  INLINE  __attrib
1750: 75 74 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29  ute__((noinline)
1760: 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28  ).#elif defined(
1770: 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53  _MSC_VER) && _MS
1780: 43 5f 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64  C_VER>=1310.#  d
1790: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49  efine SQLITE_NOI
17a0: 4e 4c 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65  NLINE  __declspe
17b0: 63 28 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73  c(noinline).#els
17c0: 65 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  e.#  define SQLI
17d0: 54 45 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64  TE_NOINLINE.#end
17e0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  if../*.** The SQ
17f0: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
1800: 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65  macro must be de
1810: 66 69 6e 65 64 20 61 73 20 30 2c 20 31 2c 20 6f  fined as 0, 1, o
1820: 72 20 32 2e 0a 2a 2a 20 30 20 6d 65 61 6e 73 20  r 2..** 0 means 
1830: 6d 75 74 65 78 65 73 20 61 72 65 20 70 65 72 6d  mutexes are perm
1840: 61 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c 65 20  anently disable 
1850: 61 6e 64 20 74 68 65 20 6c 69 62 72 61 72 79 20  and the library 
1860: 69 73 20 6e 65 76 65 72 0a 2a 2a 20 74 68 72 65  is never.** thre
1870: 61 64 73 61 66 65 2e 20 20 31 20 6d 65 61 6e 73  adsafe.  1 means
1880: 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20   the library is 
1890: 73 65 72 69 61 6c 69 7a 65 64 20 77 68 69 63 68  serialized which
18a0: 20 69 73 20 74 68 65 20 68 69 67 68 65 73 74 0a   is the highest.
18b0: 2a 2a 20 6c 65 76 65 6c 20 6f 66 20 74 68 72 65  ** level of thre
18c0: 61 64 73 61 66 65 74 79 2e 20 20 32 20 6d 65 61  adsafety.  2 mea
18d0: 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79 20 69  ns the library i
18e0: 73 20 6d 75 6c 74 69 74 68 72 65 61 64 65 64 20  s multithreaded 
18f0: 2d 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 74 68  - multiple.** th
1900: 72 65 61 64 73 20 63 61 6e 20 75 73 65 20 53 51  reads can use SQ
1910: 4c 69 74 65 20 61 73 20 6c 6f 6e 67 20 61 73 20  Lite as long as 
1920: 6e 6f 20 74 77 6f 20 74 68 72 65 61 64 73 20 74  no two threads t
1930: 72 79 20 74 6f 20 75 73 65 20 74 68 65 20 73 61  ry to use the sa
1940: 6d 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  me.** database c
1950: 6f 6e 6e 65 63 74 69 6f 6e 20 61 74 20 74 68 65  onnection at the
1960: 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a   same time..**.*
1970: 2a 20 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73  * Older versions
1980: 20 6f 66 20 53 51 4c 69 74 65 20 75 73 65 64 20   of SQLite used 
1990: 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 54 48 52 45  an optional THRE
19a0: 41 44 53 41 46 45 20 6d 61 63 72 6f 2e 0a 2a 2a  ADSAFE macro..**
19b0: 20 57 65 20 73 75 70 70 6f 72 74 20 74 68 61 74   We support that
19c0: 20 66 6f 72 20 6c 65 67 61 63 79 2e 0a 2a 2f 0a   for legacy..*/.
19d0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
19e0: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a  ITE_THREADSAFE).
19f0: 23 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52  # if defined(THR
1a00: 45 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66  EADSAFE).#   def
1a10: 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41  ine SQLITE_THREA
1a20: 44 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45  DSAFE THREADSAFE
1a30: 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69  .# else.#   defi
1a40: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
1a50: 53 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52  SAFE 1 /* IMP: R
1a60: 2d 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a  -07272-22309 */.
1a70: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a  # endif.#endif..
1a80: 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20  /*.** Powersafe 
1a90: 6f 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20  overwrite is on 
1aa0: 62 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74  by default.  But
1ab0: 20 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f   can be turned o
1ac0: 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20  ff using.** the 
1ad0: 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  -DSQLITE_POWERSA
1ae0: 46 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63  FE_OVERWRITE=0 c
1af0: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69  ommand-line opti
1b00: 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  on..*/.#ifndef S
1b10: 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f  QLITE_POWERSAFE_
1b20: 4f 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69  OVERWRITE.# defi
1b30: 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53  ne SQLITE_POWERS
1b40: 41 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a  AFE_OVERWRITE 1.
1b50: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1b60: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
1b70: 5f 4d 45 4d 53 54 41 54 55 53 20 6d 61 63 72 6f  _MEMSTATUS macro
1b80: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
1b90: 20 61 73 20 65 69 74 68 65 72 20 30 20 6f 72 20   as either 0 or 
1ba0: 31 2e 0a 2a 2a 20 49 74 20 64 65 74 65 72 6d 69  1..** It determi
1bb0: 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e  nes whether or n
1bc0: 6f 74 20 74 68 65 20 66 65 61 74 75 72 65 73 20  ot the features 
1bd0: 72 65 6c 61 74 65 64 20 74 6f 20 0a 2a 2a 20 53  related to .** S
1be0: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d  QLITE_CONFIG_MEM
1bf0: 53 54 41 54 55 53 20 61 72 65 20 61 76 61 69 6c  STATUS are avail
1c00: 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74 20  able by default 
1c10: 6f 72 20 6e 6f 74 2e 20 54 68 69 73 20 76 61 6c  or not. This val
1c20: 75 65 20 63 61 6e 0a 2a 2a 20 62 65 20 6f 76 65  ue can.** be ove
1c30: 72 72 69 64 64 65 6e 20 61 74 20 72 75 6e 74 69  rridden at runti
1c40: 6d 65 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c  me using the sql
1c50: 69 74 65 33 5f 63 6f 6e 66 69 67 28 29 20 41 50  ite3_config() AP
1c60: 49 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  I..*/.#if !defin
1c70: 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ed(SQLITE_DEFAUL
1c80: 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a 23 20 64  T_MEMSTATUS).# d
1c90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
1ca0: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 30  AULT_MEMSTATUS 0
1cb0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
1cc0: 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68  xactly one of th
1cd0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1ce0: 6f 73 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e  os must be defin
1cf0: 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ed in order to.*
1d00: 2a 20 73 70 65 63 69 66 79 20 77 68 69 63 68 20  * specify which 
1d10: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
1d20: 6e 20 73 75 62 73 79 73 74 65 6d 20 74 6f 20 75  n subsystem to u
1d30: 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51  se..**.**     SQ
1d40: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
1d50: 4f 43 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  OC          // U
1d60: 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d  se normal system
1d70: 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20   malloc().**    
1d80: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
1d90: 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20 2f  LLOC           /
1da0: 2f 20 55 73 65 20 57 69 6e 33 32 20 6e 61 74 69  / Use Win32 nati
1db0: 76 65 20 68 65 61 70 20 41 50 49 0a 2a 2a 20 20  ve heap API.**  
1dc0: 20 20 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d     SQLITE_ZERO_M
1dd0: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20  ALLOC           
1de0: 20 2f 2f 20 55 73 65 20 61 20 73 74 75 62 20 61   // Use a stub a
1df0: 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74 20 61 6c  llocator that al
1e00: 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20  ways fails.**   
1e10: 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55    SQLITE_MEMDEBU
1e20: 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  G               
1e30: 2f 2f 20 44 65 62 75 67 67 69 6e 67 20 76 65 72  // Debugging ver
1e40: 73 69 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d  sion of system m
1e50: 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e  alloc().**.** On
1e60: 20 57 69 6e 64 6f 77 73 2c 20 69 66 20 74 68 65   Windows, if the
1e70: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
1e80: 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d 61  LLOC_VALIDATE ma
1e90: 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 20 61  cro is defined a
1ea0: 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74  nd the.** assert
1eb0: 28 29 20 6d 61 63 72 6f 20 69 73 20 65 6e 61 62  () macro is enab
1ec0: 6c 65 64 2c 20 65 61 63 68 20 63 61 6c 6c 20 69  led, each call i
1ed0: 6e 74 6f 20 74 68 65 20 57 69 6e 33 32 20 6e 61  nto the Win32 na
1ee0: 74 69 76 65 20 68 65 61 70 20 73 75 62 73 79 73  tive heap subsys
1ef0: 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73  tem.** will caus
1f00: 65 20 48 65 61 70 56 61 6c 69 64 61 74 65 20 74  e HeapValidate t
1f10: 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20 20 49 66  o be called.  If
1f20: 20 68 65 61 70 20 76 61 6c 69 64 61 74 69 6f 6e   heap validation
1f30: 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e   should fail, an
1f40: 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e 20 77 69  .** assertion wi
1f50: 6c 6c 20 62 65 20 74 72 69 67 67 65 72 65 64 2e  ll be triggered.
1f60: 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f  .**.** If none o
1f70: 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20  f the above are 
1f80: 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 73 65  defined, then se
1f90: 74 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  t SQLITE_SYSTEM_
1fa0: 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65  MALLOC as.** the
1fb0: 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66   default..*/.#if
1fc0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1fd0: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c  SYSTEM_MALLOC) \
1fe0: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
1ff0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2000: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2010: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2020: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
2030: 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  d(SQLITE_MEMDEBU
2040: 47 29 3e 31 0a 23 20 65 72 72 6f 72 20 22 54 77  G)>1.# error "Tw
2050: 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65  o or more of the
2060: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69   following compi
2070: 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72  le-time configur
2080: 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20  ation options\. 
2090: 61 72 65 20 64 65 66 69 6e 65 64 20 62 75 74 20  are defined but 
20a0: 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61  at most one is a
20b0: 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45  llowed:\. SQLITE
20c0: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20  _SYSTEM_MALLOC, 
20d0: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
20e0: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44  LOC, SQLITE_MEMD
20f0: 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a  EBUG,\. SQLITE_Z
2100: 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64  ERO_MALLOC".#end
2110: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
2120: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2130: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2140: 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  ed(SQLITE_WIN32_
2150: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2160: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52  fined(SQLITE_ZER
2170: 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  O_MALLOC) \.  + 
2180: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
2190: 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23 20 64 65  EMDEBUG)==0.# de
21a0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 59 53 54  fine SQLITE_SYST
21b0: 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64  EM_MALLOC 1.#end
21c0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c  if../*.** If SQL
21d0: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
21e0: 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65 72  LIMIT is not zer
21f0: 6f 2c 20 74 68 65 6e 20 74 72 79 20 74 6f 20 6b  o, then try to k
2200: 65 65 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73  eep the.** sizes
2210: 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
2220: 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69  ations below thi
2230: 73 20 76 61 6c 75 65 20 77 68 65 72 65 20 70 6f  s value where po
2240: 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21  ssible..*/.#if !
2250: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
2260: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
2270: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
2280: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
2290: 4d 49 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a  MIT 1024.#endif.
22a0: 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74  ./*.** We need t
22b0: 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f  o define _XOPEN_
22c0: 53 4f 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77  SOURCE as follow
22d0: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
22e0: 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76  able.** recursiv
22f0: 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73  e mutexes on mos
2300: 74 20 55 6e 69 78 20 73 79 73 74 65 6d 73 20 61  t Unix systems a
2310: 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f  nd fchmod() on O
2320: 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f  penBSD..** But _
2330: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 64 65 66  XOPEN_SOURCE def
2340: 69 6e 65 20 63 61 75 73 65 73 20 70 72 6f 62 6c  ine causes probl
2350: 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  ems for Mac OS X
2360: 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e  , so omit.** it.
2370: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
2380: 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20  (_XOPEN_SOURCE) 
2390: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 44 41  && !defined(__DA
23a0: 52 57 49 4e 5f 5f 29 20 26 26 20 21 64 65 66 69  RWIN__) && !defi
23b0: 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23  ned(__APPLE__).#
23c0: 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f    define _XOPEN_
23d0: 53 4f 55 52 43 45 20 36 30 30 0a 23 65 6e 64 69  SOURCE 600.#endi
23e0: 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20  f../*.** NDEBUG 
23f0: 61 6e 64 20 53 51 4c 49 54 45 5f 44 45 42 55 47  and SQLITE_DEBUG
2400: 20 61 72 65 20 6f 70 70 6f 73 69 74 65 73 2e 20   are opposites. 
2410: 20 49 74 20 73 68 6f 75 6c 64 20 61 6c 77 61 79   It should alway
2420: 73 20 62 65 20 74 72 75 65 20 74 68 61 74 0a 2a  s be true that.*
2430: 2a 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47  * defined(NDEBUG
2440: 29 3d 3d 21 64 65 66 69 6e 65 64 28 53 51 4c 49  )==!defined(SQLI
2450: 54 45 5f 44 45 42 55 47 29 2e 20 20 49 66 20 74  TE_DEBUG).  If t
2460: 68 69 73 20 69 73 20 6e 6f 74 20 63 75 72 72 65  his is not curre
2470: 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61  ntly true,.** ma
2480: 6b 65 20 69 74 20 74 72 75 65 20 62 79 20 64 65  ke it true by de
2490: 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66 69  fining or undefi
24a0: 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a  ning NDEBUG..**.
24b0: 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45 42 55  ** Setting NDEBU
24c0: 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f 64 65  G makes the code
24d0: 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61 73   smaller and fas
24e0: 74 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67  ter by disabling
24f0: 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29   the.** assert()
2500: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
2510: 68 65 20 63 6f 64 65 2e 20 20 53 6f 20 77 65 20  he code.  So we 
2520: 77 61 6e 74 20 74 68 65 20 64 65 66 61 75 6c 74  want the default
2530: 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65   action.** to be
2540: 20 66 6f 72 20 4e 44 45 42 55 47 20 74 6f 20 62   for NDEBUG to b
2550: 65 20 73 65 74 20 61 6e 64 20 4e 44 45 42 55 47  e set and NDEBUG
2560: 20 74 6f 20 62 65 20 75 6e 64 65 66 69 6e 65 64   to be undefined
2570: 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49 54 45 5f   only if SQLITE_
2580: 44 45 42 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e  DEBUG.** is set.
2590: 20 20 54 68 75 73 20 4e 44 45 42 55 47 20 62 65    Thus NDEBUG be
25a0: 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20  comes an opt-in 
25b0: 72 61 74 68 65 72 20 74 68 61 6e 20 61 6e 20 6f  rather than an o
25c0: 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72  pt-out.** featur
25d0: 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  e..*/.#if !defin
25e0: 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 21 64  ed(NDEBUG) && !d
25f0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
2600: 42 55 47 29 20 0a 23 20 64 65 66 69 6e 65 20 4e  BUG) .# define N
2610: 44 45 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23  DEBUG 1.#endif.#
2620: 69 66 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55  if defined(NDEBU
2630: 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  G) && defined(SQ
2640: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e  LITE_DEBUG).# un
2650: 64 65 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69  def NDEBUG.#endi
2660: 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20  f../*.** Enable 
2670: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
2680: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
2690: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69  f SQLITE_DEBUG i
26a0: 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a  s turned on..*/.
26b0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
26c0: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
26d0: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20  IN_COMMENTS) && 
26e0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
26f0: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53  EBUG).# define S
2700: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
2710: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a  LAIN_COMMENTS 1.
2720: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
2730: 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63  e testcase() mac
2740: 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61 69  ro is used to ai
2750: 64 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65  d in coverage te
2760: 73 74 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a 2a  sting.  When .**
2770: 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20   doing coverage 
2780: 74 65 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e  testing, the con
2790: 64 69 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68  dition inside th
27a0: 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a  e argument to.**
27b0: 20 74 65 73 74 63 61 73 65 28 29 20 6d 75 73 74   testcase() must
27c0: 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f   be evaluated bo
27d0: 74 68 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73  th true and fals
27e0: 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
27f0: 20 67 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68   get full branch
2800: 20 63 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20   coverage.  The 
2810: 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f  testcase() macro
2820: 20 69 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20   is inserted.** 
2830: 74 6f 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61  to help ensure a
2840: 64 65 71 75 61 74 65 20 74 65 73 74 20 63 6f 76  dequate test cov
2850: 65 72 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20  erage in places 
2860: 77 68 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20  where simple.** 
2870: 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69  condition/decisi
2880: 6f 6e 20 63 6f 76 65 72 61 67 65 20 69 73 20 69  on coverage is i
2890: 6e 61 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20  nadequate.  For 
28a0: 65 78 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73  example, testcas
28b0: 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73  e().** can be us
28c0: 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ed to make sure 
28d0: 62 6f 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20  boundary values 
28e0: 61 72 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72  are tested.  For
28f0: 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74  .** bitmask test
2900: 73 2c 20 74 65 73 74 63 61 73 65 28 29 20 63 61  s, testcase() ca
2910: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b  n be used to mak
2920: 65 20 73 75 72 65 20 65 61 63 68 20 62 69 74 0a  e sure each bit.
2930: 2a 2a 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e  ** is significan
2940: 74 20 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65  t and used at le
2950: 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77  ast once.  On sw
2960: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a  itch statements.
2970: 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c  ** where multipl
2980: 65 20 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68  e cases go to th
2990: 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20  e same block of 
29a0: 63 6f 64 65 2c 20 74 65 73 74 63 61 73 65 28 29  code, testcase()
29b0: 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74  .** can insure t
29c0: 68 61 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72  hat all cases ar
29d0: 65 20 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a  e evaluated..**.
29e0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
29f0: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20  _COVERAGE_TEST. 
2a00: 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76   void sqlite3Cov
2a10: 65 72 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65  erage(int);.# de
2a20: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
2a30: 20 20 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74    if( X ){ sqlit
2a40: 65 33 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e  e3Coverage(__LIN
2a50: 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20  E__); }.#else.# 
2a60: 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65 28  define testcase(
2a70: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2a80: 20 54 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61   The TESTONLY ma
2a90: 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65  cro is used to e
2aa0: 6e 63 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20  nclose variable 
2ab0: 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a  declarations or.
2ac0: 2a 2a 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66  ** other bits of
2ad0: 20 63 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e   code that are n
2ae0: 65 65 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74  eeded to support
2af0: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a   the arguments.*
2b00: 2a 20 77 69 74 68 69 6e 20 74 65 73 74 63 61 73  * within testcas
2b10: 65 28 29 20 61 6e 64 20 61 73 73 65 72 74 28 29  e() and assert()
2b20: 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20   macros..*/.#if 
2b30: 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29  !defined(NDEBUG)
2b40: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
2b50: 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54  TE_COVERAGE_TEST
2b60: 29 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f  ).# define TESTO
2b70: 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a  NLY(X)  X.#else.
2b80: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
2b90: 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  Y(X).#endif../*.
2ba0: 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20  ** Sometimes we 
2bb0: 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f  need a small amo
2bc0: 75 6e 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68  unt of code such
2bd0: 20 61 73 20 61 20 76 61 72 69 61 62 6c 65 20 69   as a variable i
2be0: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a  nitialization.**
2bf0: 20 74 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20   to setup for a 
2c00: 6c 61 74 65 72 20 61 73 73 65 72 74 28 29 20 73  later assert() s
2c10: 74 61 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f  tatement.  We do
2c20: 20 6e 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63   not want this c
2c30: 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72  ode to.** appear
2c40: 20 77 68 65 6e 20 61 73 73 65 72 74 28 29 20 69   when assert() i
2c50: 73 20 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65  s disabled.  The
2c60: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
2c70: 20 69 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a   is therefore.**
2c80: 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e   used to contain
2c90: 20 74 68 61 74 20 73 65 74 75 70 20 63 6f 64 65   that setup code
2ca0: 2e 20 20 54 68 65 20 22 56 56 41 22 20 61 63 72  .  The "VVA" acr
2cb0: 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a  onym stands for.
2cc0: 2a 2a 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e  ** "Verification
2cd0: 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e  , Validation, an
2ce0: 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22  d Accreditation"
2cf0: 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
2d00: 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77  s, the.** code w
2d10: 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29  ithin VVA_ONLY()
2d20: 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64   will only run d
2d30: 75 72 69 6e 67 20 76 65 72 69 66 69 63 61 74 69  uring verificati
2d40: 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f  on processes..*/
2d50: 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
2d60: 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c  # define VVA_ONL
2d70: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
2d80: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
2d90: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2da0: 20 54 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20   The ALWAYS and 
2db0: 4e 45 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72  NEVER macros sur
2dc0: 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78  round boolean ex
2dd0: 70 72 65 73 73 69 6f 6e 73 20 77 68 69 63 68 20  pressions which 
2de0: 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64  .** are intended
2df0: 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72   to always be tr
2e00: 75 65 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73  ue or false, res
2e10: 70 65 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68  pectively.  Such
2e20: 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20  .** expressions 
2e30: 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64  could be omitted
2e40: 20 66 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63   from the code c
2e50: 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20  ompletely.  But 
2e60: 74 68 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c  they.** are incl
2e70: 75 64 65 64 20 69 6e 20 61 20 66 65 77 20 63 61  uded in a few ca
2e80: 73 65 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ses in order to 
2e90: 65 6e 68 61 6e 63 65 20 74 68 65 20 72 65 73 69  enhance the resi
2ea0: 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c  lience.** of SQL
2eb0: 69 74 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65  ite to unexpecte
2ec0: 64 20 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20  d behavior - to 
2ed0: 6d 61 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73  make the code "s
2ee0: 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20  elf-healing".** 
2ef0: 6f 72 20 22 64 75 63 74 69 6c 65 22 20 72 61 74  or "ductile" rat
2f00: 68 65 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22  her than being "
2f10: 62 72 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61  brittle" and cra
2f20: 73 68 69 6e 67 20 61 74 20 74 68 65 20 66 69 72  shing at the fir
2f30: 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e  st.** hint of un
2f40: 70 6c 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72  planned behavior
2f50: 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ..**.** In other
2f60: 20 77 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61   words, ALWAYS a
2f70: 6e 64 20 4e 45 56 45 52 20 61 72 65 20 61 64 64  nd NEVER are add
2f80: 65 64 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65  ed for defensive
2f90: 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65   code..**.** Whe
2fa0: 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65  n doing coverage
2fb0: 20 74 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20   testing ALWAYS 
2fc0: 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 68 61  and NEVER are ha
2fd0: 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62  rd-coded to.** b
2fe0: 65 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65  e true and false
2ff0: 20 73 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72   so that the unr
3000: 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68  eachable code th
3010: 65 79 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a  ey specify will.
3020: 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65  ** not be counte
3030: 64 20 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f  d as untested co
3040: 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  de..*/.#if defin
3050: 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41  ed(SQLITE_COVERA
3060: 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e  GE_TEST).# defin
3070: 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20  e ALWAYS(X)     
3080: 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45   (1).# define NE
3090: 56 45 52 28 58 29 20 20 20 20 20 20 20 28 30 29  VER(X)       (0)
30a0: 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
30b0: 4e 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65  NDEBUG).# define
30c0: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
30d0: 28 28 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30  ((X)?1:(assert(0
30e0: 29 2c 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e  ),0)).# define N
30f0: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 28  EVER(X)       ((
3100: 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29  X)?(assert(0),1)
3110: 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  :0).#else.# defi
3120: 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20  ne ALWAYS(X)    
3130: 20 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e    (X).# define N
3140: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 58  EVER(X)       (X
3150: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
3160: 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e  Return true (non
3170: 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e  -zero) if the in
3180: 70 75 74 20 69 73 20 61 6e 20 69 6e 74 65 67 65  put is an intege
3190: 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61  r that is too la
31a0: 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e  rge.** to fit in
31b0: 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20   32-bits.  This 
31c0: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
31d0: 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20  side of various 
31e0: 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61  testcase().** ma
31f0: 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74  cros to verify t
3200: 68 61 74 20 77 65 20 68 61 76 65 20 74 65 73 74  hat we have test
3210: 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61  ed SQLite for la
3220: 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74  rge-file support
3230: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f  ..*/.#define IS_
3240: 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58  BIG_INT(X)  (((X
3250: 29 26 7e 28 69 36 34 29 30 78 66 66 66 66 66 66  )&~(i64)0xffffff
3260: 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54  ff)!=0)../*.** T
3270: 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c  he macro unlikel
3280: 79 28 29 20 69 73 20 61 20 68 69 6e 74 20 74 68  y() is a hint th
3290: 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62  at surrounds a b
32a0: 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73  oolean.** expres
32b0: 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75  sion that is usu
32c0: 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63  ally false.  Mac
32d0: 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72  ro likely() surr
32e0: 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65  ounds.** a boole
32f0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  an expression th
3300: 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72  at is usually tr
3310: 75 65 2e 20 20 54 68 65 73 65 20 68 69 6e 74 73  ue.  These hints
3320: 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68   could,.** in th
3330: 65 6f 72 79 2c 20 62 65 20 75 73 65 64 20 62 79  eory, be used by
3340: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f   the compiler to
3350: 20 67 65 6e 65 72 61 74 65 20 62 65 74 74 65 72   generate better
3360: 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75   code, but.** cu
3370: 72 72 65 6e 74 6c 79 20 74 68 65 79 20 61 72 65  rrently they are
3380: 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66   just comments f
3390: 6f 72 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73  or human readers
33a0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b  ..*/.#define lik
33b0: 65 6c 79 28 58 29 20 20 20 20 28 58 29 0a 23 64  ely(X)    (X).#d
33c0: 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58  efine unlikely(X
33d0: 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65  )  (X)..#include
33e0: 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75   "hash.h".#inclu
33f0: 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e  de "parse.h".#in
3400: 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a  clude <stdio.h>.
3410: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62  #include <stdlib
3420: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
3430: 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  ring.h>.#include
3440: 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63   <assert.h>.#inc
3450: 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a  lude <stddef.h>.
3460: 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c  ./*.** If compil
3470: 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73  ing for a proces
3480: 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66  sor that lacks f
3490: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75  loating point su
34a0: 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69  pport,.** substi
34b0: 74 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72  tute integer for
34c0: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a   floating-point.
34d0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
34e0: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
34f0: 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f  OINT.# define do
3500: 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36  uble sqlite_int6
3510: 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74  4.# define float
3520: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
3530: 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c  define LONGDOUBL
3540: 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e  E_TYPE sqlite_in
3550: 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c  t64.# ifndef SQL
3560: 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20  ITE_BIG_DBL.#   
3570: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
3580: 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33  G_DBL (((sqlite3
3590: 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23  _int64)1)<<50).#
35a0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
35b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45  SQLITE_OMIT_DATE
35c0: 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64  TIME_FUNCS 1.# d
35d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49  efine SQLITE_OMI
35e0: 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65  T_TRACE 1.# unde
35f0: 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45  f SQLITE_MIXED_E
3600: 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41  NDIAN_64BIT_FLOA
3610: 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  T.# undef SQLITE
3620: 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64  _HAVE_ISNAN.#end
3630: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
3640: 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69  E_BIG_DBL.# defi
3650: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ne SQLITE_BIG_DB
3660: 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a  L (1e99).#endif.
3670: 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50  ./*.** OMIT_TEMP
3680: 44 42 20 69 73 20 73 65 74 20 74 6f 20 31 20 69  DB is set to 1 i
3690: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45  f SQLITE_OMIT_TE
36a0: 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c  MPDB is defined,
36b0: 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61   or 0.** afterwa
36c0: 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20  rd. Having this 
36d0: 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20  macro allows us 
36e0: 74 6f 20 63 61 75 73 65 20 74 68 65 20 43 20 63  to cause the C c
36f0: 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20 74 6f 20 6f  ompiler .** to o
3700: 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20 62 79  mit code used by
3710: 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74   TEMP tables wit
3720: 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64  hout messy #ifnd
3730: 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  ef statements..*
3740: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
3750: 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66  OMIT_TEMPDB.#def
3760: 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ine OMIT_TEMPDB 
3770: 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  1.#else.#define 
3780: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65  OMIT_TEMPDB 0.#e
3790: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
37a0: 22 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75  "file format" nu
37b0: 6d 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67  mber is an integ
37c0: 65 72 20 74 68 61 74 20 69 73 20 69 6e 63 72 65  er that is incre
37d0: 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a  mented whenever.
37e0: 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65  ** the VDBE-leve
37f0: 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68  l file format ch
3800: 61 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c  anges.  The foll
3810: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66  owing macros def
3820: 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64  ine the.** the d
3830: 65 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d  efault file form
3840: 61 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62  at for new datab
3850: 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78  ases and the max
3860: 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74  imum file format
3870: 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62  .** that the lib
3880: 72 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a  rary can read..*
3890: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
38a0: 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  _MAX_FILE_FORMAT
38b0: 20 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54   4.#ifndef SQLIT
38c0: 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46  E_DEFAULT_FILE_F
38d0: 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53  ORMAT.# define S
38e0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49  QLITE_DEFAULT_FI
38f0: 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64  LE_FORMAT 4.#end
3900: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d  if../*.** Determ
3910: 69 6e 65 20 77 68 65 74 68 65 72 20 74 72 69 67  ine whether trig
3920: 67 65 72 73 20 61 72 65 20 72 65 63 75 72 73 69  gers are recursi
3930: 76 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  ve by default.  
3940: 54 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63  This can be.** c
3950: 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69  hanged at run-ti
3960: 6d 65 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d  me using a pragm
3970: 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  a..*/.#ifndef SQ
3980: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43  LITE_DEFAULT_REC
3990: 55 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a  URSIVE_TRIGGERS.
39a0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
39b0: 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56  DEFAULT_RECURSIV
39c0: 45 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e  E_TRIGGERS 0.#en
39d0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69  dif../*.** Provi
39e0: 64 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c  de a default val
39f0: 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45  ue for SQLITE_TE
3a00: 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65  MP_STORE in case
3a10: 20 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69   it is not speci
3a20: 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63  fied.** on the c
3a30: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23  ommand-line.*/.#
3a40: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45  ifndef SQLITE_TE
3a50: 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e  MP_STORE.# defin
3a60: 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  e SQLITE_TEMP_ST
3a70: 4f 52 45 20 31 0a 23 20 64 65 66 69 6e 65 20 53  ORE 1.# define S
3a80: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
3a90: 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64  _xc 1  /* Exclud
3aa0: 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a  e from ctime.c *
3ab0: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
3ac0: 49 66 20 6e 6f 20 76 61 6c 75 65 20 68 61 73 20  If no value has 
3ad0: 62 65 65 6e 20 70 72 6f 76 69 64 65 64 20 66 6f  been provided fo
3ae0: 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  r SQLITE_MAX_WOR
3af0: 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 6f 72 20  KER_THREADS, or 
3b00: 69 66 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45 4d  if.** SQLITE_TEM
3b10: 50 5f 53 54 4f 52 45 20 69 73 20 73 65 74 20 74  P_STORE is set t
3b20: 6f 20 33 20 28 6e 65 76 65 72 20 75 73 65 20 74  o 3 (never use t
3b30: 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 29 2c  emporary files),
3b40: 20 73 65 74 20 69 74 20 0a 2a 2a 20 74 6f 20 7a   set it .** to z
3b50: 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  ero..*/.#if SQLI
3b60: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33  TE_TEMP_STORE==3
3b70: 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48 52 45 41   || SQLITE_THREA
3b80: 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e 64 65 66  DSAFE==0.# undef
3b90: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
3ba0: 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66  ER_THREADS.# def
3bb0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  ine SQLITE_MAX_W
3bc0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a  ORKER_THREADS 0.
3bd0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
3be0: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
3bf0: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
3c00: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  e SQLITE_MAX_WOR
3c10: 4b 45 52 5f 54 48 52 45 41 44 53 20 38 0a 23 65  KER_THREADS 8.#e
3c20: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
3c30: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
3c40: 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66  ER_THREADS.# def
3c50: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
3c60: 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  LT_WORKER_THREAD
3c70: 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 53  S 0.#endif.#if S
3c80: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
3c90: 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 53 51 4c  RKER_THREADS>SQL
3ca0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
3cb0: 48 52 45 41 44 53 0a 23 20 75 6e 64 65 66 20 53  HREADS.# undef S
3cc0: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
3cd0: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
3ce0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  e SQLITE_MAX_WOR
3cf0: 4b 45 52 5f 54 48 52 45 41 44 53 20 53 51 4c 49  KER_THREADS SQLI
3d00: 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45  TE_DEFAULT_WORKE
3d10: 52 5f 54 48 52 45 41 44 53 0a 23 65 6e 64 69 66  R_THREADS.#endif
3d20: 0a 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65  .../*.** GCC doe
3d30: 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65  s not define the
3d40: 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72   offsetof() macr
3d50: 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20  o so we'll have 
3d60: 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73  to do it.** ours
3d70: 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65  elves..*/.#ifnde
3d80: 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69  f offsetof.#defi
3d90: 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55  ne offsetof(STRU
3da0: 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69  CTURE,FIELD) ((i
3db0: 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54  nt)((char*)&((ST
3dc0: 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45  RUCTURE*)0)->FIE
3dd0: 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  LD)).#endif../*.
3de0: 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d  ** Macros to com
3df0: 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64  pute minimum and
3e00: 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20   maximum of two 
3e10: 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64 65 66  numbers..*/.#def
3e20: 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41  ine MIN(A,B) ((A
3e30: 29 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23  )<(B)?(A):(B)).#
3e40: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
3e50: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
3e60: 29 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20 74 77  )../*.** Swap tw
3e70: 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 79 70  o objects of typ
3e80: 65 20 54 59 50 45 2e 0a 2a 2f 0a 23 64 65 66 69  e TYPE..*/.#defi
3e90: 6e 65 20 53 57 41 50 28 54 59 50 45 2c 41 2c 42  ne SWAP(TYPE,A,B
3ea0: 29 20 7b 54 59 50 45 20 74 3d 41 3b 20 41 3d 42  ) {TYPE t=A; A=B
3eb0: 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43  ; B=t;}../*.** C
3ec0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
3ed0: 68 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73  his machine uses
3ee0: 20 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20   EBCDIC.  (Yes, 
3ef0: 62 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a  believe it or.**
3f00: 20 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20   not, there are 
3f10: 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f  still machines o
3f20: 75 74 20 74 68 65 72 65 20 74 68 61 74 20 75 73  ut there that us
3f30: 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69  e EBCDIC.).*/.#i
3f40: 66 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a  f 'A' == '\301'.
3f50: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3f60: 45 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23  EBCDIC 1.#else.#
3f70: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41   define SQLITE_A
3f80: 53 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  SCII 1.#endif../
3f90: 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66  *.** Integers of
3fa0: 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54   known sizes.  T
3fb0: 68 65 73 65 20 74 79 70 65 64 65 66 73 20 6d 69  hese typedefs mi
3fc0: 67 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61  ght change for a
3fd0: 72 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20  rchitectures.** 
3fe0: 77 68 65 72 65 20 74 68 65 20 73 69 7a 65 73 20  where the sizes 
3ff0: 76 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73  very.  Preproces
4000: 73 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61  sor macros are a
4010: 76 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74  vailable so that
4020: 20 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61   the.** types ca
4030: 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c  n be convenientl
4040: 79 20 72 65 64 65 66 69 6e 65 64 20 61 74 20 63  y redefined at c
4050: 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69  ompile-type.  Li
4060: 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20  ke this:.**.**  
4070: 20 20 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e         cc '-DUIN
4080: 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c  TPTR_TYPE=long l
4090: 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a  ong int' ....*/.
40a0: 23 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54  #ifndef UINT32_T
40b0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
40c0: 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66  _UINT32_T.#  def
40d0: 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20  ine UINT32_TYPE 
40e0: 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a  uint32_t.# else.
40f0: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32  #  define UINT32
4100: 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69  _TYPE unsigned i
4110: 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  nt.# endif.#endi
4120: 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36  f.#ifndef UINT16
4130: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
4140: 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64  VE_UINT16_T.#  d
4150: 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50  efine UINT16_TYP
4160: 45 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73  E uint16_t.# els
4170: 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  e.#  define UINT
4180: 31 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  16_TYPE unsigned
4190: 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64   short int.# end
41a0: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
41b0: 66 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69  f INT16_TYPE.# i
41c0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f  fdef HAVE_INT16_
41d0: 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31  T.#  define INT1
41e0: 36 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23  6_TYPE int16_t.#
41f0: 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20   else.#  define 
4200: 49 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74  INT16_TYPE short
4210: 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e   int.# endif.#en
4220: 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54  dif.#ifndef UINT
4230: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
4240: 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64  AVE_UINT8_T.#  d
4250: 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45  efine UINT8_TYPE
4260: 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a   uint8_t.# else.
4270: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f  #  define UINT8_
4280: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68  TYPE unsigned ch
4290: 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  ar.# endif.#endi
42a0: 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54  f.#ifndef INT8_T
42b0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
42c0: 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e  _INT8_T.#  defin
42d0: 65 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38  e INT8_TYPE int8
42e0: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
42f0: 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69  ine INT8_TYPE si
4300: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
4310: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
4320: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
4330: 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f  .# define LONGDO
4340: 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64  UBLE_TYPE long d
4350: 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70  ouble.#endif.typ
4360: 65 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36  edef sqlite_int6
4370: 34 20 69 36 34 3b 20 20 20 20 20 20 20 20 20 20  4 i64;          
4380: 2f 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64  /* 8-byte signed
4390: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
43a0: 64 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36  def sqlite_uint6
43b0: 34 20 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f  4 u64;         /
43c0: 2a 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 8-byte unsigne
43d0: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
43e0: 65 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45  edef UINT32_TYPE
43f0: 20 75 33 32 3b 20 20 20 20 20 20 20 20 20 20 20   u32;           
4400: 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 4-byte unsign
4410: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
4420: 70 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50  pedef UINT16_TYP
4430: 45 20 75 31 36 3b 20 20 20 20 20 20 20 20 20 20  E u16;          
4440: 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67   /* 2-byte unsig
4450: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
4460: 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50  ypedef INT16_TYP
4470: 45 20 69 31 36 3b 20 20 20 20 20 20 20 20 20 20  E i16;          
4480: 20 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e    /* 2-byte sign
4490: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
44a0: 70 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45  pedef UINT8_TYPE
44b0: 20 75 38 3b 20 20 20 20 20 20 20 20 20 20 20 20   u8;            
44c0: 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67   /* 1-byte unsig
44d0: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
44e0: 79 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45  ypedef INT8_TYPE
44f0: 20 69 38 3b 20 20 20 20 20 20 20 20 20 20 20 20   i8;            
4500: 20 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e    /* 1-byte sign
4510: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f  ed integer */../
4520: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f  *.** SQLITE_MAX_
4530: 55 33 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e  U32 is a u64 con
4540: 73 74 61 6e 74 20 74 68 61 74 20 69 73 20 74 68  stant that is th
4550: 65 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61  e maximum u64 va
4560: 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20  lue.** that can 
4570: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75  be stored in a u
4580: 33 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20  32 without loss 
4590: 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 76 61  of data.  The va
45a0: 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30  lue.** is 0x0000
45b0: 30 30 30 30 66 66 66 66 66 66 66 66 2e 20 20 42  0000ffffffff.  B
45c0: 75 74 20 62 65 63 61 75 73 65 20 6f 66 20 71 75  ut because of qu
45d0: 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d  irks of some com
45e0: 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61  pilers, we.** ha
45f0: 76 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68  ve to specify th
4600: 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c  e value in the l
4610: 65 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61  ess intuitive ma
4620: 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23  nner shown:.*/.#
4630: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
4640: 58 5f 55 33 32 20 20 28 28 28 28 75 36 34 29 31  X_U32  ((((u64)1
4650: 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a  )<<32)-1)../*.**
4660: 20 54 68 65 20 64 61 74 61 74 79 70 65 20 75 73   The datatype us
4670: 65 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69  ed to store esti
4680: 6d 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d  mates of the num
4690: 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61  ber of rows in a
46a0: 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
46b0: 65 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20  ex.  This is an 
46c0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
46d0: 20 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39   type.  For 99.9
46e0: 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c  % of.** the worl
46f0: 64 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65  d, a 32-bit inte
4700: 67 65 72 20 69 73 20 73 75 66 66 69 63 69 65 6e  ger is sufficien
4710: 74 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69 74  t.  But a 64-bit
4720: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20   integer.** can 
4730: 62 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69  be used at compi
4740: 6c 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72  le-time if desir
4750: 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ed..*/.#ifdef SQ
4760: 4c 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53  LITE_64BIT_STATS
4770: 0a 20 74 79 70 65 64 65 66 20 75 36 34 20 74 52  . typedef u64 tR
4780: 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d  owcnt;    /* 64-
4790: 62 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75  bit only if requ
47a0: 65 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65  ested at compile
47b0: 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20  -time */.#else. 
47c0: 74 79 70 65 64 65 66 20 75 33 32 20 74 52 6f 77  typedef u32 tRow
47d0: 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69  cnt;    /* 32-bi
47e0: 74 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74  t is the default
47f0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
4800: 2a 20 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e  * Estimated quan
4810: 74 69 74 69 65 73 20 75 73 65 64 20 66 6f 72 20  tities used for 
4820: 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61  query planning a
4830: 72 65 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d  re stored as 16-
4840: 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d  bit.** logarithm
4850: 73 2e 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79  s.  For quantity
4860: 20 58 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74   X, the value st
4870: 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28  ored is 10*log2(
4880: 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76  X).  This.** giv
4890: 65 73 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61  es a possible ra
48a0: 6e 67 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66  nge of values of
48b0: 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31   approximately 1
48c0: 2e 30 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36  .0e986 to 1e-986
48d0: 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c  ..** But the all
48e0: 6f 77 65 64 20 76 61 6c 75 65 73 20 61 72 65 20  owed values are 
48f0: 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65  "grainy".  Not e
4900: 76 65 72 79 20 76 61 6c 75 65 20 69 73 20 72 65  very value is re
4910: 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20  presentable..** 
4920: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61  For example, qua
4930: 6e 74 69 74 69 65 73 20 31 36 20 61 6e 64 20 31  ntities 16 and 1
4940: 37 20 61 72 65 20 62 6f 74 68 20 72 65 70 72 65  7 are both repre
4950: 73 65 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45  sented by a LogE
4960: 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f  st.** of 40.  Ho
4970: 77 65 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67  wever, since Log
4980: 45 73 74 20 71 75 61 6e 74 61 74 69 65 73 20 61  Est quantaties a
4990: 72 65 20 73 75 70 70 6f 73 65 20 74 6f 20 62 65  re suppose to be
49a0: 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e   estimates,.** n
49b0: 6f 74 20 65 78 61 63 74 20 76 61 6c 75 65 73 2c  ot exact values,
49c0: 20 74 68 69 73 20 69 6d 70 72 65 63 69 73 69 6f   this imprecisio
49d0: 6e 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c  n is not a probl
49e0: 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73  em..**.** "LogEs
49f0: 74 22 20 69 73 20 73 68 6f 72 74 20 66 6f 72 20  t" is short for 
4a00: 22 4c 6f 67 61 72 69 74 68 6d 69 63 20 45 73 74  "Logarithmic Est
4a10: 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78  imate"..**.** Ex
4a20: 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20  amples:.**      
4a30: 31 20 2d 3e 20 30 20 20 20 20 20 20 20 20 20 20  1 -> 0          
4a40: 20 20 20 20 32 30 20 2d 3e 20 34 33 20 20 20 20      20 -> 43    
4a50: 20 20 20 20 20 20 31 30 30 30 30 20 2d 3e 20 31        10000 -> 1
4a60: 33 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20  32.**      2 -> 
4a70: 31 30 20 20 20 20 20 20 20 20 20 20 20 20 20 32  10             2
4a80: 35 20 2d 3e 20 34 36 20 20 20 20 20 20 20 20 20  5 -> 46         
4a90: 20 32 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a   25000 -> 146.**
4aa0: 20 20 20 20 20 20 33 20 2d 3e 20 31 36 20 20 20        3 -> 16   
4ab0: 20 20 20 20 20 20 20 20 20 31 30 30 20 2d 3e 20           100 -> 
4ac0: 36 36 20 20 20 20 20 20 20 20 31 30 30 30 30 30  66        100000
4ad0: 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20  0 -> 199.**     
4ae0: 20 34 20 2d 3e 20 32 30 20 20 20 20 20 20 20 20   4 -> 20        
4af0: 20 20 20 31 30 30 30 20 2d 3e 20 39 39 20 20 20     1000 -> 99   
4b00: 20 20 20 20 20 31 30 34 38 35 37 36 20 2d 3e 20       1048576 -> 
4b10: 32 30 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e  200.**     10 ->
4b20: 20 33 33 20 20 20 20 20 20 20 20 20 20 20 31 30   33           10
4b30: 32 34 20 2d 3e 20 31 30 30 20 20 20 20 34 32 39  24 -> 100    429
4b40: 34 39 36 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a  4967296 -> 320.*
4b50: 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74 20  *.** The LogEst 
4b60: 63 61 6e 20 62 65 20 6e 65 67 61 74 69 76 65 20  can be negative 
4b70: 74 6f 20 69 6e 64 69 63 61 74 65 20 66 72 61 63  to indicate frac
4b80: 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 20 0a  tional values. .
4b90: 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a  ** Examples:.**.
4ba0: 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30  **    0.5 -> -10
4bb0: 20 20 20 20 20 20 20 20 20 20 20 30 2e 31 20 2d             0.1 -
4bc0: 3e 20 2d 33 33 20 20 20 20 20 20 20 20 30 2e 30  > -33        0.0
4bd0: 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79  625 -> -40.*/.ty
4be0: 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  pedef INT16_TYPE
4bf0: 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20   LogEst;../*.** 
4c00: 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d  Macros to determ
4c10: 69 6e 65 20 77 68 65 74 68 65 72 20 74 68 65 20  ine whether the 
4c20: 6d 61 63 68 69 6e 65 20 69 73 20 62 69 67 20 6f  machine is big o
4c30: 72 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c  r little endian,
4c40: 0a 2a 2a 20 61 6e 64 20 77 68 65 74 68 65 72 20  .** and whether 
4c50: 6f 72 20 6e 6f 74 20 74 68 61 74 20 64 65 74 65  or not that dete
4c60: 72 6d 69 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e  rmination is run
4c70: 2d 74 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65  -time or compile
4c80: 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72  -time..**.** For
4c90: 20 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63   best performanc
4ca0: 65 2c 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73  e, an attempt is
4cb0: 20 6d 61 64 65 20 74 6f 20 67 75 65 73 73 20 61   made to guess a
4cc0: 74 20 74 68 65 20 62 79 74 65 2d 6f 72 64 65 72  t the byte-order
4cd0: 0a 2a 2a 20 75 73 69 6e 67 20 43 2d 70 72 65 70  .** using C-prep
4ce0: 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e  rocessor macros.
4cf0: 20 20 49 66 20 74 68 61 74 20 69 73 20 75 6e 73    If that is uns
4d00: 75 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 69 66  uccessful, or if
4d10: 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 52 55 4e  .** -DSQLITE_RUN
4d20: 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 3d 31  TIME_BYTEORDER=1
4d30: 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 62 79   is set, then by
4d40: 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65 74 65  te-order is dete
4d50: 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75 6e  rmined.** at run
4d60: 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  -time..*/.#ifdef
4d70: 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
4d80: 54 49 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73  TION.const int s
4d90: 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23  qlite3one = 1;.#
4da0: 65 6c 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73  else.extern cons
4db0: 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65  t int sqlite3one
4dc0: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 28 64 65  ;.#endif.#if (de
4dd0: 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20  fined(i386)     
4de0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
4df0: 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  6__)   || define
4e00: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
4e10: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
4e20: 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64 65 66  __x86_64) || def
4e30: 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29  ined(__x86_64__)
4e40: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58   || defined(_M_X
4e50: 36 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20  64)  ||    \.   
4e60: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44    defined(_M_AMD
4e70: 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  64) || defined(_
4e80: 4d 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20 64 65  M_ARM)     || de
4e90: 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c  fined(__x86)   |
4ea0: 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69  |    \.     defi
4eb0: 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 29 20 26 26  ned(__arm__)) &&
4ec0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
4ed0: 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44  _RUNTIME_BYTEORD
4ee0: 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ER).# define SQL
4ef0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20  ITE_BYTEORDER   
4f00: 20 31 32 33 34 0a 23 20 64 65 66 69 6e 65 20 53   1234.# define S
4f10: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
4f20: 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51     0.# define SQ
4f30: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
4f40: 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  N 1.# define SQL
4f50: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
4f60: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a   SQLITE_UTF16LE.
4f70: 23 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69  #endif.#if (defi
4f80: 6e 65 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c  ned(sparc)    ||
4f90: 20 64 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f   defined(__ppc__
4fa0: 29 29 20 20 5c 0a 20 20 20 20 26 26 20 21 64 65  ))  \.    && !de
4fb0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 52 55 4e  fined(SQLITE_RUN
4fc0: 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 29 0a  TIME_BYTEORDER).
4fd0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4fe0: 42 59 54 45 4f 52 44 45 52 20 20 20 20 34 33 32  BYTEORDER    432
4ff0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
5000: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31  E_BIGENDIAN    1
5010: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5020: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a  _LITTLEENDIAN 0.
5030: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5040: 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c  UTF16NATIVE  SQL
5050: 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6e 64  ITE_UTF16BE.#end
5060: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
5070: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
5080: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
5090: 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 30  E_BYTEORDER    0
50a0: 20 20 20 20 20 2f 2a 20 30 20 6d 65 61 6e 73 20       /* 0 means 
50b0: 22 75 6e 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d 70  "unknown at comp
50c0: 69 6c 65 2d 74 69 6d 65 22 20 2a 2f 0a 23 20 64  ile-time" */.# d
50d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
50e0: 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61  ENDIAN    (*(cha
50f0: 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65  r *)(&sqlite3one
5100: 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53  )==0).# define S
5110: 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49  QLITE_LITTLEENDI
5120: 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73  AN (*(char *)(&s
5130: 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23  qlite3one)==1).#
5140: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55   define SQLITE_U
5150: 54 46 31 36 4e 41 54 49 56 45 20 20 28 53 51 4c  TF16NATIVE  (SQL
5160: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51  ITE_BIGENDIAN?SQ
5170: 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c  LITE_UTF16BE:SQL
5180: 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e  ITE_UTF16LE).#en
5190: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74  dif../*.** Const
51a0: 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72  ants for the lar
51b0: 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73  gest and smalles
51c0: 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69  t possible 64-bi
51d0: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
51e0: 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  s..** These macr
51f0: 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20  os are designed 
5200: 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c  to work correctl
5210: 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74  y on both 32-bit
5220: 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63   and 64-bit.** c
5230: 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65  ompilers..*/.#de
5240: 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54  fine LARGEST_INT
5250: 36 34 20 20 28 30 78 66 66 66 66 66 66 66 66 7c  64  (0xffffffff|
5260: 28 28 28 69 36 34 29 30 78 37 66 66 66 66 66 66  (((i64)0x7ffffff
5270: 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65  f)<<32)).#define
5280: 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20   SMALLEST_INT64 
5290: 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52  (((i64)-1) - LAR
52a0: 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20  GEST_INT64)../* 
52b0: 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e  .** Round up a n
52c0: 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78  umber to the nex
52d0: 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c  t larger multipl
52e0: 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73  e of 8.  This is
52f0: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63   used.** to forc
5300: 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  e 8-byte alignme
5310: 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63  nt on 64-bit arc
5320: 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23  hitectures..*/.#
5330: 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29  define ROUND8(x)
5340: 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37       (((x)+7)&~7
5350: 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64  )../*.** Round d
5360: 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65  own to the neare
5370: 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  st multiple of 8
5380: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
5390: 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e  DDOWN8(x) ((x)&~
53a0: 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74  7)../*.** Assert
53b0: 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65   that the pointe
53c0: 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74  r X is aligned t
53d0: 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e  o an 8-byte boun
53e0: 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d  dary.  This.** m
53f0: 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c  acro is used onl
5400: 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74 28  y within assert(
5410: 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  ) to verify that
5420: 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a   the code gets.*
5430: 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20  * all alignment 
5440: 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72  restrictions cor
5450: 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65  rect..**.** Exce
5460: 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f  pt, if SQLITE_4_
5470: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
5480: 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20  LOC is defined, 
5490: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65  then the.** unde
54a0: 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20  rlying malloc() 
54b0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d  implementation m
54c0: 69 67 68 74 20 72 65 74 75 72 6e 20 75 73 20 34  ight return us 4
54d0: 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a  -byte aligned.**
54e0: 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74   pointers.  In t
54f0: 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76  hat case, only v
5500: 65 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69  erify 4-byte ali
5510: 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65  gnment..*/.#ifde
5520: 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f  f SQLITE_4_BYTE_
5530: 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23  ALIGNED_MALLOC.#
5540: 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59   define EIGHT_BY
5550: 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20  TE_ALIGNMENT(X) 
5560: 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20    ((((char*)(X) 
5570: 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d  - (char*)0)&3)==
5580: 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
5590: 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49  e EIGHT_BYTE_ALI
55a0: 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28  GNMENT(X)   ((((
55b0: 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61  char*)(X) - (cha
55c0: 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e  r*)0)&7)==0).#en
55d0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62  dif../*.** Disab
55e0: 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66  le MMAP on platf
55f0: 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20 69 73  orms where it is
5600: 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f   known to not wo
5610: 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  rk.*/.#if define
5620: 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c  d(__OpenBSD__) |
5630: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e  | defined(__QNXN
5640: 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51  TO__).# undef SQ
5650: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
5660: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
5670: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
5680: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
5690: 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d   Default maximum
56a0: 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20   size of memory 
56b0: 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d  used by memory-m
56c0: 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65  apped I/O in the
56d0: 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f   VFS.*/.#ifdef _
56e0: 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75  _APPLE__.# inclu
56f0: 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74  de <TargetCondit
5700: 69 6f 6e 61 6c 73 2e 68 3e 0a 23 20 69 66 20 54  ionals.h>.# if T
5710: 41 52 47 45 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a  ARGET_OS_IPHONE.
5720: 23 20 20 20 75 6e 64 65 66 20 53 51 4c 49 54 45  #   undef SQLITE
5730: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
5740: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
5750: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
5760: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5770: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  #ifndef SQLITE_M
5780: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69  AX_MMAP_SIZE.# i
5790: 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75  f defined(__linu
57a0: 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69  x__) \.  || defi
57b0: 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20  ned(_WIN32) \.  
57c0: 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41 50  || (defined(__AP
57d0: 50 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e 65  PLE__) && define
57e0: 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20  d(__MACH__)) \. 
57f0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 75   || defined(__su
5800: 6e 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  n).#   define SQ
5810: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
5820: 5a 45 20 30 78 37 66 66 66 30 30 30 30 20 20 2f  ZE 0x7fff0000  /
5830: 2a 20 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a  * 2147418112 */.
5840: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
5850: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
5860: 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66  P_SIZE 0.# endif
5870: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5880: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78  _MAX_MMAP_SIZE_x
5890: 63 20 31 20 2f 2a 20 65 78 63 6c 75 64 65 20 66  c 1 /* exclude f
58a0: 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23  rom ctime.c */.#
58b0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
58c0: 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49   default MMAP_SI
58d0: 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c  ZE is zero on al
58e0: 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72  l platforms.  Or
58f0: 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67  , even if a larg
5900: 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d  er.** default MM
5910: 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69  AP_SIZE is speci
5920: 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  fied at compile-
5930: 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  time, make sure 
5940: 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20  that it does.** 
5950: 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d  not exceed the m
5960: 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65  aximum mmap size
5970: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
5980: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
5990: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
59a0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
59b0: 41 50 5f 53 49 5a 45 20 30 0a 23 20 64 65 66 69  AP_SIZE 0.# defi
59c0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
59d0: 54 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31  T_MMAP_SIZE_xc 1
59e0: 20 20 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f    /* Exclude fro
59f0: 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e  m ctime.c */.#en
5a00: 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44  dif.#if SQLITE_D
5a10: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
5a20: 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50  >SQLITE_MAX_MMAP
5a30: 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51  _SIZE.# undef SQ
5a40: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
5a50: 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20  P_SIZE.# define 
5a60: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
5a70: 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f  MAP_SIZE SQLITE_
5a80: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65  MAX_MMAP_SIZE.#e
5a90: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79  ndif../*.** Only
5aa0: 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 45   one of SQLITE_E
5ab0: 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f 72 20 53  NABLE_STAT3 or S
5ac0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5ad0: 54 34 20 63 61 6e 20 62 65 20 64 65 66 69 6e 65  T4 can be define
5ae0: 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20 69  d..** Priority i
5af0: 73 20 67 69 76 65 6e 20 74 6f 20 53 51 4c 49 54  s given to SQLIT
5b00: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20  E_ENABLE_STAT4. 
5b10: 20 49 66 20 65 69 74 68 65 72 20 61 72 65 20 64   If either are d
5b20: 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20  efined, also.** 
5b30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
5b40: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
5b50: 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  AT4.*/.#ifdef SQ
5b60: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
5b70: 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  4.# undef SQLITE
5b80: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20  _ENABLE_STAT3.# 
5b90: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
5ba0: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
5bb0: 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49  AT4 1.#elif SQLI
5bc0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a  TE_ENABLE_STAT3.
5bd0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5be0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
5bf0: 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51  STAT4 1.#elif SQ
5c00: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
5c10: 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e 64  3_OR_STAT4.# und
5c20: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
5c30: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
5c40: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45  #endif../*.** SE
5c50: 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
5c60: 44 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72  D will be either
5c70: 20 31 20 6f 72 20 30 20 64 65 70 65 6e 64 69 6e   1 or 0 dependin
5c80: 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20  g on whether or 
5c90: 6e 6f 74 0a 2a 2a 20 74 68 65 20 53 65 6c 65 63  not.** the Selec
5ca0: 74 20 71 75 65 72 79 20 67 65 6e 65 72 61 74 6f  t query generato
5cb0: 72 20 74 72 61 63 69 6e 67 20 6c 6f 67 69 63 20  r tracing logic 
5cc0: 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f  is turned on..*/
5cd0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
5ce0: 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
5cf0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
5d00: 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29  BLE_SELECTTRACE)
5d10: 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54  .# define SELECT
5d20: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a  TRACE_ENABLED 1.
5d30: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
5d40: 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
5d50: 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ED 0.#endif../*.
5d60: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
5d70: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
5d80: 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
5d90: 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62  d to store the b
5da0: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
5db0: 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69  allback for a gi
5dc0: 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c  ven sqlite handl
5dd0: 65 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71  e. .**.** The sq
5de0: 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72  lite.busyHandler
5df0: 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73   member of the s
5e00: 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e  qlite struct con
5e10: 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a  tains the busy.*
5e20: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74  * callback for t
5e30: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
5e40: 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f  le. Each pager o
5e50: 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73 71  pened via the sq
5e60: 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69  lite.** handle i
5e70: 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74  s passed a point
5e80: 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73  er to sqlite.bus
5e90: 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75  yHandler. The bu
5ea0: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
5eb0: 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e  llback is curren
5ec0: 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79  tly invoked only
5ed0: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67   from within pag
5ee0: 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  er.c..*/.typedef
5ef0: 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64   struct BusyHand
5f00: 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b  ler BusyHandler;
5f10: 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64  .struct BusyHand
5f20: 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46  ler {.  int (*xF
5f30: 75 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29  unc)(void *,int)
5f40: 3b 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63  ;  /* The busy c
5f50: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
5f60: 64 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20  d *pArg;        
5f70: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
5f80: 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c   arg to busy cal
5f90: 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  lback */.  int n
5fa0: 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  Busy;           
5fb0: 20 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65        /* Increme
5fc0: 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62  nted with each b
5fd0: 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a  usy call */.};..
5fe0: 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68  /*.** Name of th
5ff0: 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73  e master databas
6000: 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61  e table.  The ma
6010: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
6020: 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63  ble.** is a spec
6030: 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68  ial table that h
6040: 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61  olds the names a
6050: 6e 64 20 61 74 74 72 69 62 75 74 65 73 20 6f 66  nd attributes of
6060: 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62   all.** user tab
6070: 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e  les and indices.
6080: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54  .*/.#define MAST
6090: 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73  ER_NAME       "s
60a0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64  qlite_master".#d
60b0: 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45  efine TEMP_MASTE
60c0: 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f  R_NAME  "sqlite_
60d0: 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a  temp_master"../*
60e0: 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67  .** The root-pag
60f0: 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20  e of the master 
6100: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a  database table..
6110: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45  */.#define MASTE
6120: 52 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a  R_ROOT       1..
6130: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f  /*.** The name o
6140: 66 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62  f the schema tab
6150: 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  le..*/.#define S
6160: 43 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20  CHEMA_TABLE(x)  
6170: 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26  ((!OMIT_TEMPDB)&
6180: 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53  &(x==1)?TEMP_MAS
6190: 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f  TER_NAME:MASTER_
61a0: 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63  NAME)../*.** A c
61b0: 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f  onvenience macro
61c0: 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 74 68   that returns th
61d0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d  e number of elem
61e0: 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72  ents in.** an ar
61f0: 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ray..*/.#define 
6200: 41 72 72 61 79 53 69 7a 65 28 58 29 20 20 20 20  ArraySize(X)    
6210: 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29  ((int)(sizeof(X)
6220: 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a  /sizeof(X[0]))).
6230: 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65  ./*.** Determine
6240: 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   if the argument
6250: 20 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74   is a power of t
6260: 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73  wo.*/.#define Is
6270: 50 6f 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28  PowerOfTwo(X) ((
6280: 28 58 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29  (X)&((X)-1))==0)
6290: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
62a0: 6f 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61  owing value as a
62b0: 20 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e   destructor mean
62c0: 73 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33  s to use sqlite3
62d0: 44 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65  DbFree()..** The
62e0: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
62f0: 20 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65   routine require
6300: 73 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73  s two parameters
6310: 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20   instead of the 
6320: 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65  .** one paramete
6330: 72 20 74 68 61 74 20 64 65 73 74 72 75 63 74 6f  r that destructo
6340: 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74  rs normally want
6350: 2e 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f  .  So we have to
6360: 20 69 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74   introduce .** t
6370: 68 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20  his magic value 
6380: 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e  that the code kn
6390: 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69  ows to handle di
63a0: 66 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20  fferently.  Any 
63b0: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c  .** pointer will
63c0: 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f   work here as lo
63d0: 6e 67 20 61 73 20 69 74 20 69 73 20 64 69 73 74  ng as it is dist
63e0: 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45  inct from SQLITE
63f0: 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53  _STATIC.** and S
6400: 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e  QLITE_TRANSIENT.
6410: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
6420: 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73  TE_DYNAMIC   ((s
6430: 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f  qlite3_destructo
6440: 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61  r_type)sqlite3Ma
6450: 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a  llocSize)../*.**
6460: 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49   When SQLITE_OMI
6470: 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65 64  T_WSD is defined
6480: 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
6490: 74 68 65 20 74 61 72 67 65 74 20 70 6c 61 74 66  the target platf
64a0: 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20  orm does.** not 
64b0: 73 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65  support Writable
64c0: 20 53 74 61 74 69 63 20 44 61 74 61 20 28 57 53   Static Data (WS
64d0: 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61  D) such as globa
64e0: 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76 61 72  l and static var
64f0: 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76  iables..** All v
6500: 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69  ariables must ei
6510: 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73  ther be on the s
6520: 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61  tack or dynamica
6530: 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72  lly allocated fr
6540: 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20  om.** the heap. 
6550: 20 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73   When WSD is uns
6560: 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61  upported, the va
6570: 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69  riable declarati
6580: 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a  ons scattered.**
6590: 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20   throughout the 
65a0: 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74  SQLite code must
65b0: 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74   become constant
65c0: 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20  s instead.  The 
65d0: 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61  SQLITE_WSD.** ma
65e0: 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20  cro is used for 
65f0: 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41  this purpose.  A
6600: 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65  nd instead of re
6610: 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61  ferencing the va
6620: 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74  riable.** direct
6630: 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73 20 63  ly, we use its c
6640: 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79  onstant as a key
6650: 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72   to lookup the r
6660: 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65  un-time allocate
6670: 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74  d.** buffer that
6680: 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69   holds real vari
6690: 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74  able.  The const
66a0: 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20  ant is also the 
66b0: 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66  initializer.** f
66c0: 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  or the run-time 
66d0: 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72  allocated buffer
66e0: 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75  ..**.** In the u
66f0: 73 75 61 6c 20 63 61 73 65 20 77 68 65 72 65 20  sual case where 
6700: 57 53 44 20 69 73 20 73 75 70 70 6f 72 74 65 64  WSD is supported
6710: 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44  , the SQLITE_WSD
6720: 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d   and GLOBAL.** m
6730: 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d  acros become no-
6740: 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72  ops and have zer
6750: 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d  o performance im
6760: 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  pact..*/.#ifdef 
6770: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a  SQLITE_OMIT_WSD.
6780: 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
6790: 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65  _WSD const.  #de
67a0: 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29  fine GLOBAL(t,v)
67b0: 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77   (*(t*)sqlite3_w
67c0: 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26  sd_find((void*)&
67d0: 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29  (v), sizeof(v)))
67e0: 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
67f0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47  e3GlobalConfig G
6800: 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c  LOBAL(struct Sql
6810: 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69  ite3Config, sqli
6820: 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74  te3Config).  int
6830: 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69   sqlite3_wsd_ini
6840: 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b  t(int N, int J);
6850: 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
6860: 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a  _wsd_find(void *
6870: 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65  K, int L);.#else
6880: 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54  .  #define SQLIT
6890: 45 5f 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65  E_WSD .  #define
68a0: 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20   GLOBAL(t,v) v. 
68b0: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
68c0: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c  GlobalConfig sql
68d0: 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69  ite3Config.#endi
68e0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
68f0: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
6900: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
6910: 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e  ss compiler warn
6920: 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d  ings and to.** m
6930: 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20  ake it clear to 
6940: 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68  human readers wh
6950: 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61  en a function pa
6960: 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62  rameter is delib
6970: 65 72 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74  erately .** left
6980: 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74   unused within t
6990: 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e  he body of a fun
69a0: 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61  ction. This usua
69b0: 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e  lly happens when
69c0: 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69  .** a function i
69d0: 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66  s called via a f
69e0: 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e  unction pointer.
69f0: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65   For example the
6a00: 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74   .** implementat
6a10: 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67  ion of an SQL ag
6a20: 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c  gregate step cal
6a30: 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73  lback may not us
6a40: 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74  e the.** paramet
6a50: 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  er indicating th
6a60: 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
6a70: 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20  ments passed to 
6a80: 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a  the aggregate,.*
6a90: 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68  * if it knows th
6aa0: 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72  at this is enfor
6ab0: 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a  ced elsewhere..*
6ac0: 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63  *.** When a func
6ad0: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
6ae0: 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c  s not used at al
6af0: 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  l within the bod
6b00: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c  y of a function,
6b10: 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61  .** it is genera
6b20: 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73  lly named "NotUs
6b30: 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32  ed" or "NotUsed2
6b40: 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73  " to make things
6b50: 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a   even clearer..*
6b60: 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65  * However, these
6b70: 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f   macros may also
6b80: 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70   be used to supp
6b90: 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65  ress warnings re
6ba0: 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61  lated to.** para
6bb0: 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20  meters that may 
6bc0: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73  or may not be us
6bd0: 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ed depending on 
6be0: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69  compilation opti
6bf0: 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ons..** For exam
6c00: 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65  ple those parame
6c10: 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  ters only used i
6c20: 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  n assert() state
6c30: 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a  ments. In these.
6c40: 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72  ** cases the par
6c50: 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65  ameters are name
6c60: 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75  d as per the usu
6c70: 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a  al conventions..
6c80: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
6c90: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
6ca0: 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65  void)(x).#define
6cb0: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
6cc0: 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50  R2(x,y) UNUSED_P
6cd0: 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53  ARAMETER(x),UNUS
6ce0: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a  ED_PARAMETER(y).
6cf0: 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72  ./*.** Forward r
6d00: 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72  eferences to str
6d10: 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64  uctures.*/.typed
6d20: 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  ef struct AggInf
6d30: 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64  o AggInfo;.typed
6d40: 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f  ef struct AuthCo
6d50: 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78  ntext AuthContex
6d60: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
6d70: 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75  t AutoincInfo Au
6d80: 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64  toincInfo;.typed
6d90: 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63  ef struct Bitvec
6da0: 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66   Bitvec;.typedef
6db0: 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20   struct CollSeq 
6dc0: 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66  CollSeq;.typedef
6dd0: 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43   struct Column C
6de0: 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73  olumn;.typedef s
6df0: 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70  truct Db Db;.typ
6e00: 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65  edef struct Sche
6e10: 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64  ma Schema;.typed
6e20: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45  ef struct Expr E
6e30: 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  xpr;.typedef str
6e40: 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70  uct ExprList Exp
6e50: 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  rList;.typedef s
6e60: 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 45  truct ExprSpan E
6e70: 78 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66  xprSpan;.typedef
6e80: 20 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65   struct FKey FKe
6e90: 79 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  y;.typedef struc
6ea0: 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  t FuncDestructor
6eb0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b   FuncDestructor;
6ec0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6ed0: 46 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b  FuncDef FuncDef;
6ee0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6ef0: 46 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63  FuncDefHash Func
6f00: 44 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66  DefHash;.typedef
6f10: 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49   struct IdList I
6f20: 64 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  dList;.typedef s
6f30: 74 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65  truct Index Inde
6f40: 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  x;.typedef struc
6f50: 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e  t IndexSample In
6f60: 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64  dexSample;.typed
6f70: 65 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61  ef struct KeyCla
6f80: 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70  ss KeyClass;.typ
6f90: 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49  edef struct KeyI
6fa0: 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70  nfo KeyInfo;.typ
6fb0: 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b  edef struct Look
6fc0: 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b  aside Lookaside;
6fd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6fe0: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f  LookasideSlot Lo
6ff0: 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70  okasideSlot;.typ
7000: 65 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75  edef struct Modu
7010: 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64  le Module;.typed
7020: 65 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f  ef struct NameCo
7030: 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78  ntext NameContex
7040: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
7050: 74 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74  t Parse Parse;.t
7060: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72  ypedef struct Pr
7070: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72  intfArguments Pr
7080: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74  intfArguments;.t
7090: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f  ypedef struct Ro
70a0: 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70  wSet RowSet;.typ
70b0: 65 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65  edef struct Save
70c0: 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b  point Savepoint;
70d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
70e0: 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74  Select Select;.t
70f0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 51  ypedef struct SQ
7100: 4c 69 74 65 54 68 72 65 61 64 20 53 51 4c 69 74  LiteThread SQLit
7110: 65 54 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66  eThread;.typedef
7120: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65   struct SelectDe
7130: 73 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74  st SelectDest;.t
7140: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72  ypedef struct Sr
7150: 63 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74  cList SrcList;.t
7160: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 74  ypedef struct St
7170: 72 41 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b  rAccum StrAccum;
7180: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7190: 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70  Table Table;.typ
71a0: 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c  edef struct Tabl
71b0: 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b  eLock TableLock;
71c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
71d0: 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70  Token Token;.typ
71e0: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 65 65  edef struct Tree
71f0: 56 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74  View TreeView;.t
7200: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
7210: 69 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74  igger Trigger;.t
7220: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
7230: 69 67 67 65 72 50 72 67 20 54 72 69 67 67 65 72  iggerPrg Trigger
7240: 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Prg;.typedef str
7250: 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
7260: 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70  TriggerStep;.typ
7270: 65 64 65 66 20 73 74 72 75 63 74 20 55 6e 70 61  edef struct Unpa
7280: 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63  ckedRecord Unpac
7290: 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64  kedRecord;.typed
72a0: 65 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65  ef struct VTable
72b0: 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66   VTable;.typedef
72c0: 20 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20   struct VtabCtx 
72d0: 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66  VtabCtx;.typedef
72e0: 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57   struct Walker W
72f0: 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73  alker;.typedef s
7300: 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20  truct WhereInfo 
7310: 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64  WhereInfo;.typed
7320: 65 66 20 73 74 72 75 63 74 20 57 69 74 68 20 57  ef struct With W
7330: 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65  ith;../*.** Defe
7340: 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e  r sourcing vdbe.
7350: 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e  h and btree.h un
7360: 74 69 6c 20 61 66 74 65 72 20 74 68 65 20 22 75  til after the "u
7370: 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73 79  8" and .** "Busy
7380: 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66  Handler" typedef
7390: 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72  s. vdbe.h also r
73a0: 65 71 75 69 72 65 73 20 61 20 66 65 77 20 6f 66  equires a few of
73b0: 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70   the opaque.** p
73c0: 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e  ointer types (i.
73d0: 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65 66 69  e. FuncDef) defi
73e0: 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69  ned above..*/.#i
73f0: 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22  nclude "btree.h"
7400: 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e  .#include "vdbe.
7410: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67  h".#include "pag
7420: 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  er.h".#include "
7430: 70 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63 6c  pcache.h"..#incl
7440: 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c  ude "os.h".#incl
7450: 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 0a  ude "mutex.h"...
7460: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
7470: 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61  ase file to be a
7480: 63 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73  ccessed by the s
7490: 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74  ystem is an inst
74a0: 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66  ance.** of the f
74b0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
74c0: 72 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e  re.  There are n
74d0: 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74  ormally two of t
74e0: 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a  hese structures.
74f0: 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ** in the sqlite
7500: 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61  .aDb[] array.  a
7510: 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69  Db[0] is the mai
7520: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
7530: 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73  and.** aDb[1] is
7540: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
7550: 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  le used to hold 
7560: 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
7570: 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a  .  Additional.**
7580: 20 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62   databases may b
7590: 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73  e attached..*/.s
75a0: 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61  truct Db {.  cha
75b0: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
75c0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
75d0: 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
75e0: 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20  Btree *pBt;     
75f0: 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72       /* The B*Tr
7600: 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ee structure for
7610: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66   this database f
7620: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65  ile */.  u8 safe
7630: 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a  ty_level;     /*
7640: 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20   How aggressive 
7650: 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20  at syncing data 
7660: 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63 68  to disk */.  Sch
7670: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
7680: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
7690: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
76a0: 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64  (possibly shared
76b0: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ) */.};../*.** A
76c0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
76d0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
76e0: 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64  cture stores a d
76f0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a  atabase schema..
7700: 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d  **.** Most Schem
7710: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73  a objects are as
7720: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
7730: 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65  Btree.  The exce
7740: 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20  ption is.** the 
7750: 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54  Schema for the T
7760: 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71  EMP databaes (sq
7770: 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68  lite3.aDb[1]) wh
7780: 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e  ich is free-stan
7790: 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72  ding..** In shar
77a0: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61  ed cache mode, a
77b0: 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f   single Schema o
77c0: 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61  bject can be sha
77d0: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a  red by multiple.
77e0: 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72  ** Btrees that r
77f0: 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65  efer to the same
7800: 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68   underlying BtSh
7810: 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20  ared object..** 
7820: 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  .** Schema objec
7830: 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  ts are automatic
7840: 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64  ally deallocated
7850: 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42   when the last B
7860: 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66  tree that.** ref
7870: 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20  erences them is 
7880: 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65  destroyed.   The
7890: 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20   TEMP Schema is 
78a0: 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62  manually freed b
78b0: 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f  y.** sqlite3_clo
78c0: 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72  se()..*.** A thr
78d0: 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64  ead must be hold
78e0: 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74  ing a mutex on t
78f0: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
7900: 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a   Btree in order.
7910: 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68  ** to access Sch
7920: 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68  ema content.  Th
7930: 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20  is implies that 
7940: 74 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20  the thread must 
7950: 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69  also be.** holdi
7960: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
7970: 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63  e sqlite3 connec
7980: 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61  tion pointer tha
7990: 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65  t owns the Btree
79a0: 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20  ..** For a TEMP 
79b0: 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65  Schema, only the
79c0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65   connection mute
79d0: 78 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a  x is required..*
79e0: 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20  /.struct Schema 
79f0: 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63  {.  int schema_c
7a00: 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61  ookie;   /* Data
7a10: 62 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73  base schema vers
7a20: 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  ion number for t
7a30: 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e  his file */.  in
7a40: 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20  t iGeneration;  
7a50: 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e     /* Generation
7a60: 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65   counter.  Incre
7a70: 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68  mented with each
7a80: 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73   change */.  Has
7a90: 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20  h tblHash;      
7aa0: 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20    /* All tables 
7ab0: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
7ac0: 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73  */.  Hash idxHas
7ad0: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  h;        /* All
7ae0: 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73   (named) indices
7af0: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
7b00: 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48   */.  Hash trigH
7b10: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
7b20: 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78  l triggers index
7b30: 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20  ed by name */.  
7b40: 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20  Hash fkeyHash;  
7b50: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65       /* All fore
7b60: 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65  ign keys by refe
7b70: 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d  renced table nam
7b80: 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53  e */.  Table *pS
7b90: 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54  eqTab;      /* T
7ba0: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
7bb0: 63 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79  ce table used by
7bc0: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
7bd0: 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d  /.  u8 file_form
7be0: 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65  at;      /* Sche
7bf0: 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f  ma format versio
7c00: 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  n for this file 
7c10: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
7c20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
7c30: 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20  t encoding used 
7c40: 62 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65  by this database
7c50: 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61   */.  u16 schema
7c60: 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c  Flags;     /* Fl
7c70: 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
7c80: 69 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20  ith this schema 
7c90: 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73  */.  int cache_s
7ca0: 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ize;      /* Num
7cb0: 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20  ber of pages to 
7cc0: 75 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65  use in the cache
7cd0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
7ce0: 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
7cf0: 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
7d00: 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
7d10: 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44 62  ts in the .** Db
7d20: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20  .pSchema->flags 
7d30: 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
7d40: 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28  e DbHasProperty(
7d50: 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44 29  D,I,P)     (((D)
7d60: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
7d70: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50  ->schemaFlags&(P
7d80: 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65  ))==(P)).#define
7d90: 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74   DbHasAnyPropert
7da0: 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d  y(D,I,P)  (((D)-
7db0: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
7dc0: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29  >schemaFlags&(P)
7dd0: 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62  )!=0).#define Db
7de0: 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  SetProperty(D,I,
7df0: 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b  P)     (D)->aDb[
7e00: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  I].pSchema->sche
7e10: 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  maFlags|=(P).#de
7e20: 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70  fine DbClearProp
7e30: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44  erty(D,I,P)   (D
7e40: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
7e50: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d  a->schemaFlags&=
7e60: 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ~(P)../*.** Allo
7e70: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74  wed values for t
7e80: 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66  he DB.pSchema->f
7e90: 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a  lags field..**.*
7ea0: 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c  * The DB_SchemaL
7eb0: 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20 73 65  oaded flag is se
7ec0: 74 20 61 66 74 65 72 20 74 68 65 20 64 61 74 61  t after the data
7ed0: 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20  base schema has 
7ee0: 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74  been.** read int
7ef0: 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20  o internal hash 
7f00: 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42  tables..**.** DB
7f10: 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65  _UnresetViews me
7f20: 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20  ans that one or 
7f30: 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76 65 20  more views have 
7f40: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61  column names tha
7f50: 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66  t.** have been f
7f60: 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74  illed out.  If t
7f70: 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  he schema change
7f80: 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20  s, these column 
7f90: 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63  names might.** c
7fa0: 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68  hanges and so th
7fb0: 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64  e view will need
7fc0: 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f   to be reset..*/
7fd0: 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65  .#define DB_Sche
7fe0: 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30  maLoaded    0x00
7ff0: 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d  01  /* The schem
8000: 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65  a has been loade
8010: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  d */.#define DB_
8020: 55 6e 72 65 73 65 74 56 69 65 77 73 20 20 20 20  UnresetViews    
8030: 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20  0x0002  /* Some 
8040: 76 69 65 77 73 20 68 61 76 65 20 64 65 66 69 6e  views have defin
8050: 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ed column names 
8060: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d  */.#define DB_Em
8070: 70 74 79 20 20 20 20 20 20 20 20 20 20 20 30 78  pty           0x
8080: 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c  0004  /* The fil
8090: 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67  e is empty (leng
80a0: 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a  th 0 bytes) */..
80b0: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  /*.** The number
80c0: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69   of different ki
80d0: 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68  nds of things th
80e0: 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65  at can be limite
80f0: 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73  d.** using the s
8100: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69  qlite3_limit() i
8110: 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65  nterface..*/.#de
8120: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49  fine SQLITE_N_LI
8130: 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49  MIT (SQLITE_LIMI
8140: 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  T_WORKER_THREADS
8150: 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61  +1)../*.** Looka
8160: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61  side malloc is a
8170: 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69   set of fixed-si
8180: 7a 65 20 62 75 66 66 65 72 73 20 74 68 61 74 20  ze buffers that 
8190: 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74  can be used.** t
81a0: 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20  o satisfy small 
81b0: 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79  transient memory
81c0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75   allocation requ
81d0: 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73  ests for objects
81e0: 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77  .** associated w
81f0: 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72  ith a particular
8200: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
8210: 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f  tion.  The use o
8220: 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d  f.** lookaside m
8230: 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61  alloc provides a
8240: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72   significant per
8250: 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65  formance enhance
8260: 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20  ment.** (approx 
8270: 31 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67  10%) by avoiding
8280: 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63   numerous malloc
8290: 2f 66 72 65 65 20 72 65 71 75 65 73 74 73 20 77  /free requests w
82a0: 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20  hile parsing.** 
82b0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  SQL statements..
82c0: 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73  **.** The Lookas
82d0: 69 64 65 20 73 74 72 75 63 74 75 72 65 20 68 6f  ide structure ho
82e0: 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  lds configuratio
82f0: 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  n information ab
8300: 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61  out the.** looka
8310: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73  side malloc subs
8320: 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61  ystem.  Each ava
8330: 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c  ilable memory al
8340: 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74  location in.** t
8350: 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62  he lookaside sub
8360: 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64  system is stored
8370: 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   on a linked lis
8380: 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  t of LookasideSl
8390: 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a  ot.** objects..*
83a0: 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61  *.** Lookaside a
83b0: 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f  llocations are o
83c0: 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20  nly allowed for 
83d0: 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61 72 65  objects that are
83e0: 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77   associated.** w
83f0: 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72  ith a particular
8400: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
8410: 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63  tion.  Hence, sc
8420: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
8430: 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74   cannot.** be st
8440: 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64  ored in lookasid
8450: 65 20 62 65 63 61 75 73 65 20 69 6e 20 73 68 61  e because in sha
8460: 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74  red cache mode t
8470: 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  he schema inform
8480: 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72  ation.** is shar
8490: 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64  ed by multiple d
84a0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
84b0: 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c  ons.  Therefore,
84c0: 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a   while parsing.*
84d0: 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  * schema informa
84e0: 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73  tion, the Lookas
84f0: 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61  ide.bEnabled fla
8500: 67 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20  g is cleared so 
8510: 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64  that.** lookasid
8520: 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72  e allocations ar
8530: 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f  e not used to co
8540: 6e 73 74 72 75 63 74 20 74 68 65 20 73 63 68 65  nstruct the sche
8550: 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73  ma objects..*/.s
8560: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20  truct Lookaside 
8570: 7b 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20  {.  u16 sz;     
8580: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
8590: 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66  ize of each buff
85a0: 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  er in bytes */. 
85b0: 20 75 38 20 62 45 6e 61 62 6c 65 64 3b 20 20 20   u8 bEnabled;   
85c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 73           /* Fals
85d0: 65 20 74 6f 20 64 69 73 61 62 6c 65 20 6e 65 77  e to disable new
85e0: 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   lookaside alloc
85f0: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62  ations */.  u8 b
8600: 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20  Malloced;       
8610: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70      /* True if p
8620: 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66  Start obtained f
8630: 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  rom sqlite3_mall
8640: 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f  oc() */.  int nO
8650: 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ut;             
8660: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
8670: 75 66 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79  uffers currently
8680: 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a   checked out */.
8690: 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20    int mxOut;    
86a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67            /* Hig
86b0: 68 77 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20  hwater mark for 
86c0: 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e  nOut */.  int an
86d0: 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20  Stat[3];        
86e0: 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31    /* 0: hits.  1
86f0: 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20  : size misses.  
8700: 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a  2: full misses *
8710: 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  /.  LookasideSlo
8720: 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c  t *pFree;   /* L
8730: 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  ist of available
8740: 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f   buffers */.  vo
8750: 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20  id *pStart;     
8760: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62        /* First b
8770: 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  yte of available
8780: 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f   memory space */
8790: 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20  .  void *pEnd;  
87a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
87b0: 72 73 74 20 62 79 74 65 20 70 61 73 74 20 65 6e  rst byte past en
87c0: 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73  d of available s
87d0: 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63  pace */.};.struc
87e0: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20  t LookasideSlot 
87f0: 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  {.  LookasideSlo
8800: 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20  t *pNext;    /* 
8810: 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e 20 74  Next buffer in t
8820: 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20  he list of free 
8830: 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f  buffers */.};../
8840: 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c  *.** A hash tabl
8850: 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64  e for function d
8860: 65 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a  efinitions..**.*
8870: 2a 20 48 61 73 68 20 65 61 63 68 20 46 75 6e 63  * Hash each Func
8880: 44 65 66 20 73 74 72 75 63 74 75 72 65 20 69 6e  Def structure in
8890: 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75  to one of the Fu
88a0: 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c  ncDefHash.a[] sl
88b0: 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f  ots..** Collisio
88c0: 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75  ns are on the Fu
88d0: 6e 63 44 65 66 2e 70 48 61 73 68 20 63 68 61 69  ncDef.pHash chai
88e0: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  n..*/.struct Fun
88f0: 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e  cDefHash {.  Fun
8900: 63 44 65 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20  cDef *a[23];    
8910: 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65     /* Hash table
8920: 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a   for functions *
8930: 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  /.};..#ifdef SQL
8940: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
8950: 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e  ICATION./*.** In
8960: 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69  formation held i
8970: 6e 20 74 68 65 20 22 73 71 6c 69 74 65 33 22 20  n the "sqlite3" 
8980: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
8990: 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75  ion object and u
89a0: 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65  sed.** to manage
89b0: 20 75 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   user authentica
89c0: 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  tion..*/.typedef
89d0: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f   struct sqlite3_
89e0: 75 73 65 72 61 75 74 68 20 73 71 6c 69 74 65 33  userauth sqlite3
89f0: 5f 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63  _userauth;.struc
8a00: 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  t sqlite3_userau
8a10: 74 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65  th {.  u8 authLe
8a20: 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  vel;            
8a30: 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
8a40: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c  authentication l
8a50: 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  evel */.  int nA
8a60: 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20  uthPW;          
8a70: 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
8a80: 6f 66 20 74 68 65 20 7a 41 75 74 68 50 57 20 69  of the zAuthPW i
8a90: 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61  n bytes */.  cha
8aa0: 72 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20  r *zAuthPW;     
8ab0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
8ac0: 73 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61  ssword used to a
8ad0: 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20  uthenticate */. 
8ae0: 20 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72   char *zAuthUser
8af0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
8b00: 2a 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64  * User name used
8b10: 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65   to authenticate
8b20: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77   */.};../* Allow
8b30: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71  ed values for sq
8b40: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61  lite3_userauth.a
8b50: 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66  uthLevel */.#def
8b60: 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77  ine UAUTH_Unknow
8b70: 6e 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41  n     0     /* A
8b80: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f  uthentication no
8b90: 74 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f  t yet checked */
8ba0: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46  .#define UAUTH_F
8bb0: 61 69 6c 20 20 20 20 20 20 20 20 31 20 20 20 20  ail        1    
8bc0: 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74   /* User authent
8bd0: 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a  ication failed *
8be0: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
8bf0: 55 73 65 72 20 20 20 20 20 20 20 20 32 20 20 20  User        2   
8c00: 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74    /* Authenticat
8c10: 65 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75  ed as a normal u
8c20: 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ser */.#define U
8c30: 41 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20  AUTH_Admin      
8c40: 20 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e   3     /* Authen
8c50: 74 69 63 61 74 65 64 20 61 73 20 61 6e 20 61 64  ticated as an ad
8c60: 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a  ministrator */..
8c70: 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65  /* Functions use
8c80: 64 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61  d only by user a
8c90: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67  uthorization log
8ca0: 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  ic */.int sqlite
8cb0: 33 55 73 65 72 41 75 74 68 54 61 62 6c 65 28 63  3UserAuthTable(c
8cc0: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
8cd0: 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68   sqlite3UserAuth
8ce0: 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74  CheckLogin(sqlit
8cf0: 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
8d00: 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
8d10: 65 33 55 73 65 72 41 75 74 68 49 6e 69 74 28 73  e3UserAuthInit(s
8d20: 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
8d30: 71 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63 28  qlite3CryptFunc(
8d40: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
8d50: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
8d60: 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f  ue**);..#endif /
8d70: 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  * SQLITE_USER_AU
8d80: 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a  THENTICATION */.
8d90: 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66  ./*.** typedef f
8da0: 6f 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61  or the authoriza
8db0: 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75  tion callback fu
8dc0: 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65  nction..*/.#ifde
8dd0: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
8de0: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74  THENTICATION.  t
8df0: 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c  ypedef int (*sql
8e00: 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64  ite3_xauth)(void
8e10: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
8e20: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
8e30: 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20  nst char*,.     
8e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e50: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
8e60: 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
8e70: 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  r*);.#else.  typ
8e80: 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74  edef int (*sqlit
8e90: 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c  e3_xauth)(void*,
8ea0: 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  int,const char*,
8eb0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
8ec0: 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20  t char*,.       
8ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ee0: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
8ef0: 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 2f  ar*);.#endif.../
8f00: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
8f10: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  se connection is
8f20: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
8f30: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
8f40: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
8f50: 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73  ct sqlite3 {.  s
8f60: 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73  qlite3_vfs *pVfs
8f70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
8f80: 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a  OS Interface */.
8f90: 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70    struct Vdbe *p
8fa0: 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20  Vdbe;           
8fb0: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76  /* List of activ
8fc0: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
8fd0: 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  es */.  CollSeq 
8fe0: 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20  *pDfltColl;     
8ff0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66        /* The def
9000: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ault collating s
9010: 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29  equence (BINARY)
9020: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
9030: 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20  tex *mutex;     
9040: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
9050: 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20  n mutex */.  Db 
9060: 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20  *aDb;           
9070: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
9080: 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  l backends */.  
9090: 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20  int nDb;        
90a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
90b0: 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65   Number of backe
90c0: 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  nds currently in
90d0: 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c   use */.  int fl
90e0: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
90f0: 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65          /* Misce
9100: 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20  llaneous flags. 
9110: 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  See below */.  i
9120: 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20  64 lastRowid;   
9130: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9140: 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65  ROWID of most re
9150: 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65  cent insert (see
9160: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34   above) */.  i64
9170: 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
9180: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
9190: 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20  fault mmap_size 
91a0: 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73  setting */.  uns
91b0: 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c  igned int openFl
91c0: 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c  ags;       /* Fl
91d0: 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71  ags passed to sq
91e0: 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28  lite3_vfs.xOpen(
91f0: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f  ) */.  int errCo
9200: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
9210: 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63       /* Most rec
9220: 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28  ent error code (
9230: 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69  SQLITE_*) */.  i
9240: 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20  nt errMask;     
9250: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9260: 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77  & result codes w
9270: 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20  ith this before 
9280: 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75  returning */.  u
9290: 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20  16 dbOptFlags;  
92a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
92b0: 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f  Flags to enable/
92c0: 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61  disable optimiza
92d0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 61 75  tions */.  u8 au
92e0: 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20  toCommit;       
92f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
9300: 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
9310: 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73  . */.  u8 temp_s
9320: 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20  tore;           
9330: 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20       /* 1: file 
9340: 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66  2: memory 0: def
9350: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c  ault */.  u8 mal
9360: 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20  locFailed;      
9370: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
9380: 69 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20  if we have seen 
9390: 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  a malloc failure
93a0: 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63   */.  u8 dfltLoc
93b0: 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  kMode;          
93c0: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
93d0: 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20  ocking-mode for 
93e0: 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a  attached dbs */.
93f0: 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65    signed char ne
9400: 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20  xtAutovac;      
9410: 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69  /* Autovac setti
9420: 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20  ng after VACUUM 
9430: 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73  if >=0 */.  u8 s
9440: 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20  uppressErr;     
9450: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
9460: 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20  not issue error 
9470: 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65  messages if true
9480: 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43   */.  u8 vtabOnC
9490: 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20  onflict;        
94a0: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
94b0: 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74  return for s3_vt
94c0: 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29  ab_on_conflict()
94d0: 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73   */.  u8 isTrans
94e0: 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
94f0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
9500: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76  he outermost sav
9510: 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a  epoint is a TS *
9520: 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65  /.  int nextPage
9530: 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20  size;           
9540: 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66    /* Pagesize af
9550: 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30  ter VACUUM if >0
9560: 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b   */.  u32 magic;
9570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9580: 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d      /* Magic num
9590: 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c  ber for detect l
95a0: 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f  ibrary misuse */
95b0: 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20  .  int nChange; 
95c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95d0: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
95e0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68  ed by sqlite3_ch
95f0: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
9600: 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20   nTotalChange;  
9610: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
9620: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
9630: 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
9640: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
9650: 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e   aLimit[SQLITE_N
9660: 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69  _LIMIT];   /* Li
9670: 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  mits */.  int nM
9680: 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20  axSorterMmap;   
9690: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
96a0: 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67 69 6f  um size of regio
96b0: 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73 6f 72  ns mapped by sor
96c0: 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ter */.  struct 
96d0: 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20  sqlite3InitInfo 
96e0: 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d  {      /* Inform
96f0: 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e  ation used durin
9700: 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
9710: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54   */.    int newT
9720: 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
9730: 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20      /* Rootpage 
9740: 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  of table being i
9750: 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
9760: 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20 20    u8 iDb;       
9770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9780: 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20 69   Which db file i
9790: 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  s being initiali
97a0: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75  zed */.    u8 bu
97b0: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
97c0: 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69         /* TRUE i
97d0: 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74  f currently init
97e0: 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20  ializing */.    
97f0: 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72  u8 orphanTrigger
9800: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
9810: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ast statement is
9820: 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74   orphaned TEMP t
9830: 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69 6e  rigger */.  } in
9840: 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41  it;.  int nVdbeA
9850: 63 74 69 76 65 3b 20 20 20 20 20 20 20 20 20 20  ctive;          
9860: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
9870: 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79   VDBEs currently
9880: 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e   running */.  in
9890: 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20  t nVdbeRead;    
98a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
98b0: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
98c0: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
98d0: 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e  or write */.  in
98e0: 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20  t nVdbeWrite;   
98f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
9900: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
9910: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
9920: 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69  and write */.  i
9930: 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20  nt nVdbeExec;   
9940: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9950: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
9960: 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78   calls to VdbeEx
9970: 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  ec() */.  int nE
9980: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
9990: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
99a0: 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65  r of loaded exte
99b0: 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64  nsions */.  void
99c0: 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20   **aExtension;  
99d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72            /* Arr
99e0: 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62  ay of shared lib
99f0: 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a  rary handles */.
9a00: 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29    void (*xTrace)
9a10: 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61  (void*,const cha
9a20: 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  r*);        /* T
9a30: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  race function */
9a40: 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41  .  void *pTraceA
9a50: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
9a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9a70: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
9a80: 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  trace function *
9a90: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66  /.  void (*xProf
9aa0: 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ile)(void*,const
9ab0: 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a   char*,u64);  /*
9ac0: 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74   Profiling funct
9ad0: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
9ae0: 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20  ProfileArg;     
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b00: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
9b10: 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69  o profile functi
9b20: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43  on */.  void *pC
9b30: 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20  ommitArg;       
9b40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
9b50: 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74  ument to xCommit
9b60: 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20  Callback() */   
9b70: 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74  .  int (*xCommit
9b80: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29  Callback)(void*)
9b90: 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  ;    /* Invoked 
9ba0: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
9bb0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c   */.  void *pRol
9bc0: 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20  lbackArg;       
9bd0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
9be0: 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b  ent to xRollback
9bf0: 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20  Callback() */   
9c00: 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62  .  void (*xRollb
9c10: 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  ackCallback)(voi
9c20: 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  d*); /* Invoked 
9c30: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
9c40: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64   */.  void *pUpd
9c50: 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28  ateArg;.  void (
9c60: 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  *xUpdateCallback
9c70: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
9c80: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
9c90: 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36  har*,sqlite_int6
9ca0: 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  4);.#ifndef SQLI
9cb0: 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
9cc0: 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b  t (*xWalCallback
9cd0: 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65  )(void *, sqlite
9ce0: 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
9cf0: 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
9d00: 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66  *pWalArg;.#endif
9d10: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
9d20: 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69  eded)(void*,sqli
9d30: 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65  te3*,int eTextRe
9d40: 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  p,const char*);.
9d50: 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65    void(*xCollNee
9d60: 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c  ded16)(void*,sql
9d70: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
9d80: 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  ep,const void*);
9d90: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65  .  void *pCollNe
9da0: 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74  ededArg;.  sqlit
9db0: 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20  e3_value *pErr; 
9dc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
9dd0: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
9de0: 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e  ssage */.  union
9df0: 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20   {.    volatile 
9e00: 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74 65  int isInterrupte
9e10: 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71  d; /* True if sq
9e20: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20  lite3_interrupt 
9e30: 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20  has been called 
9e40: 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f  */.    double no
9e50: 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20 20  tUsed1;         
9e60: 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a     /* Spacer */.
9e70: 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73    } u1;.  Lookas
9e80: 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20  ide lookaside;  
9e90: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61          /* Looka
9ea0: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66  side malloc conf
9eb0: 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66  iguration */.#if
9ec0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
9ed0: 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
9ee0: 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78   sqlite3_xauth x
9ef0: 41 75 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f  Auth;          /
9f00: 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f 72 69  * Access authori
9f10: 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20  zation function 
9f20: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68  */.  void *pAuth
9f30: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
9f40: 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
9f50: 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65 73 73  nt to the access
9f60: 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a   auth function *
9f70: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
9f80: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
9f90: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
9fa0: 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73   int (*xProgress
9fb0: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f  )(void *);     /
9fc0: 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63  * The progress c
9fd0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
9fe0: 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b  d *pProgressArg;
9ff0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
a000: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72  gument to the pr
a010: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
a020: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  */.  unsigned nP
a030: 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20  rogressOps;     
a040: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
a050: 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67  opcodes for prog
a060: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
a070: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
a080: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
a090: 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
a0a0: 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  VTrans;         
a0b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
a0c0: 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56  cated size of aV
a0d0: 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  Trans */.  Hash 
a0e0: 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20  aModule;        
a0f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75           /* popu
a100: 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74 65 33  lated by sqlite3
a110: 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29  _create_module()
a120: 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70   */.  VtabCtx *p
a130: 56 74 61 62 43 74 78 3b 20 20 20 20 20 20 20 20  VtabCtx;        
a140: 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66      /* Context f
a150: 6f 72 20 61 63 74 69 76 65 20 76 74 61 62 20 63  or active vtab c
a160: 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f  onnect/create */
a170: 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72  .  VTable **aVTr
a180: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
a190: 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c   /* Virtual tabl
a1a0: 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61  es with open tra
a1b0: 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56  nsactions */.  V
a1c0: 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65  Table *pDisconne
a1d0: 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e  ct;    /* Discon
a1e0: 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65  nect these in ne
a1f0: 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  xt sqlite3_prepa
a200: 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  re() */.#endif. 
a210: 20 46 75 6e 63 44 65 66 48 61 73 68 20 61 46 75   FuncDefHash aFu
a220: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  nc;            /
a230: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20  * Hash table of 
a240: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74  connection funct
a250: 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61  ions */.  Hash a
a260: 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20  CollSeq;        
a270: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63          /* All c
a280: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
a290: 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64  es */.  BusyHand
a2a0: 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b  ler busyHandler;
a2b0: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61        /* Busy ca
a2c0: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61  llback */.  Db a
a2d0: 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20  DbStatic[2];    
a2e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61            /* Sta
a2f0: 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74 68  tic space for th
a300: 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b  e 2 default back
a310: 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f  ends */.  Savepo
a320: 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
a330: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
a340: 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70 6f  of active savepo
a350: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75  ints */.  int bu
a360: 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20  syTimeout;      
a370: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20          /* Busy 
a380: 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c  handler timeout,
a390: 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e   in msec */.  in
a3a0: 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t nSavepoint;   
a3b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
a3c0: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
a3d0: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
a3e0: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74  nts */.  int nSt
a3f0: 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20  atement;        
a400: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
a410: 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74 65   of nested state
a420: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
a430: 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  s  */.  i64 nDef
a440: 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
a450: 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66        /* Net def
a460: 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
a470: 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  s this transacti
a480: 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  on. */.  i64 nDe
a490: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
a4a0: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
a4b0: 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65  ferred immediate
a4c0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
a4d0: 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72    int *pnBytesFr
a4e0: 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eed;            
a4f0: 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20  /* If not NULL, 
a500: 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69  increment this i
a510: 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69  n DbFree() */.#i
a520: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
a530: 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
a540: 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
a550: 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61 72  ing variables ar
a560: 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20  e all protected 
a570: 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41  by the STATIC_MA
a580: 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74 65 78  STER .  ** mutex
a590: 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33  , not by sqlite3
a5a0: 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65  .mutex. They are
a5b0: 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e   used by code in
a5c0: 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20 2a 2a   notify.c. .  **
a5d0: 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e  .  ** When X.pUn
a5e0: 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d  lockConnection==
a5f0: 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  Y, that means th
a600: 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67 20  at X is waiting 
a610: 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e  for Y to.  ** un
a620: 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20  lock so that it 
a630: 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a  can proceed..  *
a640: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42  *.  ** When X.pB
a650: 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f  lockingConnectio
a660: 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73  n==Y, that means
a670: 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20   that something 
a680: 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a  that X tried.  *
a690: 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65  * tried to do re
a6a0: 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69  cently failed wi
a6b0: 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43  th an SQLITE_LOC
a6c0: 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f  KED error due to
a6d0: 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64   locks.  ** held
a6e0: 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71   by Y..  */.  sq
a6f0: 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67  lite3 *pBlocking
a700: 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43  Connection; /* C
a710: 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63  onnection that c
a720: 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43  aused SQLITE_LOC
a730: 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  KED */.  sqlite3
a740: 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74   *pUnlockConnect
a750: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ion;           /
a760: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  * Connection to 
a770: 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b  watch for unlock
a780: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c   */.  void *pUnl
a790: 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20  ockArg;         
a7a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
a7b0: 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f  rgument to xUnlo
a7c0: 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f  ckNotify */.  vo
a7d0: 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69  id (*xUnlockNoti
a7e0: 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74  fy)(void **, int
a7f0: 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f  );  /* Unlock no
a800: 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  tify callback */
a810: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78  .  sqlite3 *pNex
a820: 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20  tBlocked;       
a830: 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74   /* Next in list
a840: 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20   of all blocked 
a850: 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23  connections */.#
a860: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
a870: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
a880: 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65  ICATION.  sqlite
a890: 33 5f 75 73 65 72 61 75 74 68 20 61 75 74 68 3b  3_userauth auth;
a8a0: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20          /* User 
a8b0: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69  authentication i
a8c0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65  nformation */.#e
a8d0: 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ndif.};../*.** A
a8e0: 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76   macro to discov
a8f0: 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  er the encoding 
a900: 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a  of a database..*
a910: 2f 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62  /.#define ENC(db
a920: 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e  ) ((db)->aDb[0].
a930: 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 0a 2f  pSchema->enc)../
a940: 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
a950: 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c  lues for the sql
a960: 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23  ite3.flags..*/.#
a970: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
a980: 62 65 54 72 61 63 65 20 20 20 20 20 20 30 78 30  beTrace      0x0
a990: 30 30 30 30 30 30 31 20 20 2f 2a 20 54 72 75 65  0000001  /* True
a9a0: 20 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65   to trace VDBE e
a9b0: 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  xecution */.#def
a9c0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74 65 72  ine SQLITE_Inter
a9d0: 6e 43 68 61 6e 67 65 73 20 20 30 78 30 30 30 30  nChanges  0x0000
a9e0: 30 30 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69  0002  /* Uncommi
a9f0: 74 74 65 64 20 48 61 73 68 20 74 61 62 6c 65 20  tted Hash table 
aa00: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
aa10: 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53  ne SQLITE_FullFS
aa20: 79 6e 63 20 20 20 20 20 20 30 78 30 30 30 30 30  ync      0x00000
aa30: 30 30 34 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c  004  /* Use full
aa40: 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61   fsync on the ba
aa50: 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ckend */.#define
aa60: 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c   SQLITE_CkptFull
aa70: 46 53 79 6e 63 20 20 30 78 30 30 30 30 30 30 30  FSync  0x0000000
aa80: 38 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66  8  /* Use full f
aa90: 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f  sync for checkpo
aaa0: 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  int */.#define S
aab0: 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c  QLITE_CacheSpill
aac0: 20 20 20 20 20 30 78 30 30 30 30 30 30 31 30 20       0x00000010 
aad0: 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20   /* OK to spill 
aae0: 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23  pager cache */.#
aaf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
ab00: 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30  llColNames   0x0
ab10: 30 30 30 30 30 32 30 20 20 2f 2a 20 53 68 6f 77  0000020  /* Show
ab20: 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d   full column nam
ab30: 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a  es on SELECT */.
ab40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
ab50: 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78  hortColNames  0x
ab60: 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f  00000040  /* Sho
ab70: 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20  w short columns 
ab80: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
ab90: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
aba0: 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30 38  s      0x0000008
abb0: 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73  0  /* Count rows
abc0: 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45   changed by INSE
abd0: 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  RT, */.         
abe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac00: 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72   /*   DELETE, or
ac10: 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75   UPDATE and retu
ac20: 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  rn */.          
ac30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac50: 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75  /*   the count u
ac60: 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e  sing a callback.
ac70: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ac80: 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20  TE_NullCallback 
ac90: 20 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a    0x00000100  /*
aca0: 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c   Invoke the call
acb0: 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65  back once if the
acc0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
acd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ace0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
acf0: 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73     result set is
ad00: 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
ad10: 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  e SQLITE_SqlTrac
ad20: 65 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32  e       0x000002
ad30: 30 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69  00  /* Debug pri
ad40: 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65  nt SQL as it exe
ad50: 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cutes */.#define
ad60: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
ad70: 69 6e 67 20 20 20 20 30 78 30 30 30 30 30 34 30  ing    0x0000040
ad80: 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74  0  /* Debug list
ad90: 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f  ings of VDBE pro
ada0: 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65  grams */.#define
adb0: 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68   SQLITE_WriteSch
adc0: 65 6d 61 20 20 20 20 30 78 30 30 30 30 30 38 30  ema    0x0000080
add0: 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61  0  /* OK to upda
ade0: 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52  te SQLITE_MASTER
adf0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ae00: 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63  TE_VdbeAddopTrac
ae10: 65 20 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a  e 0x00001000  /*
ae20: 20 54 72 61 63 65 20 73 71 6c 69 74 65 33 56 64   Trace sqlite3Vd
ae30: 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20  beAddOp() calls 
ae40: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ae50: 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20  E_IgnoreChecks  
ae60: 20 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20   0x00002000  /* 
ae70: 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63  Do not enforce c
ae80: 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73  heck constraints
ae90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
aea0: 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74  TE_ReadUncommitt
aeb0: 65 64 20 30 78 30 30 30 34 30 30 30 20 20 2f 2a  ed 0x0004000  /*
aec0: 20 46 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68   For shared-cach
aed0: 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e  e mode */.#defin
aee0: 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46  e SQLITE_LegacyF
aef0: 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30 38 30  ileFmt  0x000080
af00: 30 30 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65  00  /* Create ne
af10: 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66  w databases in f
af20: 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69  ormat 1 */.#defi
af30: 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65  ne SQLITE_Recove
af40: 72 79 4d 6f 64 65 20 20 20 30 78 30 30 30 31 30  ryMode   0x00010
af50: 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73  000  /* Ignore s
af60: 63 68 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a  chema errors */.
af70: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
af80: 65 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78  everseOrder   0x
af90: 30 30 30 32 30 30 30 30 20 20 2f 2a 20 52 65 76  00020000  /* Rev
afa0: 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53  erse unordered S
afb0: 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e  ELECTs */.#defin
afc0: 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67  e SQLITE_RecTrig
afd0: 67 65 72 73 20 20 20 20 30 78 30 30 30 34 30 30  gers    0x000400
afe0: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65  00  /* Enable re
aff0: 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73  cursive triggers
b000: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b010: 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20  TE_ForeignKeys  
b020: 20 20 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a    0x00080000  /*
b030: 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e   Enforce foreign
b040: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
b050: 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c    */.#define SQL
b060: 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20  ITE_AutoIndex   
b070: 20 20 20 30 78 30 30 31 30 30 30 30 30 20 20 2f     0x00100000  /
b080: 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74  * Enable automat
b090: 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64  ic indexes */.#d
b0a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 65  efine SQLITE_Pre
b0b0: 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30  ferBuiltin  0x00
b0c0: 32 30 30 30 30 30 20 20 2f 2a 20 50 72 65 66 65  200000  /* Prefe
b0d0: 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69  rence to built-i
b0e0: 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69  n funcs */.#defi
b0f0: 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78  ne SQLITE_LoadEx
b100: 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 34 30 30  tension  0x00400
b110: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c  000  /* Enable l
b120: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f  oad_extension */
b130: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b140: 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20 30  EnableTrigger  0
b150: 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20 54 72  x00800000  /* Tr
b160: 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69  ue to enable tri
b170: 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  ggers */.#define
b180: 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73   SQLITE_DeferFKs
b190: 20 20 20 20 20 20 20 30 78 30 31 30 30 30 30 30         0x0100000
b1a0: 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20  0  /* Defer all 
b1b0: 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  FK constraints *
b1c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b1d0: 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20  _QueryOnly      
b1e0: 30 78 30 32 30 30 30 30 30 30 20 20 2f 2a 20 44  0x02000000  /* D
b1f0: 69 73 61 62 6c 65 20 64 61 74 61 62 61 73 65 20  isable database 
b200: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
b210: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51  ne SQLITE_VdbeEQ
b220: 50 20 20 20 20 20 20 20 20 30 78 30 34 30 30 30  P        0x04000
b230: 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58  000  /* Debug EX
b240: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
b250: 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73   */.../*.** Bits
b260: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e   of the sqlite3.
b270: 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64  dbOptFlags field
b280: 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 62   that are used b
b290: 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  y the.** sqlite3
b2a0: 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51  _test_control(SQ
b2b0: 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50  LITE_TESTCTRL_OP
b2c0: 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29  TIMIZATIONS,...)
b2d0: 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a   interface to.**
b2e0: 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73   selectively dis
b2f0: 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74  able various opt
b300: 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23  imizations..*/.#
b310: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75  define SQLITE_Qu
b320: 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30  eryFlattener 0x0
b330: 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66  001   /* Query f
b340: 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65  lattening */.#de
b350: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75  fine SQLITE_Colu
b360: 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30 30 30  mnCache    0x000
b370: 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61  2   /* Column ca
b380: 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  che */.#define S
b390: 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64  QLITE_GroupByOrd
b3a0: 65 72 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a  er   0x0004   /*
b3b0: 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f   GROUPBY cover o
b3c0: 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65  f ORDERBY */.#de
b3d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74  fine SQLITE_Fact
b3e0: 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30  orOutConst 0x000
b3f0: 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  8   /* Constant 
b400: 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20  factoring */./* 
b410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
b420: 6f 74 20 75 73 65 64 20 20 20 20 30 78 30 30 31  ot used    0x001
b430: 30 20 20 20 2f 2f 20 57 61 73 3a 20 53 51 4c 49  0   // Was: SQLI
b440: 54 45 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20  TE_IdxRealAsInt 
b450: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b460: 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20  E_DistinctOpt   
b470: 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44 49 53   0x0020   /* DIS
b480: 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65  TINCT using inde
b490: 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  xes */.#define S
b4a0: 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63  QLITE_CoverIdxSc
b4b0: 61 6e 20 20 20 30 78 30 30 34 30 20 20 20 2f 2a  an   0x0040   /*
b4c0: 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20   Covering index 
b4d0: 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  scans */.#define
b4e0: 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49   SQLITE_OrderByI
b4f0: 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20 20 20  dxJoin 0x0080   
b500: 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a  /* ORDER BY of j
b510: 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a  oins via index *
b520: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b530: 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65 20 20  _SubqCoroutine  
b540: 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76 61 6c  0x0100   /* Eval
b550: 75 61 74 65 20 73 75 62 71 75 65 72 69 65 73 20  uate subqueries 
b560: 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a 2f  as coroutines */
b570: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b580: 54 72 61 6e 73 69 74 69 76 65 20 20 20 20 20 30  Transitive     0
b590: 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61 6e 73  x0200   /* Trans
b5a0: 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74  itive constraint
b5b0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b5c0: 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e  ITE_OmitNoopJoin
b5d0: 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20 4f     0x0400   /* O
b5e0: 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65  mit unused table
b5f0: 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64  s in joins */.#d
b600: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61  efine SQLITE_Sta
b610: 74 33 34 20 20 20 20 20 20 20 20 20 30 78 30 38  t34         0x08
b620: 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41 54  00   /* Use STAT
b630: 33 20 6f 72 20 53 54 41 54 34 20 64 61 74 61 20  3 or STAT4 data 
b640: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b650: 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20 20  E_AllOpts       
b660: 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c   0xffff   /* All
b670: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a   optimizations *
b680: 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  /../*.** Macros 
b690: 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65 74  for testing whet
b6a0: 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d  her or not optim
b6b0: 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e 61  izations are ena
b6c0: 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64  bled or disabled
b6d0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
b6e0: 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
b6f0: 5f 54 45 53 54 0a 23 64 65 66 69 6e 65 20 4f 70  _TEST.#define Op
b700: 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c  timizationDisabl
b710: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28  ed(db, mask)  ((
b720: 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73  (db)->dbOptFlags
b730: 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65  &(mask))!=0).#de
b740: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
b750: 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  nEnabled(db, mas
b760: 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f  k)   (((db)->dbO
b770: 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d  ptFlags&(mask))=
b780: 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  =0).#else.#defin
b790: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69  e OptimizationDi
b7a0: 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  sabled(db, mask)
b7b0: 20 20 30 0a 23 64 65 66 69 6e 65 20 4f 70 74 69    0.#define Opti
b7c0: 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28  mizationEnabled(
b7d0: 64 62 2c 20 6d 61 73 6b 29 20 20 20 31 0a 23 65  db, mask)   1.#e
b7e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  ndif../*.** Retu
b7f0: 72 6e 20 74 72 75 65 20 69 66 20 69 74 20 4f 4b  rn true if it OK
b800: 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73 74   to factor const
b810: 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ant expressions 
b820: 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69 61 6c  into the initial
b830: 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e  ization.** code.
b840: 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73   The argument is
b850: 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63 74 20   a Parse object 
b860: 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67 65 6e  for the code gen
b870: 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69  erator..*/.#defi
b880: 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b  ne ConstFactorOk
b890: 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73  (P) ((P)->okCons
b8a0: 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20  tFactor)../*.** 
b8b0: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
b8c0: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d  for the sqlite.m
b8d0: 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54  agic field..** T
b8e0: 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f  he numbers are o
b8f0: 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f  btained at rando
b900: 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70  m and have no sp
b910: 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f  ecial meaning, o
b920: 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69  ther.** than bei
b930: 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  ng distinct from
b940: 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f   one another..*/
b950: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b960: 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30  MAGIC_OPEN     0
b970: 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61  xa029a697  /* Da
b980: 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a  tabase is open *
b990: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b9a0: 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20  _MAGIC_CLOSED   
b9b0: 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44  0x9f3c2d33  /* D
b9c0: 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65  atabase is close
b9d0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
b9e0: 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20  ITE_MAGIC_SICK  
b9f0: 20 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f     0x4b771290  /
ba00: 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69  * Error and awai
ba10: 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64  ting close */.#d
ba20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
ba30: 49 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30  IC_BUSY     0xf0
ba40: 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62  3b7906  /* Datab
ba50: 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  ase currently in
ba60: 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20   use */.#define 
ba70: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
ba80: 4f 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30  OR    0xb5357930
ba90: 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d    /* An SQLITE_M
baa0: 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75  ISUSE error occu
bab0: 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rred */.#define 
bac0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d  SQLITE_MAGIC_ZOM
bad0: 42 49 45 20 20 20 30 78 36 34 63 66 66 63 37 66  BIE   0x64cffc7f
bae0: 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20    /* Close with 
baf0: 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63  last statement c
bb00: 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  lose */../*.** E
bb10: 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ach SQL function
bb20: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
bb30: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
bb40: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
bb50: 74 72 75 63 74 75 72 65 2e 20 20 41 20 70 6f 69  tructure.  A poi
bb60: 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
bb70: 75 63 74 75 72 65 20 69 73 20 73 74 6f 72 65 64  ucture is stored
bb80: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61   in the sqlite.a
bb90: 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74 61 62  Func.** hash tab
bba0: 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74 69 70  le.  When multip
bbb0: 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76  le functions hav
bbc0: 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c  e the same name,
bbd0: 20 74 68 65 20 68 61 73 68 20 74 61 62 6c 65 0a   the hash table.
bbe0: 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6c  ** points to a l
bbf0: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 74 68  inked list of th
bc00: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 2e 0a  ese structures..
bc10: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
bc20: 66 20 7b 0a 20 20 69 31 36 20 6e 41 72 67 3b 20  f {.  i16 nArg; 
bc30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
bc40: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
bc50: 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c  s.  -1 means unl
bc60: 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31 36 20  imited */.  u16 
bc70: 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20  funcFlags;      
bc80: 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61   /* Some combina
bc90: 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46  tion of SQLITE_F
bca0: 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20  UNC_* */.  void 
bcb0: 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20  *pUserData;     
bcc0: 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72  /* User data par
bcd0: 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63  ameter */.  Func
bce0: 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  Def *pNext;     
bcf0: 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f   /* Next functio
bd00: 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65  n with same name
bd10: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 75   */.  void (*xFu
bd20: 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  nc)(sqlite3_cont
bd30: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
bd40: 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 52 65  _value**); /* Re
bd50: 67 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 2a  gular function *
bd60: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70  /.  void (*xStep
bd70: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
bd80: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
bd90: 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67 67 72  alue**); /* Aggr
bda0: 65 67 61 74 65 20 73 74 65 70 20 2a 2f 0a 20 20  egate step */.  
bdb0: 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65  void (*xFinalize
bdc0: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
bdd0: 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  t*);            
bde0: 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65      /* Aggregate
bdf0: 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20   finalizer */.  
be00: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
be10: 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65       /* SQL name
be20: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
be30: 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a  . */.  FuncDef *
be40: 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e  pHash;      /* N
be50: 65 78 74 20 77 69 74 68 20 61 20 64 69 66 66 65  ext with a diffe
be60: 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68  rent name but th
be70: 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20  e same hash */. 
be80: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
be90: 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20  *pDestructor;   
bea0: 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75  /* Reference cou
beb0: 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20  nted destructor 
bec0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a  function */.};..
bed0: 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63  /*.** This struc
bee0: 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65  ture encapsulate
bef0: 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f  s a user-functio
bf00: 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c  n destructor cal
bf10: 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e  lback (as.** con
bf20: 66 69 67 75 72 65 64 20 75 73 69 6e 67 20 63 72  figured using cr
bf30: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32  eate_function_v2
bf40: 28 29 29 20 61 6e 64 20 61 20 72 65 66 65 72 65  ()) and a refere
bf50: 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65  nce counter. Whe
bf60: 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63  n.** create_func
bf70: 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c  tion_v2() is cal
bf80: 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  led to create a 
bf90: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20  function with a 
bfa0: 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61  destructor,.** a
bfb0: 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f   single object o
bfc0: 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61  f this type is a
bfd0: 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65  llocated. FuncDe
bfe0: 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73  structor.nRef is
bff0: 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68 65 20   set to .** the 
c000: 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65  number of FuncDe
c010: 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65  f objects create
c020: 64 20 28 65 69 74 68 65 72 20 31 20 6f 72 20 33  d (either 1 or 3
c030: 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  , depending on w
c040: 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74  hether.** or not
c050: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65   the specified e
c060: 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54  ncoding is SQLIT
c070: 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63  E_ANY). The Func
c080: 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a  Def.pDestructor.
c090: 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63  ** member of eac
c0a0: 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e  h of the new Fun
c0b0: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20  cDef objects is 
c0c0: 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  set to point to 
c0d0: 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a  the allocated.**
c0e0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e   FuncDestructor.
c0f0: 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65  .**.** Thereafte
c100: 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74  r, when one of t
c110: 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  he FuncDef objec
c120: 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74  ts is deleted, t
c130: 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20  he reference.** 
c140: 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62  count on this ob
c150: 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e  ject is decremen
c160: 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61  ted. When it rea
c170: 63 68 65 73 20 30 2c 20 74 68 65 20 64 65 73 74  ches 0, the dest
c180: 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76  ructor.** is inv
c190: 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e  oked and the Fun
c1a0: 63 44 65 73 74 72 75 63 74 6f 72 20 73 74 72 75  cDestructor stru
c1b0: 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a  cture freed..*/.
c1c0: 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72  struct FuncDestr
c1d0: 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52  uctor {.  int nR
c1e0: 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  ef;.  void (*xDe
c1f0: 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a  stroy)(void *);.
c200: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74    void *pUserDat
c210: 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  a;.};../*.** Pos
c220: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
c230: 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20   FuncDef.flags. 
c240: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f   Note that the _
c250: 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45  LENGTH and _TYPE
c260: 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73  OF.** values mus
c270: 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20  t correspond to 
c280: 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
c290: 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45   and OPFLAG_TYPE
c2a0: 4f 46 41 52 47 2e 20 20 54 68 65 72 65 0a 2a 2a  OFARG.  There.**
c2b0: 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74   are assert() st
c2c0: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
c2d0: 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74  code to verify t
c2e0: 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  his..*/.#define 
c2f0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d  SQLITE_FUNC_ENCM
c300: 41 53 4b 20 20 30 78 30 30 33 20 2f 2a 20 53 51  ASK  0x003 /* SQ
c310: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
c320: 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55 54 46  E_UTF16BE or UTF
c330: 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  16LE */.#define 
c340: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45  SQLITE_FUNC_LIKE
c350: 20 20 20 20 20 30 78 30 30 34 20 2f 2a 20 43 61       0x004 /* Ca
c360: 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20  ndidate for the 
c370: 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f  LIKE optimizatio
c380: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
c390: 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20  ITE_FUNC_CASE   
c3a0: 20 20 30 78 30 30 38 20 2f 2a 20 43 61 73 65 2d    0x008 /* Case-
c3b0: 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74  sensitive LIKE-t
c3c0: 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ype function */.
c3d0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
c3e0: 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30  UNC_EPHEM    0x0
c3f0: 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e  10 /* Ephemeral.
c400: 20 20 44 65 6c 65 74 65 20 77 69 74 68 20 56 44    Delete with VD
c410: 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  BE */.#define SQ
c420: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
c430: 4c 4c 20 30 78 30 32 30 20 2f 2a 20 73 71 6c 69  LL 0x020 /* sqli
c440: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
c450: 71 28 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c  q() might be cal
c460: 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  led */.#define S
c470: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54  QLITE_FUNC_LENGT
c480: 48 20 20 20 30 78 30 34 30 20 2f 2a 20 42 75 69  H   0x040 /* Bui
c490: 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66  lt-in length() f
c4a0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
c4b0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54  ne SQLITE_FUNC_T
c4c0: 59 50 45 4f 46 20 20 20 30 78 30 38 30 20 2f 2a  YPEOF   0x080 /*
c4d0: 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66   Built-in typeof
c4e0: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
c4f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
c500: 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 31 30  NC_COUNT    0x10
c510: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f  0 /* Built-in co
c520: 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74 65  unt(*) aggregate
c530: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c540: 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45  TE_FUNC_COALESCE
c550: 20 30 78 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d   0x200 /* Built-
c560: 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f 72  in coalesce() or
c570: 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65   ifnull() */.#de
c580: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
c590: 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 34 30 30 20  _UNLIKELY 0x400 
c5a0: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69  /* Built-in unli
c5b0: 6b 65 6c 79 28 29 20 66 75 6e 63 74 69 6f 6e 20  kely() function 
c5c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c5d0: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
c5e0: 30 78 38 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e  0x800 /* Constan
c5f0: 74 20 69 6e 70 75 74 73 20 67 69 76 65 20 61 20  t inputs give a 
c600: 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70 75 74 20  constant output 
c610: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c620: 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 30  E_FUNC_MINMAX  0
c630: 78 31 30 30 30 20 2f 2a 20 54 72 75 65 20 66 6f  x1000 /* True fo
c640: 72 20 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78 28  r min() and max(
c650: 29 20 61 67 67 72 65 67 61 74 65 73 20 2a 2f 0a  ) aggregates */.
c660: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
c670: 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f  wing three macro
c680: 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c  s, FUNCTION(), L
c690: 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47  IKEFUNC() and AG
c6a0: 47 52 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a  GREGATE() are.**
c6b0: 20 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   used to create 
c6c0: 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73  the initializers
c6d0: 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66   for the FuncDef
c6e0: 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a   structures..**.
c6f0: 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e  **   FUNCTION(zN
c700: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
c710: 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20   bNC, xFunc).** 
c720: 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
c730: 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63  te a scalar func
c740: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
c750: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e  of a function zN
c760: 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c  ame .**     impl
c770: 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66 75 6e  emented by C fun
c780: 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68 61 74  ction xFunc that
c790: 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72   accepts nArg ar
c7a0: 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20  guments. The.** 
c7b0: 20 20 20 20 76 61 6c 75 65 20 70 61 73 73 65 64      value passed
c7c0: 20 61 73 20 69 41 72 67 20 69 73 20 63 61 73 74   as iArg is cast
c7d0: 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20 61 6e   to a (void*) an
c7e0: 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65  d made available
c7f0: 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65 20 75  .**     as the u
c800: 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65  ser-data (sqlite
c810: 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 20 66  3_user_data()) f
c820: 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  or the function.
c830: 20 49 66 20 0a 2a 2a 20 20 20 20 20 61 72 67 75   If .**     argu
c840: 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75 65  ment bNC is true
c850: 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49 54  , then the SQLIT
c860: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
c870: 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a  flag is set..**.
c880: 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e 28 7a  **   VFUNCTION(z
c890: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
c8a0: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
c8b0: 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49       Like FUNCTI
c8c0: 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69  ON except it omi
c8d0: 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  ts the SQLITE_FU
c8e0: 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67  NC_CONSTANT flag
c8f0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47  ..**.**   AGGREG
c900: 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
c910: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65   iArg, bNC, xSte
c920: 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20  p, xFinal).**   
c930: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
c940: 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75   an aggregate fu
c950: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
c960: 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  n implemented by
c970: 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66 75  .**     the C fu
c980: 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e  nctions xStep an
c990: 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69  d xFinal. The fi
c9a0: 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74  rst four paramet
c9b0: 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69  ers.**     are i
c9c0: 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20 74 68  nterpreted in th
c9d0: 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68  e same way as th
c9e0: 65 20 66 69 72 73 74 20 34 20 70 61 72 61 6d 65  e first 4 parame
c9f0: 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46  ters to.**     F
ca00: 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a  UNCTION()..**.**
ca10: 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d     LIKEFUNC(zNam
ca20: 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66  e, nArg, pArg, f
ca30: 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65  lags).**     Use
ca40: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
ca50: 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
ca60: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
ca70: 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a  nction zName .**
ca80: 20 20 20 20 20 74 68 61 74 20 61 63 63 65 70 74       that accept
ca90: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
caa0: 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e   and is implemen
cab0: 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f  ted by a call to
cac0: 20 43 20 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74   C .**     funct
cad0: 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72  ion likeFunc. Ar
cae0: 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63  gument pArg is c
caf0: 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a  ast to a (void *
cb00: 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20  ) and made.**   
cb10: 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74    available as t
cb20: 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72  he function user
cb30: 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
cb40: 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65  ser_data()). The
cb50: 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e  .**     FuncDef.
cb60: 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65 20 69  flags variable i
cb70: 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  s set to the val
cb80: 75 65 20 70 61 73 73 65 64 20 61 73 20 74 68 65  ue passed as the
cb90: 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61   flags.**     pa
cba0: 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  rameter..*/.#def
cbb0: 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ine FUNCTION(zNa
cbc0: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
cbd0: 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
cbe0: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
cbf0: 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
cc00: 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
cc10: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
cc20: 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
cc30: 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
cc40: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
cc50: 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a  , #zName, 0, 0}.
cc60: 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54 49 4f  #define VFUNCTIO
cc70: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
cc80: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
cc90: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
cca0: 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
ccb0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
ccc0: 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
ccd0: 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
cce0: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
ccf0: 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a  , #zName, 0, 0}.
cd00: 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e  #define FUNCTION
cd10: 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  2(zName, nArg, i
cd20: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c  Arg, bNC, xFunc,
cd30: 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20   extraFlags) \. 
cd40: 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55   {nArg,SQLITE_FU
cd50: 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
cd60: 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
cd70: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
cd80: 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a  L)|extraFlags,\.
cd90: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
cda0: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
cdb0: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
cdc0: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
cdd0: 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a  e STR_FUNCTION(z
cde0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67  Name, nArg, pArg
cdf0: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
ce00: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
ce10: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
ce20: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
ce30: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
ce40: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c  OLL), \.   pArg,
ce50: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
ce60: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
ce70: 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28  define LIKEFUNC(
ce80: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
ce90: 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  , flags) \.  {nA
cea0: 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
ceb0: 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
cec0: 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20  UTF8|flags, \.  
ced0: 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c   (void *)arg, 0,
cee0: 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c   likeFunc, 0, 0,
cef0: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
cf00: 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
cf10: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
cf20: 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
cf30: 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  inal) \.  {nArg,
cf40: 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
cf50: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
cf60: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
cf70: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
cf80: 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70  rg), 0, 0, xStep
cf90: 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30  ,xFinal,#zName,0
cfa0: 2c 30 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52  ,0}.#define AGGR
cfb0: 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41  EGATE2(zName, nA
cfc0: 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74  rg, arg, nc, xSt
cfd0: 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72  ep, xFinal, extr
cfe0: 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72  aFlags) \.  {nAr
cff0: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
d000: 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  nc*SQLITE_FUNC_N
d010: 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c  EEDCOLL)|extraFl
d020: 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  ags, \.   SQLITE
d030: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29  _INT_TO_PTR(arg)
d040: 2c 20 30 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  , 0, 0, xStep,xF
d050: 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d  inal,#zName,0,0}
d060: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72  ../*.** All curr
d070: 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61  ent savepoints a
d080: 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c  re stored in a l
d090: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
d0a0: 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65  ing at.** sqlite
d0b0: 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68  3.pSavepoint. Th
d0c0: 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
d0d0: 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20 74  in the list is t
d0e0: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79  he most recently
d0f0: 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70  .** opened savep
d100: 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73  oint. Savepoints
d110: 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 74 68   are added to th
d120: 65 20 6c 69 73 74 20 62 79 20 74 68 65 20 76 64  e list by the vd
d130: 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69  be.** OP_Savepoi
d140: 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
d150: 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f  */.struct Savepo
d160: 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  int {.  char *zN
d170: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
d180: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
d190: 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e  avepoint name (n
d1a0: 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a  ul-terminated) *
d1b0: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
d1c0: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
d1d0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
d1e0: 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b  r of deferred fk
d1f0: 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20   violations */. 
d200: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d   i64 nDeferredIm
d210: 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  mCons;          
d220: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
d230: 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d 20 66  f deferred imm f
d240: 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e  k. */.  Savepoin
d250: 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  t *pNext;       
d260: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
d270: 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20  arent savepoint 
d280: 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a  (if any) */.};..
d290: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
d2a0: 69 6e 67 20 61 72 65 20 75 73 65 64 20 61 73 20  ing are used as 
d2b0: 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d  the second param
d2c0: 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53  eter to sqlite3S
d2d0: 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61  avepoint(),.** a
d2e0: 6e 64 20 61 73 20 74 68 65 20 50 31 20 61 72 67  nd as the P1 arg
d2f0: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f  ument to the OP_
d300: 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75  Savepoint instru
d310: 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ction..*/.#defin
d320: 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  e SAVEPOINT_BEGI
d330: 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65  N      0.#define
d340: 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41   SAVEPOINT_RELEA
d350: 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20  SE    1.#define 
d360: 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
d370: 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45  CK   2.../*.** E
d380: 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c  ach SQLite modul
d390: 65 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65  e (virtual table
d3a0: 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20   definition) is 
d3b0: 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a  defined by an.**
d3c0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
d3d0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
d3e0: 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20  ture, stored in 
d3f0: 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64  the sqlite3.aMod
d400: 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c  ule.** hash tabl
d410: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64  e..*/.struct Mod
d420: 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71  ule {.  const sq
d430: 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
d440: 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20  odule;       /* 
d450: 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72  Callback pointer
d460: 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  s */.  const cha
d470: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
d480: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d490: 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63 72  ame passed to cr
d4a0: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
d4b0: 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20  .  void *pAux;  
d4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4d0: 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20          /* pAux 
d4e0: 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65  passed to create
d4f0: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76  _module() */.  v
d500: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
d510: 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20  void *);        
d520: 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65      /* Module de
d530: 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f  structor functio
d540: 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69  n */.};../*.** i
d550: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
d560: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   each column of 
d570: 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20  an SQL table is 
d580: 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61  held in an insta
d590: 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  nce.** of this s
d5a0: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
d5b0: 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63  uct Column {.  c
d5c0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
d5d0: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
d5e0: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72  column */.  Expr
d5f0: 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20   *pDflt;     /* 
d600: 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66  Default value of
d610: 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   this column */.
d620: 20 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b 20 20    char *zDflt;  
d630: 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74     /* Original t
d640: 65 78 74 20 6f 66 20 74 68 65 20 64 65 66 61 75  ext of the defau
d650: 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68  lt value */.  ch
d660: 61 72 20 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f  ar *zType;     /
d670: 2a 20 44 61 74 61 20 74 79 70 65 20 66 6f 72 20  * Data type for 
d680: 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  this column */. 
d690: 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20   char *zColl;   
d6a0: 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
d6b0: 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c  equence.  If NUL
d6c0: 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66 61 75  L, use the defau
d6d0: 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75  lt */.  u8 notNu
d6e0: 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f  ll;      /* An O
d6f0: 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64  E_ code for hand
d700: 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20  ling a NOT NULL 
d710: 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20  constraint */.  
d720: 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
d730: 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53   /* One of the S
d740: 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61  QLITE_AFF_... va
d750: 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45  lues */.  u8 szE
d760: 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73  st;        /* Es
d770: 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20  timated size of 
d780: 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 20 49 4e  this column.  IN
d790: 54 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c  T==1 */.  u8 col
d7a0: 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f  Flags;     /* Bo
d7b0: 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73  olean properties
d7c0: 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20  .  See COLFLAG_ 
d7d0: 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f  defines below */
d7e0: 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20  .};../* Allowed 
d7f0: 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d  values for Colum
d800: 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23  n.colFlags:.*/.#
d810: 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50  define COLFLAG_P
d820: 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20  RIMKEY  0x0001  
d830: 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70    /* Column is p
d840: 61 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61  art of the prima
d850: 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  ry key */.#defin
d860: 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  e COLFLAG_HIDDEN
d870: 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20     0x0002    /* 
d880: 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20  A hidden column 
d890: 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  in a virtual tab
d8a0: 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22  le */../*.** A "
d8b0: 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e  Collating Sequen
d8c0: 63 65 22 20 69 73 20 64 65 66 69 6e 65 64 20 62  ce" is defined b
d8d0: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
d8e0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   the following.*
d8f0: 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e  * structure. Con
d900: 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c  ceptually, a col
d910: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
d920: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61  consists of a na
d930: 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70  me and.** a comp
d940: 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74  arison routine t
d950: 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20  hat defines the 
d960: 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20 73 65  order of that se
d970: 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  quence..**.** If
d980: 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73   CollSeq.xCmp is
d990: 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20   NULL, it means 
d9a0: 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c  that the.** coll
d9b0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69  ating sequence i
d9c0: 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e  s undefined.  In
d9d0: 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61  dices built on a
d9e0: 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63  n undefined.** c
d9f0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
da00: 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61  e may not be rea
da10: 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f  d or written..*/
da20: 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20  .struct CollSeq 
da30: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
da40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
da50: 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69  e of the collati
da60: 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46  ng sequence, UTF
da70: 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20  -8 encoded */.  
da80: 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
da90: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
daa0: 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62  coding handled b
dab0: 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f  y xCmp() */.  vo
dac0: 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20  id *pUser;      
dad0: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
dae0: 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20  ument to xCmp() 
daf0: 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29  */.  int (*xCmp)
db00: 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73  (void*,int, cons
db10: 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f  t void*, int, co
db20: 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f  nst void*);.  vo
db30: 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a  id (*xDel)(void*
db40: 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f  );  /* Destructo
db50: 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d  r for pUser */.}
db60: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20  ;../*.** A sort 
db70: 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65 69 74  order can be eit
db80: 68 65 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e  her ASC or DESC.
db90: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
dba0: 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20  TE_SO_ASC       
dbb0: 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73  0  /* Sort in as
dbc0: 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f  cending order */
dbd0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dbe0: 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31 20 20  SO_DESC      1  
dbf0: 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
dc00: 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 0a 2f  ding order */../
dc10: 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69  *.** Column affi
dc20: 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a  nity types..**.*
dc30: 2a 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 20  * These used to 
dc40: 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61  have mnemonic na
dc50: 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f 72 20  me like 'i' for 
dc60: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
dc70: 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f  ER and.** 't' fo
dc80: 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  r SQLITE_AFF_TEX
dc90: 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e 20 73  T.  But we can s
dca0: 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61  ave a little spa
dcb0: 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a  ce and improve.*
dcc0: 2a 20 74 68 65 20 73 70 65 65 64 20 61 20 6c 69  * the speed a li
dcd0: 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72 69 6e  ttle by numberin
dce0: 67 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e  g the values con
dcf0: 73 65 63 75 74 69 76 65 6c 79 2e 20 20 0a 2a 2a  secutively.  .**
dd00: 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72 20 74  .** But rather t
dd10: 68 61 6e 20 73 74 61 72 74 20 77 69 74 68 20 30  han start with 0
dd20: 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20   or 1, we begin 
dd30: 77 69 74 68 20 27 41 27 2e 20 20 54 68 61 74 20  with 'A'.  That 
dd40: 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c  way,.** when mul
dd50: 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74  tiple affinity t
dd60: 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65  ypes are concate
dd70: 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72  nated into a str
dd80: 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20  ing and.** used 
dd90: 61 73 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e  as the P4 operan
dda0: 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20  d, they will be 
ddb0: 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a  more readable..*
ddc0: 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74  *.** Note also t
ddd0: 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20  hat the numeric 
dde0: 74 79 70 65 73 20 61 72 65 20 67 72 6f 75 70 65  types are groupe
ddf0: 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68  d together so th
de00: 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f  at testing.** fo
de10: 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65  r a numeric type
de20: 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d   is a single com
de30: 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20 74 68  parison.  And th
de40: 65 20 4e 4f 4e 45 20 74 79 70 65 20 69 73 20 66  e NONE type is f
de50: 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  irst..*/.#define
de60: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45   SQLITE_AFF_NONE
de70: 20 20 20 20 20 27 41 27 0a 23 64 65 66 69 6e 65       'A'.#define
de80: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
de90: 20 20 20 20 20 27 42 27 0a 23 64 65 66 69 6e 65       'B'.#define
dea0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45   SQLITE_AFF_NUME
deb0: 52 49 43 20 20 27 43 27 0a 23 64 65 66 69 6e 65  RIC  'C'.#define
dec0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
ded0: 47 45 52 20 20 27 44 27 0a 23 64 65 66 69 6e 65  GER  'D'.#define
dee0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c   SQLITE_AFF_REAL
def0: 20 20 20 20 20 27 45 27 0a 0a 23 64 65 66 69 6e       'E'..#defin
df00: 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72  e sqlite3IsNumer
df10: 69 63 41 66 66 69 6e 69 74 79 28 58 29 20 20 28  icAffinity(X)  (
df20: 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  (X)>=SQLITE_AFF_
df30: 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20  NUMERIC)../*.** 
df40: 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  The SQLITE_AFF_M
df50: 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73  ASK values masks
df60: 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66 69   off the signifi
df70: 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a  cant bits of an.
df80: 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75  ** affinity valu
df90: 65 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  e. .*/.#define S
dfa0: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20  QLITE_AFF_MASK  
dfb0: 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41     0x47../*.** A
dfc0: 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61  dditional bit va
dfd0: 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62 65  lues that can be
dfe0: 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61 66   ORed with an af
dff0: 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a  finity without.*
e000: 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61  * changing the a
e010: 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54  ffinity..**.** T
e020: 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c  he SQLITE_NOTNUL
e030: 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62  L flag is a comb
e040: 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45  ination of NULLE
e050: 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c  Q and JUMPIFNULL
e060: 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61  ..** It causes a
e070: 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 66 69  n assert() to fi
e080: 72 65 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  re if either ope
e090: 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72  rand to a compar
e0a0: 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72  ison.** operator
e0b0: 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73   is NULL.  It is
e0c0: 20 61 64 64 65 64 20 74 6f 20 63 65 72 74 61 69   added to certai
e0d0: 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65  n comparison ope
e0e0: 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f  rators to.** pro
e0f0: 76 65 20 74 68 61 74 20 74 68 65 20 6f 70 65 72  ve that the oper
e100: 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73 20  ands are always 
e110: 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65  NOT NULL..*/.#de
e120: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50  fine SQLITE_JUMP
e130: 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20 20 2f  IFNULL   0x10  /
e140: 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65  * jumps if eithe
e150: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
e160: 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
e170: 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20  ITE_STOREP2     
e180: 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72 65 20   0x20  /* Store 
e190: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32  result in reg[P2
e1a0: 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75  ] rather than ju
e1b0: 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  mp */.#define SQ
e1c0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20  LITE_NULLEQ     
e1d0: 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d    0x80  /* NULL=
e1e0: 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
e1f0: 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20  SQLITE_NOTNULL  
e200: 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41 73 73      0x90  /* Ass
e210: 65 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64  ert that operand
e220: 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c  s are never NULL
e230: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62   */../*.** An ob
e240: 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70  ject of this typ
e250: 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72  e is created for
e260: 20 65 61 63 68 20 76 69 72 74 75 61 6c 20 74 61   each virtual ta
e270: 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a  ble present in.*
e280: 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  * the database s
e290: 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66  chema. .**.** If
e2a0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
e2b0: 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
e2c0: 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e  then there is on
e2d0: 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
e2e0: 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  is.** structure 
e2f0: 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73  for each databas
e300: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71  e connection (sq
e310: 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75 73 65  lite3*) that use
e320: 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20  s the shared.** 
e330: 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20  schema. This is 
e340: 62 65 63 61 75 73 65 20 65 61 63 68 20 64 61 74  because each dat
e350: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
e360: 20 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77   requires its ow
e370: 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74  n unique.** inst
e380: 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69  ance of the sqli
e390: 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
e3a0: 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
e3b0: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
e3c0: 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61  e .** implementa
e3d0: 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74  tion. sqlite3_vt
e3e0: 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20  ab* handles can 
e3f0: 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20 62 65  not be shared be
e400: 74 77 65 65 6e 20 0a 2a 2a 20 64 61 74 61 62 61  tween .** databa
e410: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20  se connections, 
e420: 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65  even when the re
e430: 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d  st of the in-mem
e440: 6f 72 79 20 64 61 74 61 62 61 73 65 20 0a 2a 2a  ory database .**
e450: 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65   schema is share
e460: 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d  d, as the implem
e470: 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73  entation often s
e480: 74 6f 72 65 73 20 74 68 65 20 64 61 74 61 62 61  tores the databa
e490: 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  se.** connection
e4a0: 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74   handle passed t
e4b0: 6f 20 69 74 20 76 69 61 20 74 68 65 20 78 43 6f  o it via the xCo
e4c0: 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65 61  nnect() or xCrea
e4d0: 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64  te() method.** d
e4e0: 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61  uring initializa
e4f0: 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e  tion internally.
e500: 20 54 68 69 73 20 64 61 74 61 62 61 73 65 20 63   This database c
e510: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
e520: 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20   may.** then be 
e530: 75 73 65 64 20 62 79 20 74 68 65 20 76 69 72 74  used by the virt
e540: 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d  ual table implem
e550: 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63 65  entation to acce
e560: 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73 20 0a  ss real tables .
e570: 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64 61  ** within the da
e580: 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20  tabase. So that 
e590: 74 68 65 79 20 61 70 70 65 61 72 20 61 73 20 70  they appear as p
e5a0: 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65  art of the calle
e5b0: 72 73 20 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69  rs .** transacti
e5c0: 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73 73  on, these access
e5d0: 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61  es need to be ma
e5e0: 64 65 20 76 69 61 20 74 68 65 20 73 61 6d 65 20  de via the same 
e5f0: 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 63 6f 6e  database .** con
e600: 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20  nection as that 
e610: 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20  used to execute 
e620: 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f  SQL operations o
e630: 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
e640: 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56  ble..**.** All V
e650: 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68  Table objects th
e660: 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  at correspond to
e670: 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
e680: 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64  in a shared.** d
e690: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 61  atabase schema a
e6a0: 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f  re initially sto
e6b0: 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d  red in a linked-
e6c0: 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20  list pointed to 
e6d0: 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e  by.** the Table.
e6e0: 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76  pVTable member v
e6f0: 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63  ariable of the c
e700: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62  orresponding Tab
e710: 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68  le object..** Wh
e720: 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72  en an sqlite3_pr
e730: 65 70 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f  epare() operatio
e740: 6e 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f  n is required to
e750: 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
e760: 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74  ual.** table, it
e770: 20 73 65 61 72 63 68 65 73 20 74 68 65 20 6c 69   searches the li
e780: 73 74 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c  st for the VTabl
e790: 65 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  e that correspon
e7a0: 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74  ds to the.** dat
e7b0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
e7c0: 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61   doing the prepa
e7d0: 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73  ring so as to us
e7e0: 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a  e the correct.**
e7f0: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
e800: 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d  andle in the com
e810: 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a  piled query..**.
e820: 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65  ** When an in-me
e830: 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63  mory Table objec
e840: 74 20 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f  t is deleted (fo
e850: 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74  r example when t
e860: 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20  he.** schema is 
e870: 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66  being reloaded f
e880: 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c  or some reason),
e890: 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65   the VTable obje
e8a0: 63 74 73 20 61 72 65 20 6e 6f 74 20 0a 2a 2a 20  cts are not .** 
e8b0: 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20  deleted and the 
e8c0: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
e8d0: 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44  ndles are not xD
e8e0: 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 20 0a 2a  isconnect()ed .*
e8f0: 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49  * immediately. I
e900: 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61 72 65  nstead, they are
e910: 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20   moved from the 
e920: 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69  Table.pVTable li
e930: 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72  st to.** another
e940: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61   linked list hea
e950: 64 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  ded by the sqlit
e960: 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d  e3.pDisconnect m
e970: 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  ember of the.** 
e980: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71  corresponding sq
e990: 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65 2e  lite3 structure.
e9a0: 20 54 68 65 79 20 61 72 65 20 74 68 65 6e 20 64   They are then d
e9b0: 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65  eleted/xDisconne
e9c0: 63 74 65 64 20 0a 2a 2a 20 6e 65 78 74 20 74 69  cted .** next ti
e9d0: 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69  me a statement i
e9e0: 73 20 70 72 65 70 61 72 65 64 20 75 73 69 6e 67  s prepared using
e9f0: 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20   said sqlite3*. 
ea00: 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20  This is done.** 
ea10: 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63  to avoid deadloc
ea20: 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69  k issues involvi
ea30: 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69  ng multiple sqli
ea40: 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65  te3.mutex mutexe
ea50: 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63  s..** Refer to c
ea60: 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75  omments above fu
ea70: 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74  nction sqlite3Vt
ea80: 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66  abUnlockList() f
ea90: 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61  or an.** explana
eaa0: 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69  tion as to why i
eab0: 74 20 69 73 20 73 61 66 65 20 74 6f 20 61 64 64  t is safe to add
eac0: 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20   an entry to an 
ead0: 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e  sqlite3.pDisconn
eae0: 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68  ect.** list with
eaf0: 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  out holding the 
eb00: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71  corresponding sq
eb10: 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65  lite3.mutex mute
eb20: 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d  x..**.** The mem
eb30: 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  ory for objects 
eb40: 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
eb50: 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64  always allocated
eb60: 20 62 79 20 0a 2a 2a 20 73 71 6c 69 74 65 33 44   by .** sqlite3D
eb70: 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67  bMalloc(), using
eb80: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
eb90: 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e  handle stored in
eba0: 20 56 54 61 62 6c 65 2e 64 62 20 61 73 20 0a 2a   VTable.db as .*
ebb0: 2a 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75  * the first argu
ebc0: 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
ebd0: 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74  VTable {.  sqlit
ebe0: 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
ebf0: 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65       /* Database
ec00: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f   connection asso
ec10: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
ec20: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75   table */.  Modu
ec30: 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20  le *pMod;       
ec40: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
ec50: 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65   to module imple
ec60: 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73  mentation */.  s
ec70: 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
ec80: 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  ab;      /* Poin
ec90: 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e 73 74  ter to vtab inst
eca0: 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ance */.  int nR
ecb0: 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ef;             
ecc0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
ecd0: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69   pointers to thi
ece0: 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20  s structure */. 
ecf0: 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b   u8 bConstraint;
ed00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
ed10: 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74  ue if constraint
ed20: 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20  s are supported 
ed30: 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f  */.  int iSavepo
ed40: 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
ed50: 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65 20 53  * Depth of the S
ed60: 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a  AVEPOINT stack *
ed70: 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78  /.  VTable *pNex
ed80: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
ed90: 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20   Next in linked 
eda0: 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76 65 29  list (see above)
edb0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61   */.};../*.** Ea
edc0: 63 68 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20  ch SQL table is 
edd0: 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
ede0: 65 6d 6f 72 79 20 62 79 20 61 6e 20 69 6e 73 74  emory by an inst
edf0: 61 6e 63 65 20 6f 66 20 74 68 65 0a 2a 2a 20 66  ance of the.** f
ee00: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
ee10: 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e  re..**.** Table.
ee20: 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d  zName is the nam
ee30: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 20  e of the table. 
ee40: 20 54 68 65 20 63 61 73 65 20 6f 66 20 74 68 65   The case of the
ee50: 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a 20 43 52 45   original.** CRE
ee60: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
ee70: 65 6e 74 20 69 73 20 73 74 6f 72 65 64 2c 20 62  ent is stored, b
ee80: 75 74 20 63 61 73 65 20 69 73 20 6e 6f 74 20 73  ut case is not s
ee90: 69 67 6e 69 66 69 63 61 6e 74 20 66 6f 72 0a 2a  ignificant for.*
eea0: 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 2a  * comparisons..*
eeb0: 2a 0a 2a 2a 20 54 61 62 6c 65 2e 6e 43 6f 6c 20  *.** Table.nCol 
eec0: 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
eed0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73   columns in this
eee0: 20 74 61 62 6c 65 2e 20 20 54 61 62 6c 65 2e 61   table.  Table.a
eef0: 43 6f 6c 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e  Col is a.** poin
ef00: 74 65 72 20 74 6f 20 61 6e 20 61 72 72 61 79 20  ter to an array 
ef10: 6f 66 20 43 6f 6c 75 6d 6e 20 73 74 72 75 63 74  of Column struct
ef20: 75 72 65 73 2c 20 6f 6e 65 20 66 6f 72 20 65 61  ures, one for ea
ef30: 63 68 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a  ch column..**.**
ef40: 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 68 61   If the table ha
ef50: 73 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49  s an INTEGER PRI
ef60: 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 54  MARY KEY, then T
ef70: 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 74 68  able.iPKey is th
ef80: 65 20 69 6e 64 65 78 20 6f 66 0a 2a 2a 20 74 68  e index of.** th
ef90: 65 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69 73  e column that is
efa0: 20 74 68 61 74 20 6b 65 79 2e 20 20 20 4f 74 68   that key.   Oth
efb0: 65 72 77 69 73 65 20 54 61 62 6c 65 2e 69 50 4b  erwise Table.iPK
efc0: 65 79 20 69 73 20 6e 65 67 61 74 69 76 65 2e 20  ey is negative. 
efd0: 20 4e 6f 74 65 0a 2a 2a 20 74 68 61 74 20 74 68   Note.** that th
efe0: 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68  e datatype of th
eff0: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6d 75  e PRIMARY KEY mu
f000: 73 74 20 62 65 20 49 4e 54 45 47 45 52 20 66 6f  st be INTEGER fo
f010: 72 20 74 68 69 73 20 66 69 65 6c 64 20 74 6f 0a  r this field to.
f020: 2a 2a 20 62 65 20 73 65 74 2e 20 20 41 6e 20 49  ** be set.  An I
f030: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
f040: 45 59 20 69 73 20 75 73 65 64 20 61 73 20 74 68  EY is used as th
f050: 65 20 72 6f 77 69 64 20 66 6f 72 20 65 61 63 68  e rowid for each
f060: 20 72 6f 77 20 6f 66 0a 2a 2a 20 74 68 65 20 74   row of.** the t
f070: 61 62 6c 65 2e 20 20 49 66 20 61 20 74 61 62 6c  able.  If a tabl
f080: 65 20 68 61 73 20 6e 6f 20 49 4e 54 45 47 45 52  e has no INTEGER
f090: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68   PRIMARY KEY, th
f0a0: 65 6e 20 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69  en a random rowi
f0b0: 64 0a 2a 2a 20 69 73 20 67 65 6e 65 72 61 74 65  d.** is generate
f0c0: 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f  d for each row o
f0d0: 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54 46  f the table.  TF
f0e0: 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 69  _HasPrimaryKey i
f0f0: 73 20 73 65 74 20 69 66 0a 2a 2a 20 74 68 65 20  s set if.** the 
f100: 74 61 62 6c 65 20 68 61 73 20 61 6e 79 20 50 52  table has any PR
f110: 49 4d 41 52 59 20 4b 45 59 2c 20 49 4e 54 45 47  IMARY KEY, INTEG
f120: 45 52 20 6f 72 20 6f 74 68 65 72 77 69 73 65 2e  ER or otherwise.
f130: 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 74 6e 75  .**.** Table.tnu
f140: 6d 20 69 73 20 74 68 65 20 70 61 67 65 20 6e 75  m is the page nu
f150: 6d 62 65 72 20 66 6f 72 20 74 68 65 20 72 6f 6f  mber for the roo
f160: 74 20 42 54 72 65 65 20 70 61 67 65 20 6f 66 20  t BTree page of 
f170: 74 68 65 20 74 61 62 6c 65 20 69 6e 20 74 68 65  the table in the
f180: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c  .** database fil
f190: 65 2e 20 20 49 66 20 54 61 62 6c 65 2e 69 44 62  e.  If Table.iDb
f1a0: 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
f1b0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
f1c0: 62 6c 65 20 62 61 63 6b 65 6e 64 0a 2a 2a 20 69  ble backend.** i
f1d0: 6e 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 2e 20  n sqlite.aDb[]. 
f1e0: 20 30 20 69 73 20 66 6f 72 20 74 68 65 20 6d 61   0 is for the ma
f1f0: 69 6e 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  in database and 
f200: 31 20 69 73 20 66 6f 72 20 74 68 65 20 66 69 6c  1 is for the fil
f210: 65 20 74 68 61 74 0a 2a 2a 20 68 6f 6c 64 73 20  e that.** holds 
f220: 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
f230: 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 20 20 49   and indices.  I
f240: 66 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 69  f TF_Ephemeral i
f250: 73 20 73 65 74 0a 2a 2a 20 74 68 65 6e 20 74 68  s set.** then th
f260: 65 20 74 61 62 6c 65 20 69 73 20 73 74 6f 72 65  e table is store
f270: 64 20 69 6e 20 61 20 66 69 6c 65 20 74 68 61 74  d in a file that
f280: 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   is automaticall
f290: 79 20 64 65 6c 65 74 65 64 0a 2a 2a 20 77 68 65  y deleted.** whe
f2a0: 6e 20 74 68 65 20 56 44 42 45 20 63 75 72 73 6f  n the VDBE curso
f2b0: 72 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 69  r to the table i
f2c0: 73 20 63 6c 6f 73 65 64 2e 20 20 49 6e 20 74 68  s closed.  In th
f2d0: 69 73 20 63 61 73 65 20 54 61 62 6c 65 2e 74 6e  is case Table.tn
f2e0: 75 6d 20 0a 2a 2a 20 72 65 66 65 72 73 20 56 44  um .** refers VD
f2f0: 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  BE cursor number
f300: 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20   that holds the 
f310: 74 61 62 6c 65 20 6f 70 65 6e 2c 20 6e 6f 74 20  table open, not 
f320: 74 6f 20 74 68 65 20 72 6f 6f 74 0a 2a 2a 20 70  to the root.** p
f330: 61 67 65 20 6e 75 6d 62 65 72 2e 20 20 54 72 61  age number.  Tra
f340: 6e 73 69 65 6e 74 20 74 61 62 6c 65 73 20 61 72  nsient tables ar
f350: 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74  e used to hold t
f360: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 0a  he results of a.
f370: 2a 2a 20 73 75 62 2d 71 75 65 72 79 20 74 68 61  ** sub-query tha
f380: 74 20 61 70 70 65 61 72 73 20 69 6e 73 74 65 61  t appears instea
f390: 64 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c  d of a real tabl
f3a0: 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 20 46 52  e name in the FR
f3b0: 4f 4d 20 63 6c 61 75 73 65 20 0a 2a 2a 20 6f 66  OM clause .** of
f3c0: 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
f3d0: 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ent..*/.struct T
f3e0: 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a  able {.  char *z
f3f0: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
f400: 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
f410: 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20  le or view */.  
f420: 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20  Column *aCol;   
f430: 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
f440: 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63  ion about each c
f450: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78  olumn */.  Index
f460: 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20   *pIndex;       
f470: 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69  /* List of SQL i
f480: 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74  ndexes on this t
f490: 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63  able. */.  Selec
f4a0: 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
f4b0: 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c  /* NULL for tabl
f4c0: 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64  es.  Points to d
f4d0: 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76  efinition if a v
f4e0: 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  iew. */.  FKey *
f4f0: 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f  pFKey;         /
f500: 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  * Linked list of
f510: 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79   all foreign key
f520: 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
f530: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41  */.  char *zColA
f540: 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72  ff;       /* Str
f550: 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
f560: 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
f570: 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66 6e  h column */.#ifn
f580: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
f590: 43 48 45 43 4b 0a 20 20 45 78 70 72 4c 69 73 74  CHECK.  ExprList
f5a0: 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20   *pCheck;    /* 
f5b0: 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  All CHECK constr
f5c0: 61 69 6e 74 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  aints */.#endif.
f5d0: 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67    LogEst nRowLog
f5e0: 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61  Est;   /* Estima
f5f0: 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c  ted rows in tabl
f600: 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f  e - from sqlite_
f610: 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20  stat1 table */. 
f620: 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
f630: 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54        /* Root BT
f640: 72 65 65 20 6e 6f 64 65 20 66 6f 72 20 74 68 69  ree node for thi
f650: 73 20 74 61 62 6c 65 20 28 73 65 65 20 6e 6f 74  s table (see not
f660: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 31  e above) */.  i1
f670: 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20  6 iPKey;        
f680: 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67     /* If not neg
f690: 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b  ative, use aCol[
f6a0: 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20 70 72  iPKey] as the pr
f6b0: 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 20 20 69  imary key */.  i
f6c0: 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20  16 nCol;        
f6d0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
f6e0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73   columns in this
f6f0: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 31 36 20   table */.  u16 
f700: 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
f710: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f   /* Number of po
f720: 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 54  inters to this T
f730: 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  able */.  LogEst
f740: 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f   szTabRow;     /
f750: 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
f760: 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20 72   of each table r
f770: 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23  ow in bytes */.#
f780: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
f790: 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c  BLE_COSTMULT.  L
f7a0: 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20  ogEst costMult; 
f7b0: 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74      /* Cost mult
f7c0: 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67  iplier for using
f7d0: 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23   this table */.#
f7e0: 65 6e 64 69 66 0a 20 20 75 38 20 74 61 62 46 6c  endif.  u8 tabFl
f7f0: 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ags;         /* 
f800: 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c  Mask of TF_* val
f810: 75 65 73 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43  ues */.  u8 keyC
f820: 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
f830: 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63   What to do in c
f840: 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73  ase of uniquenes
f850: 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50  s conflict on iP
f860: 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  Key */.#ifndef S
f870: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
f880: 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43  TABLE.  int addC
f890: 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20  olOffset;    /* 
f8a0: 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45  Offset in CREATE
f8b0: 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61   TABLE stmt to a
f8c0: 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20  dd a new column 
f8d0: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
f8e0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
f8f0: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
f900: 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20   nModuleArg;    
f910: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
f920: 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20  rguments to the 
f930: 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72  module */.  char
f940: 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20   **azModuleArg; 
f950: 20 2f 2a 20 54 65 78 74 20 6f 66 20 61 6c 6c 20   /* Text of all 
f960: 6d 6f 64 75 6c 65 20 61 72 67 73 2e 20 5b 30 5d  module args. [0]
f970: 20 69 73 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 20   is module name 
f980: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54  */.  VTable *pVT
f990: 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73  able;     /* Lis
f9a0: 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65  t of VTable obje
f9b0: 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  cts. */.#endif. 
f9c0: 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
f9d0: 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  er;   /* List of
f9e0: 20 74 72 69 67 67 65 72 73 20 73 74 6f 72 65 64   triggers stored
f9f0: 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20   in pSchema */. 
fa00: 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
fa10: 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20  ;     /* Schema 
fa20: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
fa30: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61  is table */.  Ta
fa40: 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65  ble *pNextZombie
fa50: 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68  ;  /* Next on th
fa60: 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54  e Parse.pZombieT
fa70: 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  ab list */.};../
fa80: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
fa90: 75 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61  ues for Table.ta
faa0: 62 46 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69  bFlags..*/.#defi
fab0: 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20  ne TF_Readonly  
fac0: 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
fad0: 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65   Read-only syste
fae0: 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  m table */.#defi
faf0: 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20  ne TF_Ephemeral 
fb00: 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a        0x02    /*
fb10: 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61   An ephemeral ta
fb20: 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
fb30: 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20  F_HasPrimaryKey 
fb40: 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 61 62    0x04    /* Tab
fb50: 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61 72 79  le has a primary
fb60: 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
fb70: 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  TF_Autoincrement
fb80: 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 49 6e     0x08    /* In
fb90: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
fba0: 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65  y is autoincreme
fbb0: 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  nt */.#define TF
fbc0: 5f 56 69 72 74 75 61 6c 20 20 20 20 20 20 20 20  _Virtual        
fbd0: 20 30 78 31 30 20 20 20 20 2f 2a 20 49 73 20 61   0x10    /* Is a
fbe0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
fbf0: 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74  /.#define TF_Wit
fc00: 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 32  houtRowid    0x2
fc10: 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64  0    /* No rowid
fc20: 20 75 73 65 64 2e 20 50 52 49 4d 41 52 59 20 4b   used. PRIMARY K
fc30: 45 59 20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f  EY is the key */
fc40: 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f  .../*.** Test to
fc50: 20 73 65 65 20 77 68 65 74 68 65 72 20 6f 72 20   see whether or 
fc60: 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20 61  not a table is a
fc70: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
fc80: 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65   This is.** done
fc90: 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20 74   as a macro so t
fca0: 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20 6f  hat it will be o
fcb0: 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68 65  ptimized out whe
fcc0: 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  n virtual.** tab
fcd0: 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f 6d  le support is om
fce0: 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62  itted from the b
fcf0: 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  uild..*/.#ifndef
fd00: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
fd10: 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
fd20: 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
fd30: 20 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62        (((X)->tab
fd40: 46 6c 61 67 73 20 26 20 54 46 5f 56 69 72 74 75  Flags & TF_Virtu
fd50: 61 6c 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e  al)!=0).#  defin
fd60: 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
fd70: 28 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c  (X) (((X)->colFl
fd80: 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49  ags & COLFLAG_HI
fd90: 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c 73 65 0a  DDEN)!=0).#else.
fda0: 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74  #  define IsVirt
fdb0: 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23 20  ual(X)      0.# 
fdc0: 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
fdd0: 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64  Column(X) 0.#end
fde0: 69 66 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20  if../* Does the 
fdf0: 74 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77  table have a row
fe00: 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61  id */.#define Ha
fe10: 73 52 6f 77 69 64 28 58 29 20 20 20 20 20 28 28  sRowid(X)     ((
fe20: 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
fe30: 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29  TF_WithoutRowid)
fe40: 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ==0)../*.** Each
fe50: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
fe60: 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e  straint is an in
fe70: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
fe80: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
fe90: 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69  e..**.** A forei
fea0: 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69  gn key is associ
feb0: 61 74 65 64 20 77 69 74 68 20 74 77 6f 20 74 61  ated with two ta
fec0: 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d  bles.  The "from
fed0: 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  " table is.** th
fee0: 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
fef0: 74 61 69 6e 73 20 74 68 65 20 52 45 46 45 52 45  tains the REFERE
ff00: 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68 61 74  NCES clause that
ff10: 20 63 72 65 61 74 65 73 20 74 68 65 20 66 6f 72   creates the for
ff20: 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68  eign.** key.  Th
ff30: 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20  e "to" table is 
ff40: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69  the table that i
ff50: 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52  s named in the R
ff60: 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
ff70: 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68  ..** Consider th
ff80: 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a  is example:.**.*
ff90: 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42  *     CREATE TAB
ffa0: 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20  LE ex1(.**      
ffb0: 20 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41   a INTEGER PRIMA
ffc0: 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20  RY KEY,.**      
ffd0: 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54   b INTEGER CONST
ffe0: 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45  RAINT fk1 REFERE
fff0: 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20  NCES ex2(x).**  
10000 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20     );.**.** For 
10010 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31  foreign key "fk1
10020 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ", the from-tabl
10030 65 20 69 73 20 22 65 78 31 22 20 61 6e 64 20 74  e is "ex1" and t
10040 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22  he to-table is "
10050 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c  ex2"..** Equival
10060 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a  ent names:.**.**
10070 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20       from-table 
10080 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a  == child-table.*
10090 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65  *       to-table
100a0 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65   == parent-table
100b0 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45  .**.** Each REFE
100c0 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65  RENCES clause ge
100d0 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61  nerates an insta
100e0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
100f0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
10100 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63  * which is attac
10110 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d  hed to the from-
10120 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74  table.  The to-t
10130 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78  able need not ex
10140 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  ist when.** the 
10150 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72  from-table is cr
10160 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73  eated.  The exis
10170 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d  tence of the to-
10180 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65  table is not che
10190 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  cked..**.** The 
101a0 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65  list of all pare
101b0 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61  nts for child Ta
101c0 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61 74  ble X is held at
101d0 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20   X.pFKey..**.** 
101e0 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68  A list of all ch
101f0 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62  ildren for a tab
10200 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63  le named Z (whic
10210 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e  h might not even
10220 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65   exist).** is he
10230 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65  ld in Schema.fke
10240 79 48 61 73 68 20 77 69 74 68 20 61 20 68 61 73  yHash with a has
10250 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73  h key of Z..*/.s
10260 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54  truct FKey {.  T
10270 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20  able *pFrom;    
10280 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69   /* Table contai
10290 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e  ning the REFEREN
102a0 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a  CES clause (aka:
102b0 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65   Child) */.  FKe
102c0 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f  y *pNextFrom;  /
102d0 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68  * Next FKey with
102e0 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72   the same in pFr
102f0 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20  om. Next parent 
10300 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68  of pFrom */.  ch
10310 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20  ar *zTo;        
10320 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65  /* Name of table
10330 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f   that the key po
10340 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61  ints to (aka: Pa
10350 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20  rent) */.  FKey 
10360 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20  *pNextTo;    /* 
10370 4e 65 78 74 20 77 69 74 68 20 74 68 65 20 73 61  Next with the sa
10380 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69  me zTo. Next chi
10390 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20  ld of zTo. */.  
103a0 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20  FKey *pPrevTo;  
103b0 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69    /* Previous wi
103c0 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20  th the same zTo 
103d0 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20  */.  int nCol;  
103e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
103f0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
10400 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20  his key */.  /* 
10410 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31  EV: R-30323-2191
10420 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65  7 */.  u8 isDefe
10430 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54  rred;       /* T
10440 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
10450 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65  t checking is de
10460 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d  ferred till COMM
10470 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69  IT */.  u8 aActi
10480 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  on[2];        /*
10490 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f   ON DELETE and O
104a0 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73  N UPDATE actions
104b0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a  , respectively *
104c0 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54  /.  Trigger *apT
104d0 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69  rigger[2];/* Tri
104e0 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f  ggers for aActio
104f0 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  n[] actions */. 
10500 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20   struct sColMap 
10510 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e  {      /* Mappin
10520 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  g of columns in 
10530 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73  pFrom to columns
10540 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69   in zTo */.    i
10550 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20  nt iFrom;       
10560 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
10570 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d   column in pFrom
10580 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43   */.    char *zC
10590 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ol;           /*
105a0 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20   Name of column 
105b0 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c  in zTo.  If NULL
105c0 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59   use PRIMARY KEY
105d0 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b   */.  } aCol[1];
105e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
105f0 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
10600 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e  h of nCol column
10610 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  s */.};../*.** S
10620 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d  QLite supports m
10630 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61  any different wa
10640 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20  ys to resolve a 
10650 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
10660 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70  ror.  ROLLBACK p
10670 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
10680 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e  that a constrain
10690 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63  t violation.** c
106a0 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61 74  auses the operat
106b0 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74  ion in process t
106c0 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74  o fail and for t
106d0 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
106e0 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20  action.** to be 
106f0 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42  rolled back.  AB
10700 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ORT processing m
10710 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69  eans the operati
10720 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a  on in process.**
10730 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70   fails and any p
10740 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f  rior changes fro
10750 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61  m that one opera
10760 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20  tion are backed 
10770 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20  out,.** but the 
10780 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
10790 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  ot rolled back. 
107a0 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67   FAIL processing
107b0 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74   means that.** t
107c0 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
107d0 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61  progress stops a
107e0 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72  nd returns an er
107f0 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70  ror code.  But p
10800 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20  rior.** changes 
10810 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20  due to the same 
10820 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f  operation are no
10830 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64  t backed out and
10840 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20   no rollback.** 
10850 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20  occurs.  IGNORE 
10860 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 70  means that the p
10870 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68  articular row th
10880 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63 6f  at caused the co
10890 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
108a0 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65  r is not inserte
108b0 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50  d or updated.  P
108c0 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
108d0 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
108e0 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e  .** is returned.
108f0 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20    REPLACE means 
10900 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e 67  that preexisting
10910 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74   database rows t
10920 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20  hat caused.** a 
10930 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
10940 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20  t violation are 
10950 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20  removed so that 
10960 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f  the new insert o
10970 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20  r.** update can 
10980 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73  proceed.  Proces
10990 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
109a0 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72  nd no error is r
109b0 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52  eported..**.** R
109c0 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c  ESTRICT, SETNULL
109d0 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61 63  , and CASCADE ac
109e0 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79  tions apply only
109f0 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73   to foreign keys
10a00 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73  ..** RESTRICT is
10a10 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f   the same as ABO
10a20 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  RT for IMMEDIATE
10a30 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e   foreign keys an
10a40 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73  d the.** same as
10a50 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45   ROLLBACK for DE
10a60 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45  FERRED keys.  SE
10a70 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74  TNULL means that
10a80 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
10a90 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55  key is set to NU
10aa0 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61  LL.  CASCADE mea
10ab0 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54 45  ns that a DELETE
10ac0 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74 68   or UPDATE of th
10ad0 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20  e.** referenced 
10ae0 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f  table row is pro
10af0 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65  pagated into the
10b00 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20   row that holds 
10b10 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b  the.** foreign k
10b20 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20 66  ey..** .** The f
10b30 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69  ollowing symboli
10b40 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65  c values are use
10b50 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63  d to record whic
10b60 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74  h type.** of act
10b70 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a  ion to take..*/.
10b80 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20  #define OE_None 
10b90 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65      0   /* There
10ba0 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e   is no constrain
10bb0 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64  t to check */.#d
10bc0 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63  efine OE_Rollbac
10bd0 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68  k 1   /* Fail th
10be0 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20  e operation and 
10bf0 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
10c00 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
10c10 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20  ine OE_Abort    
10c20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20  2   /* Back out 
10c30 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e  changes but do n
10c40 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  o rollback trans
10c50 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
10c60 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20  e OE_Fail     3 
10c70 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70    /* Stop the op
10c80 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76  eration but leav
10c90 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e  e all prior chan
10ca0 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ges */.#define O
10cb0 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f  E_Ignore   4   /
10cc0 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72  * Ignore the err
10cd0 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68  or. Do not do th
10ce0 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  e INSERT or UPDA
10cf0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  TE */.#define OE
10d00 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a  _Replace  5   /*
10d10 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67   Delete existing
10d20 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f   record, then do
10d30 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
10d40 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45  E */..#define OE
10d50 5f 52 65 73 74 72 69 63 74 20 36 20 20 20 2f 2a  _Restrict 6   /*
10d60 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d   OE_Abort for IM
10d70 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c  MEDIATE, OE_Roll
10d80 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45  back for DEFERRE
10d90 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  D */.#define OE_
10da0 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20  SetNull  7   /* 
10db0 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
10dc0 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c  key value to NUL
10dd0 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  L */.#define OE_
10de0 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a 20  SetDflt  8   /* 
10df0 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
10e00 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73  key value to its
10e10 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66   default */.#def
10e20 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20  ine OE_Cascade  
10e30 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74  9   /* Cascade t
10e40 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23  he changes */..#
10e50 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c  define OE_Defaul
10e60 74 20 20 31 30 20 20 2f 2a 20 44 6f 20 77 68 61  t  10  /* Do wha
10e70 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c  tever the defaul
10e80 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a  t action is */..
10e90 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
10ea0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
10eb0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
10ec0 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
10ed0 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
10ee0 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b   to sqlite3VdbeK
10ef0 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73  eyCompare and is
10f00 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c   used to control
10f10 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70 61 72 69   the .** compari
10f20 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69  son of the two i
10f30 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a  ndex keys..**.**
10f40 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74   Note that aSort
10f50 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c  Order[] and aCol
10f60 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b  l[] have nField+
10f70 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a  1 slots.  There.
10f80 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c  ** are nField sl
10f90 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  ots for the colu
10fa0 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20  mns of an index 
10fb0 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73  then one extra s
10fc0 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  lot.** for the r
10fd0 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e  owid at the end.
10fe0 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e  .*/.struct KeyIn
10ff0 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b  fo {.  u32 nRef;
11000 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
11010 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63  mber of referenc
11020 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e  es to this KeyIn
11030 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75  fo object */.  u
11040 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
11050 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
11060 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65  ing - one of the
11070 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c   SQLITE_UTF* val
11080 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69  ues */.  u16 nFi
11090 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  eld;         /* 
110a0 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f  Number of key co
110b0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64  lumns in the ind
110c0 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 58 46 69  ex */.  u16 nXFi
110d0 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  eld;        /* N
110e0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
110f0 20 62 65 79 6f 6e 64 20 74 68 65 20 6b 65 79 20   beyond the key 
11100 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c  columns */.  sql
11110 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
11120 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
11130 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20   connection */. 
11140 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b   u8 *aSortOrder;
11150 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64       /* Sort ord
11160 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  er for each colu
11170 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  mn. */.  CollSeq
11180 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20   *aColl[1];  /* 
11190 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
111a0 63 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d  ce for each term
111b0 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d   of the key */.}
111c0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
111d0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
111e0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
111f0 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f  holds informatio
11200 6e 20 61 62 6f 75 74 20 61 0a 2a 2a 20 73 69 6e  n about a.** sin
11210 67 6c 65 20 69 6e 64 65 78 20 72 65 63 6f 72 64  gle index record
11220 20 74 68 61 74 20 68 61 73 20 61 6c 72 65 61 64   that has alread
11230 79 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75  y been parsed ou
11240 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61  t into individua
11250 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a  l.** values..**.
11260 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20 61  ** A record is a
11270 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f  n object that co
11280 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
11290 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74  re fields of dat
112a0 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72  a..** Records ar
112b0 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
112c0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  the content of a
112d0 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74   table row and t
112e0 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b  o store.** the k
112f0 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20  ey of an index. 
11300 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67   A blob encoding
11310 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73 20   of a record is 
11320 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68  created by.** th
11330 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20  e OP_MakeRecord 
11340 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44  opcode of the VD
11350 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73 73  BE and is disass
11360 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a  embled by the.**
11370 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
11380 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74  e..**.** This st
11390 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 61 20  ructure holds a 
113a0 72 65 63 6f 72 64 20 74 68 61 74 20 68 61 73 20  record that has 
113b0 61 6c 72 65 61 64 79 20 62 65 65 6e 20 64 69 73  already been dis
113c0 61 73 73 65 6d 62 6c 65 64 0a 2a 2a 20 69 6e 74  assembled.** int
113d0 6f 20 69 74 73 20 63 6f 6e 73 74 69 74 75 65 6e  o its constituen
113e0 74 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20  t fields..**.** 
113f0 54 68 65 20 72 31 20 61 6e 64 20 72 32 20 6d 65  The r1 and r2 me
11400 6d 62 65 72 20 76 61 72 69 61 62 6c 65 73 20 61  mber variables a
11410 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 62 79 20  re only used by 
11420 74 68 65 20 6f 70 74 69 6d 69 7a 65 64 20 63 6f  the optimized co
11430 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 66 75 6e 63  mparison.** func
11440 74 69 6f 6e 73 20 76 64 62 65 52 65 63 6f 72 64  tions vdbeRecord
11450 43 6f 6d 70 61 72 65 49 6e 74 28 29 20 61 6e 64  CompareInt() and
11460 20 76 64 62 65 52 65 63 6f 72 64 43 6f 6d 70 61   vdbeRecordCompa
11470 72 65 53 74 72 69 6e 67 28 29 2e 0a 2a 2f 0a 73  reString()..*/.s
11480 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65  truct UnpackedRe
11490 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f  cord {.  KeyInfo
114a0 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20   *pKeyInfo;  /* 
114b0 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f  Collation and so
114c0 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61  rt-order informa
114d0 74 69 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 6e 46  tion */.  u16 nF
114e0 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a  ield;         /*
114f0 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
11500 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f  es in apMem[] */
11510 0a 20 20 69 38 20 64 65 66 61 75 6c 74 5f 72 63  .  i8 default_rc
11520 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72  ;      /* Compar
11530 69 73 6f 6e 20 72 65 73 75 6c 74 20 69 66 20 6b  ison result if k
11540 65 79 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f  eys are equal */
11550 0a 20 20 75 38 20 65 72 72 43 6f 64 65 3b 20 20  .  u8 errCode;  
11560 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20         /* Error 
11570 64 65 74 65 63 74 65 64 20 62 79 20 78 52 65 63  detected by xRec
11580 6f 72 64 43 6f 6d 70 61 72 65 20 28 43 4f 52 52  ordCompare (CORR
11590 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f  UPT or NOMEM) */
115a0 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20  .  Mem *aMem;   
115b0 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73         /* Values
115c0 20 2a 2f 0a 20 20 69 6e 74 20 72 31 3b 20 20 20   */.  int r1;   
115d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
115e0 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20  ue to return if 
115f0 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20  (lhs > rhs) */. 
11600 20 69 6e 74 20 72 32 3b 20 20 20 20 20 20 20 20   int r2;        
11610 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
11620 20 72 65 74 75 72 6e 20 69 66 20 28 72 68 73 20   return if (rhs 
11630 3c 20 6c 68 73 29 20 2a 2f 0a 7d 3b 0a 0a 0a 2f  < lhs) */.};.../
11640 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e  *.** Each SQL in
11650 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74  dex is represent
11660 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
11670 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
11680 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
11690 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
116a0 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   The columns of 
116b0 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61  the table that a
116c0 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  re to be indexed
116d0 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a   are described.*
116e0 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d  * by the aiColum
116f0 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69  n[] field of thi
11700 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  s structure.  Fo
11710 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f  r example, suppo
11720 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68  se.** we have th
11730 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
11740 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a  e and index:.**.
11750 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
11760 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20  BLE Ex1(c1 int, 
11770 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29  c2 int, c3 text)
11780 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  ;.**     CREATE 
11790 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31  INDEX Ex2 ON Ex1
117a0 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49  (c3,c1);.**.** I
117b0 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75  n the Table stru
117c0 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
117d0 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65   Ex1, nCol==3 be
117e0 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a  cause there are.
117f0 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73  ** three columns
11800 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
11810 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72  In the Index str
11820 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
11830 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d  g.** Ex2, nColum
11840 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20  n==2 since 2 of 
11850 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66  the 3 columns of
11860 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64   Ex1 are indexed
11870 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  ..** The value o
11880 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32  f aiColumn is {2
11890 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b  , 0}.  aiColumn[
118a0 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68  0]==2 because th
118b0 65 20 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75  e .** first colu
118c0 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
118d0 20 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64   (c3) has an ind
118e0 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61  ex of 2 in Ex1.a
118f0 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65  Col[]..** The se
11900 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  cond column to b
11910 65 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68  e indexed (c1) h
11920 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30  as an index of 0
11930 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b   in.** Ex1.aCol[
11940 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43  ], hence Ex2.aiC
11950 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a  olumn[1]==0..**.
11960 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45  ** The Index.onE
11970 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72  rror field deter
11980 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72  mines whether or
11990 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64   not the indexed
119a0 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74   columns.** must
119b0 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77   be unique and w
119c0 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65  hat to do if the
119d0 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e  y are not.  When
119e0 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f   Index.onError=O
119f0 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65  E_None,.** it me
11a00 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20  ans this is not 
11a10 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20  a unique index. 
11a20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73   Otherwise it is
11a30 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a   a unique index.
11a40 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ** and the value
11a50 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f   of Index.onErro
11a60 72 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77  r indicate the w
11a70 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65  hich conflict re
11a80 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67  solution .** alg
11a90 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79  orithm to employ
11aa0 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74   whenever an att
11ab0 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20  empt is made to 
11ac0 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69  insert a non-uni
11ad0 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a  que.** element..
11ae0 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20  */.struct Index 
11af0 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
11b00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11b10 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64  Name of this ind
11b20 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43  ex */.  i16 *aiC
11b30 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
11b40 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e   /* Which column
11b50 73 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  s are used by th
11b60 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69  is index.  1st i
11b70 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  s 0 */.  LogEst 
11b80 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20  *aiRowLogEst;   
11b90 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a    /* From ANALYZ
11ba0 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c  E: Est. rows sel
11bb0 65 63 74 65 64 20 62 79 20 65 61 63 68 20 63 6f  ected by each co
11bc0 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  lumn */.  Table 
11bd0 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  *pTable;        
11be0 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61     /* The SQL ta
11bf0 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65  ble being indexe
11c00 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  d */.  char *zCo
11c10 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20  lAff;           
11c20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69  /* String defini
11c30 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ng the affinity 
11c40 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  of each column *
11c50 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74  /.  Index *pNext
11c60 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11c70 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61  The next index a
11c80 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
11c90 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f  he same table */
11ca0 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
11cb0 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  ma;         /* S
11cc0 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
11cd0 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
11ce0 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b   u8 *aSortOrder;
11cf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72            /* for
11d00 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72   each column: Tr
11d10 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d  ue==DESC, False=
11d20 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61 72 20 2a  =ASC */.  char *
11d30 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20  *azColl;        
11d40 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63     /* Array of c
11d50 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
11d60 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65  e names for inde
11d70 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61  x */.  Expr *pPa
11d80 72 74 49 64 78 57 68 65 72 65 3b 20 20 20 20 20  rtIdxWhere;     
11d90 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  /* WHERE clause 
11da0 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69  for partial indi
11db0 63 65 73 20 2a 2f 0a 20 20 4b 65 79 49 6e 66 6f  ces */.  KeyInfo
11dc0 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 20 20 20   *pKeyInfo;     
11dd0 20 20 2f 2a 20 41 20 4b 65 79 49 6e 66 6f 20 6f    /* A KeyInfo o
11de0 62 6a 65 63 74 20 73 75 69 74 61 62 6c 65 20 66  bject suitable f
11df0 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  or this index */
11e00 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20  .  int tnum;    
11e10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
11e20 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e  B Page containin
11e30 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69  g root of this i
11e40 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  ndex */.  LogEst
11e50 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20   szIdxRow;      
11e60 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
11e70 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65  average row size
11e80 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75   in bytes */.  u
11e90 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20  16 nKeyCol;     
11ea0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
11eb0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72  r of columns for
11ec0 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a  ming the key */.
11ed0 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20    u16 nColumn;  
11ee0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
11ef0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
11f00 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e  stored in the in
11f10 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72  dex */.  u8 onEr
11f20 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ror;            
11f30 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f    /* OE_Abort, O
11f40 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70  E_Ignore, OE_Rep
11f50 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65  lace, or OE_None
11f60 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
11f70 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f  dxType:2;      /
11f80 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d  * 1==UNIQUE, 2==
11f90 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d  PRIMARY KEY, 0==
11fa0 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
11fb0 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72    unsigned bUnor
11fc0 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73  dered:1;   /* Us
11fd0 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72  e this index for
11fe0 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65   == or IN querie
11ff0 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69  s only */.  unsi
12000 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c  gned uniqNotNull
12010 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
12020 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e  UNIQUE and NOT N
12030 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75  ULL for all colu
12040 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  mns */.  unsigne
12050 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20  d isResized:1;  
12060 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
12070 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29  izeIndexObject()
12080 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
12090 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
120a0 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f  sCovering:1;   /
120b0 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20 69  * True if this i
120c0 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  s a covering ind
120d0 65 78 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  ex */.#ifdef SQL
120e0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
120f0 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20  _OR_STAT4.  int 
12100 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20  nSample;        
12110 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12120 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53  f elements in aS
12130 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  ample[] */.  int
12140 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20   nSampleCol;    
12150 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
12160 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45   IndexSample.anE
12170 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f  q[] and so on */
12180 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67  .  tRowcnt *aAvg
12190 45 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  Eq;         /* A
121a0 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65  verage nEq value
121b0 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69  s for keys not i
121c0 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49  n aSample */.  I
121d0 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d  ndexSample *aSam
121e0 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c  ple;    /* Sampl
121f0 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d  es of the left-m
12200 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f  ost key */.  tRo
12210 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20  wcnt *aiRowEst; 
12220 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67        /* Non-log
12230 61 72 69 74 68 6d 69 63 20 73 74 61 74 31 20 64  arithmic stat1 d
12240 61 74 61 20 66 6f 72 20 74 68 69 73 20 69 6e 64  ata for this ind
12250 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  ex */.  tRowcnt 
12260 6e 52 6f 77 45 73 74 30 3b 20 20 20 20 20 20 20  nRowEst0;       
12270 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68   /* Non-logarith
12280 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  mic number of ro
12290 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ws in the index 
122a0 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
122b0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
122c0 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78  es for Index.idx
122d0 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  Type.*/.#define 
122e0 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41  SQLITE_IDXTYPE_A
122f0 50 50 44 45 46 20 20 20 20 20 20 30 20 20 20 2f  PPDEF      0   /
12300 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e 67 20  * Created using 
12310 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
12320 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
12330 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20  DXTYPE_UNIQUE   
12340 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d     1   /* Implem
12350 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f  ents a UNIQUE co
12360 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
12370 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
12380 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32  PE_PRIMARYKEY  2
12390 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49     /* Is the PRI
123a0 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65  MARY KEY for the
123b0 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65   table */../* Re
123c0 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64  turn true if ind
123d0 65 78 20 58 20 69 73 20 61 20 50 52 49 4d 41 52  ex X is a PRIMAR
123e0 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23  Y KEY index */.#
123f0 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79  define IsPrimary
12400 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28 28 58  KeyIndex(X)  ((X
12410 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49  )->idxType==SQLI
12420 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41  TE_IDXTYPE_PRIMA
12430 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72  RYKEY)../* Retur
12440 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20  n true if index 
12450 58 20 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e  X is a UNIQUE in
12460 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  dex */.#define I
12470 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20  sUniqueIndex(X) 
12480 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72       ((X)->onErr
12490 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a  or!=OE_None)../*
124a0 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20  .** Each sample 
124b0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
124c0 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65  lite_stat3 table
124d0 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
124e0 69 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75 73  in memory .** us
124f0 69 6e 67 20 61 20 73 74 72 75 63 74 75 72 65 20  ing a structure 
12500 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20 20 53  of this type.  S
12510 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ee documentation
12520 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74   at the top of t
12530 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20  he.** analyze.c 
12540 73 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20  source file for 
12550 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
12560 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
12570 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a  t IndexSample {.
12580 20 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20    void *p;      
12590 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
125a0 6f 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64  o sampled record
125b0 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20   */.  int n;    
125c0 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
125d0 6f 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74  of record in byt
125e0 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  es */.  tRowcnt 
125f0 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74  *anEq;    /* Est
12600 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  . number of rows
12610 20 77 68 65 72 65 20 74 68 65 20 6b 65 79 20 65   where the key e
12620 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c  quals this sampl
12630 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  e */.  tRowcnt *
12640 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e  anLt;    /* Est.
12650 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
12660 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73  where key is les
12670 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70  s than this samp
12680 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  le */.  tRowcnt 
12690 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74  *anDLt;   /* Est
126a0 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74  . number of dist
126b0 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74  inct keys less t
126c0 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20  han this sample 
126d0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  */.};../*.** Eac
126e0 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f  h token coming o
126f0 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20  ut of the lexer 
12700 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
12710 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74  f.** this struct
12720 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65  ure.  Tokens are
12730 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61   also used as pa
12740 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  rt of an express
12750 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  ion..**.** Note 
12760 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68  if Token.z==0 th
12770 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64  en Token.dyn and
12780 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64   Token.n are und
12790 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61  efined and.** ma
127a0 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d  y contain random
127b0 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74   values.  Do not
127c0 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70   make any assump
127d0 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65  tions about Toke
127e0 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b  n.dyn.** and Tok
127f0 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e  en.n when Token.
12800 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  z==0..*/.struct 
12810 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20  Token {.  const 
12820 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20  char *z;     /* 
12830 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65  Text of the toke
12840 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72  n.  Not NULL-ter
12850 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e  minated! */.  un
12860 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20  signed int n;   
12870 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68   /* Number of ch
12880 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73  aracters in this
12890 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   token */.};../*
128a0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
128b0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
128c0 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  e contains infor
128d0 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f  mation needed to
128e0 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64   generate.** cod
128f0 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74  e for a SELECT t
12900 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67  hat contains agg
12910 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
12920 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e  ..**.** If Expr.
12930 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d  op==TK_AGG_COLUM
12940 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43  N or TK_AGG_FUNC
12950 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70  TION then Expr.p
12960 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20  AggInfo is a.** 
12970 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
12980 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 20  structure.  The 
12990 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65  Expr.iColumn fie
129a0 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  ld is the index 
129b0 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43  in.** AggInfo.aC
129c0 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e  ol[] or AggInfo.
129d0 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72  aFunc[] of infor
129e0 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f  mation needed to
129f0 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64   generate.** cod
12a00 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e  e for that node.
12a10 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70  .**.** AggInfo.p
12a20 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49  GroupBy and AggI
12a30 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20  nfo.aFunc.pExpr 
12a40 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20  point to fields 
12a50 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72  within the.** or
12a60 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74  iginal Select st
12a70 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65 73  ructure that des
12a80 63 72 69 62 65 73 20 74 68 65 20 53 45 4c 45 43  cribes the SELEC
12a90 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  T statement.  Th
12aa0 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f  ese.** fields do
12ab0 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20   not need to be 
12ac0 66 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c  freed when deall
12ad0 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67 67 49  ocating the AggI
12ae0 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  nfo structure..*
12af0 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  /.struct AggInfo
12b00 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f   {.  u8 directMo
12b10 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  de;          /* 
12b20 44 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67  Direct rendering
12b30 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65   mode means take
12b40 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20   data directly. 
12b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b60 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d           ** from
12b70 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72   source tables r
12b80 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20  ather than from 
12b90 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a  accumulators */.
12ba0 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49    u8 useSortingI
12bb0 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20  dx;       /* In 
12bc0 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66  direct mode, ref
12bd0 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69  erence the sorti
12be0 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a  ng index rather.
12bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c00 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61            ** tha
12c10 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  n the source tab
12c20 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74  le */.  int sort
12c30 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20 20  ingIdx;         
12c40 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
12c50 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20   of the sorting 
12c60 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73  index */.  int s
12c70 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20  ortingIdxPTab;  
12c80 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
12c90 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61  ber of pseudo-ta
12ca0 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f  ble */.  int nSo
12cb0 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20  rtingColumn;    
12cc0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
12cd0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72  lumns in the sor
12ce0 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
12cf0 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67  int mnReg, mxReg
12d00 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65  ;       /* Range
12d10 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c   of registers al
12d20 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c  located for aCol
12d30 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20   and aFunc */.  
12d40 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
12d50 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67  By;     /* The g
12d60 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a  roup by clause *
12d70 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e  /.  struct AggIn
12d80 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46  fo_col {    /* F
12d90 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75  or each column u
12da0 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61  sed in source ta
12db0 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c  bles */.    Tabl
12dc0 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
12dd0 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74       /* Source t
12de0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
12df0 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
12e00 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
12e10 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75  umber of the sou
12e20 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
12e30 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20   int iColumn;   
12e40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c            /* Col
12e50 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69  umn number withi
12e60 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  n the source tab
12e70 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53  le */.    int iS
12e80 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20  orterColumn;    
12e90 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
12ea0 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69  ber in the sorti
12eb0 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20  ng index */.    
12ec0 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20  int iMem;       
12ed0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
12ee0 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
12ef0 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c   acts as accumul
12f00 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72  ator */.    Expr
12f10 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
12f20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67       /* The orig
12f30 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20  inal expression 
12f40 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20  */.  } *aCol;.  
12f50 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  int nColumn;    
12f60 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
12f70 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65  r of used entrie
12f80 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20  s in aCol[] */. 
12f90 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f   int nAccumulato
12fa0 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  r;       /* Numb
12fb0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68  er of columns th
12fc0 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20  at show through 
12fd0 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20  to the output.. 
12fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ff0 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69           ** Addi
13000 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61  tional columns a
13010 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20  re used only as 
13020 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20  parameters to.  
13030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13040 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65          ** aggre
13050 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
13060 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e  /.  struct AggIn
13070 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46  fo_func {   /* F
13080 6f 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74  or each aggregat
13090 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
130a0 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
130b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
130c0 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e  pression encodin
130d0 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a  g the function *
130e0 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70  /.    FuncDef *p
130f0 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f  Func;          /
13100 2a 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20  * The aggregate 
13110 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  function impleme
13120 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  ntation */.    i
13130 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
13140 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
13150 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
13160 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61  acts as accumula
13170 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  tor */.    int i
13180 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20  Distinct;       
13190 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c      /* Ephemeral
131a0 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65   table used to e
131b0 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20  nforce DISTINCT 
131c0 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20  */.  } *aFunc;. 
131d0 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20   int nFunc;     
131e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
131f0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
13200 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a   aFunc[] */.};..
13210 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79  /*.** The dataty
13220 70 65 20 79 6e 56 61 72 20 69 73 20 61 20 73 69  pe ynVar is a si
13230 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69  gned integer, ei
13240 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33  ther 16-bit or 3
13250 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c  2-bit..** Usuall
13260 79 20 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e  y it is 16-bits.
13270 20 20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f    But if SQLITE_
13280 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
13290 42 45 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a  BER is greater.*
132a0 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77 65 20  * than 32767 we 
132b0 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20  have to make it 
132c0 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20  32-bit.  16-bit 
132d0 69 73 20 70 72 65 66 65 72 72 65 64 20 62 65 63  is preferred bec
132e0 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20  ause.** it uses 
132f0 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74  less memory in t
13300 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20  he Expr object, 
13310 77 68 69 63 68 20 69 73 20 61 20 62 69 67 20 6d  which is a big m
13320 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e  emory user.** in
13330 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f   systems with lo
13340 74 73 20 6f 66 20 70 72 65 70 61 72 65 64 20 73  ts of prepared s
13350 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20  tatements.  And 
13360 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  few applications
13370 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68  .** need more th
13380 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32  an about 10 or 2
13390 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75  0 variables.  Bu
133a0 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75  t some extreme u
133b0 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20  sers want.** to 
133c0 68 61 76 65 20 70 72 65 70 61 72 65 64 20 73 74  have prepared st
133d0 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76  atements with ov
133e0 65 72 20 33 32 37 36 37 20 76 61 72 69 61 62 6c  er 32767 variabl
133f0 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d  es, and for them
13400 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69  .** the option i
13410 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20  s available (at 
13420 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a  compile-time)..*
13430 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
13440 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
13450 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66 20  <=32767.typedef 
13460 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65  i16 ynVar;.#else
13470 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56  .typedef int ynV
13480 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ar;.#endif../*.*
13490 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61  * Each node of a
134a0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  n expression in 
134b0 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 69  the parse tree i
134c0 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  s an instance.**
134d0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
134e0 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f  re..**.** Expr.o
134f0 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e  p is the opcode.
13500 20 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 72   The integer par
13510 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20  ser token codes 
13520 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73  are reused.** as
13530 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46   opcodes here. F
13540 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20  or example, the 
13550 70 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54  parser defines T
13560 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e  K_GE to be an in
13570 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65  teger.** code re
13580 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22  presenting the "
13590 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68  >=" operator. Th
135a0 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20  is same integer 
135b0 63 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a  code is reused.*
135c0 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74  * to represent t
135d0 68 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d  he greater-than-
135e0 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72  or-equal-to oper
135f0 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72  ator in the expr
13600 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a  ession.** tree..
13610 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
13620 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
13630 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e  L literal (TK_IN
13640 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c  TEGER, TK_FLOAT,
13650 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20 6f 72   TK_BLOB, .** or
13660 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65   TK_STRING), the
13670 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
13680 74 61 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f  tains the text o
13690 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61  f the SQL litera
136a0 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70  l. If.** the exp
136b0 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72  ression is a var
136c0 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42  iable (TK_VARIAB
136d0 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  LE), then Expr.t
136e0 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
136f0 65 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e  e .** variable n
13700 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66  ame. Finally, if
13710 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
13720 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  is an SQL functi
13730 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29  on (TK_FUNCTION)
13740 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74  ,.** then Expr.t
13750 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
13760 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  e name of the fu
13770 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78  nction..**.** Ex
13780 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78  pr.pRight and Ex
13790 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65  pr.pLeft are the
137a0 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20   left and right 
137b0 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f  subexpressions o
137c0 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70  f a.** binary op
137d0 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f  erator. Either o
137e0 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55  r both may be NU
137f0 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78  LL..**.** Expr.x
13800 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74  .pList is a list
13810 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66   of arguments if
13820 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
13830 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  is an SQL functi
13840 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78  on,.** a CASE ex
13850 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49  pression or an I
13860 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  N expression of 
13870 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20  the form "<lhs> 
13880 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29  IN (<y>, <z>...)
13890 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65  "..** Expr.x.pSe
138a0 6c 65 63 74 20 69 73 20 75 73 65 64 20 69 66 20  lect is used if 
138b0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
138c0 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f  s a sub-select o
138d0 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  r an expression 
138e0 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22  of.** the form "
138f0 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54  <lhs> IN (SELECT
13900 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45   ...)". If the E
13910 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74 20  P_xIsSelect bit 
13920 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a  is set in the.**
13930 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
13940 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53  , then Expr.x.pS
13950 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20  elect is valid. 
13960 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e  Otherwise, Expr.
13970 78 2e 70 4c 69 73 74 20 69 73 20 0a 2a 2a 20 76  x.pList is .** v
13980 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65  alid..**.** An e
13990 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
139a0 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49   form ID or ID.I
139b0 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f  D refers to a co
139c0 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e  lumn in a table.
139d0 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70  .** For such exp
139e0 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f  ressions, Expr.o
139f0 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43  p is set to TK_C
13a00 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69  OLUMN and Expr.i
13a10 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  Table is.** the 
13a20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e  integer cursor n
13a30 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45 20  umber of a VDBE 
13a40 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
13a50 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e  to that table an
13a60 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d  d.** Expr.iColum
13a70 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  n is the column 
13a80 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73  number for the s
13a90 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20  pecific column. 
13aa0 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65   If the.** expre
13ab0 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73  ssion is used as
13ac0 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20   a result in an 
13ad0 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43 54  aggregate SELECT
13ae0 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61  , then the.** va
13af0 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72  lue is also stor
13b00 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69  ed in the Expr.i
13b10 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  Agg column in th
13b20 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20 74  e aggregate so t
13b30 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65  hat.** it can be
13b40 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72 20   accessed after 
13b50 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20 61  all aggregates a
13b60 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a  re computed..**.
13b70 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
13b80 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75  sion is an unbou
13b90 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b  nd variable mark
13ba0 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d  er (a question m
13bb0 61 72 6b 20 0a 2a 2a 20 63 68 61 72 61 63 74 65  ark .** characte
13bc0 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69  r '?' in the ori
13bd0 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20  ginal SQL) then 
13be0 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20  the Expr.iTable 
13bf0 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 20  holds the index 
13c00 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  .** number for t
13c10 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a  hat variable..**
13c20 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
13c30 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75  ssion is a subqu
13c40 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43  ery then Expr.iC
13c50 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69  olumn holds an i
13c60 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74  nteger.** regist
13c70 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69  er number contai
13c80 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20  ning the result 
13c90 6f 66 20 74 68 65 20 73 75 62 71 75 65 72 79 2e  of the subquery.
13ca0 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71    If the.** subq
13cb0 75 65 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e  uery gives a con
13cc0 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68  stant result, th
13cd0 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e  en iTable is -1.
13ce0 20 20 49 66 20 74 68 65 20 73 75 62 71 75 65 72    If the subquer
13cf0 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66  y.** gives a dif
13d00 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74  ferent answer at
13d10 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73   different times
13d20 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e   during statemen
13d30 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20  t processing.** 
13d40 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74  then iTable is t
13d50 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20  he address of a 
13d60 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20  subroutine that 
13d70 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75 62  computes the sub
13d80 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  query..**.** If 
13d90 74 68 65 20 45 78 70 72 20 69 73 20 6f 66 20 74  the Expr is of t
13da0 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61  ype OP_Column, a
13db0 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 74 20  nd the table it 
13dc0 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f  is selecting fro
13dd0 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74  m.** is a disk t
13de0 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64  able or the "old
13df0 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  .*" pseudo-table
13e00 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e  , then pTab poin
13e10 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72  ts to the.** cor
13e20 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65  responding table
13e30 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a   definition..**.
13e40 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f  ** ALLOCATION NO
13e50 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20  TES:.**.** Expr 
13e60 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20  objects can use 
13e70 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20  a lot of memory 
13e80 73 70 61 63 65 20 69 6e 20 64 61 74 61 62 61 73  space in databas
13e90 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a  e schema.  To.**
13ea0 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d   help reduce mem
13eb0 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73  ory requirements
13ec0 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45  , sometimes an E
13ed0 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20  xpr object will 
13ee0 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e  be.** truncated.
13ef0 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20    And to reduce 
13f00 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65  the number of me
13f10 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  mory allocations
13f20 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74  , sometimes.** t
13f30 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20  wo or more Expr 
13f40 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20  objects will be 
13f50 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67  stored in a sing
13f60 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  le memory alloca
13f70 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65  tion,.** togethe
13f80 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b  r with Expr.zTok
13f90 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a  en strings..**.*
13fa0 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
13fb0 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e  ced and EP_Token
13fc0 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73  Only flags are s
13fd0 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78  et when.** an Ex
13fe0 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75  pr object is tru
13ff0 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50  ncated.  When EP
14000 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2c  _Reduced is set,
14010 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65   then all.** the
14020 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65   child Expr obje
14030 63 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  cts in the Expr.
14040 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70  pLeft and Expr.p
14050 52 69 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a  Right subtrees.*
14060 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  * are contained 
14070 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
14080 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
14090 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65  n.  Note, howeve
140a0 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73  r, that.** the s
140b0 75 62 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e  ubtrees in Expr.
140c0 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e  x.pList or Expr.
140d0 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c  x.pSelect are al
140e0 77 61 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a  ways separately.
140f0 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65  ** allocated, re
14100 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
14110 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65  her or not EP_Re
14120 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f  duced is set..*/
14130 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20  .struct Expr {. 
14140 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
14150 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61          /* Opera
14160 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62  tion performed b
14170 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20  y this node */. 
14180 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
14190 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
141a0 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63  ffinity of the c
141b0 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f  olumn or 0 if no
141c0 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  t a column */.  
141d0 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20  u32 flags;      
141e0 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75         /* Variou
141f0 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53  s flags.  EP_* S
14200 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e  ee below */.  un
14210 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  ion {.    char *
14220 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20  zToken;         
14230 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e   /* Token value.
14240 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64   Zero terminated
14250 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f   and dequoted */
14260 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b  .    int iValue;
14270 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
14280 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65  on-negative inte
14290 67 65 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f  ger value if EP_
142a0 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20  IntValue */.  } 
142b0 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  u;..  /* If the 
142c0 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
142d0 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20  g is set in the 
142e0 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
142f0 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70   then no.  ** sp
14300 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ace is allocated
14310 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20   for the fields 
14320 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74  below this point
14330 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a  . An attempt to.
14340 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d    ** access them
14350 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20   will result in 
14360 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61  a segfault or ma
14370 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a 20 20 2a 2a  lfunction. .  **
14380 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14390 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
143a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
143b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
143c0 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c  ***/..  Expr *pL
143d0 65 66 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  eft;           /
143e0 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a  * Left subnode *
143f0 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68 74  /.  Expr *pRight
14400 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69  ;          /* Ri
14410 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20  ght subnode */. 
14420 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70   union {.    Exp
14430 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20  rList *pList;   
14440 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58    /* op = IN, EX
14450 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41  ISTS, SELECT, CA
14460 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45  SE, FUNCTION, BE
14470 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c  TWEEN */.    Sel
14480 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
14490 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63    /* EP_xIsSelec
144a0 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45  t and op = IN, E
144b0 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f  XISTS, SELECT */
144c0 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66  .  } x;..  /* If
144d0 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
144e0 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74  flag is set in t
144f0 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  he Expr.flags ma
14500 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a  sk, then no.  **
14510 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61   space is alloca
14520 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c  ted for the fiel
14530 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f  ds below this po
14540 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  int. An attempt 
14550 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74  to.  ** access t
14560 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  hem will result 
14570 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72  in a segfault or
14580 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20   malfunction..  
14590 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
145a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
145b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
145c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
145d0 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49  *****/..#if SQLI
145e0 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
145f0 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68  H>0.  int nHeigh
14600 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
14610 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74 72  Height of the tr
14620 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68 69  ee headed by thi
14630 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  s node */.#endif
14640 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20  .  int iTable;  
14650 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
14660 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e  COLUMN: cursor n
14670 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68  umber of table h
14680 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20  olding column.  
14690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146a0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47         ** TK_REG
146b0 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72 20  ISTER: register 
146c0 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20  number.         
146d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146e0 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31  ** TK_TRIGGER: 1
146f0 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c   -> new, 0 -> ol
14700 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d.              
14710 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50             ** EP
14720 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32  _Unlikely:  1342
14730 31 37 37 32 38 20 74 69 6d 65 73 20 6c 69 6b 65  17728 times like
14740 6c 69 68 6f 6f 64 20 2a 2f 0a 20 20 79 6e 56 61  lihood */.  ynVa
14750 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  r iColumn;      
14760 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
14770 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20   column index.  
14780 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20  -1 for rowid..  
14790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147a0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52         ** TK_VAR
147b0 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20  IABLE: variable 
147c0 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e  number (always >
147d0 3d 20 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69  = 1). */.  i16 i
147e0 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Agg;            
147f0 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79    /* Which entry
14800 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43   in pAggInfo->aC
14810 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b  ol[] or ->aFunc[
14820 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68  ] */.  i16 iRigh
14830 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a  tJoinTable;   /*
14840 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c   If EP_FromJoin,
14850 20 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65   the right table
14860 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a   of the join */.
14870 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20    u8 op2;       
14880 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52           /* TK_R
14890 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61  EGISTER: origina
148a0 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e  l value of Expr.
148b0 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  op.             
148c0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
148d0 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61  K_COLUMN: the va
148e0 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50  lue of p5 for OP
148f0 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20  _Column.        
14900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14910 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   ** TK_AGG_FUNCT
14920 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70  ION: nesting dep
14930 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20  th */.  AggInfo 
14940 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f  *pAggInfo;     /
14950 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47  * Used by TK_AGG
14960 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41  _COLUMN and TK_A
14970 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20  GG_FUNCTION */. 
14980 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
14990 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
149a0 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65   for TK_COLUMN e
149b0 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d  xpressions. */.}
149c0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
149d0 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d  lowing are the m
149e0 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20  eanings of bits 
149f0 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
14a00 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
14a10 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20  ine EP_FromJoin 
14a20 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69   0x000001 /* Ori
14a30 67 69 6e 61 74 65 64 20 69 6e 20 4f 4e 20 6f 72  ginated in ON or
14a40 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66   USING clause of
14a50 20 61 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69   a join */.#defi
14a60 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20 20  ne EP_Agg       
14a70 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74  0x000002 /* Cont
14a80 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
14a90 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
14aa0 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
14ab0 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 30 78 30  EP_Resolved  0x0
14ac0 30 30 30 30 34 20 2f 2a 20 49 44 73 20 68 61 76  00004 /* IDs hav
14ad0 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20  e been resolved 
14ae0 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64  to COLUMNs */.#d
14af0 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72 20 20  efine EP_Error  
14b00 20 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20 45     0x000008 /* E
14b10 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69  xpression contai
14b20 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65  ns one or more e
14b30 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  rrors */.#define
14b40 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78   EP_Distinct  0x
14b50 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65 67  000010 /* Aggreg
14b60 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ate function wit
14b70 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  h DISTINCT keywo
14b80 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rd */.#define EP
14b90 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 30  _VarSelect 0x000
14ba0 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69  020 /* pSelect i
14bb0 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f  s correlated, no
14bc0 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64  t constant */.#d
14bd0 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74  efine EP_DblQuot
14be0 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74  ed 0x000040 /* t
14bf0 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69  oken.z was origi
14c00 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a  nally in "..." *
14c10 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66  /.#define EP_Inf
14c20 69 78 46 75 6e 63 20 30 78 30 30 30 30 38 30 20  ixFunc 0x000080 
14c30 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69  /* True for an i
14c40 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c  nfix function: L
14c50 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a  IKE, GLOB, etc *
14c60 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c  /.#define EP_Col
14c70 6c 61 74 65 20 20 20 30 78 30 30 30 31 30 30 20  late   0x000100 
14c80 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73  /* Tree contains
14c90 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70   a TK_COLLATE op
14ca0 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  erator */.#defin
14cb0 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30  e EP_Generic   0
14cc0 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72  x000200 /* Ignor
14cd0 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66  e COLLATE or aff
14ce0 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72  inity on this tr
14cf0 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ee */.#define EP
14d00 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30  _IntValue  0x000
14d10 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76  400 /* Integer v
14d20 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69  alue contained i
14d30 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64  n u.iValue */.#d
14d40 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65  efine EP_xIsSele
14d50 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78  ct 0x000800 /* x
14d60 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
14d70 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70  d (otherwise x.p
14d80 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66  List is) */.#def
14d90 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20  ine EP_Skip     
14da0 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c   0x001000 /* COL
14db0 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c  LATE, AS, or UNL
14dc0 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65  IKELY */.#define
14dd0 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78   EP_Reduced   0x
14de0 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73  002000 /* Expr s
14df0 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43  truct EXPR_REDUC
14e00 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  EDSIZE bytes onl
14e10 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
14e20 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30  TokenOnly 0x0040
14e30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
14e40 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  t EXPR_TOKENONLY
14e50 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20  SIZE bytes only 
14e60 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74  */.#define EP_St
14e70 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30 30  atic    0x008000
14e80 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f   /* Held in memo
14e90 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20  ry not obtained 
14ea0 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f  from malloc() */
14eb0 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54  .#define EP_MemT
14ec0 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f  oken  0x010000 /
14ed0 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65  * Need to sqlite
14ee0 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a  3DbFree() Expr.z
14ef0 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  Token */.#define
14f00 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78   EP_NoReduce  0x
14f10 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74  020000 /* Cannot
14f20 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
14f30 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65  this Expr */.#de
14f40 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79  fine EP_Unlikely
14f50 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e    0x040000 /* un
14f60 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65  likely() or like
14f70 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f  lihood() functio
14f80 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
14f90 43 6f 6e 73 74 61 6e 74 20 20 30 78 30 38 30 30  Constant  0x0800
14fa0 30 30 20 2f 2a 20 4e 6f 64 65 20 69 73 20 61 20  00 /* Node is a 
14fb0 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 0a 2f 2a 0a  constant */../*.
14fc0 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
14fd0 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
14fe0 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
14ff0 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a  ar bits in the .
15000 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  ** Expr.flags fi
15010 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
15020 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28  ExprHasProperty(
15030 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e  E,P)     (((E)->
15040 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  flags&(P))!=0).#
15050 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c  define ExprHasAl
15060 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  lProperty(E,P)  
15070 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
15080 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
15090 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
150a0 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c  E,P)     (E)->fl
150b0 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65  ags|=(P).#define
150c0 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72   ExprClearProper
150d0 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66  ty(E,P)   (E)->f
150e0 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54  lags&=~(P)../* T
150f0 68 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  he ExprSetVVAPro
15100 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73  perty() macro is
15110 20 75 73 65 64 20 66 6f 72 20 56 65 72 69 66 69   used for Verifi
15120 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69  cation, Validati
15130 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65  on,.** and Accre
15140 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20  ditation only.  
15150 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78  It works like Ex
15160 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 29 20  prSetProperty() 
15170 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72  during VVA.** pr
15180 6f 63 65 73 73 65 73 20 62 75 74 20 69 73 20 61  ocesses but is a
15190 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76   no-op for deliv
151a0 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ery..*/.#ifdef S
151b0 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65  QLITE_DEBUG.# de
151c0 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50  fine ExprSetVVAP
151d0 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 45  roperty(E,P)  (E
151e0 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65  )->flags|=(P).#e
151f0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70  lse.# define Exp
15200 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
15210 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E,P).#endif../*.
15220 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
15230 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65  ermine the numbe
15240 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69  r of bytes requi
15250 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20  red by a normal 
15260 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c  Expr .** struct,
15270 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
15280 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75  with the EP_Redu
15290 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20  ced flag set in 
152a0 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61  Expr.flags .** a
152b0 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  nd an Expr struc
152c0 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f  t with the EP_To
152d0 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74  kenOnly flag set
152e0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
152f0 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20  R_FULLSIZE      
15300 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72       sizeof(Expr
15310 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  )           /* F
15320 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66  ull size */.#def
15330 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44  ine EXPR_REDUCED
15340 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73  SIZE        offs
15350 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65  etof(Expr,iTable
15360 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61  )  /* Common fea
15370 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tures */.#define
15380 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
15390 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f  IZE      offseto
153a0 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20  f(Expr,pLeft)   
153b0 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65  /* Fewer feature
153c0 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67  s */../*.** Flag
153d0 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
153e0 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
153f0 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74   function. See t
15400 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e  he header commen
15410 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69  t .** above sqli
15420 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72  te3ExprDup() for
15430 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65   details..*/.#de
15440 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44  fine EXPRDUP_RED
15450 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30  UCE         0x00
15460 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75  01  /* Used redu
15470 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f  ced-size Expr no
15480 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  des */../*.** A 
15490 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
154a0 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65  ons.  Each expre
154b0 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e  ssion may option
154c0 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e  ally have a.** n
154d0 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61  ame.  An expr/na
154e0 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63  me combination c
154f0 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65  an be used in se
15500 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68  veral ways, such
15510 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20  .** as the list 
15520 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20  of "expr AS ID" 
15530 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67  fields following
15540 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69   a "SELECT" or i
15550 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66  n the.** list of
15560 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65   "ID = expr" ite
15570 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e  ms in an UPDATE.
15580 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72    A list of expr
15590 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61  essions can.** a
155a0 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74  lso be used as t
155b0 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61  he argument to a
155c0 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68   function, in wh
155d0 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a  ich case the a.z
155e0 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73  Name.** field is
155f0 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
15600 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20   By default the 
15610 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64  Expr.zSpan field
15620 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72   holds a human-r
15630 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74  eadable descript
15640 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78  ion of.** the ex
15650 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
15660 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
15670 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72  eration of error
15680 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a   messages and.**
15690 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20   column labels. 
156a0 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45   In this case, E
156b0 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70  xpr.zSpan is typ
156c0 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20  ically the text 
156d0 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65  of a.** column e
156e0 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20  xpression as it 
156f0 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45  exists in a SELE
15700 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48  CT statement.  H
15710 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68  owever, if.** th
15720 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61  e bSpanIsTab fla
15730 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a  g is set, then z
15740 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64  Span is overload
15750 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e  ed to mean the n
15760 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65  ame.** of the re
15770 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  sult column in t
15780 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53  he form: DATABAS
15790 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20  E.TABLE.COLUMN. 
157a0 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66   This later.** f
157b0 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20  orm is used for 
157c0 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20  name resolution 
157d0 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d  with nested FROM
157e0 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72   clauses..*/.str
157f0 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20  uct ExprList {. 
15800 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20   int nExpr;     
15810 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15820 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  r of expressions
15830 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
15840 20 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73    struct ExprLis
15850 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20  t_item { /* For 
15860 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
15870 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20  in the list */. 
15880 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
15890 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
158a0 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  e list of expres
158b0 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61  sions */.    cha
158c0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
158d0 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73       /* Token as
158e0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
158f0 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  is expression */
15900 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e  .    char *zSpan
15910 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
15920 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66  Original text of
15930 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
15940 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72  */.    u8 sortOr
15950 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  der;           /
15960 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20  * 1 for DESC or 
15970 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20  0 for ASC */.   
15980 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a   unsigned done :
15990 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c  1;       /* A fl
159a0 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77  ag to indicate w
159b0 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69  hen processing i
159c0 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20  s finished */.  
159d0 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e    unsigned bSpan
159e0 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70  IsTab :1; /* zSp
159f0 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c  an holds DB.TABL
15a00 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20  E.COLUMN */.    
15a10 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c  unsigned reusabl
15a20 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74  e :1;   /* Const
15a30 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ant expression i
15a40 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20  s reusable */.  
15a50 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20    union {.      
15a60 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20  struct {.       
15a70 20 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c   u16 iOrderByCol
15a80 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52  ;      /* For OR
15a90 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e  DER BY, column n
15aa0 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20  umber in result 
15ab0 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 75  set */.        u
15ac0 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20  16 iAlias;      
15ad0 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
15ae0 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b  to Parse.aAlias[
15af0 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20  ] for zName */. 
15b00 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20 20 20       } x;.      
15b10 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72 52 65  int iConstExprRe
15b20 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73  g;      /* Regis
15b30 74 65 72 20 69 6e 20 77 68 69 63 68 20 45 78 70  ter in which Exp
15b40 72 20 76 61 6c 75 65 20 69 73 20 63 61 63 68 65  r value is cache
15b50 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20  d */.    } u;.  
15b60 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20 20 20  } *a;           
15b70 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20         /* Alloc 
15b80 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 67  a power of two g
15b90 72 65 61 74 65 72 20 6f 72 20 65 71 75 61 6c 20  reater or equal 
15ba0 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a  to nExpr */.};..
15bb0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
15bc0 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
15bd0 75 72 65 20 69 73 20 75 73 65 64 20 62 79 20 74  ure is used by t
15be0 68 65 20 70 61 72 73 65 72 20 74 6f 20 72 65 63  he parser to rec
15bf0 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20  ord both.** the 
15c00 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 61  parse tree for a
15c10 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  n expression and
15c20 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69 6e 70   the span of inp
15c30 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a  ut text for an.*
15c40 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f  * expression..*/
15c50 0a 73 74 72 75 63 74 20 45 78 70 72 53 70 61 6e  .struct ExprSpan
15c60 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72   {.  Expr *pExpr
15c70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
15c80 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61 72  e expression par
15c90 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e  se tree */.  con
15ca0 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b  st char *zStart;
15cb0 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68 61 72     /* First char
15cc0 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74 20 74  acter of input t
15cd0 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ext */.  const c
15ce0 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f  har *zEnd;     /
15cf0 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65 72 20  * One character 
15d00 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20  past the end of 
15d10 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b  input text */.};
15d20 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
15d30 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
15d40 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61  cture can hold a
15d50 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20   simple list of 
15d60 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20  identifiers,.** 
15d70 73 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74  such as the list
15d80 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20   "a,b,c" in the 
15d90 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d  following statem
15da0 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ents:.**.**     
15db0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
15dc0 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e  ,b,c) VALUES ...
15dd0 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45  ;.**      CREATE
15de0 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28   INDEX idx ON t(
15df0 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20  a,b,c);.**      
15e00 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74  CREATE TRIGGER t
15e10 72 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54  rig BEFORE UPDAT
15e20 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e  E ON t(a,b,c) ..
15e30 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c  .;.**.** The IdL
15e40 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20  ist.a.idx field 
15e50 69 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65  is used when the
15e60 20 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e   IdList represen
15e70 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a  ts the list of.*
15e80 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61  * column names a
15e90 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d  fter a table nam
15ea0 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73  e in an INSERT s
15eb0 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68  tatement.  In th
15ec0 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a  e statement.**.*
15ed0 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  *     INSERT INT
15ee0 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a  O t(a,b,c) ....*
15ef0 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74  *.** If "a" is t
15f00 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f  he k-th column o
15f10 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65  f table "t", the
15f20 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64  n IdList.a[0].id
15f30 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  x==k..*/.struct 
15f40 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63  IdList {.  struc
15f50 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a  t IdList_item {.
15f60 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
15f70 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
15f80 20 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20   the identifier 
15f90 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20  */.    int idx; 
15fa0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
15fb0 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e  x in some Table.
15fc0 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75  aCol[] of a colu
15fd0 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a  mn named zName *
15fe0 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20  /.  } *a;.  int 
15ff0 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  nId;         /* 
16000 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69  Number of identi
16010 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73  fiers on the lis
16020 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  t */.};../*.** T
16030 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74  he bitmask datat
16040 79 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ype defined belo
16050 77 20 69 73 20 75 73 65 64 20 66 6f 72 20 76 61  w is used for va
16060 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69  rious optimizati
16070 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67  ons..**.** Chang
16080 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20  ing this from a 
16090 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62  64-bit to a 32-b
160a0 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74  it type limits t
160b0 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20  he number of.** 
160c0 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e  tables in a join
160d0 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f   to 32 instead o
160e0 66 20 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c  f 64.  But it al
160f0 73 6f 20 72 65 64 75 63 65 73 20 74 68 65 20 73  so reduces the s
16100 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69  ize.** of the li
16110 62 72 61 72 79 20 62 79 20 37 33 38 20 62 79 74  brary by 738 byt
16120 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74  es on ix86..*/.t
16130 79 70 65 64 65 66 20 75 36 34 20 42 69 74 6d 61  ypedef u64 Bitma
16140 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e  sk;../*.** The n
16150 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e  umber of bits in
16160 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d   a Bitmask.  "BM
16170 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73  S" means "BitMas
16180 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66  k Size"..*/.#def
16190 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28  ine BMS  ((int)(
161a0 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a  sizeof(Bitmask)*
161b0 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74  8))../*.** A bit
161c0 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f   in a Bitmask.*/
161d0 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54  .#define MASKBIT
161e0 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b  (n)   (((Bitmask
161f0 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e  )1)<<(n)).#defin
16200 65 20 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28  e MASKBIT32(n) (
16210 28 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31  ((unsigned int)1
16220 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54  )<<(n))../*.** T
16230 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
16240 75 63 74 75 72 65 20 64 65 73 63 72 69 62 65 73  ucture describes
16250 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
16260 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
16270 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20  tement..** Each 
16280 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72  table or subquer
16290 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  y in the FROM cl
162a0 61 75 73 65 20 69 73 20 61 20 73 65 70 61 72 61  ause is a separa
162b0 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a  te element of.**
162c0 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d   the SrcList.a[]
162d0 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69   array..**.** Wi
162e0 74 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20  th the addition 
162f0 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61  of multiple data
16300 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68  base support, th
16310 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
16320 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73  cture.** can als
16330 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 73  o be used to des
16340 63 72 69 62 65 20 61 20 70 61 72 74 69 63 75 6c  cribe a particul
16350 61 72 20 74 61 62 6c 65 20 73 75 63 68 20 61 73  ar table such as
16360 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a   the table that.
16370 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62  ** is modified b
16380 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c  y an INSERT, DEL
16390 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73  ETE, or UPDATE s
163a0 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74  tatement.  In st
163b0 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73  andard SQL,.** s
163c0 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74  uch a table must
163d0 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d   be a simple nam
163e0 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53  e: ID.  But in S
163f0 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65  QLite, the table
16400 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69   can.** now be i
16410 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 64  dentified by a d
16420 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20  atabase name, a 
16430 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61  dot, then the ta
16440 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e  ble name: ID.ID.
16450 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74  .**.** The joint
16460 79 70 65 20 73 74 61 72 74 73 20 6f 75 74 20 73  ype starts out s
16470 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20  howing the join 
16480 74 79 70 65 20 62 65 74 77 65 65 6e 20 74 68 65  type between the
16490 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a   current table.*
164a0 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74  * and the next t
164b0 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74  able on the list
164c0 2e 20 20 54 68 65 20 70 61 72 73 65 72 20 62 75  .  The parser bu
164d0 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74 68  ilds the list th
164e0 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73  is way..** But s
164f0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
16500 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74  ftJoinType() lat
16510 65 72 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f  er shifts the jo
16520 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74 20  intypes so that 
16530 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65  each.** jointype
16540 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6a   expresses the j
16550 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20  oin between the 
16560 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72  table and the pr
16570 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a  evious table..**
16580 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73  .** In the colUs
16590 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69  ed field, the hi
165a0 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69  gh-order bit (bi
165b0 74 20 36 33 29 20 69 73 20 73 65 74 20 69 66 20  t 63) is set if 
165c0 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e  the table.** con
165d0 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20  tains more than 
165e0 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74  63 columns and t
165f0 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65  he 64-th or late
16600 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64  r column is used
16610 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c  ..*/.struct SrcL
16620 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63  ist {.  int nSrc
16630 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
16640 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20  er of tables or 
16650 73 75 62 71 75 65 72 69 65 73 20 69 6e 20 74 68  subqueries in th
16660 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
16670 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20  .  u32 nAlloc;  
16680 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16690 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74   entries allocat
166a0 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20  ed in a[] below 
166b0 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c  */.  struct SrcL
166c0 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53  ist_item {.    S
166d0 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
166e0 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68   /* Schema to wh
166f0 69 63 68 20 74 68 69 73 20 69 74 65 6d 20 69 73  ich this item is
16700 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68   fixed */.    ch
16710 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20  ar *zDatabase;  
16720 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62  /* Name of datab
16730 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73  ase holding this
16740 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
16750 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
16760 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
16770 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
16780 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a   *zAlias;     /*
16790 20 54 68 65 20 22 42 22 20 70 61 72 74 20 6f 66   The "B" part of
167a0 20 61 20 22 41 20 41 53 20 42 22 20 70 68 72 61   a "A AS B" phra
167b0 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68  se.  zName is th
167c0 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62  e "A" */.    Tab
167d0 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f  le *pTab;      /
167e0 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63  * An SQL table c
167f0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
16800 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c  zName */.    Sel
16810 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f  ect *pSelect;  /
16820 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61 74 65  * A SELECT state
16830 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61  ment used in pla
16840 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61  ce of a table na
16850 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64  me */.    int ad
16860 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41  drFillSub;  /* A
16870 64 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75  ddress of subrou
16880 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74  tine to manifest
16890 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20   a subquery */. 
168a0 20 20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e     int regReturn
168b0 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  ;    /* Register
168c0 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20   holding return 
168d0 61 64 64 72 65 73 73 20 6f 66 20 61 64 64 72 46  address of addrF
168e0 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e  illSub */.    in
168f0 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20  t regResult;    
16900 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c  /* Registers hol
16910 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20  ding results of 
16920 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a  a co-routine */.
16930 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b      u8 jointype;
16940 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66        /* Type of
16950 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
16960 69 73 20 61 62 6c 65 20 61 6e 64 20 74 68 65 20  is able and the 
16970 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20  previous */.    
16980 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65  unsigned notInde
16990 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72  xed :1;    /* Tr
169a0 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ue if there is a
169b0 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
169c0 75 73 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  use */.    unsig
169d0 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64  ned isCorrelated
169e0 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66   :1;  /* True if
169f0 20 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f   sub-query is co
16a00 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20  rrelated */.    
16a10 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f  unsigned viaCoro
16a20 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d  utine :1;  /* Im
16a30 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63  plemented as a c
16a40 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20  o-routine */.   
16a50 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75   unsigned isRecu
16a60 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54  rsive :1;   /* T
16a70 72 75 65 20 66 6f 72 20 72 65 63 75 72 73 69 76  rue for recursiv
16a80 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57  e reference in W
16a90 49 54 48 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ITH */.#ifndef S
16aa0 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
16ab0 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c 65 63  IN.    u8 iSelec
16ac0 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66 20 70  tId;     /* If p
16ad0 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65 20 69  Select!=0, the i
16ae0 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c  d of the sub-sel
16af0 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65  ect in EQP */.#e
16b00 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69 43 75  ndif.    int iCu
16b10 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68  rsor;      /* Th
16b20 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75  e VDBE cursor nu
16b30 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61 63 63  mber used to acc
16b40 65 73 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ess this table *
16b50 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b  /.    Expr *pOn;
16b60 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f          /* The O
16b70 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  N clause of a jo
16b80 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74  in */.    IdList
16b90 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54   *pUsing;   /* T
16ba0 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  he USING clause 
16bb0 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20  of a join */.   
16bc0 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64   Bitmask colUsed
16bd0 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c  ;  /* Bit N (1<<
16be0 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e  N) set if column
16bf0 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75 73   N of pTab is us
16c00 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  ed */.    char *
16c10 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f 2a 20 49  zIndex;     /* I
16c20 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22  dentifier from "
16c30 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64  INDEXED BY <zInd
16c40 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20  ex>" clause */. 
16c50 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78     Index *pIndex
16c60 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 73 74  ;    /* Index st
16c70 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f  ructure correspo
16c80 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64 65 78 2c  nding to zIndex,
16c90 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 7d 20 61   if any */.  } a
16ca0 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
16cb0 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
16cc0 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69 65  r each identifie
16cd0 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  r on the list */
16ce0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69  .};../*.** Permi
16cf0 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74  tted values of t
16d00 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69  he SrcList.a.joi
16d10 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23  ntype field.*/.#
16d20 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20  define JT_INNER 
16d30 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a      0x0001    /*
16d40 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e   Any kind of inn
16d50 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e  er or cross join
16d60 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43   */.#define JT_C
16d70 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32 20  ROSS     0x0002 
16d80 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75     /* Explicit u
16d90 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20  se of the CROSS 
16da0 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
16db0 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20  ne JT_NATURAL   
16dc0 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75  0x0004    /* Tru
16dd0 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c  e for a "natural
16de0 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  " join */.#defin
16df0 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30  e JT_LEFT      0
16e00 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74  x0008    /* Left
16e10 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
16e20 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20  define JT_RIGHT 
16e30 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a      0x0010    /*
16e40 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69   Right outer joi
16e50 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
16e60 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32 30  OUTER     0x0020
16e70 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45      /* The "OUTE
16e80 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72  R" keyword is pr
16e90 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esent */.#define
16ea0 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78   JT_ERROR     0x
16eb0 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f  0040    /* unkno
16ec0 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65  wn or unsupporte
16ed0 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a  d join type */..
16ee0 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70  ./*.** Flags app
16ef0 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65  ropriate for the
16f00 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61   wctrlFlags para
16f10 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33  meter of sqlite3
16f20 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20  WhereBegin().** 
16f30 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e 66  and the WhereInf
16f40 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d  o.wctrlFlags mem
16f50 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ber..*/.#define 
16f60 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f  WHERE_ORDERBY_NO
16f70 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a  RMAL   0x0000 /*
16f80 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e   No-op */.#defin
16f90 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
16fa0 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30 31 20  MIN      0x0001 
16fb0 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63  /* ORDER BY proc
16fc0 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29  essing for min()
16fd0 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
16fe0 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d   WHERE_ORDERBY_M
16ff0 41 58 20 20 20 20 20 20 30 78 30 30 30 32 20 2f  AX      0x0002 /
17000 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65  * ORDER BY proce
17010 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20  ssing for max() 
17020 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
17030 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45  WHERE_ONEPASS_DE
17040 53 49 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a  SIRED  0x0004 /*
17050 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d   Want to do one-
17060 70 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45  pass UPDATE/DELE
17070 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  TE */.#define WH
17080 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f  ERE_DUPLICATES_O
17090 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 4f  K    0x0008 /* O
170a0 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f  k to return a ro
170b0 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65  w more than once
170c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
170d0 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53  E_OMIT_OPEN_CLOS
170e0 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54 61 62  E  0x0010 /* Tab
170f0 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65 20 61  le cursors are a
17100 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23  lready open */.#
17110 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46 4f 52  define WHERE_FOR
17120 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20 30 78  CE_TABLE      0x
17130 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75  0020 /* Do not u
17140 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79  se an index-only
17150 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65 66 69   search */.#defi
17160 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c  ne WHERE_ONETABL
17170 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30 34 30  E_ONLY    0x0040
17180 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68   /* Only code th
17190 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e 20 70  e 1st table in p
171a0 54 61 62 4c 69 73 74 20 2a 2f 0a 20 20 20 20 20  TabList */.     
171b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171c0 20 20 20 20 20 2f 2a 20 20 20 30 78 30 30 38 30       /*   0x0080
171d0 20 2f 2f 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   // not currentl
171e0 79 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  y used */.#defin
171f0 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20  e WHERE_GROUPBY 
17200 20 20 20 20 20 20 20 20 20 30 78 30 31 30 30 20           0x0100 
17210 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20 72  /* pOrderBy is r
17220 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59  eally a GROUP BY
17230 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
17240 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20 20  E_DISTINCTBY    
17250 20 20 20 30 78 30 32 30 30 20 2f 2a 20 70 4f 72     0x0200 /* pOr
17260 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20  derby is really 
17270 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73  a DISTINCT claus
17280 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
17290 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54  RE_WANT_DISTINCT
172a0 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20 41 6c      0x0400 /* Al
172b0 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74  l output needs t
172c0 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f  o be distinct */
172d0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53  .#define WHERE_S
172e0 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20 20 20  ORTBYGROUP      
172f0 30 78 30 38 30 30 20 2f 2a 20 53 75 70 70 6f 72  0x0800 /* Suppor
17300 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
17310 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66  Sorted() */.#def
17320 69 6e 65 20 57 48 45 52 45 5f 52 45 4f 50 45 4e  ine WHERE_REOPEN
17330 5f 49 44 58 20 20 20 20 20 20 20 30 78 31 30 30  _IDX       0x100
17340 30 20 2f 2a 20 54 72 79 20 74 6f 20 75 73 65 20  0 /* Try to use 
17350 4f 50 5f 52 65 6f 70 65 6e 49 64 78 20 2a 2f 0a  OP_ReopenIdx */.
17360 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75  ./* Allowed retu
17370 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73  rn values from s
17380 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73  qlite3WhereIsDis
17390 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69  tinct().*/.#defi
173a0 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
173b0 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f  T_NOOP      0  /
173c0 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  * DISTINCT keywo
173d0 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23  rd not used */.#
173e0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
173f0 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20  TINCT_UNIQUE    
17400 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61  1  /* No duplica
17410 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  tes */.#define W
17420 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52  HERE_DISTINCT_OR
17430 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c  DERED   2  /* Al
17440 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65  l duplicates are
17450 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65   adjacent */.#de
17460 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
17470 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20  NCT_UNORDERED 3 
17480 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61   /* Duplicates a
17490 72 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a  re scattered */.
174a0 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e  ./*.** A NameCon
174b0 74 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63  text defines a c
174c0 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20  ontext in which 
174d0 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65  to resolve table
174e0 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e   and column.** n
174f0 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65  ames.  The conte
17500 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  xt consists of a
17510 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20   list of tables 
17520 28 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66  (the pSrcList) f
17530 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69  ield and.** a li
17540 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72  st of named expr
17550 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e  ession (pEList).
17560 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72    The named expr
17570 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a  ession list may.
17580 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65  ** be NULL.  The
17590 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64   pSrc correspond
175a0 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c  s to the FROM cl
175b0 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
175c0 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61   or.** to the ta
175d0 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74  ble being operat
175e0 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c  ed on by INSERT,
175f0 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45   UPDATE, or DELE
17600 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69  TE.  The.** pELi
17610 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  st corresponds t
17620 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  o the result set
17630 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64   of a SELECT and
17640 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20   is NULL for.** 
17650 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73  other statements
17660 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74  ..**.** NameCont
17670 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74  exts can be nest
17680 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76  ed.  When resolv
17690 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69  ing names, the i
176a0 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f  nner-most .** co
176b0 6e 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65  ntext is searche
176c0 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20  d first.  If no 
176d0 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
176e0 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a  the next outer.*
176f0 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65  * context is che
17700 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20  cked.  If there 
17710 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63  is still no matc
17720 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74  h, the next cont
17730 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65  ext.** is checke
17740 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73  d.  This process
17750 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c   continues until
17760 20 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20   either a match 
17770 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61  is found.** or a
17780 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20  ll contexts are 
17790 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d  check.  When a m
177a0 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
177b0 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f  he nRef member o
177c0 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74  f.** the context
177d0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
177e0 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65  match is increme
177f0 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63  nted. .**.** Eac
17800 68 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20  h subquery gets 
17810 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78  a new NameContex
17820 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69  t.  The pNext fi
17830 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  eld points to th
17840 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  e.** NameContext
17850 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71   in the parent q
17860 75 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20  uery.  Thus the 
17870 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e  process of scann
17880 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43  ing the.** NameC
17890 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72  ontext list corr
178a0 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63  esponds to searc
178b0 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63  hing through suc
178c0 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a  cessively outer.
178d0 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f  ** subqueries lo
178e0 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63  oking for a matc
178f0 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d  h..*/.struct Nam
17900 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72  eContext {.  Par
17910 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
17920 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20    /* The parser 
17930 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53  */.  SrcList *pS
17940 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65  rcList;   /* One
17950 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20   or more tables 
17960 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20  used to resolve 
17970 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c  names */.  ExprL
17980 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20  ist *pEList;    
17990 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74  /* Optional list
179a0 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63   of result-set c
179b0 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49  olumns */.  AggI
179c0 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20  nfo *pAggInfo;  
179d0 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
179e0 61 62 6f 75 74 20 61 67 67 72 65 67 61 74 65 73  about aggregates
179f0 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a   at this level *
17a00 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  /.  NameContext 
17a10 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74  *pNext;  /* Next
17a20 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74   outer name cont
17a30 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f  ext.  NULL for o
17a40 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e  utermost */.  in
17a50 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  t nRef;         
17a60 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17a70 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62  names resolved b
17a80 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a  y this context *
17a90 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
17aa0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
17ab0 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63  er of errors enc
17ac0 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72  ountered while r
17ad0 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a  esolving names *
17ae0 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61 67 73 3b  /.  u16 ncFlags;
17af0 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f           /* Zero
17b00 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c   or more NC_* fl
17b10 61 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ags defined belo
17b20 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  w */.};../*.** A
17b30 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
17b40 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78  r the NameContex
17b50 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64  t, ncFlags field
17b60 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 3a 20 20 4e  ..**.** Note:  N
17b70 43 5f 4d 69 6e 4d 61 78 41 67 67 20 6d 75 73 74  C_MinMaxAgg must
17b80 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 76   have the same v
17b90 61 6c 75 65 20 61 73 20 53 46 5f 4d 69 6e 4d 61  alue as SF_MinMa
17ba0 78 41 67 67 20 61 6e 64 0a 2a 2a 20 53 51 4c 49  xAgg and.** SQLI
17bb0 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 2e 0a  TE_FUNC_MINMAX..
17bc0 2a 2a 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ** .*/.#define N
17bd0 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 30  C_AllowAgg  0x00
17be0 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65  01  /* Aggregate
17bf0 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61   functions are a
17c00 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23  llowed here */.#
17c10 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67 67  define NC_HasAgg
17c20 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 4f      0x0002  /* O
17c30 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65  ne or more aggre
17c40 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73  gate functions s
17c50 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  een */.#define N
17c60 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30 30  C_IsCheck   0x00
17c70 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72  04  /* True if r
17c80 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69  esolving names i
17c90 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  n a CHECK constr
17ca0 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
17cb0 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30  NC_InAggFunc 0x0
17cc0 30 30 38 20 20 2f 2a 20 54 72 75 65 20 69 66 20  008  /* True if 
17cd0 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65  analyzing argume
17ce0 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75  nts to an agg fu
17cf0 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  nc */.#define NC
17d00 5f 50 61 72 74 49 64 78 20 20 20 30 78 30 30 31  _PartIdx   0x001
17d10 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65  0  /* True if re
17d20 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69 61  solving a partia
17d30 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a 2f  l index WHERE */
17d40 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d  .#define NC_MinM
17d50 61 78 41 67 67 20 30 78 31 30 30 30 20 20 2f 2a  axAgg 0x1000  /*
17d60 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67 61   min/max aggrega
17d70 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20 6e  tes seen.  See n
17d80 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f 2a  ote above */../*
17d90 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
17da0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
17db0 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
17dc0 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74  ins all informat
17dd0 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f  ion.** needed to
17de0 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66   generate code f
17df0 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45  or a single SELE
17e00 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  CT statement..**
17e10 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65  .** nLimit is se
17e20 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65  t to -1 if there
17e30 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61   is no LIMIT cla
17e40 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73  use.  nOffset is
17e50 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66   set to 0..** If
17e60 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49   there is a LIMI
17e70 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61  T clause, the pa
17e80 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74  rser sets nLimit
17e90 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
17ea0 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e   the.** limit an
17eb0 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65  d nOffset to the
17ec0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66   value of the of
17ed0 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74 68  fset (or 0 if th
17ee0 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66  ere is not.** of
17ef0 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65  fset).  But late
17f00 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64  r on, nLimit and
17f10 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20   nOffset become 
17f20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  the memory locat
17f30 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56  ions.** in the V
17f40 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64 20  DBE that record 
17f50 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66  the limit and of
17f60 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a  fset counters..*
17f70 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68  *.** addrOpenEph
17f80 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74  m[] entries cont
17f90 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20  ain the address 
17fa0 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  of OP_OpenEpheme
17fb0 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20  ral opcodes..** 
17fc0 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20  These addresses 
17fd0 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73  must be stored s
17fe0 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f  o that we can go
17ff0 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69   back and fill i
18000 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49  n.** the P4_KEYI
18010 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d  NFO and P2 param
18020 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65  eters later.  Ne
18030 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66  ither the KeyInf
18040 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d  o nor.** the num
18050 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
18060 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70  n P2 can be comp
18070 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65  uted at the same
18080 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20   time.** as the 
18090 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74  OP_OpenEphm inst
180a0 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64  ruction is coded
180b0 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20   because not.** 
180c0 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69  enough informati
180d0 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d  on about the com
180e0 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b  pound query is k
180f0 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69  nown at that poi
18100 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e  nt..** The KeyIn
18110 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54  fo for addrOpenT
18120 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63  ran[0] and [1] c
18130 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e  ontains collatin
18140 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66  g sequences.** f
18150 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  or the result se
18160 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  t.  The KeyInfo 
18170 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  for addrOpenEphm
18180 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [2] contains col
18190 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e  lating.** sequen
181a0 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45  ces for the ORDE
181b0 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a  R BY clause..*/.
181c0 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a  struct Select {.
181d0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69    ExprList *pELi
181e0 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  st;      /* The 
181f0 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65  fields of the re
18200 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b  sult */.  u8 op;
18210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18220 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55   /* One of: TK_U
18230 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49  NION TK_ALL TK_I
18240 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45  NTERSECT TK_EXCE
18250 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46  PT */.  u16 selF
18260 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f  lags;          /
18270 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76  * Various SF_* v
18280 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69  alues */.  int i
18290 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20  Limit, iOffset; 
182a0 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
182b0 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49  sters holding LI
182c0 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75  MIT & OFFSET cou
182d0 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20 53 45 4c  nters */.#if SEL
182e0 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
182f0 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e 61 6d 65  .  char zSelName
18300 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53 79 6d  [12];     /* Sym
18310 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20 74 68  bolic name of th
18320 69 73 20 53 45 4c 45 43 54 20 75 73 65 20 66 6f  is SELECT use fo
18330 72 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23  r debugging */.#
18340 65 6e 64 69 66 0a 20 20 69 6e 74 20 61 64 64 72  endif.  int addr
18350 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f  OpenEphm[2];   /
18360 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f  * OP_OpenEphem o
18370 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74  pcodes related t
18380 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f  o this select */
18390 0a 20 20 75 36 34 20 6e 53 65 6c 65 63 74 52 6f  .  u64 nSelectRo
183a0 77 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74  w;        /* Est
183b0 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66  imated number of
183c0 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a   result rows */.
183d0 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b    SrcList *pSrc;
183e0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
183f0 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
18400 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20   Expr *pWhere;  
18410 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
18420 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20  HERE clause */. 
18430 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
18440 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47  pBy;    /* The G
18450 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a  ROUP BY clause *
18460 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e  /.  Expr *pHavin
18470 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  g;         /* Th
18480 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  e HAVING clause 
18490 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
184a0 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54  OrderBy;    /* T
184b0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
184c0 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  se */.  Select *
184d0 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f  pPrior;        /
184e0 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69  * Prior select i
184f0 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c  n a compound sel
18500 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  ect statement */
18510 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74  .  Select *pNext
18520 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  ;         /* Nex
18530 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20  t select to the 
18540 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  left in a compou
18550 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c  nd */.  Expr *pL
18560 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f  imit;          /
18570 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  * LIMIT expressi
18580 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e  on. NULL means n
18590 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78  ot used. */.  Ex
185a0 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20  pr *pOffset;    
185b0 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65       /* OFFSET e
185c0 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20  xpression. NULL 
185d0 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20  means not used. 
185e0 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
185f0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  ;           /* W
18600 49 54 48 20 63 6c 61 75 73 65 20 61 74 74 61 63  ITH clause attac
18610 68 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  hed to this sele
18620 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a  ct. Or NULL. */.
18630 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
18640 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c  d values for Sel
18650 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54  ect.selFlags.  T
18660 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20 73  he "SF" prefix s
18670 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65  tands for.** "Se
18680 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a 23  lect Flag"..*/.#
18690 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e  define SF_Distin
186a0 63 74 20 20 20 20 20 20 20 20 30 78 30 30 30 31  ct        0x0001
186b0 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75    /* Output shou
186c0 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a  ld be DISTINCT *
186d0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73  /.#define SF_Res
186e0 6f 6c 76 65 64 20 20 20 20 20 20 20 20 30 78 30  olved        0x0
186f0 30 30 32 20 20 2f 2a 20 49 64 65 6e 74 69 66 69  002  /* Identifi
18700 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  ers have been re
18710 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e  solved */.#defin
18720 65 20 53 46 5f 41 67 67 72 65 67 61 74 65 20 20  e SF_Aggregate  
18730 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
18740 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61  Contains aggrega
18750 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
18760 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73 45  #define SF_UsesE
18770 70 68 65 6d 65 72 61 6c 20 20 20 30 78 30 30 30  phemeral   0x000
18780 38 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20 4f  8  /* Uses the O
18790 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63  penEphemeral opc
187a0 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ode */.#define S
187b0 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20 20  F_Expanded      
187c0 20 20 30 78 30 30 31 30 20 20 2f 2a 20 73 71 6c    0x0010  /* sql
187d0 69 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e 64  ite3SelectExpand
187e0 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69  () called on thi
187f0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
18800 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20 20  HasTypeInfo     
18810 30 78 30 30 32 30 20 20 2f 2a 20 46 52 4f 4d 20  0x0020  /* FROM 
18820 73 75 62 71 75 65 72 69 65 73 20 68 61 76 65 20  subqueries have 
18830 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20 2a  Table metadata *
18840 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d  /.#define SF_Com
18850 70 6f 75 6e 64 20 20 20 20 20 20 20 20 30 78 30  pound        0x0
18860 30 34 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  040  /* Part of 
18870 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79  a compound query
18880 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56   */.#define SF_V
18890 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 20 30  alues          0
188a0 78 30 30 38 30 20 20 2f 2a 20 53 79 6e 74 68 65  x0080  /* Synthe
188b0 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45  sized from VALUE
188c0 53 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  S clause */.    
188d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188e0 2f 2a 20 20 20 20 20 30 78 30 31 30 30 20 20 4e  /*     0x0100  N
188f0 4f 54 20 55 53 45 44 20 2a 2f 0a 23 64 65 66 69  OT USED */.#defi
18900 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d  ne SF_NestedFrom
18910 20 20 20 20 20 20 30 78 30 32 30 30 20 20 2f 2a        0x0200  /*
18920 20 50 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e   Part of a paren
18930 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c  thesized FROM cl
18940 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
18950 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20  SF_MaybeConvert 
18960 20 20 20 30 78 30 34 30 30 20 20 2f 2a 20 4e 65     0x0400  /* Ne
18970 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ed convertCompou
18980 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
18990 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ry() */.#define 
189a0 53 46 5f 52 65 63 75 72 73 69 76 65 20 20 20 20  SF_Recursive    
189b0 20 20 20 30 78 30 38 30 30 20 20 2f 2a 20 54 68     0x0800  /* Th
189c0 65 20 72 65 63 75 72 73 69 76 65 20 70 61 72 74  e recursive part
189d0 20 6f 66 20 61 20 72 65 63 75 72 73 69 76 65 20   of a recursive 
189e0 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTE */.#define S
189f0 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20  F_MinMaxAgg     
18a00 20 20 30 78 31 30 30 30 20 20 2f 2a 20 41 67 67    0x1000  /* Agg
18a10 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e  regate containin
18a20 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28 29  g min() or max()
18a30 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   */.../*.** The 
18a40 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c  results of a SEL
18a50 45 43 54 20 63 61 6e 20 62 65 20 64 69 73 74 72  ECT can be distr
18a60 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72 61  ibuted in severa
18a70 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e  l ways, as defin
18a80 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20  ed.** by one of 
18a90 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  the following ma
18aa0 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22  cros.  The "SRT"
18ab0 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53   prefix means "S
18ac0 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20  ELECT Result.** 
18ad0 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  Type"..**.**    
18ae0 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
18af0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61   Store results a
18b00 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d  s a key in a tem
18b10 70 6f 72 61 72 79 20 69 6e 64 65 78 20 0a 2a 2a  porary index .**
18b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b30 20 20 20 20 20 69 64 65 6e 74 69 66 69 65 64 20       identified 
18b40 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  by pDest->iSDPar
18b50 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  m..**.**     SRT
18b60 5f 45 78 63 65 70 74 20 20 20 20 20 20 52 65 6d  _Except      Rem
18b70 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d  ove results from
18b80 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69   the temporary i
18b90 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50  ndex pDest->iSDP
18ba0 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  arm..**.**     S
18bb0 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 53  RT_Exists      S
18bc0 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f  tore a 1 in memo
18bd0 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69  ry cell pDest->i
18be0 53 44 50 61 72 6d 20 69 66 20 74 68 65 20 72 65  SDParm if the re
18bf0 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  sult.**         
18c00 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
18c10 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a  is not empty..**
18c20 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63  .**     SRT_Disc
18c30 61 72 64 20 20 20 20 20 54 68 72 6f 77 20 74 68  ard     Throw th
18c40 65 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20  e results away. 
18c50 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
18c60 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20   SELECT.**      
18c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
18c80 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
18c90 20 74 72 69 67 67 65 72 73 20 77 68 6f 73 65 20   triggers whose 
18ca0 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a  only purpose is.
18cb0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18cc0 20 20 20 20 20 20 20 74 68 65 20 73 69 64 65 2d         the side-
18cd0 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74  effects of funct
18ce0 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  ions..**.** All 
18cf0 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65  of the above are
18d00 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20   free to ignore 
18d10 74 68 65 69 72 20 4f 52 44 45 52 20 42 59 20 63  their ORDER BY c
18d20 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61  lause. Those tha
18d30 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74  t.** follow must
18d40 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52   honor the ORDER
18d50 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a   BY clause..**.*
18d60 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74  *     SRT_Output
18d70 20 20 20 20 20 20 47 65 6e 65 72 61 74 65 20 61        Generate a
18d80 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28   row of output (
18d90 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73  using the OP_Res
18da0 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20  ultRow.**       
18db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70                op
18dc0 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20 72  code) for each r
18dd0 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ow in the result
18de0 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20   set..**.**     
18df0 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20  SRT_Mem         
18e00 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68  Only valid if th
18e10 65 20 72 65 73 75 6c 74 20 69 73 20 61 20 73 69  e result is a si
18e20 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20  ngle column..** 
18e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e40 20 20 20 20 53 74 6f 72 65 20 74 68 65 20 66 69      Store the fi
18e50 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  rst column of th
18e60 65 20 66 69 72 73 74 20 72 65 73 75 6c 74 20 72  e first result r
18e70 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ow.**           
18e80 20 20 20 20 20 20 20 20 20 20 69 6e 20 72 65 67            in reg
18e90 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44  ister pDest->iSD
18ea0 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f  Parm then abando
18eb0 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20  n the rest.**   
18ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ed0 20 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20    of the query. 
18ee0 20 54 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f   This destinatio
18ef0 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54  n implies "LIMIT
18f00 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53   1"..**.**     S
18f10 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 54  RT_Set         T
18f20 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62  he result must b
18f30 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  e a single colum
18f40 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a  n.  Store each.*
18f50 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
18f60 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73        row of res
18f70 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20 69  ult as the key i
18f80 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  n table pDest->i
18f90 53 44 50 61 72 6d 2e 20 0a 2a 2a 20 20 20 20 20  SDParm. .**     
18fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fb0 41 70 70 6c 79 20 74 68 65 20 61 66 66 69 6e 69  Apply the affini
18fc0 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53 64 73  ty pDest->affSds
18fd0 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69 6e 67  t before storing
18fe0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18ff0 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e          results.
19000 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d    Used to implem
19010 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43 54 20  ent "IN (SELECT 
19020 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  ...)"..**.**    
19030 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20   SRT_EphemTab   
19040 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d 70 6f   Create an tempo
19050 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
19060 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20 73 74  ->iSDParm and st
19070 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ore.**          
19080 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 72             the r
19090 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54 68 65  esult there. The
190a0 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20   cursor is left 
190b0 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20  open after.**   
190c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190d0 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20 54 68    returning.  Th
190e0 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 54  is is like SRT_T
190f0 61 62 6c 65 20 65 78 63 65 70 74 20 74 68 61 74  able except that
19100 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19110 20 20 20 20 20 20 20 20 74 68 69 73 20 64 65 73          this des
19120 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f 50  tination uses OP
19130 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 74  _OpenEphemeral t
19140 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20 20 20  o create.**     
19150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19160 74 68 65 20 74 61 62 6c 65 20 66 69 72 73 74 2e  the table first.
19170 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43  .**.**     SRT_C
19180 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e 65 72  oroutine   Gener
19190 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65  ate a co-routine
191a0 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 61 20   that returns a 
191b0 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20  new row of.**   
191c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191d0 20 20 72 65 73 75 6c 74 73 20 65 61 63 68 20 74    results each t
191e0 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f 6b 65  ime it is invoke
191f0 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20 70 6f  d.  The entry po
19200 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  int.**          
19210 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68             of th
19220 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20  e co-routine is 
19230 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
19240 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  er pDest->iSDPar
19250 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  m.**            
19260 20 20 20 20 20 20 20 20 20 61 6e 64 20 74 68 65           and the
19270 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 73   result row is s
19280 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74 2d 3e  tored in pDest->
19290 6e 44 65 73 74 20 72 65 67 69 73 74 65 72 73 0a  nDest registers.
192a0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
192b0 20 20 20 20 20 20 20 73 74 61 72 74 69 6e 67 20         starting 
192c0 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53 64 73  with pDest->iSds
192d0 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
192e0 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53 74 6f  _Table       Sto
192f0 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 74 65  re results in te
19300 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
19310 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
19320 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20 20 20       SRT_Fifo   
19330 20 20 20 20 20 54 68 69 73 20 69 73 20 6c 69 6b       This is lik
19340 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 65  e SRT_EphemTab e
19350 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 74  xcept that the t
19360 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  able.**         
19370 20 20 20 20 20 20 20 20 20 20 20 20 69 73 20 61              is a
19380 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65 61 64  ssumed to alread
19390 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f  y be open.  SRT_
193a0 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20  Fifo has.**     
193b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193c0 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 70  the additional p
193d0 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69 6e 67  roperty of being
193e0 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a   able to ignore.
193f0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19400 20 20 20 20 20 20 20 74 68 65 20 4f 52 44 45 52         the ORDER
19410 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a   BY clause..**.*
19420 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 46 69  *     SRT_DistFi
19430 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65 73 75  fo    Store resu
19440 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f 72 61  lts in a tempora
19450 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
19460 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20  iSDParm..**     
19470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19480 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74 65 6d  But also use tem
19490 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
194a0 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61 73  st->iSDParm+1 as
194b0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
194c0 20 20 20 20 20 20 20 20 61 20 72 65 63 6f 72 64          a record
194d0 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20 72 65   of all prior re
194e0 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72 65  sults and ignore
194f0 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65 0a 2a   any duplicate.*
19500 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19510 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d        rows.  Nam
19520 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73 74 69  e means:  "Disti
19530 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a  nct Fifo"..**.**
19540 20 20 20 20 20 53 52 54 5f 51 75 65 75 65 20 20       SRT_Queue  
19550 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
19560 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71  ts in priority q
19570 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50  ueue pDest->iSDP
19580 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20  arm (really.**  
19590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195a0 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20 20 41     an index).  A
195b0 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e 63 65  ppend a sequence
195c0 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61 74 20   number so that 
195d0 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20  all entries.**  
195e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195f0 20 20 20 61 72 65 20 64 69 73 74 69 6e 63 74 2e     are distinct.
19600 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44  .**.**     SRT_D
19610 69 73 74 51 75 65 75 65 20 20 20 53 74 6f 72 65  istQueue   Store
19620 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f   results in prio
19630 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74  rity queue pDest
19640 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69  ->iSDParm only i
19650 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  f.**            
19660 20 20 20 20 20 20 20 20 20 74 68 65 20 73 61 6d           the sam
19670 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e 65 76  e record has nev
19680 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64 20 62  er been stored b
19690 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20  efore.  The.**  
196a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196b0 20 20 20 69 6e 64 65 78 20 61 74 20 70 44 65 73     index at pDes
196c0 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c  t->iSDParm+1 hol
196d0 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72  d all prior stor
196e0 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  es..*/.#define S
196f0 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20  RT_Union        
19700 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  1  /* Store resu
19710 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  lt as keys in an
19720 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
19730 65 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20  e SRT_Except    
19740 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20     2  /* Remove 
19750 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e  result from a UN
19760 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  ION index */.#de
19770 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20  fine SRT_Exists 
19780 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72        3  /* Stor
19790 65 20 31 20 69 66 20 74 68 65 20 72 65 73 75 6c  e 1 if the resul
197a0 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a  t is not empty *
197b0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
197c0 73 63 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a  scard      4  /*
197d0 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65   Do not save the
197e0 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72   results anywher
197f0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
19800 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20 35 20  _Fifo         5 
19810 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
19820 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e   as data with an
19830 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64   automatic rowid
19840 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
19850 44 69 73 74 46 69 66 6f 20 20 20 20 20 36 20 20  DistFifo     6  
19860 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f  /* Like SRT_Fifo
19870 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73  , but unique res
19880 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ults only */.#de
19890 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65 20 20  fine SRT_Queue  
198a0 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72        7  /* Stor
198b0 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 71  e result in an q
198c0 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ueue */.#define 
198d0 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20  SRT_DistQueue   
198e0 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f   8  /* Like SRT_
198f0 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69 71 75  Queue, but uniqu
19900 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a  e results only *
19910 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20  /../* The ORDER 
19920 42 59 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e  BY clause is ign
19930 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20  ored for all of 
19940 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65  the above */.#de
19950 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72  fine IgnorableOr
19960 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65 44  derby(X) ((X->eD
19970 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74 51 75  est)<=SRT_DistQu
19980 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20 53 52  eue)..#define SR
19990 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20 39  T_Output       9
199a0 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68    /* Output each
199b0 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a   row of result *
199c0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65  /.#define SRT_Me
199d0 6d 20 20 20 20 20 20 20 20 20 31 30 20 20 2f 2a  m         10  /*
199e0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
199f0 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a   a memory cell *
19a00 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65  /.#define SRT_Se
19a10 74 20 20 20 20 20 20 20 20 20 31 31 20 20 2f 2a  t         11  /*
19a20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61   Store results a
19a30 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  s keys in an ind
19a40 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
19a50 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 31 32  T_EphemTab    12
19a60 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e    /* Create tran
19a70 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74  sient tab and st
19a80 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62  ore like SRT_Tab
19a90 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  le */.#define SR
19aa0 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 33  T_Coroutine   13
19ab0 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20    /* Generate a 
19ac0 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65  single row of re
19ad0 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sult */.#define 
19ae0 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20  SRT_Table       
19af0 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  14  /* Store res
19b00 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68  ult as data with
19b10 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f   an automatic ro
19b20 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  wid */../*.** An
19b30 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
19b40 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62  s object describ
19b50 65 73 20 77 68 65 72 65 20 74 6f 20 70 75 74 20  es where to put 
19b60 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  of the results o
19b70 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74  f.** a SELECT st
19b80 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  atement..*/.stru
19b90 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a  ct SelectDest {.
19ba0 20 20 75 38 20 65 44 65 73 74 3b 20 20 20 20 20    u8 eDest;     
19bb0 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f         /* How to
19bc0 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20   dispose of the 
19bd0 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20  results.  On of 
19be0 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a  SRT_* above. */.
19bf0 20 20 63 68 61 72 20 61 66 66 53 64 73 74 3b 20    char affSdst; 
19c00 20 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69         /* Affini
19c10 74 79 20 75 73 65 64 20 77 68 65 6e 20 65 44 65  ty used when eDe
19c20 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20  st==SRT_Set */. 
19c30 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20   int iSDParm;   
19c40 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d        /* A param
19c50 65 74 65 72 20 75 73 65 64 20 62 79 20 74 68 65  eter used by the
19c60 20 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20   eDest disposal 
19c70 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20  method */.  int 
19c80 69 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20  iSdst;          
19c90 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65   /* Base registe
19ca0 72 20 77 68 65 72 65 20 72 65 73 75 6c 74 73 20  r where results 
19cb0 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20  are written */. 
19cc0 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20   int nSdst;     
19cd0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
19ce0 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c  of registers all
19cf0 6f 63 61 74 65 64 20 2a 2f 0a 20 20 45 78 70 72  ocated */.  Expr
19d00 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20  List *pOrderBy; 
19d10 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20   /* Key columns 
19d20 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20 61 6e  for SRT_Queue an
19d30 64 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20  d SRT_DistQueue 
19d40 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72  */.};../*.** Dur
19d50 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74  ing code generat
19d60 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74  ion of statement
19d70 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74  s that do insert
19d80 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45  s into AUTOINCRE
19d90 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c 65 73 2c  MENT .** tables,
19da0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
19db0 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61 74  nformation is at
19dc0 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 54 61  tached to the Ta
19dd0 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a  ble.u.autoInc.p.
19de0 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65 61  ** pointer of ea
19df0 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  ch autoincrement
19e00 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72 64   table to record
19e10 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f 72   some side infor
19e20 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74  mation that.** t
19e30 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
19e40 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61 76  r needs.  We hav
19e50 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74 61  e to keep per-ta
19e60 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e  ble autoincremen
19e70 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  t.** information
19e80 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74 73   in case inserts
19e90 20 61 72 65 20 64 6f 77 6e 20 77 69 74 68 69 6e   are down within
19ea0 20 74 72 69 67 67 65 72 73 2e 20 20 54 72 69 67   triggers.  Trig
19eb0 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e  gers do not.** n
19ec0 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61  ormally coordina
19ed0 74 65 20 74 68 65 69 72 20 61 63 74 69 76 69 74  te their activit
19ee0 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20 6e  ies, but we do n
19ef0 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74  eed to coordinat
19f00 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67  e the.** loading
19f10 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20 61   and saving of a
19f20 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66  utoincrement inf
19f30 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  ormation..*/.str
19f40 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20  uct AutoincInfo 
19f50 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20  {.  AutoincInfo 
19f60 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78  *pNext;   /* Nex
19f70 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20  t info block in 
19f80 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20 61  a list of them a
19f90 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ll */.  Table *p
19fa0 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Tab;          /*
19fb0 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66 6f   Table this info
19fc0 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74 6f   block refers to
19fd0 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20   */.  int iDb;  
19fe0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
19ff0 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33 2e  ndex in sqlite3.
1a000 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61 73  aDb[] of databas
1a010 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a  e holding pTab *
1a020 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b 20  /.  int regCtr; 
1a030 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
1a040 6f 72 79 20 72 65 67 69 73 74 65 72 20 68 6f 6c  ory register hol
1a050 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20 63  ding the rowid c
1a060 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ounter */.};../*
1a070 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20  .** Size of the 
1a080 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a  column cache.*/.
1a090 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e  #ifndef SQLITE_N
1a0a0 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65 66 69  _COLCACHE.# defi
1a0b0 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  ne SQLITE_N_COLC
1a0c0 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a  ACHE 10.#endif..
1a0d0 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f  /*.** At least o
1a0e0 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ne instance of t
1a0f0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1a100 75 63 74 75 72 65 20 69 73 20 63 72 65 61 74 65  ucture is create
1a110 64 20 66 6f 72 20 65 61 63 68 20 0a 2a 2a 20 74  d for each .** t
1a120 72 69 67 67 65 72 20 74 68 61 74 20 6d 61 79 20  rigger that may 
1a130 62 65 20 66 69 72 65 64 20 77 68 69 6c 65 20 70  be fired while p
1a140 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52 54  arsing an INSERT
1a150 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45  , UPDATE or DELE
1a160 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e  TE.** statement.
1a170 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63 74   All such object
1a180 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
1a190 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  the linked list 
1a1a0 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61 72  headed at.** Par
1a1b0 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 61  se.pTriggerPrg a
1a1c0 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65 20  nd deleted once 
1a1d0 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c  statement compil
1a1e0 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a  ation has been.*
1a1f0 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a  * completed..**.
1a200 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70 72  ** A Vdbe sub-pr
1a210 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c 65  ogram that imple
1a220 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20 61  ments the body a
1a230 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  nd WHEN clause o
1a240 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72 69  f trigger.** Tri
1a250 67 67 65 72 50 72 67 2e 70 54 72 69 67 67 65 72  ggerPrg.pTrigger
1a260 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65 66  , assuming a def
1a270 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
1a280 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72   clause of.** Tr
1a290 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c  iggerPrg.orconf,
1a2a0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
1a2b0 65 20 54 72 69 67 67 65 72 50 72 67 2e 70 50 72  e TriggerPrg.pPr
1a2c0 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a  ogram variable..
1a2d0 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54 72  ** The Parse.pTr
1a2e0 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e 65  iggerPrg list ne
1a2f0 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f  ver contains two
1a300 20 65 6e 74 72 69 65 73 20 77 69 74 68 20 74 68   entries with th
1a310 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73  e same.** values
1a320 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67 67   for both pTrigg
1a330 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a  er and orconf..*
1a340 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65 72  *.** The Trigger
1a350 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20  Prg.aColmask[0] 
1a360 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
1a370 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64  to a mask of old
1a380 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63  .* columns.** ac
1a390 63 65 73 73 65 64 20 28 6f 72 20 73 65 74 20 74  cessed (or set t
1a3a0 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65 72 73  o 0 for triggers
1a3b0 20 66 69 72 65 64 20 61 73 20 61 20 72 65 73 75   fired as a resu
1a3c0 6c 74 20 6f 66 20 49 4e 53 45 52 54 20 0a 2a 2a  lt of INSERT .**
1a3d0 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69   statements). Si
1a3e0 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69  milarly, the Tri
1a3f0 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b  ggerPrg.aColmask
1a400 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20  [1] variable is 
1a410 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b  set to.** a mask
1a420 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e   of new.* column
1a430 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72  s used by the pr
1a440 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74  ogram..*/.struct
1a450 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20   TriggerPrg {.  
1a460 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65  Trigger *pTrigge
1a470 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67  r;      /* Trigg
1a480 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20  er this program 
1a490 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a  was coded from *
1a4a0 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a  /.  TriggerPrg *
1a4b0 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e  pNext;      /* N
1a4c0 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72  ext entry in Par
1a4d0 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c  se.pTriggerPrg l
1a4e0 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67  ist */.  SubProg
1a4f0 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20  ram *pProgram;  
1a500 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c   /* Program impl
1a510 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67 65  ementing pTrigge
1a520 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e  r/orconf */.  in
1a530 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  t orconf;       
1a540 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
1a550 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c   ON CONFLICT pol
1a560 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f  icy */.  u32 aCo
1a570 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20  lmask[2];       
1a580 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64   /* Masks of old
1a590 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e  .*, new.* column
1a5a0 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b  s accessed */.};
1a5b0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d  ../*.** The yDbM
1a5c0 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f 72  ask datatype for
1a5d0 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66 20   the bitmask of 
1a5e0 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
1a5f0 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53  abases..*/.#if S
1a600 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
1a610 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66 20  ED>30.  typedef 
1a620 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79 44  unsigned char yD
1a630 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41  bMask[(SQLITE_MA
1a640 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38 5d  X_ATTACHED+9)/8]
1a650 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ;.# define DbMas
1a660 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28  kTest(M,I)    ((
1a670 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28  (M)[(I)/8]&(1<<(
1a680 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20 64  (I)&7)))!=0).# d
1a690 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f  efine DbMaskZero
1a6a0 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74 28  (M)      memset(
1a6b0 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29  (M),0,sizeof(M))
1a6c0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1a6d0 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29  Set(M,I)     (M)
1a6e0 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49  [(I)/8]|=(1<<((I
1a6f0 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20 44  )&7)).# define D
1a700 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20  bMaskAllZero(M) 
1a710 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41    sqlite3DbMaskA
1a720 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66 69  llZero(M).# defi
1a730 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f  ne DbMaskNonZero
1a740 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44 62  (M)   (sqlite3Db
1a750 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d  MaskAllZero(M)==
1a760 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  0).#else.  typed
1a770 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  ef unsigned int 
1a780 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e  yDbMask;.# defin
1a790 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49  e DbMaskTest(M,I
1a7a0 29 20 20 20 20 28 28 28 4d 29 26 28 28 28 79 44  )    (((M)&(((yD
1a7b0 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29 21  bMask)1)<<(I)))!
1a7c0 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  =0).# define DbM
1a7d0 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20  askZero(M)      
1a7e0 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20 44  (M)=0.# define D
1a7f0 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20  bMaskSet(M,I)   
1a800 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73    (M)|=(((yDbMas
1a810 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65 66  k)1)<<(I)).# def
1a820 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ine DbMaskAllZer
1a830 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20  o(M)   (M)==0.# 
1a840 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e  define DbMaskNon
1a850 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30  Zero(M)   (M)!=0
1a860 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1a870 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e  n SQL parser con
1a880 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66  text.  A copy of
1a890 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
1a8a0 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75 67  is passed throug
1a8b0 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20  h.** the parser 
1a8c0 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c  and down into al
1a8d0 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63 74  l the parser act
1a8e0 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f  ion routine in o
1a8f0 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79  rder to.** carry
1a900 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74   around informat
1a910 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62  ion that is glob
1a920 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65  al to the entire
1a930 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   parse..**.** Th
1a940 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20 64  e structure is d
1a950 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20  ivided into two 
1a960 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65  parts.  When the
1a970 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65   parser and code
1a980 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c  .** generate cal
1a990 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63  l themselves rec
1a9a0 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69  ursively, the fi
1a9b0 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65 20  rst part of the 
1a9c0 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20  structure.** is 
1a9d0 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65  constant but the
1a9e0 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20   second part is 
1a9f0 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65 67  reset at the beg
1aa00 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f  inning and end o
1aa10 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73  f.** each recurs
1aa20 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e  ion..**.** The n
1aa30 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54  TableLock and aT
1aa40 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c  ableLock variabl
1aa50 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64  es are only used
1aa60 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d 63   if the shared-c
1aa70 61 63 68 65 20 0a 2a 2a 20 66 65 61 74 75 72 65  ache .** feature
1aa80 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20   is enabled (if 
1aa90 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73  sqlite3Tsd()->us
1aaa0 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20 74  eSharedData is t
1aab0 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a  rue). They are.*
1aac0 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  * used to store 
1aad0 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65  the set of table
1aae0 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20  -locks required 
1aaf0 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  by the statement
1ab00 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c   being.** compil
1ab10 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c  ed. Function sql
1ab20 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20  ite3TableLock() 
1ab30 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 65  is used to add e
1ab40 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a  ntries to the.**
1ab50 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74   list..*/.struct
1ab60 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74   Parse {.  sqlit
1ab70 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
1ab80 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61  /* The main data
1ab90 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  base structure *
1aba0 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  /.  char *zErrMs
1abb0 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65  g;       /* An e
1abc0 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
1abd0 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20    Vdbe *pVdbe;  
1abe0 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67         /* An eng
1abf0 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e  ine for executin
1ac00 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65 63  g database bytec
1ac10 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  ode */.  int rc;
1ac20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ac30 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
1ac40 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20  m execution */. 
1ac50 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b   u8 colNamesSet;
1ac60 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66        /* TRUE af
1ac70 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d  ter OP_ColumnNam
1ac80 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65  e has been issue
1ac90 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20  d to pVdbe */.  
1aca0 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20  u8 checkSchema; 
1acb0 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73       /* Causes s
1acc0 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65  chema cookie che
1acd0 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
1ace0 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64  r */.  u8 nested
1acf0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
1ad00 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
1ad10 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72  calls to the par
1ad20 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74  ser/code generat
1ad30 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70  or */.  u8 nTemp
1ad40 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Reg;         /* 
1ad50 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72  Number of tempor
1ad60 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69 6e  ary registers in
1ad70 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20   aTempReg[] */. 
1ad80 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65   u8 isMultiWrite
1ad90 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
1ada0 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d   statement may m
1adb0 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c  odify/insert mul
1adc0 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20  tiple rows */.  
1add0 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20  u8 mayAbort;    
1ade0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1adf0 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68  statement may th
1ae00 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63  row an ABORT exc
1ae10 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68  eption */.  u8 h
1ae20 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20  asCompound;     
1ae30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f   /* Need to invo
1ae40 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ke convertCompou
1ae50 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
1ae60 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43  ry() */.  u8 okC
1ae70 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f  onstFactor;    /
1ae80 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f  * OK to factor o
1ae90 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a  ut constants */.
1aea0 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38    int aTempReg[8
1aeb0 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e  ];     /* Holdin
1aec0 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f  g area for tempo
1aed0 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 2a  rary registers *
1aee0 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65  /.  int nRangeRe
1aef0 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65  g;       /* Size
1af00 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72   of the temporar
1af10 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
1af20 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65   */.  int iRange
1af30 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69  Reg;       /* Fi
1af40 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e 20  rst register in 
1af50 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
1af60 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
1af70 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20  t nErr;         
1af80 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1af90 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20  errors seen */. 
1afa0 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20   int nTab;      
1afb0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1afc0 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c  of previously al
1afd0 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75 72  located VDBE cur
1afe0 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  sors */.  int nM
1aff0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  em;            /
1b000 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  * Number of memo
1b010 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f  ry cells used so
1b020 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53   far */.  int nS
1b030 65 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  et;            /
1b040 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65 74 73  * Number of sets
1b050 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
1b060 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20 20 20    int nOnce;    
1b070 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b080 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e 73 74   of OP_Once inst
1b090 72 75 63 74 69 6f 6e 73 20 73 6f 20 66 61 72 20  ructions so far 
1b0a0 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f  */.  int nOpAllo
1b0b0 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  c;        /* Num
1b0c0 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c  ber of slots all
1b0d0 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e  ocated for Vdbe.
1b0e0 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69  aOp[] */.  int i
1b0f0 46 69 78 65 64 4f 70 3b 20 20 20 20 20 20 20 20  FixedOp;        
1b100 2f 2a 20 4e 65 76 65 72 20 62 61 63 6b 20 6f 75  /* Never back ou
1b110 74 20 6f 70 63 6f 64 65 73 20 69 46 69 78 65 64  t opcodes iFixed
1b120 4f 70 2d 31 20 6f 72 20 65 61 72 6c 69 65 72 20  Op-1 or earlier 
1b130 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73 65 3b  */.  int ckBase;
1b140 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73            /* Bas
1b150 65 20 72 65 67 69 73 74 65 72 20 6f 66 20 64 61  e register of da
1b160 74 61 20 64 75 72 69 6e 67 20 63 68 65 63 6b 20  ta during check 
1b170 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20  constraints */. 
1b180 20 69 6e 74 20 69 50 61 72 74 49 64 78 54 61 62   int iPartIdxTab
1b190 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63  ;     /* Table c
1b1a0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
1b1b0 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20  a partial index 
1b1c0 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 4c  */.  int iCacheL
1b1d0 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  evel;     /* Col
1b1e0 43 61 63 68 65 20 76 61 6c 69 64 20 77 68 65 6e  Cache valid when
1b1f0 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65   aColCache[].iLe
1b200 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c  vel<=iCacheLevel
1b210 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65   */.  int iCache
1b220 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f  Cnt;       /* Co
1b230 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67 65  unter used to ge
1b240 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68 65  nerate aColCache
1b250 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f  [].lru values */
1b260 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20  .  int nLabel;  
1b270 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1b280 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64  r of labels used
1b290 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65   */.  int *aLabe
1b2a0 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70  l;         /* Sp
1b2b0 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ace to hold the 
1b2c0 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74 72 75  labels */.  stru
1b2d0 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20  ct yColCache {. 
1b2e0 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20     int iTable;  
1b2f0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
1b300 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  e cursor number 
1b310 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c 75  */.    i16 iColu
1b320 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  mn;          /* 
1b330 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d  Table column num
1b340 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74 65  ber */.    u8 te
1b350 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 20  mpReg;          
1b360 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74 65   /* iReg is a te
1b370 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61 74  mp register that
1b380 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72 65   needs to be fre
1b390 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c  ed */.    int iL
1b3a0 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
1b3b0 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c  /* Nesting level
1b3c0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67   */.    int iReg
1b3d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1b3e0 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65 20   Reg with value 
1b3f0 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20  of this column. 
1b400 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f  0 means none. */
1b410 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20 20  .    int lru;   
1b420 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65             /* Le
1b430 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73 65  ast recently use
1b440 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65 20  d entry has the 
1b450 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a  smallest value *
1b460 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b  /.  } aColCache[
1b470 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
1b480 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20  E];  /* One for 
1b490 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68  each column cach
1b4a0 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45 78 70  e entry */.  Exp
1b4b0 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78 70  rList *pConstExp
1b4c0 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78  r;/* Constant ex
1b4d0 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54  pressions */.  T
1b4e0 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e  oken constraintN
1b4f0 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74  ame;/* Name of t
1b500 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75  he constraint cu
1b510 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61  rrently being pa
1b520 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73  rsed */.  yDbMas
1b530 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f  k writeMask;   /
1b540 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65 20  * Start a write 
1b550 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74  transaction on t
1b560 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20 2a  hese databases *
1b570 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b  /.  yDbMask cook
1b580 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d  ieMask;  /* Bitm
1b590 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65  ask of schema ve
1b5a0 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65 73  rified databases
1b5b0 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65   */.  int cookie
1b5c0 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58  Value[SQLITE_MAX
1b5d0 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f  _ATTACHED+2];  /
1b5e0 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b  * Values of cook
1b5f0 69 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f  ies to verify */
1b600 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b  .  int regRowid;
1b610 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
1b620 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69  ter holding rowi
1b630 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c  d of CREATE TABL
1b640 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74  E entry */.  int
1b650 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20   regRoot;       
1b660 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
1b670 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20  lding root page 
1b680 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f  number for new o
1b690 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20  bjects */.  int 
1b6a0 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20  nMaxArg;        
1b6b0 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73   /* Max args pas
1b6c0 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63  sed to user func
1b6d0 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67  tion by sub-prog
1b6e0 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43  ram */.#if SELEC
1b6f0 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20  TTRACE_ENABLED. 
1b700 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20   int nSelect;   
1b710 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b720 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  of SELECT statem
1b730 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69  ents seen */.  i
1b740 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e 74  nt nSelectIndent
1b750 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61 72 20 74  ;   /* How far t
1b760 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45 43 54 54  o indent SELECTT
1b770 52 41 43 45 28 29 20 6f 75 74 70 75 74 20 2a 2f  RACE() output */
1b780 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
1b790 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
1b7a0 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e  ED_CACHE.  int n
1b7b0 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20  TableLock;      
1b7c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
1b7d0 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f  ocks in aTableLo
1b7e0 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63  ck */.  TableLoc
1b7f0 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f  k *aTableLock; /
1b800 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65  * Required table
1b810 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65   locks for share
1b820 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
1b830 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63  #endif.  Autoinc
1b840 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a  Info *pAinc;  /*
1b850 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
1b860 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  ut AUTOINCREMENT
1b870 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20   counters */..  
1b880 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  /* Information u
1b890 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69 6e 67  sed while coding
1b8a0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
1b8b0 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  s. */.  Parse *p
1b8c0 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20  Toplevel;    /* 
1b8d0 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20  Parse structure 
1b8e0 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d  for main program
1b8f0 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20   (or NULL) */.  
1b900 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54  Table *pTriggerT
1b910 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72  ab;  /* Table tr
1b920 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e 67  iggers are being
1b930 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20   coded for */.  
1b940 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20 20  int addrCrTab;  
1b950 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20       /* Address 
1b960 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  of OP_CreateTabl
1b970 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41  e opcode on CREA
1b980 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 69 6e  TE TABLE */.  in
1b990 74 20 61 64 64 72 53 6b 69 70 50 4b 3b 20 20 20  t addrSkipPK;   
1b9a0 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66     /* Address of
1b9b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20   instruction to 
1b9c0 73 6b 69 70 20 50 52 49 4d 41 52 59 20 4b 45 59  skip PRIMARY KEY
1b9d0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 33 32 20   index */.  u32 
1b9e0 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20  nQueryLoop;     
1b9f0 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f   /* Est number o
1ba00 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20  f iterations of 
1ba10 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32  a query (10*log2
1ba20 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c  (N)) */.  u32 ol
1ba30 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  dmask;         /
1ba40 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  * Mask of old.* 
1ba50 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
1ba60 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d  ed */.  u32 newm
1ba70 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
1ba80 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  Mask of new.* co
1ba90 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
1baa0 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65   */.  u8 eTrigge
1bab0 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b  rOp;       /* TK
1bac0 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
1bad0 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20  RT or TK_DELETE 
1bae0 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b  */.  u8 eOrconf;
1baf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1bb00 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
1bb10 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67   policy for trig
1bb20 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75  ger steps */.  u
1bb30 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65 72  8 disableTrigger
1bb40 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64  s;  /* True to d
1bb50 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  isable triggers 
1bb60 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  */..  /*********
1bb70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bb80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bb90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bba0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
1bbb0 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63 6f    ** Above is co
1bbc0 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72  nstant between r
1bbd0 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f  ecursions.  Belo
1bbe0 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f 72  w is reset befor
1bbf0 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a  e and after.  **
1bc00 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e   each recursion.
1bc10 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 62    The boundary b
1bc20 65 74 77 65 65 6e 20 74 68 65 73 65 20 74 77 6f  etween these two
1bc30 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74 65   regions is dete
1bc40 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e  rmined.  ** usin
1bc50 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65  g offsetof(Parse
1bc60 2c 6e 56 61 72 29 20 73 6f 20 74 68 65 20 6e 56  ,nVar) so the nV
1bc70 61 72 20 66 69 65 6c 64 20 6d 75 73 74 20 62 65  ar field must be
1bc80 20 74 68 65 20 66 69 72 73 74 20 66 69 65 6c 64   the first field
1bc90 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 72 65 63  .  ** in the rec
1bca0 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20  ursive region.. 
1bcb0 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
1bcc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bcd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bce0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bcf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e  *********/..  in
1bd00 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20  t nVar;         
1bd10 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1bd20 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c  r of '?' variabl
1bd30 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53  es seen in the S
1bd40 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  QL so far */.  i
1bd50 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20 20  nt nzVar;       
1bd60 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1bd70 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  er of available 
1bd80 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d  slots in azVar[]
1bd90 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72 74   */.  u8 iPkSort
1bda0 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
1bdb0 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20 66  /* ASC or DESC f
1bdc0 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  or INTEGER PRIMA
1bdd0 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20 62  RY KEY */.  u8 b
1bde0 46 72 65 65 57 69 74 68 3b 20 20 20 20 20 20 20  FreeWith;       
1bdf0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1be00 20 70 57 69 74 68 20 73 68 6f 75 6c 64 20 62 65   pWith should be
1be10 20 66 72 65 65 64 20 77 69 74 68 20 70 61 72 73   freed with pars
1be20 65 72 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61  er */.  u8 expla
1be30 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  in;             
1be40 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
1be50 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73   EXPLAIN flag is
1be60 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75   found on the qu
1be70 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ery */.#ifndef S
1be80 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
1be90 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63  ALTABLE.  u8 dec
1bea0 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20 20  lareVtab;       
1beb0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69      /* True if i
1bec0 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65  nside sqlite3_de
1bed0 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a  clare_vtab() */.
1bee0 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b    int nVtabLock;
1bef0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1bf00 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
1bf10 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20   tables to lock 
1bf20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
1bf30 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20  nAlias;         
1bf40 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1bf50 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c  of aliased resul
1bf60 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f  t set columns */
1bf70 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20  .  int nHeight; 
1bf80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1bf90 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20  Expression tree 
1bfa0 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e  height of curren
1bfb0 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a  t sub-select */.
1bfc0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1bfd0 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e  MIT_EXPLAIN.  in
1bfe0 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20  t iSelectId;    
1bff0 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66          /* ID of
1c000 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20   current select 
1c010 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
1c020 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78  ut */.  int iNex
1c030 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20  tSelectId;      
1c040 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61    /* Next availa
1c050 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f  ble select ID fo
1c060 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
1c070 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68 61   */.#endif.  cha
1c080 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20 20  r **azVar;      
1c090 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
1c0a0 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70  rs to names of p
1c0b0 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56  arameters */.  V
1c0c0 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b  dbe *pReprepare;
1c0d0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62           /* VM b
1c0e0 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20  eing reprepared 
1c0f0 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72  (sqlite3Reprepar
1c100 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  e()) */.  const 
1c110 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20  char *zTail;    
1c120 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74      /* All SQL t
1c130 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73  ext past the las
1c140 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73  t semicolon pars
1c150 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ed */.  Table *p
1c160 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20  NewTable;       
1c170 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69    /* A table bei
1c180 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ng constructed b
1c190 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a  y CREATE TABLE *
1c1a0 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65  /.  Trigger *pNe
1c1b0 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a  wTrigger;     /*
1c1c0 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20 63   Trigger under c
1c1d0 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43 52  onstruct by a CR
1c1e0 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a  EATE TRIGGER */.
1c1f0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
1c200 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54  uthContext; /* T
1c210 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65 72  he 6th parameter
1c220 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61   to db->xAuth ca
1c230 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b  llbacks */.  Tok
1c240 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20  en sNameToken;  
1c250 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
1c260 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64  with unqualified
1c270 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e   schema object n
1c280 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73  ame */.  Token s
1c290 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20  LastToken;      
1c2a0 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74     /* The last t
1c2b0 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 23  oken parsed */.#
1c2c0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1c2d0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
1c2e0 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20    Token sArg;   
1c2f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1c300 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20  omplete text of 
1c310 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e  a module argumen
1c320 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61  t */.  Table **a
1c330 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20  pVtabLock;      
1c340 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
1c350 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65  irtual tables ne
1c360 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f  eding locking */
1c370 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20  .#endif.  Table 
1c380 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20  *pZombieTab;    
1c390 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54      /* List of T
1c3a0 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20  able objects to 
1c3b0 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64  delete after cod
1c3c0 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67  e gen */.  Trigg
1c3d0 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72 50  erPrg *pTriggerP
1c3e0 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c  rg;  /* Linked l
1c3f0 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69  ist of coded tri
1c400 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20  ggers */.  With 
1c410 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  *pWith;         
1c420 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
1c430 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20  WITH clause, or 
1c440 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  NULL */.};../*.*
1c450 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
1c460 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64   currently insid
1c470 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63  e an sqlite3_dec
1c480 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c  lare_vtab() call
1c490 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
1c4a0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1c4b0 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49  ABLE.  #define I
1c4c0 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30  N_DECLARE_VTAB 0
1c4d0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
1c4e0 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
1c4f0 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72   (pParse->declar
1c500 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f  eVtab).#endif../
1c510 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1c520 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1c530 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  g structure can 
1c540 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61  be declared on a
1c550 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a   stack and used.
1c560 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20 50  ** to save the P
1c570 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
1c580 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20  t value so that 
1c590 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72  it can be restor
1c5a0 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72  ed later..*/.str
1c5b0 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20  uct AuthContext 
1c5c0 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
1c5d0 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20  zAuthContext;   
1c5e0 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61 72  /* Put saved Par
1c5f0 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
1c600 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20  here */.  Parse 
1c610 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
1c620 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72        /* The Par
1c630 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
1c640 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65  };../*.** Bitfie
1c650 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20  ld flags for P5 
1c660 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73  value in various
1c670 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65   opcodes..*/.#de
1c680 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41  fine OPFLAG_NCHA
1c690 4e 47 45 20 20 20 20 20 20 20 30 78 30 31 20 20  NGE       0x01  
1c6a0 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61    /* Set to upda
1c6b0 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a  te db->nChange *
1c6c0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1c6d0 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20 20 30  _EPHEM         0
1c6e0 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x01    /* OP_Col
1c6f0 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c 20 6f  umn: Ephemeral o
1c700 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f 0a 23  utput is ok */.#
1c710 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41  define OPFLAG_LA
1c720 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 30 32  STROWID     0x02
1c730 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70      /* Set to up
1c740 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77  date db->lastRow
1c750 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  id */.#define OP
1c760 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20 20  FLAG_ISUPDATE   
1c770 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 68     0x04    /* Th
1c780 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20  is OP_Insert is 
1c790 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f  an sql UPDATE */
1c7a0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1c7b0 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30 78  APPEND        0x
1c7c0 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73  08    /* This is
1c7d0 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e   likely to be an
1c7e0 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69   append */.#defi
1c7f0 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  ne OPFLAG_USESEE
1c800 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20 20  KRESULT 0x10    
1c810 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64 20  /* Try to avoid 
1c820 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65 49  a seek in BtreeI
1c830 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66 69  nsert() */.#defi
1c840 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  ne OPFLAG_LENGTH
1c850 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20 20  ARG     0x40    
1c860 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
1c870 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74  y used for lengt
1c880 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  h() */.#define O
1c890 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20  PFLAG_TYPEOFARG 
1c8a0 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f      0x80    /* O
1c8b0 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73  P_Column only us
1c8c0 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20  ed for typeof() 
1c8d0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1c8e0 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20  G_BULKCSR       
1c8f0 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x01    /* OP_Op
1c900 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65  en** used to ope
1c910 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f  n bulk cursor */
1c920 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1c930 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30 78  P2ISREG       0x
1c940 30 32 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f  02    /* P2 to O
1c950 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65  P_Open** is a re
1c960 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f  gister number */
1c970 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1c980 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30 78  PERMUTE       0x
1c990 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70  01    /* OP_Comp
1c9a0 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65 72  are: use the per
1c9b0 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a  mutation */../*.
1c9c0 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72 20   * Each trigger 
1c9d0 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64  present in the d
1c9e0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
1c9f0 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69  s stored as an i
1ca00 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74  nstance of. * st
1ca10 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 0a 20  ruct Trigger. . 
1ca20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f  *. * Pointers to
1ca30 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   instances of st
1ca40 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72 65  ruct Trigger are
1ca50 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77   stored in two w
1ca60 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68  ays.. * 1. In th
1ca70 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61 73  e "trigHash" has
1ca80 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66  h table (part of
1ca90 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68   the sqlite3* th
1caa0 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  at represents th
1cab0 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73  e . *    databas
1cac0 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  e). This allows 
1cad0 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72  Trigger structur
1cae0 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76  es to be retriev
1caf0 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32  ed by name.. * 2
1cb00 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61  . All triggers a
1cb10 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
1cb20 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f   single table fo
1cb30 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  rm a linked list
1cb40 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20  , using the. *  
1cb50 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f    pNext member o
1cb60 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1cb70 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  . A pointer to t
1cb80 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
1cb90 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69   of the. *    li
1cba0 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f  nked list is sto
1cbb0 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69  red as the "pTri
1cbc0 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20  gger" member of 
1cbd0 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20  the associated. 
1cbe0 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c  *    struct Tabl
1cbf0 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74  e.. *. * The "st
1cc00 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
1cc10 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
1cc20 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61  rst element of a
1cc30 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20   linked list. * 
1cc40 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
1cc50 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
1cc60 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74  ecified as the t
1cc70 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
1cc80 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
1cc90 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  er {.  char *zNa
1cca0 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
1ccb0 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
1ccc0 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20  e trigger       
1ccd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cce0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c   */.  char *tabl
1ccf0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
1cd00 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   The table or vi
1cd10 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  ew to which the 
1cd20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20  trigger applies 
1cd30 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
1cd40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1cd50 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
1cd60 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
1cd70 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a  INSERT         *
1cd80 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20  /.  u8 tr_tm;   
1cd90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1cda0 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45  ne of TRIGGER_BE
1cdb0 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46  FORE, TRIGGER_AF
1cdc0 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  TER */.  Expr *p
1cdd0 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  When;           
1cde0 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61   /* The WHEN cla
1cdf0 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65  use of the expre
1ce00 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55  ssion (may be NU
1ce10 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  LL) */.  IdList 
1ce20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20  *pColumns;      
1ce30 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   /* If this is a
1ce40 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c  n UPDATE OF <col
1ce50 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65  umn-list> trigge
1ce60 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
1ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce80 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74  the <column-list
1ce90 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65  > is stored here
1cea0 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
1ceb0 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a  chema;        /*
1cec0 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
1ced0 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a  ng the trigger *
1cee0 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62  /.  Schema *pTab
1cef0 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
1cf00 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
1cf10 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
1cf20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65  TriggerStep *ste
1cf30 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20  p_list; /* Link 
1cf40 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20  list of trigger 
1cf50 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20  program steps   
1cf60 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54            */.  T
1cf70 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20  rigger *pNext;  
1cf80 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74         /* Next t
1cf90 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65  rigger associate
1cfa0 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65  d with the table
1cfb0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
1cfc0 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65  trigger is eithe
1cfd0 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e  r a BEFORE or an
1cfe0 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20   AFTER trigger. 
1cff0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
1d000 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65  onstants.** dete
1d010 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a 2a  rmine which. .**
1d020 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65  .** If there are
1d030 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65   multiple trigge
1d040 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66  rs, you might of
1d050 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64   some BEFORE and
1d060 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20   some AFTER..** 
1d070 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74  In that cases, t
1d080 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c  he constants bel
1d090 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74  ow can be ORed t
1d0a0 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  ogether..*/.#def
1d0b0 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f  ine TRIGGER_BEFO
1d0c0 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52  RE  1.#define TR
1d0d0 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a  IGGER_AFTER   2.
1d0e0 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*. * An instan
1d0f0 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  ce of struct Tri
1d100 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64  ggerStep is used
1d110 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67   to store a sing
1d120 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  le SQL statement
1d130 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61  . * that is a pa
1d140 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d  rt of a trigger-
1d150 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20  program. . *. * 
1d160 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72  Instances of str
1d170 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
1d180 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
1d190 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69  singly linked li
1d1a0 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73  st (linked. * us
1d1b0 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20  ing the "pNext" 
1d1c0 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63  member) referenc
1d1d0 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f  ed by the "step_
1d1e0 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20  list" member of 
1d1f0 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69 61 74  the . * associat
1d200 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ed struct Trigge
1d210 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20  r instance. The 
1d220 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
1d230 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
1d240 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74   is. * the first
1d250 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69   step of the tri
1d260 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a  gger-program.. *
1d270 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65   . * The "op" me
1d280 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77  mber indicates w
1d290 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61  hether this is a
1d2a0 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45   "DELETE", "INSE
1d2b0 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72  RT", "UPDATE" or
1d2c0 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61  . * "SELECT" sta
1d2d0 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e  tement. The mean
1d2e0 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65  ings of the othe
1d2f0 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74  r members is det
1d300 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 0a  ermined by the .
1d310 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22   * value of "op"
1d320 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a   as follows:. *.
1d330 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53   * (op == TK_INS
1d340 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20  ERT). * orconf  
1d350 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20    -> stores the 
1d360 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f  ON CONFLICT algo
1d370 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74  rithm. * pSelect
1d380 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73     -> If this is
1d390 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
1d3a0 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73  ... SELECT ... s
1d3b0 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
1d3c0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
1d3d0 68 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69  his stores a poi
1d3e0 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45  nter to the SELE
1d3f0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74  CT statement. Ot
1d400 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
1d410 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20   target    -> A 
1d420 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68  token holding th
1d430 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  e quoted name of
1d440 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e   the table to in
1d450 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45  sert into.. * pE
1d460 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68  xprList -> If th
1d470 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
1d480 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20  INTO ... VALUES 
1d490 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
1d4a0 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
1d4b0 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
1d4c0 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73  values to be ins
1d4d0 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65  erted. Otherwise
1d4e0 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73   NULL.. * pIdLis
1d4f0 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
1d500 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
1d510 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61   ... (<column-na
1d520 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e  mes>) VALUES ...
1d530 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20   . *            
1d540 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65    statement, the
1d550 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68  n this stores th
1d560 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74  e column-names t
1d570 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20  o be. *         
1d580 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e       inserted in
1d590 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  to.. *. * (op ==
1d5a0 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 74   TK_DELETE). * t
1d5b0 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f  arget    -> A to
1d5c0 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ken holding the 
1d5d0 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
1d5e0 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65  he table to dele
1d5f0 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65  te from.. * pWhe
1d600 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
1d610 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
1d620 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
1d630 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
1d640 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
1d650 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
1d660 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f   NULL.. * . * (o
1d670 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a  p == TK_UPDATE).
1d680 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20   * target    -> 
1d690 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20  A token holding 
1d6a0 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20  the quoted name 
1d6b0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
1d6c0 75 70 64 61 74 65 20 72 6f 77 73 20 6f 66 2e 0a  update rows of..
1d6d0 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
1d6e0 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
1d6f0 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73   of the UPDATE s
1d700 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
1d710 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
1d720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
1d730 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
1d740 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20   pExprList -> A 
1d750 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75  list of the colu
1d760 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e  mns to update an
1d770 64 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  d the expression
1d780 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20  s to update. *  
1d790 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 6d              them
1d7a0 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33   to. See sqlite3
1d7b0 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e  Update() documen
1d7c0 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e  tation of "pChan
1d7d0 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20  ges". *         
1d7e0 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20       argument.. 
1d7f0 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72  * . */.struct Tr
1d800 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38  iggerStep {.  u8
1d810 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
1d820 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f     /* One of TK_
1d830 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54  DELETE, TK_UPDAT
1d840 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b  E, TK_INSERT, TK
1d850 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20  _SELECT */.  u8 
1d860 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  orconf;         
1d870 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b    /* OE_Rollback
1d880 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67   etc. */.  Trigg
1d890 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20  er *pTrig;      
1d8a0 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20 74  /* The trigger t
1d8b0 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69 73  hat this step is
1d8c0 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20   a part of */.  
1d8d0 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
1d8e0 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73       /* SELECT s
1d8f0 74 61 74 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f  tatment or RHS o
1d900 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  f INSERT INTO ..
1d910 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20   SELECT ... */. 
1d920 20 54 6f 6b 65 6e 20 74 61 72 67 65 74 3b 20 20   Token target;  
1d930 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20        /* Target 
1d940 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45  table for DELETE
1d950 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54  , UPDATE, INSERT
1d960 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
1d970 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  re;        /* Th
1d980 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  e WHERE clause f
1d990 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  or DELETE or UPD
1d9a0 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45  ATE steps */.  E
1d9b0 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69  xprList *pExprLi
1d9c0 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73  st; /* SET claus
1d9d0 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a 2f  e for UPDATE. */
1d9e0 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69  .  IdList *pIdLi
1d9f0 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  st;     /* Colum
1da00 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45  n names for INSE
1da10 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  RT */.  TriggerS
1da20 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  tep *pNext;  /* 
1da30 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b  Next in the link
1da40 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67  -list */.  Trigg
1da50 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20  erStep *pLast;  
1da60 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20  /* Last element 
1da70 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61  in link-list. Va
1da80 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d  lid for 1st elem
1da90 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   only */.};../*.
1daa0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
1dab0 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
1dac0 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
1dad0 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  used by the sqli
1dae0 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74  teFix....** rout
1daf0 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c  ines as they wal
1db00 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  k the parse tree
1db10 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73   to make databas
1db20 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20  e references.** 
1db30 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a 74  explicit.  .*/.t
1db40 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
1db50 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73  Fixer DbFixer;.s
1db60 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a  truct DbFixer {.
1db70 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
1db80 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
1db90 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45  sing context.  E
1dba0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72  rror messages wr
1dbb0 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20  itten here */.  
1dbc0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
1dbd0 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73      /* Fix items
1dbe0 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20   to this schema 
1dbf0 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c  */.  int bVarOnl
1dc00 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63  y;       /* Chec
1dc10 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72  k for variable r
1dc20 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a  eferences only *
1dc30 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1dc40 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20  zDb;    /* Make 
1dc50 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73  sure all objects
1dc60 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69   are contained i
1dc70 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  n this database 
1dc80 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1dc90 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65  *zType;  /* Type
1dca0 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
1dcb0 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
1dcc0 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20  or messages */. 
1dcd0 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e   const Token *pN
1dce0 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  ame; /* Name of 
1dcf0 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20  the container - 
1dd00 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d  used for error m
1dd10 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f  essages */.};../
1dd20 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64  *.** An objected
1dd30 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c   used to accumul
1dd40 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66 20  ate the text of 
1dd50 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20 77  a string where w
1dd60 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65  e.** do not nece
1dd70 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77  ssarily know how
1dd80 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67 20   big the string 
1dd90 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65  will be in the e
1dda0 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74  nd..*/.struct St
1ddb0 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74  rAccum {.  sqlit
1ddc0 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
1ddd0 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61  /* Optional data
1dde0 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69  base for lookasi
1ddf0 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c  de.  Can be NULL
1de00 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61 73   */.  char *zBas
1de10 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  e;         /* A 
1de20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  base allocation.
1de30 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f    Not from mallo
1de40 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  c. */.  char *zT
1de50 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
1de60 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65  The string colle
1de70 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  cted so far */. 
1de80 20 69 6e 74 20 20 6e 43 68 61 72 3b 20 20 20 20   int  nChar;    
1de90 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
1dea0 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f  of the string so
1deb0 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e   far */.  int  n
1dec0 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f  Alloc;         /
1ded0 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63  * Amount of spac
1dee0 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a  e allocated in z
1def0 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 20 6d  Text */.  int  m
1df00 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f  xAlloc;        /
1df10 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65  * Maximum allowe
1df20 64 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  d string length 
1df30 2a 2f 0a 20 20 75 38 20 20 20 75 73 65 4d 61 6c  */.  u8   useMal
1df40 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 30 3a 20  loc;      /* 0: 
1df50 6e 6f 6e 65 2c 20 20 31 3a 20 73 71 6c 69 74 65  none,  1: sqlite
1df60 33 44 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20 73  3DbMalloc,  2: s
1df70 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f  qlite3_malloc */
1df80 0a 20 20 75 38 20 20 20 61 63 63 45 72 72 6f 72  .  u8   accError
1df90 3b 20 20 20 20 20 20 20 2f 2a 20 53 54 52 41 43  ;       /* STRAC
1dfa0 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52  CUM_NOMEM or STR
1dfb0 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a  ACCUM_TOOBIG */.
1dfc0 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43  };.#define STRAC
1dfd0 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64  CUM_NOMEM   1.#d
1dfe0 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 54  efine STRACCUM_T
1dff0 4f 4f 42 49 47 20 20 32 0a 0a 2f 2a 0a 2a 2a 20  OOBIG  2../*.** 
1e000 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  A pointer to thi
1e010 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  s structure is u
1e020 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61  sed to communica
1e030 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  te information.*
1e040 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e  * from sqlite3In
1e050 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53  it and OP_ParseS
1e060 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73  chema into the s
1e070 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
1e080 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  ck..*/.typedef s
1e090 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65  truct {.  sqlite
1e0a0 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
1e0b0 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65   The database be
1e0c0 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
1e0d0 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
1e0e0 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f  rMsg;    /* Erro
1e0f0 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64  r message stored
1e100 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69   here */.  int i
1e110 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Db;            /
1e120 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74  * 0 for main dat
1e130 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45  abase.  1 for TE
1e140 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41  MP, 2.. for ATTA
1e150 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63  CHed */.  int rc
1e160 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1e170 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f   Result code sto
1e180 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e  red here */.} In
1e190 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53  itData;../*.** S
1e1a0 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
1e1b0 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69  ing global confi
1e1c0 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f  guration data fo
1e1d0 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62  r the SQLite lib
1e1e0 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  rary..**.** This
1e1f0 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20   structure also 
1e200 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74  contains some st
1e210 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ate information.
1e220 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74  .*/.struct Sqlit
1e230 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74  e3Config {.  int
1e240 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20   bMemstat;      
1e250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e260 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
1e270 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a   memory status *
1e280 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74  /.  int bCoreMut
1e290 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
1e2a0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1e2b0 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74   enable core mut
1e2c0 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62  exing */.  int b
1e2d0 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20  FullMutex;      
1e2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e2f0 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66  True to enable f
1e300 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a  ull mutexing */.
1e310 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20    int bOpenUri; 
1e320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e330 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69      /* True to i
1e340 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d  nterpret filenam
1e350 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20  es as URIs */.  
1e360 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20 20  int bUseCis;    
1e370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e380 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e    /* Use coverin
1e390 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75  g indices for fu
1e3a0 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e  ll-scans */.  in
1e3b0 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20  t mxStrlen;     
1e3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3d0 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e  /* Maximum strin
1e3e0 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e  g length */.  in
1e3f0 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20  t neverCorrupt; 
1e400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e410 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 61  /* Database is a
1e420 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65  lways well-forme
1e430 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f  d */.  int szLoo
1e440 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
1e450 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
1e460 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
1e470 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69  ffer size */.  i
1e480 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  nt nLookaside;  
1e490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4a0 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
1e4b0 61 73 69 64 65 20 62 75 66 66 65 72 20 63 6f 75  aside buffer cou
1e4c0 6e 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  nt */.  sqlite3_
1e4d0 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20  mem_methods m;  
1e4e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77            /* Low
1e4f0 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c  -level memory al
1e500 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61  location interfa
1e510 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ce */.  sqlite3_
1e520 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75  mutex_methods mu
1e530 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77  tex;      /* Low
1e540 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74  -level mutex int
1e550 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
1e560 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f  te3_pcache_metho
1e570 64 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a  ds2 pcache2;  /*
1e580 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d   Low-level page-
1e590 63 61 63 68 65 20 69 6e 74 65 72 66 61 63 65 20  cache interface 
1e5a0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70  */.  void *pHeap
1e5b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e5c0 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73         /* Heap s
1e5d0 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a  torage space */.
1e5e0 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20    int nHeap;    
1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e600 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70      /* Size of p
1e610 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Heap[] */.  int 
1e620 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20  mnReq, mxReq;   
1e630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e640 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61   Min and max hea
1e650 70 20 72 65 71 75 65 73 74 73 20 73 69 7a 65 73  p requests sizes
1e660 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   */.  sqlite3_in
1e670 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20  t64 szMmap;     
1e680 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28          /* mmap(
1e690 29 20 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e  ) space per open
1e6a0 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74   file */.  sqlit
1e6b0 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b  e3_int64 mxMmap;
1e6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e6d0 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f  Maximum value fo
1e6e0 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f  r szMmap */.  vo
1e6f0 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20  id *pScratch;   
1e700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e710 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72  /* Scratch memor
1e720 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72  y */.  int szScr
1e730 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
1e740 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
1e750 20 6f 66 20 65 61 63 68 20 73 63 72 61 74 63 68   of each scratch
1e760 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74   buffer */.  int
1e770 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20 20   nScratch;      
1e780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e790 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61  * Number of scra
1e7a0 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20  tch buffers */. 
1e7b0 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20   void *pPage;   
1e7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7d0 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65     /* Page cache
1e7e0 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
1e7f0 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20   szPage;        
1e800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e810 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70  * Size of each p
1e820 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  age in pPage[] *
1e830 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20  /.  int nPage;  
1e840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e850 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1e860 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67  of pages in pPag
1e870 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50  e[] */.  int mxP
1e880 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20  arserStack;     
1e890 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61             /* ma
1e8a0 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74  ximum depth of t
1e8b0 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20  he parser stack 
1e8c0 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43  */.  int sharedC
1e8d0 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20  acheEnabled;    
1e8e0 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69         /* true i
1e8f0 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  f shared-cache m
1e900 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20  ode enabled */. 
1e910 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69   /* The above mi
1e920 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ght be initializ
1e930 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20  ed to non-zero. 
1e940 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e   The following n
1e950 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20  eed to always.  
1e960 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20  ** initially be 
1e970 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a  zero, however. *
1e980 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20  /.  int isInit; 
1e990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9a0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
1e9b0 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ter initializati
1e9c0 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64 20  on has finished 
1e9d0 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72  */.  int inProgr
1e9e0 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ess;            
1e9f0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77         /* True w
1ea00 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74  hile initializat
1ea10 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
1ea20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78  */.  int isMutex
1ea30 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
1ea40 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
1ea50 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72 65  fter mutexes are
1ea60 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
1ea70 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e    int isMallocIn
1ea80 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
1ea90 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
1eaa0 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
1eab0 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
1eac0 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20   isPCacheInit;  
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1eae0 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c  * True after mal
1eaf0 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  loc is initializ
1eb00 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  ed */.  int nRef
1eb10 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
1eb20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1eb30 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20  ber of users of 
1eb40 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20  pInitMutex */.  
1eb50 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70  sqlite3_mutex *p
1eb60 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
1eb70 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20    /* Mutex used 
1eb80 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69  by sqlite3_initi
1eb90 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69  alize() */.  voi
1eba0 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c  d (*xLog)(void*,
1ebb0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
1ebc0 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f  ; /* Function fo
1ebd0 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76  r logging */.  v
1ebe0 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20  oid *pLogArg;   
1ebf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec00 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
1ec10 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20  ument to xLog() 
1ec20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
1ec30 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20  _ENABLE_SQLLOG. 
1ec40 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28   void(*xSqllog)(
1ec50 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
1ec60 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
1ec70 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f  ;.  void *pSqllo
1ec80 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66  gArg;.#endif.#if
1ec90 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f  def SQLITE_VDBE_
1eca0 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54 68  COVERAGE.  /* Th
1ecb0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
1ecc0 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c  back (if not NUL
1ecd0 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e  L) is invoked on
1ece0 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61 6e   every VDBE bran
1ecf0 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f  ch.  ** operatio
1ed00 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c 6c  n.  Set the call
1ed10 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49 54  back using SQLIT
1ed20 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f  E_TESTCTRL_VDBE_
1ed30 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20  COVERAGE..  */. 
1ed40 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72 61   void (*xVdbeBra
1ed50 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69  nch)(void*,int i
1ed60 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69 73  SrcLine,u8 eThis
1ed70 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61  ,u8 eMx);  /* Ca
1ed80 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
1ed90 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72 67   *pVdbeBranchArg
1eda0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1edb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edc0 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67        /* 1st arg
1edd0 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  ument */.#endif.
1ede0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1edf0 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
1ee00 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61  .  int (*xTestCa
1ee10 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20  llback)(int);   
1ee20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20       /* Invoked 
1ee30 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  by sqlite3FaultS
1ee40 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  im() */.#endif. 
1ee50 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46   int bLocaltimeF
1ee60 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20  ault;           
1ee70 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61     /* True to fa
1ee80 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63  il localtime() c
1ee90 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  alls */.};../*.*
1eea0 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20  * This macro is 
1eeb0 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 61  used inside of a
1eec0 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
1eed0 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74  ts to indicate t
1eee0 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73 65 72  hat.** the asser
1eef0 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20  t is only valid 
1ef00 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64  on a well-formed
1ef10 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e 73 74   database.  Inst
1ef20 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20  ead of:.**.**   
1ef30 20 20 61 73 73 65 72 74 28 20 58 20 29 3b 0a 2a    assert( X );.*
1ef40 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a  *.** One writes:
1ef50 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72  .**.**     asser
1ef60 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f  t( X || CORRUPT_
1ef70 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52  DB );.**.** CORR
1ef80 55 50 54 5f 44 42 20 69 73 20 74 72 75 65 20 64  UPT_DB is true d
1ef90 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65  uring normal ope
1efa0 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54  ration.  CORRUPT
1efb0 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64  _DB does not ind
1efc0 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20 74 68  icate.** that th
1efd0 65 20 64 61 74 61 62 61 73 65 20 69 73 20 64 65  e database is de
1efe0 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75 70 74  finitely corrupt
1eff0 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74 20 6d  , only that it m
1f000 69 67 68 74 20 62 65 20 63 6f 72 72 75 70 74 2e  ight be corrupt.
1f010 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65 73  .** For most tes
1f020 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55 50 54  t cases, CORRUPT
1f030 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20 66 61  _DB is set to fa
1f040 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70 65 63  lse using a spec
1f050 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74  ial.** sqlite3_t
1f060 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20  est_control().  
1f070 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61 73 73  This enables ass
1f080 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
1f090 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69   to prove.** thi
1f0a0 6e 67 73 20 74 68 61 74 20 61 72 65 20 61 6c 77  ngs that are alw
1f0b0 61 79 73 20 74 72 75 65 20 66 6f 72 20 77 65 6c  ays true for wel
1f0c0 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73  l-formed databas
1f0d0 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  es..*/.#define C
1f0e0 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71 6c 69  ORRUPT_DB  (sqli
1f0f0 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43  te3Config.neverC
1f100 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a  orrupt==0)../*.*
1f110 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65  * Context pointe
1f120 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68  r passed down th
1f130 72 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d 77  rough the tree-w
1f140 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57  alk..*/.struct W
1f150 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a  alker {.  int (*
1f160 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57  xExprCallback)(W
1f170 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20  alker*, Expr*); 
1f180 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20      /* Callback 
1f190 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20  for expressions 
1f1a0 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65  */.  int (*xSele
1f1b0 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b  ctCallback)(Walk
1f1c0 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f  er*,Select*);  /
1f1d0 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53  * Callback for S
1f1e0 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64  ELECTs */.  void
1f1f0 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61   (*xSelectCallba
1f200 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c  ck2)(Walker*,Sel
1f210 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20  ect*);/* Second 
1f220 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c  callback for SEL
1f230 45 43 54 73 20 2a 2f 0a 20 20 50 61 72 73 65 20  ECTs */.  Parse 
1f240 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
1f250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f260 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f      /* Parser co
1f270 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74  ntext.  */.  int
1f280 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20   walkerDepth;   
1f290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2a0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1f2b0 20 6f 66 20 73 75 62 71 75 65 72 69 65 73 20 2a   of subqueries *
1f2c0 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b 20 20 20  /.  u8 eCode;   
1f2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f2f0 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73   A small process
1f300 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e  ing code */.  un
1f310 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20  ion {           
1f320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f330 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61          /* Extra
1f340 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61   data for callba
1f350 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f  ck */.    NameCo
1f360 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20  ntext *pNC;     
1f370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f380 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63       /* Naming c
1f390 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e  ontext */.    in
1f3a0 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  t n;            
1f3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3c0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 6f           /* A co
1f3d0 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74  unter */.    int
1f3e0 20 69 43 75 72 3b 20 20 20 20 20 20 20 20 20 20   iCur;          
1f3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f400 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 75 72          /* A cur
1f410 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  sor number */.  
1f420 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c    SrcList *pSrcL
1f430 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ist;            
1f440 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f450 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
1f460 20 20 20 73 74 72 75 63 74 20 53 72 63 43 6f 75     struct SrcCou
1f470 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20  nt *pSrcCount;  
1f480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f490 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e   Counting column
1f4a0 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20   references */. 
1f4b0 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72   } u;.};../* For
1f4c0 77 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e  ward declaration
1f4d0 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  s */.int sqlite3
1f4e0 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a  WalkExpr(Walker*
1f4f0 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
1f500 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73  lite3WalkExprLis
1f510 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c  t(Walker*, ExprL
1f520 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
1f530 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c  e3WalkSelect(Wal
1f540 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
1f550 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
1f560 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72  electExpr(Walker
1f570 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
1f580 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
1f590 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20  ctFrom(Walker*, 
1f5a0 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a  Select*);../*.**
1f5b0 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
1f5c0 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65  m the parse-tree
1f5d0 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69   walking primiti
1f5e0 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a  ves and their.**
1f5f0 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23   callbacks..*/.#
1f600 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69  define WRC_Conti
1f610 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f  nue    0   /* Co
1f620 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f  ntinue down into
1f630 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65   children */.#de
1f640 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20  fine WRC_Prune  
1f650 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74       1   /* Omit
1f660 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f   children but co
1f670 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73  ntinue walking s
1f680 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69  iblings */.#defi
1f690 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20  ne WRC_Abort    
1f6a0 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f     2   /* Abando
1f6b0 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20  n the tree walk 
1f6c0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
1f6d0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
1f6e0 72 75 63 74 75 72 65 20 72 65 70 72 65 73 65 6e  ructure represen
1f6f0 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20  ts a set of one 
1f700 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20  or more CTEs.** 
1f710 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78  (common table ex
1f720 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74  pressions) creat
1f730 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57  ed by a single W
1f740 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73  ITH clause..*/.s
1f750 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69  truct With {.  i
1f760 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20  nt nCte;        
1f770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f780 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73  * Number of CTEs
1f790 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61   in the WITH cla
1f7a0 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  use */.  With *p
1f7b0 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20 20 20  Outer;          
1f7c0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74           /* Cont
1f7d0 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75  aining WITH clau
1f7e0 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  se, or NULL */. 
1f7f0 20 73 74 72 75 63 74 20 43 74 65 20 7b 20 20 20   struct Cte {   
1f800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f810 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45   /* For each CTE
1f820 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61   in the WITH cla
1f830 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63  use.... */.    c
1f840 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
1f850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f860 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43  * Name of this C
1f870 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69  TE */.    ExprLi
1f880 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20  st *pCols;      
1f890 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73            /* Lis
1f8a0 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f  t of explicit co
1f8b0 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e  lumn names, or N
1f8c0 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  ULL */.    Selec
1f8d0 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
1f8e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1f8f0 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  e definition of 
1f900 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20  this CTE */.    
1f910 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 72 72  const char *zErr
1f920 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f930 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  /* Error message
1f940 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65   for circular re
1f950 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20  ferences */.  } 
1f960 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66  a[1];.};..#ifdef
1f970 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
1f980 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1f990 6f 66 20 74 68 65 20 54 72 65 65 56 69 65 77 20  of the TreeView 
1f9a0 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64 20 66  object is used f
1f9b0 6f 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20  or printing the 
1f9c0 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61  content of.** da
1f9d0 74 61 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e  ta structures on
1f9e0 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
1f9f0 6e 74 66 28 29 20 75 73 69 6e 67 20 61 20 74 72  ntf() using a tr
1fa00 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f  ee-like view..*/
1fa10 0a 73 74 72 75 63 74 20 54 72 65 65 56 69 65 77  .struct TreeView
1fa20 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b   {.  int iLevel;
1fa30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fa40 57 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74  Which level of t
1fa50 68 65 20 74 72 65 65 20 77 65 20 61 72 65 20 6f  he tree we are o
1fa60 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65  n */.  u8  bLine
1fa70 5b 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f  [100];         /
1fa80 2a 20 44 72 61 77 20 76 65 72 74 69 63 61 6c 20  * Draw vertical 
1fa90 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62  in column i if b
1faa0 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20  Line[i] is true 
1fab0 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  */.};.#endif /* 
1fac0 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
1fad0 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20  ./*.** Assuming 
1fae0 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  zIn points to th
1faf0 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
1fb00 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  a UTF-8 characte
1fb10 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49  r,.** advance zI
1fb20 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  n to point to th
1fb30 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
1fb40 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63  the next UTF-8 c
1fb50 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65  haracter..*/.#de
1fb60 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50  fine SQLITE_SKIP
1fb70 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20  _UTF8(zIn) {    
1fb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb90 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a      \.  if( (*(z
1fba0 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20  In++))>=0xc0 ){ 
1fbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
1fbd0 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20     while( (*zIn 
1fbe0 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b  & 0xc0)==0x80 ){
1fbf0 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20   zIn++; }       
1fc00 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20        \.  }     
1fc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
1fc40 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  .}../*.** The SQ
1fc50 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72  LITE_*_BKPT macr
1fc60 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74  os are substitut
1fc70 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72  es for the error
1fc80 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74   codes with.** t
1fc90 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74  he same name but
1fca0 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b   without the _BK
1fcb0 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73  PT suffix.  Thes
1fcc0 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a  e macros invoke.
1fcd0 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74  ** routines that
1fce0 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65   report the line
1fcf0 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68  -number on which
1fd00 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69   the error origi
1fd10 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73  nated.** using s
1fd20 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54  qlite3_log().  T
1fd30 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f  he routines also
1fd40 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65   provide a conve
1fd50 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74  nient place.** t
1fd60 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72  o set a debugger
1fd70 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a   breakpoint..*/.
1fd80 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75  int sqlite3Corru
1fd90 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e  ptError(int);.in
1fda0 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45  t sqlite3MisuseE
1fdb0 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
1fdc0 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
1fdd0 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e  ror(int);.#defin
1fde0 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
1fdf0 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72  _BKPT sqlite3Cor
1fe00 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  ruptError(__LINE
1fe10 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
1fe20 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73  TE_MISUSE_BKPT s
1fe30 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
1fe40 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
1fe50 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f  ine SQLITE_CANTO
1fe60 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  PEN_BKPT sqlite3
1fe70 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f  CantopenError(__
1fe80 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20  LINE__).../*.** 
1fe90 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61  FTS4 is really a
1fea0 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20  n extension for 
1feb0 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61  FTS3.  It is ena
1fec0 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a  bled using the.*
1fed0 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
1fee0 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74  FTS3 macro.  But
1fef0 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73   to avoid confus
1ff00 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c  ion we also call
1ff10 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45  .** the SQLITE_E
1ff20 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f  NABLE_FTS4 macro
1ff30 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20   to serve as an 
1ff40 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45  alias for SQLITE
1ff50 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f  _ENABLE_FTS3..*/
1ff60 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
1ff70 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29  ITE_ENABLE_FTS4)
1ff80 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
1ff90 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
1ffa0 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1ffb0 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23 65 6e  _ENABLE_FTS3.#en
1ffc0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63  dif../*.** The c
1ffd0 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73  type.h header is
1ffe0 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d   needed for non-
1fff0 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20  ASCII systems.  
20000 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65  It is also.** ne
20010 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65  eded by FTS3 whe
20020 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64  n FTS3 is includ
20030 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61  ed in the amalga
20040 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21  mation..*/.#if !
20050 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
20060 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28  SCII) || \.    (
20070 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
20080 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64  NABLE_FTS3) && d
20090 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d  efined(SQLITE_AM
200a0 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69  ALGAMATION)).# i
200b0 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e  nclude <ctype.h>
200c0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
200d0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
200e0 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74  ros mimic the st
200f0 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66  andard library f
20100 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72  unctions toupper
20110 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29  (),.** isspace()
20120 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64  , isalnum(), isd
20130 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69  igit() and isxdi
20140 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76  git(), respectiv
20150 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69  ely. The.** sqli
20160 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79  te versions only
20170 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20   work for ASCII 
20180 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61  characters, rega
20190 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65  rdless of locale
201a0 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
201b0 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e  TE_ASCII.# defin
201c0 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72  e sqlite3Toupper
201d0 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69  (x)  ((x)&~(sqli
201e0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
201f0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
20200 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20  0x20)).# define 
20210 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78  sqlite3Isspace(x
20220 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
20230 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
20240 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23  har)(x)]&0x01).#
20250 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
20260 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c  salnum(x)   (sql
20270 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
20280 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
20290 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20  &0x06).# define 
202a0 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
202b0 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
202c0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
202d0 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23  har)(x)]&0x02).#
202e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
202f0 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c  sdigit(x)   (sql
20300 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
20310 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
20320 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20  &0x04).# define 
20330 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
20340 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  x)  (sqlite3Ctyp
20350 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
20360 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23  har)(x)]&0x08).#
20370 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
20380 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c  olower(x)   (sql
20390 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72  ite3UpperToLower
203a0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
203b0 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64 65  (x)]).#else.# de
203c0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
203d0 70 65 72 28 78 29 20 20 20 74 6f 75 70 70 65 72  per(x)   toupper
203e0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
203f0 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
20400 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20  lite3Isspace(x) 
20410 20 20 69 73 73 70 61 63 65 28 28 75 6e 73 69 67    isspace((unsig
20420 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
20430 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
20440 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e  alnum(x)   isaln
20450 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  um((unsigned cha
20460 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
20470 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
20480 29 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73  )   isalpha((uns
20490 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
204a0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
204b0 49 73 64 69 67 69 74 28 78 29 20 20 20 69 73 64  Isdigit(x)   isd
204c0 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
204d0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
204e0 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
204f0 74 28 78 29 20 20 69 73 78 64 69 67 69 74 28 28  t(x)  isxdigit((
20500 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
20510 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
20520 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
20530 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65  tolower((unsigne
20540 64 20 63 68 61 72 29 28 78 29 29 0a 23 65 6e 64  d char)(x)).#end
20550 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  if.int sqlite3Is
20560 49 64 43 68 61 72 28 75 38 29 3b 0a 0a 2f 2a 0a  IdChar(u8);../*.
20570 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63  ** Internal func
20580 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a  tion prototypes.
20590 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  */.#define sqlit
205a0 65 33 53 74 72 49 43 6d 70 20 73 71 6c 69 74 65  e3StrICmp sqlite
205b0 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20 73 71  3_stricmp.int sq
205c0 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f  lite3Strlen30(co
205d0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66  nst char*);.#def
205e0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49  ine sqlite3StrNI
205f0 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e  Cmp sqlite3_strn
20600 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65  icmp..int sqlite
20610 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64  3MallocInit(void
20620 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
20630 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a  allocEnd(void);.
20640 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
20650 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a  loc(u64);.void *
20660 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72  sqlite3MallocZer
20670 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  o(u64);.void *sq
20680 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
20690 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  o(sqlite3*, u64)
206a0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
206b0 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74  bMallocRaw(sqlit
206c0 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20  e3*, u64);.char 
206d0 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70  *sqlite3DbStrDup
206e0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
206f0 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71  char*);.char *sq
20700 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73  lite3DbStrNDup(s
20710 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
20720 61 72 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  ar*, u64);.void 
20730 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28  *sqlite3Realloc(
20740 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  void*, u64);.voi
20750 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
20760 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65  locOrFree(sqlite
20770 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34  3 *, void *, u64
20780 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
20790 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65  DbRealloc(sqlite
207a0 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34  3 *, void *, u64
207b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
207c0 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20  bFree(sqlite3*, 
207d0 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
207e0 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f  te3MallocSize(vo
207f0 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
20800 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71  3DbMallocSize(sq
20810 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
20820 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72  void *sqlite3Scr
20830 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b  atchMalloc(int);
20840 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72  .void sqlite3Scr
20850 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b  atchFree(void*);
20860 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61  .void *sqlite3Pa
20870 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  geMalloc(int);.v
20880 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46  oid sqlite3PageF
20890 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ree(void*);.void
208a0 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65   sqlite3MemSetDe
208b0 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69  fault(void);.voi
208c0 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d  d sqlite3BenignM
208d0 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20  allocHooks(void 
208e0 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20  (*)(void), void 
208f0 28 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20  (*)(void));.int 
20900 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c  sqlite3HeapNearl
20910 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a  yFull(void);../*
20920 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77  .** On systems w
20930 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20  ith ample stack 
20940 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73  space and that s
20950 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c  upport alloca(),
20960 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20   make.** use of 
20970 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61  alloca() to obta
20980 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72  in space for lar
20990 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a  ge automatic obj
209a0 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c  ects.  By defaul
209b0 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61  t,.** obtain spa
209c0 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ce from malloc()
209d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f  ..**.** The allo
209e0 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76  ca() routine nev
209f0 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e  er returns NULL.
20a00 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
20a10 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20  e code paths.** 
20a20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73  that deal with s
20a30 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
20a40 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62  () failures to b
20a50 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a  e unreachable..*
20a60 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
20a70 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66  USE_ALLOCA.# def
20a80 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
20a90 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
20aa0 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69  alloca(N).# defi
20ab0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
20ac0 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d  llocZero(D,N)  m
20ad0 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c  emset(alloca(N),
20ae0 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20   0, N).# define 
20af0 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
20b00 28 44 2c 50 29 20 20 20 20 20 20 20 0a 23 65 6c  (D,P)       .#el
20b10 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
20b20 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77  te3StackAllocRaw
20b30 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44  (D,N)   sqlite3D
20b40 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a  bMallocRaw(D,N).
20b50 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20b60 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
20b70 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61  ,N)  sqlite3DbMa
20b80 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20  llocZero(D,N).# 
20b90 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
20ba0 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20  ackFree(D,P)    
20bb0 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
20bc0 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69  (D,P).#endif..#i
20bd0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
20be0 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74  LE_MEMSYS3.const
20bf0 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
20c00 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d  hods *sqlite3Mem
20c10 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29  GetMemsys3(void)
20c20 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
20c30 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
20c40 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS5.const sqli
20c50 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
20c60 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
20c70 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e  msys5(void);.#en
20c80 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  dif...#ifndef SQ
20c90 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a  LITE_MUTEX_OMIT.
20ca0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
20cb0 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73  methods const *s
20cc0 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74  qlite3DefaultMut
20cd0 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69  ex(void);.  sqli
20ce0 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
20cf0 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
20d00 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b  NoopMutex(void);
20d10 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
20d20 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c   *sqlite3MutexAl
20d30 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  loc(int);.  int 
20d40 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74  sqlite3MutexInit
20d50 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71  (void);.  int sq
20d60 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f  lite3MutexEnd(vo
20d70 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74  id);.#endif..int
20d80 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61   sqlite3StatusVa
20d90 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  lue(int);.void s
20da0 71 6c 69 74 65 33 53 74 61 74 75 73 41 64 64 28  qlite3StatusAdd(
20db0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
20dc0 73 71 6c 69 74 65 33 53 74 61 74 75 73 53 65 74  sqlite3StatusSet
20dd0 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66  (int, int);..#if
20de0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
20df0 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
20e00 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e    int sqlite3IsN
20e10 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73  aN(double);.#els
20e20 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
20e30 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65  e3IsNaN(X)  0.#e
20e40 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
20e50 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
20e60 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
20e70 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61  re holds informa
20e80 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a  tion about SQL.*
20e90 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75  * functions argu
20ea0 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65 20 74  ments that are t
20eb0 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  he parameters to
20ec0 20 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75   the printf() fu
20ed0 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  nction..*/.struc
20ee0 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  t PrintfArgument
20ef0 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20  s {.  int nArg; 
20f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20f10 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  * Total number o
20f20 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
20f30 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20   int nUsed;     
20f40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
20f50 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
20f60 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
20f70 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
20f80 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68  **apArg;   /* Th
20f90 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65  e argument value
20fa0 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65  s */.};..#define
20fb0 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49   SQLITE_PRINTF_I
20fc0 4e 54 45 52 4e 41 4c 20 30 78 30 31 0a 23 64 65  NTERNAL 0x01.#de
20fd0 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
20fe0 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32  TF_SQLFUNC  0x02
20ff0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50  .void sqlite3VXP
21000 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c  rintf(StrAccum*,
21010 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61 72   u32, const char
21020 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69  *, va_list);.voi
21030 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66  d sqlite3XPrintf
21040 28 53 74 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c  (StrAccum*, u32,
21050 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
21060 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  .);.char *sqlite
21070 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  3MPrintf(sqlite3
21080 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  *,const char*, .
21090 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..);.char *sqlit
210a0 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  e3VMPrintf(sqlit
210b0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
210c0 20 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72 20   va_list);.char 
210d0 2a 73 71 6c 69 74 65 33 4d 41 70 70 65 6e 64 66  *sqlite3MAppendf
210e0 28 73 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a 2c  (sqlite3*,char*,
210f0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
21100 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
21110 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 64 65  LITE_TEST) || de
21120 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
21130 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  UG).  void sqlit
21140 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f  e3DebugPrintf(co
21150 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
21160 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
21170 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
21180 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
21190 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f  TestTextToPtr(co
211a0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  nst char*);.#end
211b0 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  if..#if defined(
211c0 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20  SQLITE_DEBUG).  
211d0 54 72 65 65 56 69 65 77 20 2a 73 71 6c 69 74 65  TreeView *sqlite
211e0 33 54 72 65 65 56 69 65 77 50 75 73 68 28 54 72  3TreeViewPush(Tr
211f0 65 65 56 69 65 77 2a 2c 75 38 29 3b 0a 20 20 76  eeView*,u8);.  v
21200 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
21210 69 65 77 50 6f 70 28 54 72 65 65 56 69 65 77 2a  iewPop(TreeView*
21220 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
21230 33 54 72 65 65 56 69 65 77 4c 69 6e 65 28 54 72  3TreeViewLine(Tr
21240 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 63  eeView*, const c
21250 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 76 6f  har*, ...);.  vo
21260 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
21270 65 77 49 74 65 6d 28 54 72 65 65 56 69 65 77 2a  ewItem(TreeView*
21280 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75  , const char*, u
21290 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  8);.  void sqlit
212a0 65 33 54 72 65 65 56 69 65 77 45 78 70 72 28 54  e3TreeViewExpr(T
212b0 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
212c0 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f  Expr*, u8);.  vo
212d0 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
212e0 65 77 45 78 70 72 4c 69 73 74 28 54 72 65 65 56  ewExprList(TreeV
212f0 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  iew*, const Expr
21300 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74  List*, u8, const
21310 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
21320 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53  sqlite3TreeViewS
21330 65 6c 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c  elect(TreeView*,
21340 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20   const Select*, 
21350 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f  u8);.#endif...vo
21360 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  id sqlite3SetStr
21370 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c  ing(char **, sql
21380 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ite3*, const cha
21390 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  r*, ...);.void s
213a0 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50  qlite3ErrorMsg(P
213b0 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
213c0 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71  r*, ...);.int sq
213d0 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68 61  lite3Dequote(cha
213e0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
213f0 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73  KeywordCode(cons
21400 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  t unsigned char*
21410 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
21420 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61 72  te3RunParser(Par
21430 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
21440 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64  , char **);.void
21450 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f   sqlite3FinishCo
21460 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e  ding(Parse*);.in
21470 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70  t sqlite3GetTemp
21480 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  Reg(Parse*);.voi
21490 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65  d sqlite3Release
214a0 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69  TempReg(Parse*,i
214b0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
214c0 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72  GetTempRange(Par
214d0 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  se*,int);.void s
214e0 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d  qlite3ReleaseTem
214f0 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  pRange(Parse*,in
21500 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
21510 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67  ite3ClearTempReg
21520 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 45  Cache(Parse*);.E
21530 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
21540 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69  Alloc(sqlite3*,i
21550 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c  nt,const Token*,
21560 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
21570 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a  te3Expr(sqlite3*
21580 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
21590 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
215a0 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65 65  xprAttachSubtree
215b0 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  s(sqlite3*,Expr*
215c0 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45  ,Expr*,Expr*);.E
215d0 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70  xpr *sqlite3PExp
215e0 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45  r(Parse*, int, E
215f0 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e  xpr*, Expr*, con
21600 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72  st Token*);.Expr
21610 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64   *sqlite3ExprAnd
21620 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
21630 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73   Expr*);.Expr *s
21640 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74 69  qlite3ExprFuncti
21650 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  on(Parse*,ExprLi
21660 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  st*, Token*);.vo
21670 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 73  id sqlite3ExprAs
21680 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61  signVarNumber(Pa
21690 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
216a0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44 65  id sqlite3ExprDe
216b0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45  lete(sqlite3*, E
216c0 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20  xpr*);.ExprList 
216d0 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
216e0 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78  Append(Parse*,Ex
216f0 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a  prList*,Expr*);.
21700 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
21710 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73  ListSetName(Pars
21720 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b  e*,ExprList*,Tok
21730 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  en*,int);.void s
21740 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65  qlite3ExprListSe
21750 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70  tSpan(Parse*,Exp
21760 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a  rList*,ExprSpan*
21770 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
21780 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71  xprListDelete(sq
21790 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74  lite3*, ExprList
217a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
217b0 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68  nit(sqlite3*, ch
217c0 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar**);.int sqlit
217d0 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76  e3InitCallback(v
217e0 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a  oid*, int, char*
217f0 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64  *, char**);.void
21800 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50   sqlite3Pragma(P
21810 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
21820 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  en*,Token*,int);
21830 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
21840 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
21850 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  nnection(sqlite3
21860 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21870 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73  ResetOneSchema(s
21880 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
21890 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70  id sqlite3Collap
218a0 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79 28  seDatabaseArray(
218b0 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
218c0 73 71 6c 69 74 65 33 42 65 67 69 6e 50 61 72 73  sqlite3BeginPars
218d0 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  e(Parse*,int);.v
218e0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69  oid sqlite3Commi
218f0 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73  tInternalChanges
21900 28 73 71 6c 69 74 65 33 2a 29 3b 0a 54 61 62 6c  (sqlite3*);.Tabl
21910 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74  e *sqlite3Result
21920 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73  SetOfSelect(Pars
21930 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69  e*,Select*);.voi
21940 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73  d sqlite3OpenMas
21950 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a  terTable(Parse *
21960 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73  , int);.Index *s
21970 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79  qlite3PrimaryKey
21980 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69  Index(Table*);.i
21990 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  16 sqlite3Column
219a0 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20  OfIndex(Index*, 
219b0 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  i16);.void sqlit
219c0 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61 72  e3StartTable(Par
219d0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
219e0 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
219f0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21a00 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  AddColumn(Parse*
21a10 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73  ,Token*);.void s
21a20 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c  qlite3AddNotNull
21a30 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
21a40 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50 72  oid sqlite3AddPr
21a50 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c  imaryKey(Parse*,
21a60 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
21a70 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
21a80 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b   sqlite3AddCheck
21a90 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
21aa0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
21ab0 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e  sqlite3AddColumn
21ac0 54 79 70 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  Type(Parse*,Toke
21ad0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
21ae0 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65  3AddDefaultValue
21af0 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70 61 6e  (Parse*,ExprSpan
21b00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21b10 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50  AddCollateType(P
21b20 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
21b30 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54  void sqlite3EndT
21b40 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  able(Parse*,Toke
21b50 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c  n*,Token*,u8,Sel
21b60 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
21b70 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74  e3ParseUri(const
21b80 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
21b90 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a  r*,unsigned int*
21ba0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
21bb0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66        sqlite3_vf
21bc0 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20  s**,char**,char 
21bd0 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69  **);.Btree *sqli
21be0 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65  te3DbNameToBtree
21bf0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
21c00 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
21c10 74 65 33 43 6f 64 65 4f 6e 63 65 28 50 61 72 73  te3CodeOnce(Pars
21c20 65 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  e *);..#ifdef SQ
21c30 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
21c40 4e 5f 54 45 53 54 0a 23 20 64 65 66 69 6e 65 20  N_TEST.# define 
21c50 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
21c60 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c  X) SQLITE_OK.#el
21c70 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  se.  int sqlite3
21c80 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23  FaultSim(int);.#
21c90 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a 73  endif..Bitvec *s
21ca0 71 6c 69 74 65 33 42 69 74 76 65 63 43 72 65 61  qlite3BitvecCrea
21cb0 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  te(u32);.int sql
21cc0 69 74 65 33 42 69 74 76 65 63 54 65 73 74 28 42  ite3BitvecTest(B
21cd0 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e  itvec*, u32);.in
21ce0 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  t sqlite3BitvecS
21cf0 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  et(Bitvec*, u32)
21d00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69  ;.void sqlite3Bi
21d10 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65 63  tvecClear(Bitvec
21d20 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a  *, u32, void*);.
21d30 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
21d40 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65 63  ecDestroy(Bitvec
21d50 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42  *);.u32 sqlite3B
21d60 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65 63  itvecSize(Bitvec
21d70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  *);.int sqlite3B
21d80 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74  itvecBuiltinTest
21d90 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52 6f 77  (int,int*);..Row
21da0 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53  Set *sqlite3RowS
21db0 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c  etInit(sqlite3*,
21dc0 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64   void*, unsigned
21dd0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
21de0 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52  te3RowSetClear(R
21df0 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71  owSet*);.void sq
21e00 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
21e10 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b  t(RowSet*, i64);
21e20 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53  .int sqlite3RowS
21e30 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20  etTest(RowSet*, 
21e40 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34 29  int iBatch, i64)
21e50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
21e60 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c  SetNext(RowSet*,
21e70 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71   i64*);..void sq
21e80 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77 28  lite3CreateView(
21e90 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
21ea0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65  ken*,Token*,Sele
21eb0 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23  ct*,int,int);..#
21ec0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
21ed0 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c  TE_OMIT_VIEW) ||
21ee0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
21ef0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
21f00 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  LE).  int sqlite
21f10 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61  3ViewGetColumnNa
21f20 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  mes(Parse*,Table
21f30 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
21f40 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  ne sqlite3ViewGe
21f50 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42  tColumnNames(A,B
21f60 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  ) 0.#endif..#if 
21f70 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
21f80 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c  HED>30.  int sql
21f90 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ite3DbMaskAllZer
21fa0 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64  o(yDbMask);.#end
21fb0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  if.void sqlite3D
21fc0 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
21fd0 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20   SrcList*, int, 
21fe0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21ff0 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65 28  e3CodeDropTable(
22000 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
22010 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
22020 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62  sqlite3DeleteTab
22030 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62  le(sqlite3*, Tab
22040 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  le*);.#ifndef SQ
22050 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
22060 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73  CREMENT.  void s
22070 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
22080 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65 20 2a  entBegin(Parse *
22090 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69 64 20  pParse);.  void 
220a0 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
220b0 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20 2a 70  mentEnd(Parse *p
220c0 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20  Parse);.#else.# 
220d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
220e0 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e  toincrementBegin
220f0 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (X).# define sql
22100 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
22110 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a 76  tEnd(X).#endif.v
22120 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72  oid sqlite3Inser
22130 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  t(Parse*, SrcLis
22140 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c  t*, Select*, IdL
22150 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ist*, int);.void
22160 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c   *sqlite3ArrayAl
22170 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c  locate(sqlite3*,
22180 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69  void*,int,int*,i
22190 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71  nt*);.IdList *sq
221a0 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e  lite3IdListAppen
221b0 64 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69  d(sqlite3*, IdLi
221c0 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  st*, Token*);.in
221d0 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49  t sqlite3IdListI
221e0 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e  ndex(IdList*,con
221f0 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69  st char*);.SrcLi
22200 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
22210 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65  stEnlarge(sqlite
22220 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  3*, SrcList*, in
22230 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74  t, int);.SrcList
22240 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
22250 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c  Append(sqlite3*,
22260 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
22270 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c  *, Token*);.SrcL
22280 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
22290 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72  istAppendFromTer
222a0 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  m(Parse*, SrcLis
222b0 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  t*, Token*, Toke
222c0 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n*,.            
222d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222e0 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a            Token*
222f0 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a  , Select*, Expr*
22300 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  , IdList*);.void
22310 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49   sqlite3SrcListI
22320 6e 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a  ndexedBy(Parse *
22330 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b  , SrcList *, Tok
22340 65 6e 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  en *);.int sqlit
22350 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75  e3IndexedByLooku
22360 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63  p(Parse *, struc
22370 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a  t SrcList_item *
22380 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
22390 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54  rcListShiftJoinT
223a0 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76  ype(SrcList*);.v
223b0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
223c0 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28  stAssignCursors(
223d0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
223e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
223f0 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  dListDelete(sqli
22400 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a  te3*, IdList*);.
22410 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
22420 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
22430 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49  3*, SrcList*);.I
22440 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c  ndex *sqlite3All
22450 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74  ocateIndexObject
22460 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e  (sqlite3*,i16,in
22470 74 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e 64 65 78  t,char**);.Index
22480 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 49   *sqlite3CreateI
22490 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65  ndex(Parse*,Toke
224a0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73  n*,Token*,SrcLis
224b0 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  t*,ExprList*,int
224c0 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20  ,Token*,.       
224d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224e0 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69     Expr*, int, i
224f0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
22500 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65  3DropIndex(Parse
22510 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
22520 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65  );.int sqlite3Se
22530 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c  lect(Parse*, Sel
22540 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74  ect*, SelectDest
22550 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69  *);.Select *sqli
22560 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72  te3SelectNew(Par
22570 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72  se*,ExprList*,Sr
22580 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
22590 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  rList*,.        
225a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225b0 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a   Expr*,ExprList*
225c0 2c 75 31 36 2c 45 78 70 72 2a 2c 45 78 70 72 2a  ,u16,Expr*,Expr*
225d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
225e0 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69  electDelete(sqli
225f0 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  te3*, Select*);.
22600 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72  Table *sqlite3Sr
22610 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73  cListLookup(Pars
22620 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69  e*, SrcList*);.i
22630 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64  nt sqlite3IsRead
22640 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62  Only(Parse*, Tab
22650 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  le*, int);.void 
22660 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
22670 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75  (Parse*, int iCu
22680 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c  r, int iDb, Tabl
22690 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65  e*, int);.#if de
226a0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
226b0 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54  BLE_UPDATE_DELET
226c0 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66  E_LIMIT) && !def
226d0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
226e0 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20  _SUBQUERY).Expr 
226f0 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65  *sqlite3LimitWhe
22700 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73  re(Parse*,SrcLis
22710 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
22720 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63  t*,Expr*,Expr*,c
22730 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  har*);.#endif.vo
22740 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
22750 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63  From(Parse*, Src
22760 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  List*, Expr*);.v
22770 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74  oid sqlite3Updat
22780 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
22790 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45  t*, ExprList*, E
227a0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72  xpr*, int);.Wher
227b0 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68  eInfo *sqlite3Wh
227c0 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c  ereBegin(Parse*,
227d0 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
227e0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73  xprList*,ExprLis
227f0 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69  t*,u16,int);.voi
22800 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e  d sqlite3WhereEn
22810 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 75  d(WhereInfo*);.u
22820 36 34 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f  64 sqlite3WhereO
22830 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68  utputRowCount(Wh
22840 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
22850 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73  qlite3WhereIsDis
22860 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a  tinct(WhereInfo*
22870 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
22880 65 72 65 49 73 4f 72 64 65 72 65 64 28 57 68 65  ereIsOrdered(Whe
22890 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
228a0 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74  lite3WhereIsSort
228b0 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  ed(WhereInfo*);.
228c0 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
228d0 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68  ContinueLabel(Wh
228e0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
228f0 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61 6b  qlite3WhereBreak
22900 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a  Label(WhereInfo*
22910 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
22920 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65  ereOkOnePass(Whe
22930 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a  reInfo*, int*);.
22940 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
22950 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72  odeGetColumn(Par
22960 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
22970 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
22980 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
22990 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66  rCodeGetColumnOf
229a0 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62  Table(Vdbe*, Tab
229b0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
229c0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
229d0 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61  3ExprCodeMove(Pa
229e0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
229f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22a00 65 33 45 78 70 72 43 61 63 68 65 53 74 6f 72 65  e3ExprCacheStore
22a10 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
22a20 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
22a30 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50 75  lite3ExprCachePu
22a40 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  sh(Parse*);.void
22a50 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
22a60 65 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a 76 6f  ePop(Parse*);.vo
22a70 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
22a80 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65 2a  cheRemove(Parse*
22a90 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
22aa0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
22ab0 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29 3b  heClear(Parse*);
22ac0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
22ad0 72 43 61 63 68 65 41 66 66 69 6e 69 74 79 43 68  rCacheAffinityCh
22ae0 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  ange(Parse*, int
22af0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
22b00 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61 72  ite3ExprCode(Par
22b10 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
22b20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
22b30 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65  prCodeFactorable
22b40 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
22b50 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22b60 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74  e3ExprCodeAtInit
22b70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
22b80 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
22b90 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d  lite3ExprCodeTem
22ba0 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  p(Parse*, Expr*,
22bb0 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
22bc0 74 65 33 45 78 70 72 43 6f 64 65 54 61 72 67 65  te3ExprCodeTarge
22bd0 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
22be0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
22bf0 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61  te3ExprCodeAndCa
22c00 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  che(Parse*, Expr
22c10 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
22c20 69 74 65 33 45 78 70 72 43 6f 64 65 45 78 70 72  ite3ExprCodeExpr
22c30 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70  List(Parse*, Exp
22c40 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 75 38 29  rList*, int, u8)
22c50 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ;.#define SQLITE
22c60 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30  _ECEL_DUP      0
22c70 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f  x01  /* Deep, no
22c80 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73  t shallow copies
22c90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
22ca0 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20  TE_ECEL_FACTOR  
22cb0 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72   0x02  /* Factor
22cc0 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65   out constant te
22cd0 72 6d 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  rms */.void sqli
22ce0 74 65 33 45 78 70 72 49 66 54 72 75 65 28 50 61  te3ExprIfTrue(Pa
22cf0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
22d00 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
22d10 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 28  ite3ExprIfFalse(
22d20 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
22d30 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20  nt, int);.Table 
22d40 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c  *sqlite3FindTabl
22d50 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  e(sqlite3*,const
22d60 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
22d70 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ar*);.Table *sql
22d80 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28  ite3LocateTable(
22d90 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65  Parse*,int isVie
22da0 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  w,const char*, c
22db0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62  onst char*);.Tab
22dc0 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74  le *sqlite3Locat
22dd0 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65  eTableItem(Parse
22de0 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 73 74 72  *,int isView,str
22df0 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
22e00 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69   *);.Index *sqli
22e10 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c  te3FindIndex(sql
22e20 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
22e30 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
22e40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c  .void sqlite3Unl
22e50 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c  inkAndDeleteTabl
22e60 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  e(sqlite3*,int,c
22e70 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
22e80 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
22e90 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71  ndDeleteIndex(sq
22ea0 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
22eb0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
22ec0 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61 72 73  lite3Vacuum(Pars
22ed0 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
22ee0 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a  RunVacuum(char**
22ef0 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61  , sqlite3*);.cha
22f00 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72  r *sqlite3NameFr
22f10 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a  omToken(sqlite3*
22f20 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
22f30 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72  qlite3ExprCompar
22f40 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  e(Expr*, Expr*, 
22f50 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
22f60 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65  3ExprListCompare
22f70 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72  (ExprList*, Expr
22f80 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  List*, int);.int
22f90 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c   sqlite3ExprImpl
22fa0 69 65 73 45 78 70 72 28 45 78 70 72 2a 2c 20 45  iesExpr(Expr*, E
22fb0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
22fc0 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
22fd0 79 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e 61  yzeAggregates(Na
22fe0 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
22ff0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23000 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69  ExprAnalyzeAggLi
23010 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  st(NameContext*,
23020 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
23030 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55  sqlite3FunctionU
23040 73 65 73 54 68 69 73 53 72 63 28 45 78 70 72 2a  sesThisSrc(Expr*
23050 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62  , SrcList*);.Vdb
23060 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62  e *sqlite3GetVdb
23070 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  e(Parse*);.void 
23080 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53  sqlite3PrngSaveS
23090 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64  tate(void);.void
230a0 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74   sqlite3PrngRest
230b0 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a  oreState(void);.
230c0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c  void sqlite3Roll
230d0 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a  backAll(sqlite3*
230e0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
230f0 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
23100 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ema(Parse*, int)
23110 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
23120 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68  deVerifyNamedSch
23130 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  ema(Parse*, cons
23140 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f  t char *zDb);.vo
23150 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54  id sqlite3BeginT
23160 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
23170 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
23180 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e 73  lite3CommitTrans
23190 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a  action(Parse*);.
231a0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c  void sqlite3Roll
231b0 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28  backTransaction(
231c0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
231d0 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50  lite3Savepoint(P
231e0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  arse*, int, Toke
231f0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
23200 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73  3CloseSavepoints
23210 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69  (sqlite3 *);.voi
23220 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75  d sqlite3LeaveMu
23230 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69  texAndCloseZombi
23240 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  e(sqlite3*);.int
23250 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
23260 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69  nstant(Expr*);.i
23270 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
23280 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28  ConstantNotJoin(
23290 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
232a0 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
232b0 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72  tOrFunction(Expr
232c0 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  *, u8);.int sqli
232d0 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43 6f  te3ExprIsTableCo
232e0 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74  nstant(Expr*,int
232f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
23300 70 72 49 73 49 6e 74 65 67 65 72 28 45 78 70 72  prIsInteger(Expr
23310 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
23320 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75  lite3ExprCanBeNu
23330 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b  ll(const Expr*);
23340 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
23350 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43  NeedsNoAffinityC
23360 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72  hange(const Expr
23370 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71  *, char);.int sq
23380 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e  lite3IsRowid(con
23390 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
233a0 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
233b0 6f 77 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c  owDelete(Parse*,
233c0 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c  Table*,Trigger*,
233d0 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c  int,int,int,i16,
233e0 75 38 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20  u8,u8,u8);.void 
233f0 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
23400 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61  owIndexDelete(Pa
23410 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
23420 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69  t, int, int*);.i
23430 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  nt sqlite3Genera
23440 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65  teIndexKey(Parse
23450 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20  *, Index*, int, 
23460 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49  int, int, int*,I
23470 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ndex*,int);.void
23480 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50   sqlite3ResolveP
23490 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73  artIdxLabel(Pars
234a0 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
234b0 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e  lite3GenerateCon
234c0 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61  straintChecks(Pa
234d0 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a  rse*,Table*,int*
234e0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
234f0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
23500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23510 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74         u8,u8,int
23520 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ,int*);.void sql
23530 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65  ite3CompleteInse
23540 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62  rtion(Parse*,Tab
23550 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  le*,int,int,int,
23560 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
23570 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
23580 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65  enTableAndIndice
23590 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
235a0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2a 2c  , int, int, u8*,
235b0 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f   int*, int*);.vo
235c0 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57  id sqlite3BeginW
235d0 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61  riteOperation(Pa
235e0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
235f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c  .void sqlite3Mul
23600 74 69 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b  tiWrite(Parse*);
23610 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79  .void sqlite3May
23620 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76  Abort(Parse*);.v
23630 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43  oid sqlite3HaltC
23640 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
23650 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72  , int, int, char
23660 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64  *, i8, u8);.void
23670 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65 43 6f   sqlite3UniqueCo
23680 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
23690 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76   int, Index*);.v
236a0 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 69 64  oid sqlite3Rowid
236b0 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
236c0 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b  *, int, Table*);
236d0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
236e0 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45  prDup(sqlite3*,E
236f0 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c  xpr*,int);.ExprL
23700 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
23710 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
23720 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b  ,ExprList*,int);
23730 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
23740 33 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69  3SrcListDup(sqli
23750 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e  te3*,SrcList*,in
23760 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69  t);.IdList *sqli
23770 74 65 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c  te3IdListDup(sql
23780 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a  ite3*,IdList*);.
23790 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53  Select *sqlite3S
237a0 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65 33  electDup(sqlite3
237b0 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a  *,Select*,int);.
237c0 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f  #if SELECTTRACE_
237d0 45 4e 41 42 4c 45 44 0a 76 6f 69 64 20 73 71 6c  ENABLED.void sql
237e0 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d  ite3SelectSetNam
237f0 65 28 53 65 6c 65 63 74 2a 2c 63 6f 6e 73 74 20  e(Select*,const 
23800 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  char*);.#else.# 
23810 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65  define sqlite3Se
23820 6c 65 63 74 53 65 74 4e 61 6d 65 28 41 2c 42 29  lectSetName(A,B)
23830 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
23840 69 74 65 33 46 75 6e 63 44 65 66 49 6e 73 65 72  ite3FuncDefInser
23850 74 28 46 75 6e 63 44 65 66 48 61 73 68 2a 2c 20  t(FuncDefHash*, 
23860 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63 44  FuncDef*);.FuncD
23870 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46  ef *sqlite3FindF
23880 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  unction(sqlite3*
23890 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
238a0 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69  ,int,u8,u8);.voi
238b0 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
238c0 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  rBuiltinFunction
238d0 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  s(sqlite3*);.voi
238e0 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
238f0 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f  rDateTimeFunctio
23900 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
23910 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 47 6c  qlite3RegisterGl
23920 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28 76 6f  obalFunctions(vo
23930 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  id);.int sqlite3
23940 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71  SafetyCheckOk(sq
23950 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
23960 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53  ite3SafetyCheckS
23970 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a  ickOrOk(sqlite3*
23980 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
23990 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73  hangeCookie(Pars
239a0 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21  e*, int);..#if !
239b0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
239c0 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21 64 65  MIT_VIEW) && !de
239d0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
239e0 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20  T_TRIGGER).void 
239f0 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69  sqlite3Materiali
23a00 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54  zeView(Parse*, T
23a10 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  able*, Expr*, in
23a20 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  t);.#endif..#ifn
23a30 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
23a40 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73  TRIGGER.  void s
23a50 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67 67  qlite3BeginTrigg
23a60 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  er(Parse*, Token
23a70 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
23a80 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74  ,IdList*,SrcList
23a90 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
23aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
23ab0 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  pr*,int, int);. 
23ac0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e   void sqlite3Fin
23ad0 69 73 68 54 72 69 67 67 65 72 28 50 61 72 73 65  ishTrigger(Parse
23ae0 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c  *, TriggerStep*,
23af0 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64   Token*);.  void
23b00 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
23b10 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ger(Parse*, SrcL
23b20 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  ist*, int);.  vo
23b30 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
23b40 69 67 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c  iggerPtr(Parse*,
23b50 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72   Trigger*);.  Tr
23b60 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72  igger *sqlite3Tr
23b70 69 67 67 65 72 73 45 78 69 73 74 28 50 61 72 73  iggersExist(Pars
23b80 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  e *, Table*, int
23b90 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
23ba0 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67   *pMask);.  Trig
23bb0 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67  ger *sqlite3Trig
23bc0 67 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c  gerList(Parse *,
23bd0 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69   Table *);.  voi
23be0 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
23bf0 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
23c00 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20  Trigger *, int, 
23c10 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
23c20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20  Table *,.       
23c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c40 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69       int, int, i
23c50 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
23c60 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
23c70 72 44 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c  rDirect(Parse *,
23c80 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c   Trigger *, Tabl
23c90 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e *, int, int, i
23ca0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
23cb0 74 65 56 69 65 77 54 72 69 67 67 65 72 73 28 50  teViewTriggers(P
23cc0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
23cd0 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  xpr*, int, ExprL
23ce0 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ist*);.  void sq
23cf0 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
23d00 65 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  erStep(sqlite3*,
23d10 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a   TriggerStep*);.
23d20 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
23d30 71 6c 69 74 65 33 54 72 69 67 67 65 72 53 65 6c  qlite3TriggerSel
23d40 65 63 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ectStep(sqlite3*
23d50 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69  ,Select*);.  Tri
23d60 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
23d70 33 54 72 69 67 67 65 72 49 6e 73 65 72 74 53 74  3TriggerInsertSt
23d80 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
23d90 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20  n*, IdList*,.   
23da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23dc0 20 20 20 20 20 53 65 6c 65 63 74 2a 2c 75 38 29       Select*,u8)
23dd0 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
23de0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55  *sqlite3TriggerU
23df0 70 64 61 74 65 53 74 65 70 28 73 71 6c 69 74 65  pdateStep(sqlite
23e00 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  3*,Token*,ExprLi
23e10 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b  st*, Expr*, u8);
23e20 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
23e30 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65  sqlite3TriggerDe
23e40 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74 65 33  leteStep(sqlite3
23e50 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29  *,Token*, Expr*)
23e60 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
23e70 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71  DeleteTrigger(sq
23e80 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a  lite3*, Trigger*
23e90 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
23ea0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
23eb0 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
23ec0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
23ed0 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
23ee0 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50  TriggerColmask(P
23ef0 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45  arse*,Trigger*,E
23f00 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74  xprList*,int,int
23f10 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20  ,Table*,int);.# 
23f20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61  define sqlite3Pa
23f30 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28  rseToplevel(p) (
23f40 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f  (p)->pToplevel ?
23f50 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20   (p)->pToplevel 
23f60 3a 20 28 70 29 29 0a 23 65 6c 73 65 0a 23 20 64  : (p)).#else.# d
23f70 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
23f80 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44  ggersExist(B,C,D
23f90 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65  ,E,F) 0.# define
23fa0 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
23fb0 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66  igger(A,B).# def
23fc0 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54  ine sqlite3DropT
23fd0 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23  riggerPtr(A,B).#
23fe0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55   define sqlite3U
23ff0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
24000 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64  igger(A,B,C).# d
24010 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
24020 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c  eRowTrigger(A,B,
24030 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23  C,D,E,F,G,H,I).#
24040 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
24050 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
24060 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29  ect(A,B,C,D,E,F)
24070 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24080 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20  3TriggerList(X, 
24090 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  Y) 0.# define sq
240a0 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
240b0 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65  el(p) p.# define
240c0 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
240d0 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45  olmask(A,B,C,D,E
240e0 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a  ,F,G) 0.#endif..
240f0 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54  int sqlite3JoinT
24100 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
24110 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
24120 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
24130 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65  3CreateForeignKe
24140 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
24150 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70  st*, Token*, Exp
24160 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  rList*, int);.vo
24170 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46  id sqlite3DeferF
24180 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
24190 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  , int);.#ifndef 
241a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
241b0 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64  ORIZATION.  void
241c0 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
241d0 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63  (Parse*,Expr*,Sc
241e0 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b  hema*,SrcList*);
241f0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
24200 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69  thCheck(Parse*,i
24210 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
24220 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
24230 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
24240 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
24250 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a  ntextPush(Parse*
24260 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20  , AuthContext*, 
24270 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
24280 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
24290 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43  ContextPop(AuthC
242a0 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20  ontext*);.  int 
242b0 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43  sqlite3AuthReadC
242c0 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ol(Parse*, const
242d0 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63   char *, const c
242e0 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  har *, int);.#el
242f0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
24300 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c  te3AuthRead(a,b,
24310 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71  c,d).# define sq
24320 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61  lite3AuthCheck(a
24330 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c  ,b,c,d,e)    SQL
24340 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20  ITE_OK.# define 
24350 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
24360 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20  xtPush(a,b,c).# 
24370 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
24380 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20  thContextPop(a) 
24390 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e   ((void)(a)).#en
243a0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
243b0 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Attach(Parse*, E
243c0 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  xpr*, Expr*, Exp
243d0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
243e0 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Detach(Parse*, 
243f0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
24400 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69  ite3FixInit(DbFi
24410 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e  xer*, Parse*, in
24420 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
24430 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69  const Token*);.i
24440 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63  nt sqlite3FixSrc
24450 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53  List(DbFixer*, S
24460 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
24470 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44  lite3FixSelect(D
24480 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a  bFixer*, Select*
24490 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
244a0 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20  xExpr(DbFixer*, 
244b0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
244c0 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44  te3FixExprList(D
244d0 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73  bFixer*, ExprLis
244e0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
244f0 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44  FixTriggerStep(D
24500 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72  bFixer*, Trigger
24510 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Step*);.int sqli
24520 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68  te3AtoF(const ch
24530 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20  ar *z, double*, 
24540 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
24550 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f  lite3GetInt32(co
24560 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a  nst char *, int*
24570 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
24580 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  oi(const char*);
24590 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31  .int sqlite3Utf1
245a0 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76  6ByteLen(const v
245b0 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  oid *pData, int 
245c0 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69  nChar);.int sqli
245d0 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63  te3Utf8CharLen(c
245e0 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61  onst char *pData
245f0 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33  , int nByte);.u3
24600 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61  2 sqlite3Utf8Rea
24610 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c  d(const u8**);.L
24620 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
24630 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74  Est(u64);.LogEst
24640 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64   sqlite3LogEstAd
24650 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29  d(LogEst,LogEst)
24660 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
24670 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
24680 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  LE.LogEst sqlite
24690 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c  3LogEstFromDoubl
246a0 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69  e(double);.#endi
246b0 66 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f 67  f.u64 sqlite3Log
246c0 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29  EstToInt(LogEst)
246d0 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65  ;../*.** Routine
246e0 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72  s to read and wr
246f0 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e  ite variable-len
24700 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54  gth integers.  T
24710 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  hese used to.** 
24720 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c  be defined local
24730 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75  ly, but now we u
24740 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f  se the varint ro
24750 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74  utines in the ut
24760 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f  il.c.** file..*/
24770 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56  .int sqlite3PutV
24780 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63  arint(unsigned c
24790 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73  har*, u64);.u8 s
247a0 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28  qlite3GetVarint(
247b0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
247c0 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75  har *, u64 *);.u
247d0 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
247e0 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67  nt32(const unsig
247f0 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20  ned char *, u32 
24800 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
24810 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b  arintLen(u64 v);
24820 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d  ../*.** The comm
24830 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20 61  on case is for a
24840 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20   varint to be a 
24850 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68  single byte.  Th
24860 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  ey following.** 
24870 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68  macros handle th
24880 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69  e common case wi
24890 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72  thout a procedur
248a0 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e  e call, but then
248b0 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f   call.** the pro
248c0 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65  cedure for large
248d0 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64  r varints..*/.#d
248e0 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33  efine getVarint3
248f0 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
24900 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29  ((*(A)<(u8)0x80)
24910 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29  ?((B)=(u32)*(A))
24920 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72  ,1:sqlite3GetVar
24930 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a  int32((A),(u32 *
24940 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  )&(B))).#define 
24950 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29  putVarint32(A,B)
24960 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32    \.  (u8)(((u32
24970 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f  )(B)<(u32)0x80)?
24980 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20  (*(A)=(unsigned 
24990 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20  char)(B)),1:\.  
249a0 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
249b0 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69  ((A),(B))).#defi
249c0 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20  ne getVarint    
249d0 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
249e0 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69  .#define putVari
249f0 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74  nt    sqlite3Put
24a00 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63  Varint...const c
24a10 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65  har *sqlite3Inde
24a20 78 41 66 66 69 6e 69 74 79 53 74 72 28 56 64 62  xAffinityStr(Vdb
24a30 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 76  e *, Index *);.v
24a40 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
24a50 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20  Affinity(Vdbe*, 
24a60 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68  Table*, int);.ch
24a70 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72  ar sqlite3Compar
24a80 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  eAffinity(Expr *
24a90 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32  pExpr, char aff2
24aa0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
24ab0 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78  dexAffinityOk(Ex
24ac0 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
24ad0 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63  idx_affinity);.c
24ae0 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41  har sqlite3ExprA
24af0 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45  ffinity(Expr *pE
24b00 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xpr);.int sqlite
24b10 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68  3Atoi64(const ch
24b20 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20  ar*, i64*, int, 
24b30 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
24b40 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f  DecOrHexToI64(co
24b50 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29  nst char*, i64*)
24b60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
24b70 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74  rorWithMsg(sqlit
24b80 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
24b90 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64  char*,...);.void
24ba0 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71   sqlite3Error(sq
24bb0 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
24bc0 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42  d *sqlite3HexToB
24bd0 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  lob(sqlite3*, co
24be0 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74  nst char *z, int
24bf0 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48   n);.u8 sqlite3H
24c00 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a  exToInt(int h);.
24c10 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61  int sqlite3TwoPa
24c20 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20  rtName(Parse *, 
24c30 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
24c40 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69  , Token **);..#i
24c50 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
24c60 5f 54 45 53 54 29 20 0a 63 6f 6e 73 74 20 63 68  _TEST) .const ch
24c70 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61  ar *sqlite3ErrNa
24c80 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  me(int);.#endif.
24c90 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
24ca0 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b  ite3ErrStr(int);
24cb0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64  .int sqlite3Read
24cc0 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50  Schema(Parse *pP
24cd0 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  arse);.CollSeq *
24ce0 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53  sqlite3FindCollS
24cf0 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65  eq(sqlite3*,u8 e
24d00 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nc, const char*,
24d10 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  int);.CollSeq *s
24d20 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c  qlite3LocateColl
24d30 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
24d40 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e  e, const char*zN
24d50 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ame);.CollSeq *s
24d60 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65  qlite3ExprCollSe
24d70 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
24d80 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45   Expr *pExpr);.E
24d90 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
24da0 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28  AddCollateToken(
24db0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
24dc0 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  xpr*, const Toke
24dd0 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  n*);.Expr *sqlit
24de0 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65  e3ExprAddCollate
24df0 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78  String(Parse*,Ex
24e00 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  pr*,const char*)
24e10 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
24e20 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45  xprSkipCollate(E
24e30 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
24e40 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50  e3CheckCollSeq(P
24e50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20  arse *, CollSeq 
24e60 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
24e70 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50  heckObjectName(P
24e80 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68  arse *, const ch
24e90 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar *);.void sqli
24ea0 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
24eb0 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  s(sqlite3 *, int
24ec0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64  );.int sqlite3Ad
24ed0 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  dInt64(i64*,i64)
24ee0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62  ;.int sqlite3Sub
24ef0 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
24f00 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49  .int sqlite3MulI
24f10 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
24f20 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e  int sqlite3AbsIn
24f30 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66  t32(int);.#ifdef
24f40 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38   SQLITE_ENABLE_8
24f50 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71  _3_NAMES.void sq
24f60 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33  lite3FileSuffix3
24f70 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68  (const char*, ch
24f80 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ar*);.#else.# de
24f90 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65  fine sqlite3File
24fa0 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e  Suffix3(X,Y).#en
24fb0 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65  dif.u8 sqlite3Ge
24fc0 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63  tBoolean(const c
24fd0 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e  har *z,u8);..con
24fe0 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  st void *sqlite3
24ff0 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65  ValueText(sqlite
25000 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69  3_value*, u8);.i
25010 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42  nt sqlite3ValueB
25020 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c  ytes(sqlite3_val
25030 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  ue*, u8);.void s
25040 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
25050 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  r(sqlite3_value*
25060 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
25070 64 20 2a 2c 75 38 2c 20 0a 20 20 20 20 20 20 20  d *,u8, .       
25080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25090 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
250a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
250b0 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74  lueSetNull(sqlit
250c0 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64  e3_value*);.void
250d0 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65   sqlite3ValueFre
250e0 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  e(sqlite3_value*
250f0 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  );.sqlite3_value
25100 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65   *sqlite3ValueNe
25110 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68  w(sqlite3 *);.ch
25120 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36  ar *sqlite3Utf16
25130 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  to8(sqlite3 *, c
25140 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
25150 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
25160 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73  3ValueFromExpr(s
25170 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a  qlite3 *, Expr *
25180 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65  , u8, u8, sqlite
25190 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69  3_value **);.voi
251a0 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70  d sqlite3ValueAp
251b0 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69  plyAffinity(sqli
251c0 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c  te3_value *, u8,
251d0 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51   u8);.#ifndef SQ
251e0 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
251f0 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  N.extern const u
25200 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
25210 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72  ite3OpcodeProper
25220 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  ty[];.extern con
25230 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
25240 20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c   sqlite3UpperToL
25250 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  ower[];.extern c
25260 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
25270 61 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d  ar sqlite3CtypeM
25280 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  ap[];.extern con
25290 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33  st Token sqlite3
252a0 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74  IntTokens[];.ext
252b0 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73  ern SQLITE_WSD s
252c0 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
252d0 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  fig sqlite3Confi
252e0 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45  g;.extern SQLITE
252f0 5f 57 53 44 20 46 75 6e 63 44 65 66 48 61 73 68  _WSD FuncDefHash
25300 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75   sqlite3GlobalFu
25310 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66  nctions;.#ifndef
25320 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
25330 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69  .extern int sqli
25340 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a  te3PendingByte;.
25350 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f  #endif.#endif.vo
25360 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61  id sqlite3RootPa
25370 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a  geMoved(sqlite3*
25380 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
25390 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
253a0 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f  index(Parse*, To
253b0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ken*, Token*);.v
253c0 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
253d0 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
253e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
253f0 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61  erRenameTable(Pa
25400 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
25410 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
25420 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e  ite3GetToken(con
25430 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
25440 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64   *, int *);.void
25450 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61   sqlite3NestedPa
25460 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  rse(Parse*, cons
25470 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76  t char*, ...);.v
25480 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 69 72  oid sqlite3Expir
25490 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
254a0 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  nts(sqlite3*);.i
254b0 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75  nt sqlite3CodeSu
254c0 62 73 65 6c 65 63 74 28 50 61 72 73 65 20 2a 2c  bselect(Parse *,
254d0 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e   Expr *, int, in
254e0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
254f0 53 65 6c 65 63 74 50 72 65 70 28 50 61 72 73 65  SelectPrep(Parse
25500 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65  *, Select*, Name
25510 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73  Context*);.int s
25520 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e  qlite3MatchSpanN
25530 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ame(const char*,
25540 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
25550 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
25560 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
25570 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e  ite3ResolveExprN
25580 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ames(NameContext
25590 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
255a0 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65  sqlite3ResolveSe
255b0 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a  lectNames(Parse*
255c0 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43  , Select*, NameC
255d0 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73  ontext*);.void s
255e0 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c  qlite3ResolveSel
255f0 66 52 65 66 65 72 65 6e 63 65 28 50 61 72 73 65  fReference(Parse
25600 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70  *,Table*,int,Exp
25610 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  r*,ExprList*);.i
25620 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  nt sqlite3Resolv
25630 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50 61  eOrderGroupBy(Pa
25640 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45  rse*, Select*, E
25650 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20  xprList*, const 
25660 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
25670 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c  ite3ColumnDefaul
25680 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20  t(Vdbe *, Table 
25690 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
256a0 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46  id sqlite3AlterF
256b0 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50  inishAddColumn(P
256c0 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29  arse *, Token *)
256d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
256e0 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d  terBeginAddColum
256f0 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69  n(Parse *, SrcLi
25700 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  st *);.CollSeq *
25710 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65  sqlite3GetCollSe
25720 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f  q(Parse*, u8, Co
25730 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63  llSeq *, const c
25740 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69  har*);.char sqli
25750 74 65 33 41 66 66 69 6e 69 74 79 54 79 70 65 28  te3AffinityType(
25760 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 38 2a  const char*, u8*
25770 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
25780 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54  nalyze(Parse*, T
25790 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
257a0 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b  int sqlite3Invok
257b0 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73  eBusyHandler(Bus
257c0 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20  yHandler*);.int 
257d0 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71  sqlite3FindDb(sq
257e0 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
257f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
25800 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a  DbName(sqlite3 *
25810 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
25820 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c  .int sqlite3Anal
25830 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33  ysisLoad(sqlite3
25840 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64  *,int iDB);.void
25850 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e   sqlite3DeleteIn
25860 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74  dexSamples(sqlit
25870 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  e3*,Index*);.voi
25880 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74  d sqlite3Default
25890 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a  RowEst(Index*);.
258a0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
258b0 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  sterLikeFunction
258c0 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  s(sqlite3*, int)
258d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c  ;.int sqlite3IsL
258e0 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  ikeFunction(sqli
258f0 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c  te3*,Expr*,int*,
25900 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
25910 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69 6c 65 46  ite3MinimumFileF
25920 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c 20 69 6e  ormat(Parse*, in
25930 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
25940 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72  lite3SchemaClear
25950 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61  (void *);.Schema
25960 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47   *sqlite3SchemaG
25970 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74  et(sqlite3 *, Bt
25980 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ree *);.int sqli
25990 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78  te3SchemaToIndex
259a0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63  (sqlite3 *db, Sc
259b0 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f  hema *);.KeyInfo
259c0 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
259d0 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69  Alloc(sqlite3*,i
259e0 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
259f0 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65  lite3KeyInfoUnre
25a00 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79  f(KeyInfo*);.Key
25a10 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
25a20 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a  InfoRef(KeyInfo*
25a30 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
25a40 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65  te3KeyInfoOfInde
25a50 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  x(Parse*, Index*
25a60 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
25a70 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74  _DEBUG.int sqlit
25a80 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65  e3KeyInfoIsWrite
25a90 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  able(KeyInfo*);.
25aa0 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
25ab0 65 33 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c  e3CreateFunc(sql
25ac0 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
25ad0 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ar *, int, int, 
25ae0 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f 69 64 20  void *, .  void 
25af0 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
25b00 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
25b10 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f  _value **),.  vo
25b20 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
25b30 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
25b40 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76  te3_value **), v
25b50 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
25b60 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e  context*),.  Fun
25b70 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65  cDestructor *pDe
25b80 73 74 72 75 63 74 6f 72 0a 29 3b 0a 69 6e 74 20  structor.);.int 
25b90 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 73  sqlite3ApiExit(s
25ba0 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29  qlite3 *db, int)
25bb0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65  ;.int sqlite3Ope
25bc0 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28 50 61  nTempDatabase(Pa
25bd0 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71  rse *);..void sq
25be0 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69  lite3StrAccumIni
25bf0 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 68 61  t(StrAccum*, cha
25c00 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
25c10 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
25c20 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63  cumAppend(StrAcc
25c30 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  um*,const char*,
25c40 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
25c50 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
25c60 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f  All(StrAccum*,co
25c70 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
25c80 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64 53 70   sqlite3AppendSp
25c90 61 63 65 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e  ace(StrAccum*,in
25ca0 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  t);.char *sqlite
25cb0 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28  3StrAccumFinish(
25cc0 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64  StrAccum*);.void
25cd0 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
25ce0 52 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29  Reset(StrAccum*)
25cf0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
25d00 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c  lectDestInit(Sel
25d10 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74  ectDest*,int,int
25d20 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
25d30 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72  CreateColumnExpr
25d40 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c  (sqlite3 *, SrcL
25d50 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ist *, int, int)
25d60 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  ;..void sqlite3B
25d70 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c  ackupRestart(sql
25d80 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a  ite3_backup *);.
25d90 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b  void sqlite3Back
25da0 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33  upUpdate(sqlite3
25db0 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c  _backup *, Pgno,
25dc0 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23   const u8 *);..#
25dd0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
25de0 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
25df0 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  T4.void sqlite3A
25e00 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28  nalyzeFunctions(
25e10 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74  void);.int sqlit
25e20 65 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56  e3Stat4ProbeSetV
25e30 61 6c 75 65 28 50 61 72 73 65 2a 2c 49 6e 64 65  alue(Parse*,Inde
25e40 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  x*,UnpackedRecor
25e50 64 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c 69 6e 74  d**,Expr*,u8,int
25e60 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ,int*);.int sqli
25e70 74 65 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f  te3Stat4ValueFro
25e80 6d 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78  mExpr(Parse*, Ex
25e90 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33  pr*, u8, sqlite3
25ea0 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20  _value**);.void 
25eb0 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
25ec0 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65  eFree(UnpackedRe
25ed0 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  cord*);.int sqli
25ee0 74 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73  te3Stat4Column(s
25ef0 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76  qlite3*, const v
25f00 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  oid*, int, int, 
25f10 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
25f20 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
25f30 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f  The interface to
25f40 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72   the LEMON-gener
25f50 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76  ated parser.*/.v
25f60 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73  oid *sqlite3Pars
25f70 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29  erAlloc(void*(*)
25f80 28 75 36 34 29 29 3b 0a 76 6f 69 64 20 73 71 6c  (u64));.void sql
25f90 69 74 65 33 50 61 72 73 65 72 46 72 65 65 28 76  ite3ParserFree(v
25fa0 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f  oid*, void(*)(vo
25fb0 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  id*));.void sqli
25fc0 74 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c  te3Parser(void*,
25fd0 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72   int, Token, Par
25fe0 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59 54  se*);.#ifdef YYT
25ff0 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54  RACKMAXSTACKDEPT
26000 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50  H.  int sqlite3P
26010 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76  arserStackPeak(v
26020 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76  oid*);.#endif..v
26030 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c  oid sqlite3AutoL
26040 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oadExtensions(sq
26050 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66  lite3*);.#ifndef
26060 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41   SQLITE_OMIT_LOA
26070 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f  D_EXTENSION.  vo
26080 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45  id sqlite3CloseE
26090 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
260a0 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  3*);.#else.# def
260b0 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  ine sqlite3Close
260c0 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65  Extensions(X).#e
260d0 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
260e0 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
260f0 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71  _CACHE.  void sq
26100 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50  lite3TableLock(P
26110 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  arse *, int, int
26120 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72  , u8, const char
26130 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
26140 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c  fine sqlite3Tabl
26150 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29  eLock(v,w,x,y,z)
26160 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
26170 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e  SQLITE_TEST.  in
26180 74 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38  t sqlite3Utf8To8
26190 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29  (unsigned char*)
261a0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
261b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
261c0 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
261d0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43  ine sqlite3VtabC
261e0 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e  lear(Y).#  defin
261f0 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  e sqlite3VtabSyn
26200 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b  c(X,Y) SQLITE_OK
26210 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
26220 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58  e3VtabRollback(X
26230 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
26240 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29  te3VtabCommit(X)
26250 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
26260 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29  e3VtabInSync(db)
26270 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c   0.#  define sql
26280 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 20  ite3VtabLock(X) 
26290 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
262a0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a  e3VtabUnlock(X).
262b0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
262c0 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
262d0 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
262e0 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
262f0 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54  t(X, Y, Z) SQLIT
26300 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
26310 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28  qlite3GetVTable(
26320 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29  X,Y)  ((VTable*)
26330 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64  0).#else.   void
26340 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
26350 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  r(sqlite3 *db, T
26360 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20  able*);.   void 
26370 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f  sqlite3VtabDisco
26380 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64  nnect(sqlite3 *d
26390 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20  b, Table *p);.  
263a0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
263b0 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62  Sync(sqlite3 *db
263c0 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74  , Vdbe*);.   int
263d0 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
263e0 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62  back(sqlite3 *db
263f0 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
26400 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69  3VtabCommit(sqli
26410 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69  te3 *db);.   voi
26420 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63  d sqlite3VtabLoc
26430 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
26440 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
26450 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29  Unlock(VTable *)
26460 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
26470 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
26480 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e  sqlite3*);.   in
26490 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  t sqlite3VtabSav
264a0 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a  epoint(sqlite3 *
264b0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20  , int, int);.   
264c0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
264d0 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64 62  ImportErrmsg(Vdb
264e0 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62  e*, sqlite3_vtab
264f0 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73  *);.   VTable *s
26500 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28  qlite3GetVTable(
26510 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a  sqlite3*, Table*
26520 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  );.#  define sql
26530 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64  ite3VtabInSync(d
26540 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e  b) ((db)->nVTran
26550 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54  s>0 && (db)->aVT
26560 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a  rans==0).#endif.
26570 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
26580 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72  MakeWritable(Par
26590 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69  se*,Table*);.voi
265a0 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  d sqlite3VtabBeg
265b0 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  inParse(Parse*, 
265c0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
265d0 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Token*, int);.vo
265e0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46 69  id sqlite3VtabFi
265f0 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65 2a  nishParse(Parse*
26600 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
26610 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e  sqlite3VtabArgIn
26620 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  it(Parse*);.void
26630 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 45   sqlite3VtabArgE
26640 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f  xtend(Parse*, To
26650 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
26660 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65  e3VtabCallCreate
26670 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
26680 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68  const char *, ch
26690 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ar **);.int sqli
266a0 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65  te3VtabCallConne
266b0 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ct(Parse*, Table
266c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
266d0 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73  tabCallDestroy(s
266e0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
266f0 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74  nst char *);.int
26700 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
26710 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61  n(sqlite3 *, VTa
26720 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20  ble *);.FuncDef 
26730 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72  *sqlite3VtabOver
26740 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  loadFunction(sql
26750 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c  ite3 *,FuncDef*,
26760 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a   int nArg, Expr*
26770 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
26780 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73  nvalidFunction(s
26790 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
267a0 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
267b0 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e  e**);.sqlite3_in
267c0 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43  t64 sqlite3StmtC
267d0 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74  urrentTime(sqlit
267e0 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e  e3_context*);.in
267f0 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72  t sqlite3VdbePar
26800 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65  ameterIndex(Vdbe
26810 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
26820 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
26830 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67  3TransferBinding
26840 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  s(sqlite3_stmt *
26850 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  , sqlite3_stmt *
26860 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
26870 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73 65  arserReset(Parse
26880 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
26890 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b  eprepare(Vdbe*);
268a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
268b0 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68  rListCheckLength
268c0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
268d0 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
268e0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
268f0 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43  e3BinaryCompareC
26900 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
26910 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b  Expr *, Expr *);
26920 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70  .int sqlite3Temp
26930 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73  InMemory(const s
26940 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20  qlite3*);.const 
26950 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75  char *sqlite3Jou
26960 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74  rnalModename(int
26970 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
26980 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74  E_OMIT_WAL.  int
26990 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
269a0 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  nt(sqlite3*, int
269b0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
269c0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
269d0 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28  3WalDefaultHook(
269e0 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
269f0 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
26a00 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
26a10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a  SQLITE_OMIT_CTE.
26a20 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57    With *sqlite3W
26a30 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69  ithAdd(Parse*,Wi
26a40 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  th*,Token*,ExprL
26a50 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  ist*,Select*);. 
26a60 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74   void sqlite3Wit
26a70 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  hDelete(sqlite3*
26a80 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20  ,With*);.  void 
26a90 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28  sqlite3WithPush(
26aa0 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75  Parse*, With*, u
26ab0 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  8);.#else.#defin
26ac0 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73  e sqlite3WithPus
26ad0 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65  h(x,y,z).#define
26ae0 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
26af0 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a  te(x,y).#endif..
26b00 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20  /* Declarations 
26b10 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e  for functions in
26b20 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20   fkey.c. All of 
26b30 74 68 65 73 65 20 61 72 65 20 72 65 70 6c 61 63  these are replac
26b40 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d  ed by.** no-op m
26b50 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f  acros if OMIT_FO
26b60 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66  REIGN_KEY is def
26b70 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ined. In this ca
26b80 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a  se no foreign.**
26b90 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69   key functionali
26ba0 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e  ty is available.
26bb0 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52   If OMIT_TRIGGER
26bc0 20 69 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a   is defined but.
26bd0 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  ** OMIT_FOREIGN_
26be0 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79  KEY is not, only
26bf0 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   some of the fun
26c00 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70  ctions are no-op
26c10 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63  ed. In.** this c
26c20 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ase foreign keys
26c30 20 61 72 65 20 70 61 72 73 65 64 2c 20 62 75 74   are parsed, but
26c40 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69   no other functi
26c50 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a 20 70  onality is .** p
26c60 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65  rovided (enforce
26c70 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74  ment of FK const
26c80 72 61 69 6e 74 73 20 72 65 71 75 69 72 65 73 20  raints requires 
26c90 74 68 65 20 74 72 69 67 67 65 72 73 20 73 75 62  the triggers sub
26ca0 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66  -system)..*/.#if
26cb0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
26cc0 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
26cd0 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  Y) && !defined(S
26ce0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
26cf0 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ER).  void sqlit
26d00 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a  e3FkCheck(Parse*
26d10 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
26d20 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
26d30 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
26d40 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
26d50 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62  , SrcList *, Tab
26d60 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  le*);.  void sql
26d70 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61  ite3FkActions(Pa
26d80 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
26d90 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
26da0 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20  t*, int);.  int 
26db0 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65  sqlite3FkRequire
26dc0 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  d(Parse*, Table*
26dd0 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
26de0 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64  u32 sqlite3FkOld
26df0 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  mask(Parse*, Tab
26e00 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71  le*);.  FKey *sq
26e10 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65  lite3FkReference
26e20 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73  s(Table *);.#els
26e30 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
26e40 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62  te3FkActions(a,b
26e50 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66  ,c,d,e,f).  #def
26e60 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65  ine sqlite3FkChe
26e70 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a  ck(a,b,c,d,e,f).
26e80 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
26e90 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62  3FkDropTable(a,b
26ea0 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,c).  #define sq
26eb0 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61  lite3FkOldmask(a
26ec0 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a 20 20  ,b)         0.  
26ed0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
26ee0 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c  kRequired(a,b,c,
26ef0 64 29 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23  d)    0.#endif.#
26f00 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
26f10 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20  IT_FOREIGN_KEY. 
26f20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
26f30 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c  elete(sqlite3 *,
26f40 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20   Table*);.  int 
26f50 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
26f60 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c  ndex(Parse*,Tabl
26f70 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a  e*,FKey*,Index**
26f80 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20  ,int**);.#else. 
26f90 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
26fa0 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20  FkDelete(a,b).  
26fb0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
26fc0 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62  kLocateIndex(a,b
26fd0 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a  ,c,d,e).#endif..
26fe0 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65  ./*.** Available
26ff0 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73   fault injectors
27000 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d  .  Should be num
27010 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20  bered beginning 
27020 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69  with 0..*/.#defi
27030 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
27040 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20  NJECTOR_MALLOC  
27050 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c     0.#define SQL
27060 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f  ITE_FAULTINJECTO
27070 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a  R_COUNT      1..
27080 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
27090 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20  ace to the code 
270a0 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20  in fault.c used 
270b0 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20  for identifying 
270c0 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c  "benign".** mall
270d0 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69  oc failures. Thi
270e0 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e  s is only presen
270f0 74 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  t if SQLITE_OMIT
27100 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a  _BUILTIN_TEST.**
27110 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e   is not defined.
27120 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
27130 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
27140 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  TEST.  void sqli
27150 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
27160 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f  lloc(void);.  vo
27170 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  id sqlite3EndBen
27180 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
27190 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
271a0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
271b0 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64  ignMalloc().  #d
271c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64  efine sqlite3End
271d0 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23  BenignMalloc().#
271e0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  endif../*.** All
271f0 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75  owed return valu
27200 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46  es from sqlite3F
27210 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a  indInIndex().*/.
27220 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
27230 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20  _ROWID        1 
27240 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20    /* Search the 
27250 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
27260 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  le */.#define IN
27270 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20  _INDEX_EPH      
27280 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63      2   /* Searc
27290 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62  h an ephemeral b
272a0 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65  -tree */.#define
272b0 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
272c0 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78  ASC    3   /* Ex
272d0 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43  isting index ASC
272e0 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e  ENDING */.#defin
272f0 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
27300 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45  _DESC   4   /* E
27310 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45  xisting index DE
27320 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66  SCENDING */.#def
27330 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  ine IN_INDEX_NOO
27340 50 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a  P         5   /*
27350 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61   No table availa
27360 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69  ble. Use compari
27370 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c  sons */./*.** Al
27380 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20  lowed flags for 
27390 74 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65  the 3rd paramete
273a0 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64  r to sqlite3Find
273b0 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64  InIndex()..*/.#d
273c0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e  efine IN_INDEX_N
273d0 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30  OOP_OK     0x000
273e0 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75  1  /* OK to retu
273f0 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  rn IN_INDEX_NOOP
27400 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
27410 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20  NDEX_MEMBERSHIP 
27420 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f   0x0002  /* IN o
27430 70 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72  perator used for
27440 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74   membership test
27450 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
27460 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20  NDEX_LOOP       
27470 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f   0x0004  /* IN o
27480 70 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20  perator used as 
27490 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71  a loop */.int sq
274a0 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
274b0 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
274c0 2c 20 75 33 32 2c 20 69 6e 74 2a 29 3b 0a 0a 23  , u32, int*);..#
274d0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
274e0 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  BLE_ATOMIC_WRITE
274f0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
27500 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
27510 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63  3_vfs *, const c
27520 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66  har *, sqlite3_f
27530 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ile *, int, int)
27540 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ;.  int sqlite3J
27550 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74  ournalSize(sqlit
27560 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74  e3_vfs *);.  int
27570 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43   sqlite3JournalC
27580 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69  reate(sqlite3_fi
27590 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  le *);.  int sql
275a0 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74  ite3JournalExist
275b0 73 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  s(sqlite3_file *
275c0 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  p);.#else.  #def
275d0 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  ine sqlite3Journ
275e0 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28 70  alSize(pVfs) ((p
275f0 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a  Vfs)->szOsFile).
27600 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
27610 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 70  3JournalExists(p
27620 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  ) 1.#endif..void
27630 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
27640 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66  alOpen(sqlite3_f
27650 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ile *);.int sqli
27660 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a  te3MemJournalSiz
27670 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  e(void);.int sql
27680 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c  ite3IsMemJournal
27690 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
276a0 3b 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  ;..#if SQLITE_MA
276b0 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
276c0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70   void sqlite3Exp
276d0 72 53 65 74 48 65 69 67 68 74 28 50 61 72 73 65  rSetHeight(Parse
276e0 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
276f0 70 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  p);.  int sqlite
27700 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68  3SelectExprHeigh
27710 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69  t(Select *);.  i
27720 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  nt sqlite3ExprCh
27730 65 63 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a  eckHeight(Parse*
27740 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20  , int);.#else.  
27750 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45  #define sqlite3E
27760 78 70 72 53 65 74 48 65 69 67 68 74 28 78 2c 79  xprSetHeight(x,y
27770 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
27780 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69  te3SelectExprHei
27790 67 68 74 28 78 29 20 30 0a 20 20 23 64 65 66 69  ght(x) 0.  #defi
277a0 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  ne sqlite3ExprCh
277b0 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23  eckHeight(x,y).#
277c0 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74  endif..u32 sqlit
277d0 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74  e3Get4byte(const
277e0 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u8*);.void sqli
277f0 74 65 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c  te3Put4byte(u8*,
27800 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53   u32);..#ifdef S
27810 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c  QLITE_ENABLE_UNL
27820 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69  OCK_NOTIFY.  voi
27830 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
27840 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74  ionBlocked(sqlit
27850 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29  e3 *, sqlite3 *)
27860 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
27870 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b  ConnectionUnlock
27880 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ed(sqlite3 *db);
27890 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
278a0 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28  onnectionClosed(
278b0 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65  sqlite3 *db);.#e
278c0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
278d0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42  lite3ConnectionB
278e0 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64  locked(x,y).  #d
278f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
27900 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28  nectionUnlocked(
27910 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  x).  #define sql
27920 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c  ite3ConnectionCl
27930 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a  osed(x).#endif..
27940 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
27950 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BUG.  void sqlit
27960 65 33 50 61 72 73 65 72 54 72 61 63 65 28 46 49  e3ParserTrace(FI
27970 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65  LE*, char *);.#e
27980 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74  ndif../*.** If t
27990 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  he SQLITE_ENABLE
279a0 20 49 4f 54 52 41 43 45 20 65 78 69 73 74 73 20   IOTRACE exists 
279b0 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20  then the global 
279c0 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69  variable.** sqli
279d0 74 65 33 49 6f 54 72 61 63 65 20 69 73 20 61 20  te3IoTrace is a 
279e0 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69  pointer to a pri
279f0 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65  ntf-like routine
27a00 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e   used to.** prin
27a10 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65  t I/O tracing me
27a20 73 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64  ssages. .*/.#ifd
27a30 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
27a40 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e  _IOTRACE.# defin
27a50 65 20 49 4f 54 52 41 43 45 28 41 29 20 20 69 66  e IOTRACE(A)  if
27a60 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  ( sqlite3IoTrace
27a70 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61   ){ sqlite3IoTra
27a80 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73  ce A; }.  void s
27a90 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
27aa0 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c  eSql(Vdbe*);.SQL
27ab0 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20  ITE_EXTERN void 
27ac0 28 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  (*sqlite3IoTrace
27ad0 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  )(const char*,..
27ae0 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  .);.#else.# defi
27af0 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20  ne IOTRACE(A).# 
27b00 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64  define sqlite3Vd
27b10 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a  beIOTraceSql(X).
27b20 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
27b30 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65  ese routines are
27b40 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74   available for t
27b50 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67  he mem2.c debugg
27b60 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ing memory alloc
27b70 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54  ator.** only.  T
27b80 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20  hey are used to 
27b90 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66  verify that diff
27ba0 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66  erent "types" of
27bb0 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63   memory.** alloc
27bc0 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65  ations are prope
27bd0 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74  rly tracked by t
27be0 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a  he system..**.**
27bf0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
27c00 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74  SetType() sets t
27c10 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20  he "type" of an 
27c20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e  allocation to on
27c30 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54  e of.** the MEMT
27c40 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66  YPE_* macros def
27c50 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65  ined below.  The
27c60 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20   type must be a 
27c70 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20  bitmask with.** 
27c80 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74  a single bit set
27c90 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  ..**.** sqlite3M
27ca0 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
27cb0 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
27cc0 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73   any of the bits
27cd0 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a   in its second.*
27ce0 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68  * argument match
27cf0 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79   the type set by
27d00 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71   the previous sq
27d10 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
27d20 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74  Type()..** sqlit
27d30 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
27d40 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20  e() is intended 
27d50 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61  for use inside a
27d60 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
27d70 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  ts..**.** sqlite
27d80 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
27d90 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
27da0 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69  f none of the bi
27db0 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64  ts in its second
27dc0 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74  .** argument mat
27dd0 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20  ch the type set 
27de0 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  by the previous 
27df0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
27e00 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20  etType()..**.** 
27e10 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74  Perhaps the most
27e20 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74   important point
27e30 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e   is the differen
27e40 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59  ce between MEMTY
27e50 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d  PE_HEAP.** and M
27e60 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
27e70 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74  .  If an allocat
27e80 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c  ion is MEMTYPE_L
27e90 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d  OOKASIDE, that m
27ea0 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74  eans.** it might
27eb0 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63   have been alloc
27ec0 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64  ated by lookasid
27ed0 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c  e, except the al
27ee0 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20  location was.** 
27ef0 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f  too large or loo
27f00 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61  kaside was alrea
27f10 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20  dy full.  It is 
27f20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72  important to ver
27f30 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f  ify.** that allo
27f40 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67  cations that mig
27f50 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74  ht have been sat
27f60 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73  isfied by lookas
27f70 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70  ide are not.** p
27f80 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f  assed back to no
27f90 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65  n-lookaside free
27fa0 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73  () routines.  As
27fb0 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68  serts such as th
27fc0 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f  e.** example abo
27fd0 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e  ve are placed on
27fe0 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69   the non-lookasi
27ff0 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e  de free() routin
28000 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20  es to verify.** 
28010 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e  this constraint.
28020 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74   .**.** All of t
28030 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72  his is no-op for
28040 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75   a production bu
28050 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f  ild.  It only co
28060 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79  mes into.** play
28070 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45   when the SQLITE
28080 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c  _MEMDEBUG compil
28090 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  e-time option is
280a0 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66   used..*/.#ifdef
280b0 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
280c0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  .  void sqlite3M
280d0 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76  emdebugSetType(v
280e0 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
280f0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
28100 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  asType(void*,u8)
28110 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
28120 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f  emdebugNoType(vo
28130 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23  id*,u8);.#else.#
28140 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
28150 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58  emdebugSetType(X
28160 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f  ,Y)  /* no-op */
28170 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
28180 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
28190 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e  (X,Y)  1.# defin
281a0 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
281b0 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31  gNoType(X,Y)   1
281c0 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20  .#endif.#define 
281d0 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20  MEMTYPE_HEAP    
281e0 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65     0x01  /* Gene
281f0 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74  ral heap allocat
28200 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
28210 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
28220 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70  E  0x02  /* Heap
28230 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65   that might have
28240 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20   been lookaside 
28250 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
28260 50 45 5f 53 43 52 41 54 43 48 20 20 20 20 30 78  PE_SCRATCH    0x
28270 30 34 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61  04  /* Scratch a
28280 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64  llocations */.#d
28290 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43  efine MEMTYPE_PC
282a0 41 43 48 45 20 20 20 20 20 30 78 30 38 20 20 2f  ACHE     0x08  /
282b0 2a 20 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c  * Page cache all
282c0 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a  ocations */../*.
282d0 2a 2a 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74  ** Threading int
282e0 65 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51  erface.*/.#if SQ
282f0 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
28300 54 48 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71  THREADS>0.int sq
28310 6c 69 74 65 33 54 68 72 65 61 64 43 72 65 61 74  lite3ThreadCreat
28320 65 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a  e(SQLiteThread**
28330 2c 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29  ,void*(*)(void*)
28340 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c  ,void*);.int sql
28350 69 74 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53  ite3ThreadJoin(S
28360 51 4c 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f  QLiteThread*, vo
28370 69 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  id**);.#endif..#
28380 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 74 69 6d  include <sys/tim
28390 65 2e 68 3e 0a 23 64 65 66 69 6e 65 20 53 54 41  e.h>.#define STA
283a0 52 54 5f 44 45 42 55 47 5f 54 49 4d 45 52 20 5c  RT_DEBUG_TIMER \
283b0 0a 20 20 73 71 6c 69 74 65 33 5f 75 69 6e 74 36  .  sqlite3_uint6
283c0 34 20 69 44 65 62 75 67 54 69 6d 65 72 53 74 61  4 iDebugTimerSta
283d0 72 74 2c 20 69 44 65 62 75 67 54 69 6d 65 72 3b  rt, iDebugTimer;
283e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
283f0 20 20 20 20 20 5c 0a 20 20 73 74 72 75 63 74 20       \.  struct 
28400 74 69 6d 65 76 61 6c 20 64 65 62 75 67 5f 74 69  timeval debug_ti
28410 6d 65 72 5f 76 61 72 3b 20 20 20 20 20 20 20 20  mer_var;        
28420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28430 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 67             \.  g
28440 65 74 74 69 6d 65 6f 66 64 61 79 28 26 64 65 62  ettimeofday(&deb
28450 75 67 5f 74 69 6d 65 72 5f 76 61 72 2c 20 30 29  ug_timer_var, 0)
28460 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
28470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28480 20 5c 0a 20 20 69 44 65 62 75 67 54 69 6d 65 72   \.  iDebugTimer
28490 53 74 61 72 74 20 3d 20 31 30 30 30 30 30 30 2a  Start = 1000000*
284a0 28 73 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 29  (sqlite3_uint64)
284b0 64 65 62 75 67 5f 74 69 6d 65 72 5f 76 61 72 2e  debug_timer_var.
284c0 74 76 5f 73 65 63 20 5c 0a 20 20 20 20 20 20 20  tv_sec \.       
284d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
284e0 64 65 62 75 67 5f 74 69 6d 65 72 5f 76 61 72 2e  debug_timer_var.
284f0 74 76 5f 75 73 65 63 3b 0a 0a 23 64 65 66 69 6e  tv_usec;..#defin
28500 65 20 45 4e 44 5f 44 45 42 55 47 5f 54 49 4d 45  e END_DEBUG_TIME
28510 52 28 6e 44 65 62 75 67 55 73 65 63 29 20 5c 0a  R(nDebugUsec) \.
28520 20 20 67 65 74 74 69 6d 65 6f 66 64 61 79 28 26    gettimeofday(&
28530 64 65 62 75 67 5f 74 69 6d 65 72 5f 76 61 72 2c  debug_timer_var,
28540 20 30 29 3b 20 20 20 20 20 20 20 20 20 20 20 20   0);            
28550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28560 20 20 20 20 5c 0a 20 20 69 44 65 62 75 67 54 69      \.  iDebugTi
28570 6d 65 72 20 3d 20 31 30 30 30 30 30 30 2a 28 73  mer = 1000000*(s
28580 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 29 64 65  qlite3_uint64)de
28590 62 75 67 5f 74 69 6d 65 72 5f 76 61 72 2e 74 76  bug_timer_var.tv
285a0 5f 73 65 63 20 20 20 20 20 20 5c 0a 20 20 20 20  _sec      \.    
285b0 20 20 20 20 20 20 20 20 20 20 20 20 2b 64 65 62              +deb
285c0 75 67 5f 74 69 6d 65 72 5f 76 61 72 2e 74 76 5f  ug_timer_var.tv_
285d0 75 73 65 63 2d 69 44 65 62 75 67 54 69 6d 65 72  usec-iDebugTimer
285e0 53 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20  Start;          
285f0 5c 0a 20 20 69 66 28 20 69 44 65 62 75 67 54 69  \.  if( iDebugTi
28600 6d 65 72 3e 3d 6e 44 65 62 75 67 55 73 65 63 20  mer>=nDebugUsec 
28610 29 0a 0a 23 69 66 6e 64 65 66 20 44 45 42 55 47  )..#ifndef DEBUG
28620 5f 54 49 4d 45 52 5f 42 49 47 5f 54 49 4d 45 4f  _TIMER_BIG_TIMEO
28630 55 54 0a 23 20 64 65 66 69 6e 65 20 44 45 42 55  UT.# define DEBU
28640 47 5f 54 49 4d 45 52 5f 42 49 47 5f 54 49 4d 45  G_TIMER_BIG_TIME
28650 4f 55 54 20 20 31 30 30 30 30 0a 23 65 6e 64 69  OUT  10000.#endi
28660 66 0a 23 69 66 6e 64 65 66 20 44 45 42 55 47 5f  f.#ifndef DEBUG_
28670 54 49 4d 45 52 5f 53 4d 41 4c 4c 5f 54 49 4d 45  TIMER_SMALL_TIME
28680 4f 55 54 0a 23 20 64 65 66 69 6e 65 20 44 45 42  OUT.# define DEB
28690 55 47 5f 54 49 4d 45 52 5f 53 4d 41 4c 4c 5f 54  UG_TIMER_SMALL_T
286a0 49 4d 45 4f 55 54 20 31 30 30 30 0a 23 65 6e 64  IMEOUT 1000.#end
286b0 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53  if..#endif /* _S
286c0 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a     QLITEINT_H_ */.