/ Hex Artifact Content
Login

Artifact b156fa7ce542e3d54951b92d77052c3aa9d80b03:


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 31  AULT_MEMSTATUS 1
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 2f  ude "mutex.h"../
7460: 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 61 20 64  * When using a d
7470: 65 66 61 75 6c 74 20 77 61 6c 20 73 61 66 65 74  efault wal safet
7480: 79 20 6c 65 76 65 6c 2c 20 74 68 65 20 73 61 66  y level, the saf
7490: 65 74 79 20 6c 65 76 65 6c 20 73 68 6f 75 6c 64  ety level should
74a0: 20 6f 6e 6c 79 20 0a 2a 2a 20 63 68 61 6e 67 65   only .** change
74b0: 20 77 69 74 68 20 74 68 65 20 6a 6f 75 72 6e 61   with the journa
74c0: 6c 20 6d 6f 64 65 20 69 66 20 74 68 65 20 75 73  l mode if the us
74d0: 65 72 20 68 61 73 6e 27 74 20 6d 61 6e 75 61 6c  er hasn't manual
74e0: 6c 79 20 73 70 65 63 69 66 69 65 64 20 0a 2a 2a  ly specified .**
74f0: 20 70 72 61 67 6d 61 20 73 79 6e 63 68 72 6f 6e   pragma synchron
7500: 6f 75 73 2c 20 69 66 20 74 68 65 79 20 68 61 76  ous, if they hav
7510: 65 20 74 68 65 20 64 65 66 61 75 6c 74 73 20 73  e the defaults s
7520: 68 6f 75 6c 64 6e 27 74 20 62 65 20 61 70 70 6c  houldn't be appl
7530: 69 65 64 2e 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ied..** The SQLI
7540: 54 45 5f 53 41 46 45 54 59 4c 45 56 45 4c 5f 46  TE_SAFETYLEVEL_F
7550: 49 58 45 44 20 76 61 6c 75 65 20 69 73 20 4f 52  IXED value is OR
7560: 65 64 20 69 6e 74 6f 20 74 68 65 20 44 62 2d 3e  ed into the Db->
7570: 73 61 66 65 74 79 5f 6c 65 76 65 6c 0a 2a 2a 20  safety_level.** 
7580: 66 69 65 6c 64 20 77 68 65 6e 20 74 68 65 20 75  field when the u
7590: 73 65 72 20 68 61 73 20 73 70 65 63 69 66 69 65  ser has specifie
75a0: 64 20 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20  d a synchronous 
75b0: 73 65 74 74 69 6e 67 20 76 69 61 20 70 72 61 67  setting via prag
75c0: 6d 61 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ma..*/.#define S
75d0: 51 4c 49 54 45 5f 53 41 46 45 54 59 4c 45 56 45  QLITE_SAFETYLEVE
75e0: 4c 5f 46 49 58 45 44 20 30 78 31 30 0a 23 64 65  L_FIXED 0x10.#de
75f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 41 46 45  fine SQLITE_SAFE
7600: 54 59 4c 45 56 45 4c 5f 56 41 4c 55 45 5f 4d 41  TYLEVEL_VALUE_MA
7610: 53 4b 20 30 78 30 33 0a 23 64 65 66 69 6e 65 20  SK 0x03.#define 
7620: 53 51 4c 49 54 45 5f 44 62 53 61 66 65 74 79 4c  SQLITE_DbSafetyL
7630: 65 76 65 6c 56 61 6c 75 65 28 6c 65 76 65 6c 29  evelValue(level)
7640: 20 28 6c 65 76 65 6c 26 53 51 4c 49 54 45 5f 53   (level&SQLITE_S
7650: 41 46 45 54 59 4c 45 56 45 4c 5f 56 41 4c 55 45  AFETYLEVEL_VALUE
7660: 5f 4d 41 53 4b 29 0a 23 64 65 66 69 6e 65 20 53  _MASK).#define S
7670: 51 4c 49 54 45 5f 44 62 53 61 66 65 74 79 4c 65  QLITE_DbSafetyLe
7680: 76 65 6c 49 73 46 69 78 65 64 28 6c 65 76 65 6c  velIsFixed(level
7690: 29 20 28 6c 65 76 65 6c 26 53 51 4c 49 54 45 5f  ) (level&SQLITE_
76a0: 53 41 46 45 54 59 4c 45 56 45 4c 5f 46 49 58 45  SAFETYLEVEL_FIXE
76b0: 44 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  D)../*.** Each d
76c0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20  atabase file to 
76d0: 62 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74  be accessed by t
76e0: 68 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20  he system is an 
76f0: 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
7700: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
7710: 75 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61  ucture.  There a
7720: 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20  re normally two 
7730: 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75  of these structu
7740: 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71  res.** in the sq
7750: 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79  lite.aDb[] array
7760: 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65  .  aDb[0] is the
7770: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
7780: 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31  ile and.** aDb[1
7790: 5d 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  ] is the databas
77a0: 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68  e file used to h
77b0: 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61  old temporary ta
77c0: 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61  bles.  Additiona
77d0: 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d  l.** databases m
77e0: 61 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a  ay be attached..
77f0: 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20  */.struct Db {. 
7800: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
7810: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
7820: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
7830: 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20  /.  Btree *pBt; 
7840: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
7850: 42 2a 54 72 65 65 20 73 74 72 75 63 74 75 72 65  B*Tree structure
7860: 20 66 6f 72 20 74 68 69 73 20 64 61 74 61 62 61   for this databa
7870: 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20  se file */.  u8 
7880: 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20  safety_level;   
7890: 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73    /* How aggress
78a0: 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64  ive at syncing d
78b0: 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20  ata to disk */. 
78c0: 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
78d0: 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72  ;     /* Pointer
78e0: 20 74 6f 20 64 61 74 61 62 61 73 65 20 73 63 68   to database sch
78f0: 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68  ema (possibly sh
7900: 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ared) */.};../*.
7910: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
7920: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
7930: 73 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73  structure stores
7940: 20 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65   a database sche
7950: 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53  ma..**.** Most S
7960: 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72  chema objects ar
7970: 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  e associated wit
7980: 68 20 61 20 42 74 72 65 65 2e 20 20 54 68 65 20  h a Btree.  The 
7990: 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20  exception is.** 
79a0: 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74  the Schema for t
79b0: 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 65 73  he TEMP databaes
79c0: 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d   (sqlite3.aDb[1]
79d0: 29 20 77 68 69 63 68 20 69 73 20 66 72 65 65 2d  ) which is free-
79e0: 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20  standing..** In 
79f0: 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64  shared cache mod
7a00: 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65  e, a single Sche
7a10: 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65  ma object can be
7a20: 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69   shared by multi
7a30: 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68  ple.** Btrees th
7a40: 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  at refer to the 
7a50: 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20  same underlying 
7a60: 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e  BtShared object.
7a70: 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f  .** .** Schema o
7a80: 62 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d  bjects are autom
7a90: 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63  atically dealloc
7aa0: 61 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61  ated when the la
7ab0: 73 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a  st Btree that.**
7ac0: 20 72 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d   references them
7ad0: 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20   is destroyed.  
7ae0: 20 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61   The TEMP Schema
7af0: 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65   is manually fre
7b00: 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33  ed by.** sqlite3
7b10: 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41  _close()..*.** A
7b20: 20 74 68 72 65 61 64 20 6d 75 73 74 20 62 65 20   thread must be 
7b30: 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20  holding a mutex 
7b40: 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  on the correspon
7b50: 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72  ding Btree in or
7b60: 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73  der.** to access
7b70: 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e   Schema content.
7b80: 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74    This implies t
7b90: 68 61 74 20 74 68 65 20 74 68 72 65 61 64 20 6d  hat the thread m
7ba0: 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68  ust also be.** h
7bb0: 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f  olding a mutex o
7bc0: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f  n the sqlite3 co
7bd0: 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  nnection pointer
7be0: 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42   that owns the B
7bf0: 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54  tree..** For a T
7c00: 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79  EMP Schema, only
7c10: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
7c20: 6d 75 74 65 78 20 69 73 20 72 65 71 75 69 72 65  mutex is require
7c30: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68  d..*/.struct Sch
7c40: 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65  ema {.  int sche
7c50: 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20  ma_cookie;   /* 
7c60: 44 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  Database schema 
7c70: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66  version number f
7c80: 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a  or this file */.
7c90: 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f    int iGeneratio
7ca0: 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61  n;     /* Genera
7cb0: 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49  tion counter.  I
7cc0: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
7cd0: 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20  each change */. 
7ce0: 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20   Hash tblHash;  
7cf0: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62        /* All tab
7d00: 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  les indexed by n
7d10: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64  ame */.  Hash id
7d20: 78 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a  xHash;        /*
7d30: 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64   All (named) ind
7d40: 69 63 65 73 20 69 6e 64 65 78 65 64 20 62 79 20  ices indexed by 
7d50: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74  name */.  Hash t
7d60: 72 69 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f  rigHash;       /
7d70: 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69  * All triggers i
7d80: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
7d90: 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61 73  /.  Hash fkeyHas
7da0: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
7db0: 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20  foreign keys by 
7dc0: 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65  referenced table
7dd0: 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65   name */.  Table
7de0: 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20 20   *pSeqTab;      
7df0: 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65  /* The sqlite_se
7e00: 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65  quence table use
7e10: 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45  d by AUTOINCREME
7e20: 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f  NT */.  u8 file_
7e30: 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20  format;      /* 
7e40: 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65  Schema format ve
7e50: 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66  rsion for this f
7e60: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ile */.  u8 enc;
7e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7e80: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75   Text encoding u
7e90: 73 65 64 20 62 79 20 74 68 69 73 20 64 61 74 61  sed by this data
7ea0: 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63  base */.  u16 sc
7eb0: 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f  hemaFlags;     /
7ec0: 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74  * Flags associat
7ed0: 65 64 20 77 69 74 68 20 74 68 69 73 20 73 63 68  ed with this sch
7ee0: 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63  ema */.  int cac
7ef0: 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a  he_size;      /*
7f00: 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   Number of pages
7f10: 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63   to use in the c
7f20: 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ache */.};../*.*
7f30: 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63  * These macros c
7f40: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65  an be used to te
7f50: 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61  st, set, or clea
7f60: 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a  r bits in the .*
7f70: 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  * Db.pSchema->fl
7f80: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
7f90: 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65  efine DbHasPrope
7fa0: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
7fb0: 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63  ((D)->aDb[I].pSc
7fc0: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
7fd0: 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65  s&(P))==(P)).#de
7fe0: 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f  fine DbHasAnyPro
7ff0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28  perty(D,I,P)  ((
8000: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
8010: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
8020: 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
8030: 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28  e DbSetProperty(
8040: 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e  D,I,P)     (D)->
8050: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
8060: 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29  schemaFlags|=(P)
8070: 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72  .#define DbClear
8080: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
8090: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53    (D)->aDb[I].pS
80a0: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
80b0: 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20  gs&=~(P)../*.** 
80c0: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
80d0: 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d  or the DB.pSchem
80e0: 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  a->flags field..
80f0: 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68  **.** The DB_Sch
8100: 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69  emaLoaded flag i
8110: 73 20 73 65 74 20 61 66 74 65 72 20 74 68 65 20  s set after the 
8120: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
8130: 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64  has been.** read
8140: 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68   into internal h
8150: 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ash tables..**.*
8160: 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77  * DB_UnresetView
8170: 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65  s means that one
8180: 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68   or more views h
8190: 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ave column names
81a0: 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65   that.** have be
81b0: 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20  en filled out.  
81c0: 49 66 20 74 68 65 20 73 63 68 65 6d 61 20 63 68  If the schema ch
81d0: 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c  anges, these col
81e0: 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a  umn names might.
81f0: 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73  ** changes and s
8200: 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20  o the view will 
8210: 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73 65 74  need to be reset
8220: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  ..*/.#define DB_
8230: 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20  SchemaLoaded    
8240: 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73  0x0001  /* The s
8250: 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c  chema has been l
8260: 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  oaded */.#define
8270: 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73   DB_UnresetViews
8280: 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53      0x0002  /* S
8290: 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65 20 64  ome views have d
82a0: 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61  efined column na
82b0: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  mes */.#define D
82c0: 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20 20  B_Empty         
82d0: 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65    0x0004  /* The
82e0: 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28   file is empty (
82f0: 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73 29 20  length 0 bytes) 
8300: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75  */../*.** The nu
8310: 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e  mber of differen
8320: 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67  t kinds of thing
8330: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69  s that can be li
8340: 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74  mited.** using t
8350: 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  he sqlite3_limit
8360: 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f  () interface..*/
8370: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
8380: 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f  N_LIMIT (SQLITE_
8390: 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52  LIMIT_WORKER_THR
83a0: 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c  EADS+1)../*.** L
83b0: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
83c0: 69 73 20 61 20 73 65 74 20 6f 66 20 66 69 78 65  is a set of fixe
83d0: 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20 74  d-size buffers t
83e0: 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a  hat can be used.
83f0: 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d  ** to satisfy sm
8400: 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65  all transient me
8410: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
8420: 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a  requests for obj
8430: 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74  ects.** associat
8440: 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ed with a partic
8450: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
8460: 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75  nnection.  The u
8470: 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69  se of.** lookasi
8480: 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64  de malloc provid
8490: 65 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74  es a significant
84a0: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68   performance enh
84b0: 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70  ancement.** (app
84c0: 72 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f 69  rox 10%) by avoi
84d0: 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61  ding numerous ma
84e0: 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73  lloc/free reques
84f0: 74 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ts while parsing
8500: 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  .** SQL statemen
8510: 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f  ts..**.** The Lo
8520: 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74 75 72  okaside structur
8530: 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72  e holds configur
8540: 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  ation informatio
8550: 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c  n about the.** l
8560: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
8570: 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68  subsystem.  Each
8580: 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72   available memor
8590: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a  y allocation in.
85a0: 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65  ** the lookaside
85b0: 20 73 75 62 73 79 73 74 65 6d 20 69 73 20 73 74   subsystem is st
85c0: 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64  ored on a linked
85d0: 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69   list of Lookasi
85e0: 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74  deSlot.** object
85f0: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69  s..**.** Lookasi
8600: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
8610: 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20  re only allowed 
8620: 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74  for objects that
8630: 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a   are associated.
8640: 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ** with a partic
8650: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
8660: 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65  nnection.  Hence
8670: 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  , schema informa
8680: 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62  tion cannot.** b
8690: 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b  e stored in look
86a0: 61 73 69 64 65 20 62 65 63 61 75 73 65 20 69 6e  aside because in
86b0: 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f   shared cache mo
86c0: 64 65 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e  de the schema in
86d0: 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20  formation.** is 
86e0: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
86f0: 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  le database conn
8700: 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66  ections.  Theref
8710: 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69  ore, while parsi
8720: 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66  ng.** schema inf
8730: 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f  ormation, the Lo
8740: 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64  okaside.bEnabled
8750: 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64   flag is cleared
8760: 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b   so that.** look
8770: 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  aside allocation
8780: 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74  s are not used t
8790: 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  o construct the 
87a0: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a  schema objects..
87b0: 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  */.struct Lookas
87c0: 69 64 65 20 7b 0a 20 20 75 31 36 20 73 7a 3b 20  ide {.  u16 sz; 
87d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
87e0: 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
87f0: 62 75 66 66 65 72 20 69 6e 20 62 79 74 65 73 20  buffer in bytes 
8800: 2a 2f 0a 20 20 75 38 20 62 45 6e 61 62 6c 65 64  */.  u8 bEnabled
8810: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
8820: 46 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65  False to disable
8830: 20 6e 65 77 20 6c 6f 6f 6b 61 73 69 64 65 20 61   new lookaside a
8840: 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  llocations */.  
8850: 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20  u8 bMalloced;   
8860: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
8870: 69 66 20 70 53 74 61 72 74 20 6f 62 74 61 69 6e  if pStart obtain
8880: 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ed from sqlite3_
8890: 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 69 6e  malloc() */.  in
88a0: 74 20 6e 4f 75 74 3b 20 20 20 20 20 20 20 20 20  t nOut;         
88b0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
88c0: 6f 66 20 62 75 66 66 65 72 73 20 63 75 72 72 65  of buffers curre
88d0: 6e 74 6c 79 20 63 68 65 63 6b 65 64 20 6f 75 74  ntly checked out
88e0: 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f 75 74 3b   */.  int mxOut;
88f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8900: 20 48 69 67 68 77 61 74 65 72 20 6d 61 72 6b 20   Highwater mark 
8910: 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e  for nOut */.  in
8920: 74 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20  t anStat[3];    
8930: 20 20 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73        /* 0: hits
8940: 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65  .  1: size misse
8950: 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73  s.  2: full miss
8960: 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64  es */.  Lookasid
8970: 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20  eSlot *pFree;   
8980: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c  /* List of avail
8990: 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a  able buffers */.
89a0: 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20    void *pStart; 
89b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
89c0: 73 74 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c  st byte of avail
89d0: 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63  able memory spac
89e0: 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e  e */.  void *pEn
89f0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  d;             /
8a00: 2a 20 46 69 72 73 74 20 62 79 74 65 20 70 61 73  * First byte pas
8a10: 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62  t end of availab
8a20: 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73  le space */.};.s
8a30: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53  truct LookasideS
8a40: 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64  lot {.  Lookasid
8a50: 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20  eSlot *pNext;   
8a60: 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20   /* Next buffer 
8a70: 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66  in the list of f
8a80: 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d  ree buffers */.}
8a90: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20  ;../*.** A hash 
8aa0: 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69  table for functi
8ab0: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 0a  on definitions..
8ac0: 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20  **.** Hash each 
8ad0: 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72  FuncDef structur
8ae0: 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68  e into one of th
8af0: 65 20 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b  e FuncDefHash.a[
8b00: 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c  ] slots..** Coll
8b10: 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68  isions are on th
8b20: 65 20 46 75 6e 63 44 65 66 2e 70 48 61 73 68 20  e FuncDef.pHash 
8b30: 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  chain..*/.struct
8b40: 20 46 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20   FuncDefHash {. 
8b50: 20 46 75 6e 63 44 65 66 20 2a 61 5b 32 33 5d 3b   FuncDef *a[23];
8b60: 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74         /* Hash t
8b70: 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f  able for functio
8b80: 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66  ns */.};..#ifdef
8b90: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
8ba0: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a  HENTICATION./*.*
8bb0: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65  * Information he
8bc0: 6c 64 20 69 6e 20 74 68 65 20 22 73 71 6c 69 74  ld in the "sqlit
8bd0: 65 33 22 20 64 61 74 61 62 61 73 65 20 63 6f 6e  e3" database con
8be0: 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61  nection object a
8bf0: 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61  nd used.** to ma
8c00: 6e 61 67 65 20 75 73 65 72 20 61 75 74 68 65 6e  nage user authen
8c10: 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70  tication..*/.typ
8c20: 65 64 65 66 20 73 74 72 75 63 74 20 73 71 6c 69  edef struct sqli
8c30: 74 65 33 5f 75 73 65 72 61 75 74 68 20 73 71 6c  te3_userauth sql
8c40: 69 74 65 33 5f 75 73 65 72 61 75 74 68 3b 0a 73  ite3_userauth;.s
8c50: 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73  truct sqlite3_us
8c60: 65 72 61 75 74 68 20 7b 0a 20 20 75 38 20 61 75  erauth {.  u8 au
8c70: 74 68 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20  thLevel;        
8c80: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
8c90: 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61 74 69  ent authenticati
8ca0: 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e  on level */.  in
8cb0: 74 20 6e 41 75 74 68 50 57 3b 20 20 20 20 20 20  t nAuthPW;      
8cc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
8cd0: 69 7a 65 20 6f 66 20 74 68 65 20 7a 41 75 74 68  ize of the zAuth
8ce0: 50 57 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  PW in bytes */. 
8cf0: 20 63 68 61 72 20 2a 7a 41 75 74 68 50 57 3b 20   char *zAuthPW; 
8d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8d10: 2a 20 50 61 73 73 77 6f 72 64 20 75 73 65 64 20  * Password used 
8d20: 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20  to authenticate 
8d30: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68  */.  char *zAuth
8d40: 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  User;           
8d50: 20 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20     /* User name 
8d60: 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69  used to authenti
8d70: 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41  cate */.};../* A
8d80: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
8d90: 72 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  r sqlite3_userau
8da0: 74 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a  th.authLevel */.
8db0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 6e  #define UAUTH_Un
8dc0: 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20 20 20 20  known     0     
8dd0: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f  /* Authenticatio
8de0: 6e 20 6e 6f 74 20 79 65 74 20 63 68 65 63 6b 65  n not yet checke
8df0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  d */.#define UAU
8e00: 54 48 5f 46 61 69 6c 20 20 20 20 20 20 20 20 31  TH_Fail        1
8e10: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74       /* User aut
8e20: 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61 69 6c  hentication fail
8e30: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  ed */.#define UA
8e40: 55 54 48 5f 55 73 65 72 20 20 20 20 20 20 20 20  UTH_User        
8e50: 32 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  2     /* Authent
8e60: 69 63 61 74 65 64 20 61 73 20 61 20 6e 6f 72 6d  icated as a norm
8e70: 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65 66 69  al user */.#defi
8e80: 6e 65 20 55 41 55 54 48 5f 41 64 6d 69 6e 20 20  ne UAUTH_Admin  
8e90: 20 20 20 20 20 33 20 20 20 20 20 2f 2a 20 41 75       3     /* Au
8ea0: 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61  thenticated as a
8eb0: 6e 20 61 64 6d 69 6e 69 73 74 72 61 74 6f 72 20  n administrator 
8ec0: 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73  */../* Functions
8ed0: 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20 75 73   used only by us
8ee0: 65 72 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  er authorization
8ef0: 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71   logic */.int sq
8f00: 6c 69 74 65 33 55 73 65 72 41 75 74 68 54 61 62  lite3UserAuthTab
8f10: 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  le(const char*);
8f20: 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72  .int sqlite3User
8f30: 41 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73  AuthCheckLogin(s
8f40: 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
8f50: 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73  ar*,u8*);.void s
8f60: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 49 6e  qlite3UserAuthIn
8f70: 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  it(sqlite3*);.vo
8f80: 69 64 20 73 71 6c 69 74 65 33 43 72 79 70 74 46  id sqlite3CryptF
8f90: 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  unc(sqlite3_cont
8fa0: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
8fb0: 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64  _value**);..#end
8fc0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45  if /* SQLITE_USE
8fd0: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
8fe0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64   */../*.** typed
8ff0: 65 66 20 66 6f 72 20 74 68 65 20 61 75 74 68 6f  ef for the autho
9000: 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63  rization callbac
9010: 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  k function..*/.#
9020: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
9030: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
9040: 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28  .  typedef int (
9050: 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28  *sqlite3_xauth)(
9060: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
9070: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
9080: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20  *,const char*,. 
9090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
90b0: 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
90c0: 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20   char*);.#else. 
90d0: 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73   typedef int (*s
90e0: 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f  qlite3_xauth)(vo
90f0: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
9100: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
9110: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20  const char*,.   
9120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9130: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
9140: 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  t char*);.#endif
9150: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  .../*.** Each da
9160: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
9170: 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  n is an instance
9180: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
9190: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  g structure..*/.
91a0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b  struct sqlite3 {
91b0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  .  sqlite3_vfs *
91c0: 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20  pVfs;           
91d0: 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65   /* OS Interface
91e0: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62   */.  struct Vdb
91f0: 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20  e *pVdbe;       
9200: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
9210: 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61  ctive virtual ma
9220: 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c  chines */.  Coll
9230: 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20  Seq *pDfltColl; 
9240: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
9250: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
9260: 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e  ng sequence (BIN
9270: 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65  ARY) */.  sqlite
9280: 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20  3_mutex *mutex; 
9290: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65          /* Conne
92a0: 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20  ction mutex */. 
92b0: 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20   Db *aDb;       
92c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
92d0: 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a  * All backends *
92e0: 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20  /.  int nDb;    
92f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9300: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
9310: 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c  ackends currentl
9320: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e  y in use */.  in
9330: 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  t flags;        
9340: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
9350: 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61  iscellaneous fla
9360: 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  gs. See below */
9370: 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64  .  i64 lastRowid
9380: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9390: 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73   /* ROWID of mos
93a0: 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20  t recent insert 
93b0: 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20  (see above) */. 
93c0: 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20   i64 szMmap;    
93d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
93e0: 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73  * Default mmap_s
93f0: 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20  ize setting */. 
9400: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70   unsigned int op
9410: 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f  enFlags;       /
9420: 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74  * Flags passed t
9430: 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f  o sqlite3_vfs.xO
9440: 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65  pen() */.  int e
9450: 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20  rrCode;         
9460: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
9470: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f   recent error co
9480: 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f  de (SQLITE_*) */
9490: 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20  .  int errMask; 
94a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94b0: 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64   /* & result cod
94c0: 65 73 20 77 69 74 68 20 74 68 69 73 20 62 65 66  es with this bef
94d0: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f  ore returning */
94e0: 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67  .  u16 dbOptFlag
94f0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
9500: 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61   /* Flags to ena
9510: 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69  ble/disable opti
9520: 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75  mizations */.  u
9530: 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20  8 autoCommit;   
9540: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9550: 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  The auto-commit 
9560: 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65  flag. */.  u8 te
9570: 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20  mp_store;       
9580: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66           /* 1: f
9590: 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a  ile 2: memory 0:
95a0: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38   default */.  u8
95b0: 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20   mallocFailed;  
95c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
95d0: 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20 73  rue if we have s
95e0: 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69  een a malloc fai
95f0: 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c  lure */.  u8 dfl
9600: 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20  tLockMode;      
9610: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
9620: 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20  lt locking-mode 
9630: 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62 73  for attached dbs
9640: 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61   */.  signed cha
9650: 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20  r nextAutovac;  
9660: 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73      /* Autovac s
9670: 65 74 74 69 6e 67 20 61 66 74 65 72 20 56 41 43  etting after VAC
9680: 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20  UUM if >=0 */.  
9690: 75 38 20 73 75 70 70 72 65 73 73 45 72 72 3b 20  u8 suppressErr; 
96a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
96b0: 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72   Do not issue er
96c0: 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66 20  ror messages if 
96d0: 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61  true */.  u8 vta
96e0: 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20  bOnConflict;    
96f0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
9700: 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73   to return for s
9710: 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69  3_vtab_on_confli
9720: 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54  ct() */.  u8 isT
9730: 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
9740: 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  int;    /* True 
9750: 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74  if the outermost
9760: 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20   savepoint is a 
9770: 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74  TS */.  int next
9780: 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20  Pagesize;       
9790: 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a        /* Pagesiz
97a0: 65 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69  e after VACUUM i
97b0: 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61  f >0 */.  u32 ma
97c0: 67 69 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  gic;            
97d0: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63          /* Magic
97e0: 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65   number for dete
97f0: 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73  ct library misus
9800: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e  e */.  int nChan
9810: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
9820: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65       /* Value re
9830: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
9840: 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  3_changes() */. 
9850: 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67   int nTotalChang
9860: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
9870: 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64  * Value returned
9880: 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61   by sqlite3_tota
9890: 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  l_changes() */. 
98a0: 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49   int aLimit[SQLI
98b0: 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f  TE_N_LIMIT];   /
98c0: 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e  * Limits */.  in
98d0: 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70  t nMaxSorterMmap
98e0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
98f0: 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72  aximum size of r
9900: 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79  egions mapped by
9910: 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72   sorter */.  str
9920: 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49  uct sqlite3InitI
9930: 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e  nfo {      /* In
9940: 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64  formation used d
9950: 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61  uring initializa
9960: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  tion */.    int 
9970: 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20  newTnum;        
9980: 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70          /* Rootp
9990: 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69  age of table bei
99a0: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
99b0: 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20 20  /.    u8 iDb;   
99c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99d0: 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69    /* Which db fi
99e0: 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74  le is being init
99f0: 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75  ialized */.    u
9a00: 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20 20  8 busy;         
9a10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52             /* TR
9a20: 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20  UE if currently 
9a30: 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a  initializing */.
9a40: 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69      u8 orphanTri
9a50: 67 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  gger;           
9a60: 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e  /* Last statemen
9a70: 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45  t is orphaned TE
9a80: 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20  MP trigger */.  
9a90: 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56  } init;.  int nV
9aa0: 64 62 65 41 63 74 69 76 65 3b 20 20 20 20 20 20  dbeActive;      
9ab0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
9ac0: 72 20 6f 66 20 56 44 42 45 73 20 63 75 72 72 65  r of VDBEs curre
9ad0: 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a  ntly running */.
9ae0: 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b    int nVdbeRead;
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b00: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
9b10: 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72  ive VDBEs that r
9b20: 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a  ead or write */.
9b30: 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65    int nVdbeWrite
9b40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9b50: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
9b60: 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72  ive VDBEs that r
9b70: 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f  ead and write */
9b80: 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63  .  int nVdbeExec
9b90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9ba0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
9bb0: 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64  sted calls to Vd
9bc0: 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e  beExec() */.  in
9bd0: 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20  t nExtension;   
9be0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
9bf0: 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20  umber of loaded 
9c00: 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20  extensions */.  
9c10: 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f  void **aExtensio
9c20: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
9c30: 20 41 72 72 61 79 20 6f 66 20 73 68 61 72 65 64   Array of shared
9c40: 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73   library handles
9c50: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72   */.  void (*xTr
9c60: 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ace)(void*,const
9c70: 20 63 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20   char*);        
9c80: 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f  /* Trace functio
9c90: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72  n */.  void *pTr
9ca0: 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20 20  aceArg;         
9cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9cc0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
9cd0: 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74 69  the trace functi
9ce0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  on */.  void (*x
9cf0: 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63  Profile)(void*,c
9d00: 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b  onst char*,u64);
9d10: 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66    /* Profiling f
9d20: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
9d30: 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20  d *pProfileArg; 
9d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d50: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
9d60: 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75  nt to profile fu
9d70: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
9d80: 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20   *pCommitArg;   
9d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9da0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f   Argument to xCo
9db0: 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a  mmitCallback() *
9dc0: 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f  /   .  int (*xCo
9dd0: 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f  mmitCallback)(vo
9de0: 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f  id*);    /* Invo
9df0: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
9e00: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
9e10: 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20  pRollbackArg;   
9e20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
9e30: 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c  rgument to xRoll
9e40: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a  backCallback() *
9e50: 2f 20 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52  /   .  void (*xR
9e60: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29  ollbackCallback)
9e70: 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f  (void*); /* Invo
9e80: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
9e90: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
9ea0: 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f  pUpdateArg;.  vo
9eb0: 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c  id (*xUpdateCall
9ec0: 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  back)(void*,int,
9ed0: 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e   const char*,con
9ee0: 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f  st char*,sqlite_
9ef0: 69 6e 74 36 34 29 3b 0a 23 69 66 6e 64 65 66 20  int64);.#ifndef 
9f00: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
9f10: 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c    int (*xWalCall
9f20: 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71  back)(void *, sq
9f30: 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
9f40: 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  har *, int);.  v
9f50: 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65  oid *pWalArg;.#e
9f60: 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f  ndif.  void(*xCo
9f70: 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c  llNeeded)(void*,
9f80: 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65  sqlite3*,int eTe
9f90: 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72  xtRep,const char
9fa0: 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c  *);.  void(*xCol
9fb0: 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a  lNeeded16)(void*
9fc0: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54  ,sqlite3*,int eT
9fd0: 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69  extRep,const voi
9fe0: 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f  d*);.  void *pCo
9ff0: 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73  llNeededArg;.  s
a000: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45  qlite3_value *pE
a010: 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  rr;          /* 
a020: 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  Most recent erro
a030: 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75  r message */.  u
a040: 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74  nion {.    volat
a050: 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72  ile int isInterr
a060: 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69  upted; /* True i
a070: 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  f sqlite3_interr
a080: 75 70 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c  upt has been cal
a090: 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c  led */.    doubl
a0a0: 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20  e notUsed1;     
a0b0: 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72         /* Spacer
a0c0: 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f   */.  } u1;.  Lo
a0d0: 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64  okaside lookasid
a0e0: 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  e;          /* L
a0f0: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
a100: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f  configuration */
a110: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
a120: 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49  OMIT_AUTHORIZATI
a130: 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75  ON.  sqlite3_xau
a140: 74 68 20 78 41 75 74 68 3b 20 20 20 20 20 20 20  th xAuth;       
a150: 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74     /* Access aut
a160: 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74  horization funct
a170: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
a180: 41 75 74 68 41 72 67 3b 20 20 20 20 20 20 20 20  AuthArg;        
a190: 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72         /* 1st ar
a1a0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63  gument to the ac
a1b0: 63 65 73 73 20 61 75 74 68 20 66 75 6e 63 74 69  cess auth functi
a1c0: 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  on */.#endif.#if
a1d0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
a1e0: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
a1f0: 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67  CK.  int (*xProg
a200: 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20  ress)(void *);  
a210: 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65     /* The progre
a220: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ss callback */. 
a230: 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73   void *pProgress
a240: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Arg;           /
a250: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
a260: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
a270: 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ack */.  unsigne
a280: 64 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20  d nProgressOps; 
a290: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
a2a0: 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20   of opcodes for 
a2b0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
a2c0: 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  k */.#endif.#ifn
a2d0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
a2e0: 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69  VIRTUALTABLE.  i
a2f0: 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20  nt nVTrans;     
a300: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a310: 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f  Allocated size o
a320: 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48  f aVTrans */.  H
a330: 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20  ash aModule;    
a340: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a350: 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c  populated by sql
a360: 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
a370: 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74  le() */.  VtabCt
a380: 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20  x *pVtabCtx;    
a390: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65          /* Conte
a3a0: 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 76 74  xt for active vt
a3b0: 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74  ab connect/creat
a3c0: 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a  e */.  VTable **
a3d0: 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  aVTrans;        
a3e0: 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20       /* Virtual 
a3f0: 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e  tables with open
a400: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f   transactions */
a410: 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63  .  VTable *pDisc
a420: 6f 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69  onnect;    /* Di
a430: 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69  sconnect these i
a440: 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70  n next sqlite3_p
a450: 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64  repare() */.#end
a460: 69 66 0a 20 20 46 75 6e 63 44 65 66 48 61 73 68  if.  FuncDefHash
a470: 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20   aFunc;         
a480: 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65     /* Hash table
a490: 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66   of connection f
a4a0: 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61  unctions */.  Ha
a4b0: 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20  sh aCollSeq;    
a4c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
a4d0: 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ll collating seq
a4e0: 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79  uences */.  Busy
a4f0: 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64  Handler busyHand
a500: 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73  ler;      /* Bus
a510: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
a520: 44 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b  Db aDbStatic[2];
a530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a540: 20 53 74 61 74 69 63 20 73 70 61 63 65 20 66 6f   Static space fo
a550: 72 20 74 68 65 20 32 20 64 65 66 61 75 6c 74 20  r the 2 default 
a560: 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61  backends */.  Sa
a570: 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f  vepoint *pSavepo
a580: 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  int;        /* L
a590: 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 73 61  ist of active sa
a5a0: 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  vepoints */.  in
a5b0: 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20  t busyTimeout;  
a5c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
a5d0: 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65  usy handler time
a5e0: 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a  out, in msec */.
a5f0: 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74    int nSavepoint
a600: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a610: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e  /* Number of non
a620: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76  -transaction sav
a630: 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  epoints */.  int
a640: 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20   nStatement;    
a650: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
a660: 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73  mber of nested s
a670: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
a680: 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20  tions  */.  i64 
a690: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
a6a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74            /* Net
a6b0: 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
a6c0: 61 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73  aints this trans
a6d0: 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34  action. */.  i64
a6e0: 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e   nDeferredImmCon
a6f0: 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  s;         /* Ne
a700: 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64  t deferred immed
a710: 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  iate constraints
a720: 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74   */.  int *pnByt
a730: 65 73 46 72 65 65 64 3b 20 20 20 20 20 20 20 20  esFreed;        
a740: 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55      /* If not NU
a750: 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68  LL, increment th
a760: 69 73 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a  is in DbFree() *
a770: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
a780: 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
a790: 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f  TIFY.  /* The fo
a7a0: 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65  llowing variable
a7b0: 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63  s are all protec
a7c0: 74 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49  ted by the STATI
a7d0: 43 5f 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d  C_MASTER .  ** m
a7e0: 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c  utex, not by sql
a7f0: 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79  ite3.mutex. They
a800: 20 61 72 65 20 75 73 65 64 20 62 79 20 63 6f 64   are used by cod
a810: 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a  e in notify.c. .
a820: 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58    **.  ** When X
a830: 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69  .pUnlockConnecti
a840: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
a850: 73 20 74 68 61 74 20 58 20 69 73 20 77 61 69 74  s that X is wait
a860: 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a  ing for Y to.  *
a870: 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74  * unlock so that
a880: 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e   it can proceed.
a890: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20  .  **.  ** When 
a8a0: 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65  X.pBlockingConne
a8b0: 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d  ction==Y, that m
a8c0: 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68  eans that someth
a8d0: 69 6e 67 20 74 68 61 74 20 58 20 74 72 69 65 64  ing that X tried
a8e0: 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64  .  ** tried to d
a8f0: 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65  o recently faile
a900: 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  d with an SQLITE
a910: 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75  _LOCKED error du
a920: 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20  e to locks.  ** 
a930: 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a  held by Y..  */.
a940: 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63    sqlite3 *pBloc
a950: 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20  kingConnection; 
a960: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68  /* Connection th
a970: 61 74 20 63 61 75 73 65 64 20 53 51 4c 49 54 45  at caused SQLITE
a980: 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c  _LOCKED */.  sql
a990: 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e  ite3 *pUnlockCon
a9a0: 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20  nection;        
a9b0: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
a9c0: 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e   to watch for un
a9d0: 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  lock */.  void *
a9e0: 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20  pUnlockArg;     
a9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa00: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
aa10: 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a  UnlockNotify */.
aa20: 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b    void (*xUnlock
aa30: 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c  Notify)(void **,
aa40: 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63   int);  /* Unloc
aa50: 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63  k notify callbac
aa60: 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  k */.  sqlite3 *
aa70: 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20  pNextBlocked;   
aa80: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20       /* Next in 
aa90: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63  list of all bloc
aaa0: 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  ked connections 
aab0: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  */.#endif.#ifdef
aac0: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
aad0: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71  HENTICATION.  sq
aae0: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 61  lite3_userauth a
aaf0: 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55  uth;        /* U
ab00: 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69  ser authenticati
ab10: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a  on information *
ab20: 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  /.#endif.};../*.
ab30: 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69  ** A macro to di
ab40: 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64  scover the encod
ab50: 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73  ing of a databas
ab60: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 4e  e..*/.#define EN
ab70: 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62  C(db) ((db)->aDb
ab80: 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63  [0].pSchema->enc
ab90: 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  )../*.** Possibl
aba0: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  e values for the
abb0: 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a   sqlite3.flags..
abc0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
abd0: 45 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20  E_VdbeTrace     
abe0: 20 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20   0x00000001  /* 
abf0: 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44  True to trace VD
ac00: 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  BE execution */.
ac10: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
ac20: 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78  nternChanges  0x
ac30: 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63  00000002  /* Unc
ac40: 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61  ommitted Hash ta
ac50: 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ble changes */.#
ac60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
ac70: 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30  llFSync      0x0
ac80: 30 30 30 30 30 30 34 20 20 2f 2a 20 55 73 65 20  0000004  /* Use 
ac90: 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68  full fsync on th
aca0: 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65  e backend */.#de
acb0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74  fine SQLITE_Ckpt
acc0: 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30  FullFSync  0x000
acd0: 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75  00008  /* Use fu
ace0: 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65  ll fsync for che
acf0: 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69  ckpoint */.#defi
ad00: 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53  ne SQLITE_CacheS
ad10: 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30  pill     0x00000
ad20: 30 31 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70  010  /* OK to sp
ad30: 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65 20  ill pager cache 
ad40: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ad50: 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20  E_FullColNames  
ad60: 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20   0x00000020  /* 
ad70: 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e  Show full column
ad80: 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54   names on SELECT
ad90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ada0: 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73  TE_ShortColNames
adb0: 20 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a    0x00000040  /*
adc0: 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75   Show short colu
add0: 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65  mns names */.#de
ade0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e  fine SQLITE_Coun
adf0: 74 52 6f 77 73 20 20 20 20 20 20 30 78 30 30 30  tRows      0x000
ae00: 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20  00080  /* Count 
ae10: 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20  rows changed by 
ae20: 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20  INSERT, */.     
ae30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae50: 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45       /*   DELETE
ae60: 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20  , or UPDATE and 
ae70: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20  return */.      
ae80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aea0: 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75      /*   the cou
aeb0: 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62  nt using a callb
aec0: 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ack. */.#define 
aed0: 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62  SQLITE_NullCallb
aee0: 61 63 6b 20 20 20 30 78 30 30 30 30 30 31 30 30  ack   0x00000100
aef0: 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
af00: 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66  callback once if
af10: 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20   the */.        
af20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af40: 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65    /*   result se
af50: 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64  t is empty */.#d
af60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c  efine SQLITE_Sql
af70: 54 72 61 63 65 20 20 20 20 20 20 20 30 78 30 30  Trace       0x00
af80: 30 30 30 32 30 30 20 20 2f 2a 20 44 65 62 75 67  000200  /* Debug
af90: 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74   print SQL as it
afa0: 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65   executes */.#de
afb0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
afc0: 4c 69 73 74 69 6e 67 20 20 20 20 30 78 30 30 30  Listing    0x000
afd0: 30 30 34 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00400  /* Debug 
afe0: 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45  listings of VDBE
aff0: 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65   programs */.#de
b000: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74  fine SQLITE_Writ
b010: 65 53 63 68 65 6d 61 20 20 20 20 30 78 30 30 30  eSchema    0x000
b020: 30 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20  00800  /* OK to 
b030: 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41  update SQLITE_MA
b040: 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20  STER */.#define 
b050: 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70  SQLITE_VdbeAddop
b060: 54 72 61 63 65 20 30 78 30 30 30 30 31 30 30 30  Trace 0x00001000
b070: 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74    /* Trace sqlit
b080: 65 33 56 64 62 65 41 64 64 4f 70 28 29 20 63 61  e3VdbeAddOp() ca
b090: 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  lls */.#define S
b0a0: 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63  QLITE_IgnoreChec
b0b0: 6b 73 20 20 20 30 78 30 30 30 30 32 30 30 30 20  ks   0x00002000 
b0c0: 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72   /* Do not enfor
b0d0: 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61  ce check constra
b0e0: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
b0f0: 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d  SQLITE_ReadUncom
b100: 6d 69 74 74 65 64 20 30 78 30 30 30 34 30 30 30  mitted 0x0004000
b110: 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65 64 2d    /* For shared-
b120: 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64  cache mode */.#d
b130: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67  efine SQLITE_Leg
b140: 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30  acyFileFmt  0x00
b150: 30 30 38 30 30 30 20 20 2f 2a 20 43 72 65 61 74  008000  /* Creat
b160: 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  e new databases 
b170: 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23  in format 1 */.#
b180: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
b190: 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30 78 30  coveryMode   0x0
b1a0: 30 30 31 30 30 30 30 20 20 2f 2a 20 49 67 6e 6f  0010000  /* Igno
b1b0: 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f 72 73  re schema errors
b1c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b1d0: 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20  TE_ReverseOrder 
b1e0: 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a    0x00020000  /*
b1f0: 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72   Reverse unorder
b200: 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64  ed SELECTs */.#d
b210: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63  efine SQLITE_Rec
b220: 54 72 69 67 67 65 72 73 20 20 20 20 30 78 30 30  Triggers    0x00
b230: 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  040000  /* Enabl
b240: 65 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67  e recursive trig
b250: 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gers */.#define 
b260: 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65  SQLITE_ForeignKe
b270: 79 73 20 20 20 20 30 78 30 30 30 38 30 30 30 30  ys    0x00080000
b280: 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72    /* Enforce for
b290: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
b2a0: 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65  ints  */.#define
b2b0: 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65   SQLITE_AutoInde
b2c0: 78 20 20 20 20 20 20 30 78 30 30 31 30 30 30 30  x      0x0010000
b2d0: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74  0  /* Enable aut
b2e0: 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a  omatic indexes *
b2f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b300: 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20  _PreferBuiltin  
b310: 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20 50  0x00200000  /* P
b320: 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69  reference to bui
b330: 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23  lt-in funcs */.#
b340: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f  define SQLITE_Lo
b350: 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30  adExtension  0x0
b360: 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0400000  /* Enab
b370: 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  le load_extensio
b380: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
b390: 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65  ITE_EnableTrigge
b3a0: 72 20 20 30 78 30 30 38 30 30 30 30 30 20 20 2f  r  0x00800000  /
b3b0: 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
b3c0: 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65   triggers */.#de
b3d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65  fine SQLITE_Defe
b3e0: 72 46 4b 73 20 20 20 20 20 20 20 30 78 30 31 30  rFKs       0x010
b3f0: 30 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20  00000  /* Defer 
b400: 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e  all FK constrain
b410: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
b420: 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20  LITE_QueryOnly  
b430: 20 20 20 20 30 78 30 32 30 30 30 30 30 30 20 20      0x02000000  
b440: 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61 62  /* Disable datab
b450: 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ase changes */.#
b460: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
b470: 62 65 45 51 50 20 20 20 20 20 20 20 20 30 78 30  beEQP        0x0
b480: 34 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75  4000000  /* Debu
b490: 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  g EXPLAIN QUERY 
b4a0: 50 4c 41 4e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  PLAN */.../*.** 
b4b0: 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69  Bits of the sqli
b4c0: 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66  te3.dbOptFlags f
b4d0: 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75 73  ield that are us
b4e0: 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c  ed by the.** sql
b4f0: 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
b500: 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  l(SQLITE_TESTCTR
b510: 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c  L_OPTIMIZATIONS,
b520: 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74  ...) interface t
b530: 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79  o.** selectively
b540: 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73   disable various
b550: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
b560: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b570: 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72  E_QueryFlattener
b580: 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65   0x0001   /* Que
b590: 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f  ry flattening */
b5a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b5b0: 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30  ColumnCache    0
b5c0: 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d  x0002   /* Colum
b5d0: 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  n cache */.#defi
b5e0: 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42  ne SQLITE_GroupB
b5f0: 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20  yOrder   0x0004 
b600: 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76    /* GROUPBY cov
b610: 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f  er of ORDERBY */
b620: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b630: 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30  FactorOutConst 0
b640: 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74  x0008   /* Const
b650: 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f  ant factoring */
b660: 0a 2f 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  ./*             
b670: 20 20 20 6e 6f 74 20 75 73 65 64 20 20 20 20 30     not used    0
b680: 78 30 30 31 30 20 20 20 2f 2f 20 57 61 73 3a 20  x0010   // Was: 
b690: 53 51 4c 49 54 45 5f 49 64 78 52 65 61 6c 41 73  SQLITE_IdxRealAs
b6a0: 49 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  Int */.#define S
b6b0: 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70  QLITE_DistinctOp
b6c0: 74 20 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a  t    0x0020   /*
b6d0: 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20   DISTINCT using 
b6e0: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
b6f0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49  ne SQLITE_CoverI
b700: 64 78 53 63 61 6e 20 20 20 30 78 30 30 34 30 20  dxScan   0x0040 
b710: 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e    /* Covering in
b720: 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65  dex scans */.#de
b730: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65  fine SQLITE_Orde
b740: 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38  rByIdxJoin 0x008
b750: 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  0   /* ORDER BY 
b760: 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64  of joins via ind
b770: 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ex */.#define SQ
b780: 4c 49 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69  LITE_SubqCorouti
b790: 6e 65 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20  ne  0x0100   /* 
b7a0: 45 76 61 6c 75 61 74 65 20 73 75 62 71 75 65 72  Evaluate subquer
b7b0: 69 65 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65  ies as coroutine
b7c0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b7d0: 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20  ITE_Transitive  
b7e0: 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54     0x0200   /* T
b7f0: 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72  ransitive constr
b800: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
b810: 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70   SQLITE_OmitNoop
b820: 4a 6f 69 6e 20 20 20 30 78 30 34 30 30 20 20 20  Join   0x0400   
b830: 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74  /* Omit unused t
b840: 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a  ables in joins *
b850: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b860: 5f 53 74 61 74 33 34 20 20 20 20 20 20 20 20 20  _Stat34         
b870: 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20  0x0800   /* Use 
b880: 53 54 41 54 33 20 6f 72 20 53 54 41 54 34 20 64  STAT3 or STAT4 d
b890: 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ata */.#define S
b8a0: 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20  QLITE_AllOpts   
b8b0: 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a       0xffff   /*
b8c0: 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f   All optimizatio
b8d0: 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  ns */../*.** Mac
b8e0: 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ros for testing 
b8f0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f  whether or not o
b900: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65  ptimizations are
b910: 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61   enabled or disa
b920: 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  bled..*/.#ifndef
b930: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
b940: 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e  LTIN_TEST.#defin
b950: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69  e OptimizationDi
b960: 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  sabled(db, mask)
b970: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
b980: 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29  lags&(mask))!=0)
b990: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
b9a0: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
b9b0: 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d   mask)   (((db)-
b9c0: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
b9d0: 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64  k))==0).#else.#d
b9e0: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
b9f0: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
ba00: 61 73 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20  ask)  0.#define 
ba10: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
ba20: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
ba30: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
ba40: 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
ba50: 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63  t OK to factor c
ba60: 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
ba70: 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69  ons into the ini
ba80: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63  tialization.** c
ba90: 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e  ode. The argumen
baa0: 74 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a  t is a Parse obj
bab0: 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65  ect for the code
bac0: 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23   generator..*/.#
bad0: 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74  define ConstFact
bae0: 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b  orOk(P) ((P)->ok
baf0: 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a  ConstFactor)../*
bb00: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
bb10: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
bb20: 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a  te.magic field..
bb30: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61  ** The numbers a
bb40: 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72  re obtained at r
bb50: 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e  andom and have n
bb60: 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  o special meanin
bb70: 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e  g, other.** than
bb80: 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20   being distinct 
bb90: 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72  from one another
bba0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
bbb0: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20  ITE_MAGIC_OPEN  
bbc0: 20 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f     0xa029a697  /
bbd0: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70  * Database is op
bbe0: 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  en */.#define SQ
bbf0: 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
bc00: 44 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20  D   0x9f3c2d33  
bc10: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63  /* Database is c
bc20: 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  losed */.#define
bc30: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49   SQLITE_MAGIC_SI
bc40: 43 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39  CK     0x4b77129
bc50: 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20  0  /* Error and 
bc60: 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a  awaiting close *
bc70: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bc80: 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20  _MAGIC_BUSY     
bc90: 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44  0xf03b7906  /* D
bca0: 61 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c  atabase currentl
bcb0: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66  y in use */.#def
bcc0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
bcd0: 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35  _ERROR    0xb535
bce0: 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49  7930  /* An SQLI
bcf0: 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20  TE_MISUSE error 
bd00: 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66  occurred */.#def
bd10: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
bd20: 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66  _ZOMBIE   0x64cf
bd30: 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77  fc7f  /* Close w
bd40: 69 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65  ith last stateme
bd50: 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a  nt close */../*.
bd60: 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63  ** Each SQL func
bd70: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
bd80: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
bd90: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
bda0: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 41  ** structure.  A
bdb0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
bdc0: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 73 74   structure is st
bdd0: 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
bde0: 74 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68  te.aFunc.** hash
bdf0: 20 74 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75   table.  When mu
be00: 6c 74 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73  ltiple functions
be10: 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e   have the same n
be20: 61 6d 65 2c 20 74 68 65 20 68 61 73 68 20 74 61  ame, the hash ta
be30: 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f  ble.** points to
be40: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f   a linked list o
be50: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
be60: 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  es..*/.struct Fu
be70: 6e 63 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41  ncDef {.  i16 nA
be80: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rg;            /
be90: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
bea0: 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73  ments.  -1 means
beb0: 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20   unlimited */.  
bec0: 75 31 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20  u16 funcFlags;  
bed0: 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d       /* Some com
bee0: 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49  bination of SQLI
bef0: 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76  TE_FUNC_* */.  v
bf00: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20  oid *pUserData; 
bf10: 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61      /* User data
bf20: 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20   parameter */.  
bf30: 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20  FuncDef *pNext; 
bf40: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e       /* Next fun
bf50: 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20  ction with same 
bf60: 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28  name */.  void (
bf70: 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f  *xFunc)(sqlite3_
bf80: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
bf90: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f  ite3_value**); /
bfa0: 2a 20 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69  * Regular functi
bfb0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  on */.  void (*x
bfc0: 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f  Step)(sqlite3_co
bfd0: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
bfe0: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
bff0: 41 67 67 72 65 67 61 74 65 20 73 74 65 70 20 2a  Aggregate step *
c000: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61  /.  void (*xFina
c010: 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f  lize)(sqlite3_co
c020: 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20  ntext*);        
c030: 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65          /* Aggre
c040: 67 61 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a  gate finalizer *
c050: 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  /.  char *zName;
c060: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20           /* SQL 
c070: 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  name of the func
c080: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44  tion. */.  FuncD
c090: 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20  ef *pHash;      
c0a0: 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64  /* Next with a d
c0b0: 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75  ifferent name bu
c0c0: 74 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20  t the same hash 
c0d0: 2a 2f 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63  */.  FuncDestruc
c0e0: 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72  tor *pDestructor
c0f0: 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65  ;   /* Reference
c100: 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63   counted destruc
c110: 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  tor function */.
c120: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73  };../*.** This s
c130: 74 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75  tructure encapsu
c140: 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e  lates a user-fun
c150: 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72  ction destructor
c160: 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a   callback (as.**
c170: 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e   configured usin
c180: 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  g create_functio
c190: 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65  n_v2()) and a re
c1a0: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e  ference counter.
c1b0: 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f   When.** create_
c1c0: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73  function_v2() is
c1d0: 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74   called to creat
c1e0: 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  e a function wit
c1f0: 68 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a  h a destructor,.
c200: 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65  ** a single obje
c210: 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ct of this type 
c220: 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75  is allocated. Fu
c230: 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65  ncDestructor.nRe
c240: 66 20 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20  f is set to .** 
c250: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75  the number of Fu
c260: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72  ncDef objects cr
c270: 65 61 74 65 64 20 28 65 69 74 68 65 72 20 31 20  eated (either 1 
c280: 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20  or 3, depending 
c290: 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72  on whether.** or
c2a0: 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66 69   not the specifi
c2b0: 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53  ed encoding is S
c2c0: 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20  QLITE_ANY). The 
c2d0: 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63  FuncDef.pDestruc
c2e0: 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66  tor.** member of
c2f0: 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77   each of the new
c300: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
c310: 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74   is set to point
c320: 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65   to the allocate
c330: 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63  d.** FuncDestruc
c340: 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  tor..**.** There
c350: 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20  after, when one 
c360: 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f  of the FuncDef o
c370: 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74 65  bjects is delete
c380: 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63 65  d, the reference
c390: 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69  .** count on thi
c3a0: 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72  s object is decr
c3b0: 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74  emented. When it
c3c0: 20 72 65 61 63 68 65 73 20 30 2c 20 74 68 65 20   reaches 0, the 
c3d0: 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73  destructor.** is
c3e0: 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65   invoked and the
c3f0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
c400: 73 74 72 75 63 74 75 72 65 20 66 72 65 65 64 2e  structure freed.
c410: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
c420: 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e  estructor {.  in
c430: 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28  t nRef;.  void (
c440: 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20  *xDestroy)(void 
c450: 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65  *);.  void *pUse
c460: 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  rData;.};../*.**
c470: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
c480: 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61   for FuncDef.fla
c490: 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74  gs.  Note that t
c4a0: 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f  he _LENGTH and _
c4b0: 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73  TYPEOF.** values
c4c0: 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64   must correspond
c4d0: 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54   to OPFLAG_LENGT
c4e0: 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f  HARG and OPFLAG_
c4f0: 54 59 50 45 4f 46 41 52 47 2e 20 20 54 68 65 72  TYPEOFARG.  Ther
c500: 65 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28  e.** are assert(
c510: 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  ) statements in 
c520: 74 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69  the code to veri
c530: 66 79 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66  fy this..*/.#def
c540: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
c550: 45 4e 43 4d 41 53 4b 20 20 30 78 30 30 33 20 2f  ENCMASK  0x003 /
c560: 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53  * SQLITE_UTF8, S
c570: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72  QLITE_UTF16BE or
c580: 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66   UTF16LE */.#def
c590: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
c5a0: 4c 49 4b 45 20 20 20 20 20 30 78 30 30 34 20 2f  LIKE     0x004 /
c5b0: 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20  * Candidate for 
c5c0: 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a  the LIKE optimiz
c5d0: 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
c5e0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53   SQLITE_FUNC_CAS
c5f0: 45 20 20 20 20 20 30 78 30 30 38 20 2f 2a 20 43  E     0x008 /* C
c600: 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49  ase-sensitive LI
c610: 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e  KE-type function
c620: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c630: 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20  TE_FUNC_EPHEM   
c640: 20 30 78 30 31 30 20 2f 2a 20 45 70 68 65 6d 65   0x010 /* Epheme
c650: 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74  ral.  Delete wit
c660: 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e  h VDBE */.#defin
c670: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  e SQLITE_FUNC_NE
c680: 45 44 43 4f 4c 4c 20 30 78 30 32 30 20 2f 2a 20  EDCOLL 0x020 /* 
c690: 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f  sqlite3GetFuncCo
c6a0: 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62 65  llSeq() might be
c6b0: 20 63 61 6c 6c 65 64 20 2a 2f 0a 23 64 65 66 69   called */.#defi
c6c0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
c6d0: 45 4e 47 54 48 20 20 20 30 78 30 34 30 20 2f 2a  ENGTH   0x040 /*
c6e0: 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68   Built-in length
c6f0: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
c700: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
c710: 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30 38  NC_TYPEOF   0x08
c720: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79  0 /* Built-in ty
c730: 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20  peof() function 
c740: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c750: 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20  E_FUNC_COUNT    
c760: 30 78 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  0x100 /* Built-i
c770: 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65  n count(*) aggre
c780: 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gate */.#define 
c790: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c  SQLITE_FUNC_COAL
c7a0: 45 53 43 45 20 30 78 32 30 30 20 2f 2a 20 42 75  ESCE 0x200 /* Bu
c7b0: 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28  ilt-in coalesce(
c7c0: 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f  ) or ifnull() */
c7d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c7e0: 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78  FUNC_UNLIKELY 0x
c7f0: 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  400 /* Built-in 
c800: 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74  unlikely() funct
c810: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
c820: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
c830: 41 4e 54 20 30 78 38 30 30 20 2f 2a 20 43 6f 6e  ANT 0x800 /* Con
c840: 73 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76  stant inputs giv
c850: 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74  e a constant out
c860: 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  put */.#define S
c870: 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
c880: 58 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72 75  X  0x1000 /* Tru
c890: 65 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20  e for min() and 
c8a0: 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65 73  max() aggregates
c8b0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66   */../*.** The f
c8c0: 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d  ollowing three m
c8d0: 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28  acros, FUNCTION(
c8e0: 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e  ), LIKEFUNC() an
c8f0: 64 20 41 47 47 52 45 47 41 54 45 28 29 20 61 72  d AGGREGATE() ar
c900: 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65  e.** used to cre
c910: 61 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69  ate the initiali
c920: 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e  zers for the Fun
c930: 63 44 65 66 20 73 74 72 75 63 74 75 72 65 73 2e  cDef structures.
c940: 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f  .**.**   FUNCTIO
c950: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
c960: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
c970: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
c980: 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20  create a scalar 
c990: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
c9a0: 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ion of a functio
c9b0: 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20  n zName .**     
c9c0: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43  implemented by C
c9d0: 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20   function xFunc 
c9e0: 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
c9f0: 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65  g arguments. The
ca00: 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61  .**     value pa
ca10: 73 73 65 64 20 61 73 20 69 41 72 67 20 69 73 20  ssed as iArg is 
ca20: 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a  cast to a (void*
ca30: 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c  ) and made avail
ca40: 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74  able.**     as t
ca50: 68 65 20 75 73 65 72 2d 64 61 74 61 20 28 73 71  he user-data (sq
ca60: 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28  lite3_user_data(
ca70: 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74  )) for the funct
ca80: 69 6f 6e 2e 20 49 66 20 0a 2a 2a 20 20 20 20 20  ion. If .**     
ca90: 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20  argument bNC is 
caa0: 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53  true, then the S
cab0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
cac0: 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e  OLL flag is set.
cad0: 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49  .**.**   VFUNCTI
cae0: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
caf0: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
cb00: 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55  ).**     Like FU
cb10: 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74  NCTION except it
cb20: 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54   omits the SQLIT
cb30: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
cb40: 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47  flag..**.**   AG
cb50: 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
cb60: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
cb70: 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a  xStep, xFinal).*
cb80: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
cb90: 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61 74  eate an aggregat
cba0: 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  e function defin
cbb0: 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ition implemente
cbc0: 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20  d by.**     the 
cbd0: 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65  C functions xSte
cbe0: 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68  p and xFinal. Th
cbf0: 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61 72  e first four par
cc00: 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61  ameters.**     a
cc10: 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 69  re interpreted i
cc20: 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61  n the same way a
cc30: 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70 61  s the first 4 pa
cc40: 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20  rameters to.**  
cc50: 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a     FUNCTION()..*
cc60: 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28  *.**   LIKEFUNC(
cc70: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72  zName, nArg, pAr
cc80: 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20  g, flags).**    
cc90: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
cca0: 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
ccb0: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
ccc0: 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
ccd0: 20 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63   .**     that ac
cce0: 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
ccf0: 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c  ents and is impl
cd00: 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c  emented by a cal
cd10: 6c 20 74 6f 20 43 20 0a 2a 2a 20 20 20 20 20 66  l to C .**     f
cd20: 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63  unction likeFunc
cd30: 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20  . Argument pArg 
cd40: 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f  is cast to a (vo
cd50: 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a  id *) and made.*
cd60: 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20  *     available 
cd70: 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  as the function 
cd80: 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74  user-data (sqlit
cd90: 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e  e3_user_data()).
cda0: 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63   The.**     Func
cdb0: 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62  Def.flags variab
cdc0: 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  le is set to the
cdd0: 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
cde0: 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20   the flags.**   
cdf0: 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a    parameter..*/.
ce00: 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e  #define FUNCTION
ce10: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
ce20: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
ce30: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
ce40: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
ce50: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
ce60: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
ce70: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
ce80: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
ce90: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
cea0: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
ceb0: 20 30 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e   0}.#define VFUN
cec0: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
ced0: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
cee0: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
cef0: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
cf00: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
cf10: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
cf20: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
cf30: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
cf40: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
cf50: 20 30 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43   0}.#define FUNC
cf60: 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72  TION2(zName, nAr
cf70: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
cf80: 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29  unc, extraFlags)
cf90: 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54   \.  {nArg,SQLIT
cfa0: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
cfb0: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
cfc0: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
cfd0: 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67  DCOLL)|extraFlag
cfe0: 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  s,\.   SQLITE_IN
cff0: 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
d000: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
d010: 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64  #zName, 0, 0}.#d
d020: 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49  efine STR_FUNCTI
d030: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
d040: 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  pArg, bNC, xFunc
d050: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
d060: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
d070: 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  T|SQLITE_UTF8|(b
d080: 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
d090: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70  EEDCOLL), \.   p
d0a0: 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  Arg, 0, xFunc, 0
d0b0: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
d0c0: 30 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46  0}.#define LIKEF
d0d0: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
d0e0: 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20   arg, flags) \. 
d0f0: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
d100: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
d110: 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20  ITE_UTF8|flags, 
d120: 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67  \.   (void *)arg
d130: 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30  , 0, likeFunc, 0
d140: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
d150: 30 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45  0}.#define AGGRE
d160: 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  GATE(zName, nArg
d170: 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70  , arg, nc, xStep
d180: 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e  , xFinal) \.  {n
d190: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
d1a0: 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43  |(nc*SQLITE_FUNC
d1b0: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
d1c0: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
d1d0: 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c 20 78  TR(arg), 0, 0, x
d1e0: 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61  Step,xFinal,#zNa
d1f0: 6d 65 2c 30 2c 30 7d 0a 23 64 65 66 69 6e 65 20  me,0,0}.#define 
d200: 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65  AGGREGATE2(zName
d210: 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c  , nArg, arg, nc,
d220: 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20   xStep, xFinal, 
d230: 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20  extraFlags) \.  
d240: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
d250: 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55  F8|(nc*SQLITE_FU
d260: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74  NC_NEEDCOLL)|ext
d270: 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51  raFlags, \.   SQ
d280: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
d290: 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65  arg), 0, 0, xSte
d2a0: 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c  p,xFinal,#zName,
d2b0: 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20  0,0}../*.** All 
d2c0: 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e  current savepoin
d2d0: 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
d2e0: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73   a linked list s
d2f0: 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71  tarting at.** sq
d300: 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74  lite3.pSavepoint
d310: 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d  . The first elem
d320: 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ent in the list 
d330: 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  is the most rece
d340: 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73  ntly.** opened s
d350: 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f  avepoint. Savepo
d360: 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 74  ints are added t
d370: 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74 68  o the list by th
d380: 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76  e vdbe.** OP_Sav
d390: 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69  epoint instructi
d3a0: 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61  on..*/.struct Sa
d3b0: 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72  vepoint {.  char
d3c0: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
d3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3e0: 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d  /* Savepoint nam
d3f0: 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65  e (nul-terminate
d400: 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  d) */.  i64 nDef
d410: 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
d420: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d430: 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65  umber of deferre
d440: 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20  d fk violations 
d450: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
d460: 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
d470: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
d480: 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 69  er of deferred i
d490: 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65  mm fk. */.  Save
d4a0: 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20  point *pNext;   
d4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4c0: 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f  /* Parent savepo
d4d0: 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a  int (if any) */.
d4e0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
d4f0: 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64  llowing are used
d500: 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70   as the second p
d510: 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69  arameter to sqli
d520: 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a  te3Savepoint(),.
d530: 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31  ** and as the P1
d540: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
d550: 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e   OP_Savepoint in
d560: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64  struction..*/.#d
d570: 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
d580: 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65  BEGIN      0.#de
d590: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52  fine SAVEPOINT_R
d5a0: 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66  ELEASE    1.#def
d5b0: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f  ine SAVEPOINT_RO
d5c0: 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a  LLBACK   2.../*.
d5d0: 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d  ** Each SQLite m
d5e0: 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74  odule (virtual t
d5f0: 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29  able definition)
d600: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
d610: 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  n.** instance of
d620: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
d630: 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64  tructure, stored
d640: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e   in the sqlite3.
d650: 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20  aModule.** hash 
d660: 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  table..*/.struct
d670: 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73   Module {.  cons
d680: 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
d690: 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20   *pModule;      
d6a0: 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69   /* Callback poi
d6b0: 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74  nters */.  const
d6c0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
d6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6e0: 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74  /* Name passed t
d6f0: 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  o create_module(
d700: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  ) */.  void *pAu
d710: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
d720: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70              /* p
d730: 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72  Aux passed to cr
d740: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
d750: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72  .  void (*xDestr
d760: 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  oy)(void *);    
d770: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c          /* Modul
d780: 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e  e destructor fun
d790: 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ction */.};../*.
d7a0: 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ** information a
d7b0: 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
d7c0: 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   of an SQL table
d7d0: 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69   is held in an i
d7e0: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
d7f0: 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  is structure..*/
d800: 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b  .struct Column {
d810: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
d820: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
d830: 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  his column */.  
d840: 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20  Expr *pDflt;    
d850: 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75   /* Default valu
d860: 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
d870: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c   */.  char *zDfl
d880: 74 3b 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e  t;     /* Origin
d890: 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 64  al text of the d
d8a0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a  efault value */.
d8b0: 20 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20    char *zType;  
d8c0: 20 20 20 2f 2a 20 44 61 74 61 20 74 79 70 65 20     /* Data type 
d8d0: 66 6f 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20  for this column 
d8e0: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c  */.  char *zColl
d8f0: 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  ;     /* Collati
d900: 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66  ng sequence.  If
d910: 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64   NULL, use the d
d920: 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e  efault */.  u8 n
d930: 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20  otNull;      /* 
d940: 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20  An OE_ code for 
d950: 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e  handling a NOT N
d960: 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ULL constraint *
d970: 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
d980: 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74  y;   /* One of t
d990: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e  he SQLITE_AFF_..
d9a0: 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38  . values */.  u8
d9b0: 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f   szEst;        /
d9c0: 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
d9d0: 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e   of this column.
d9e0: 20 20 49 4e 54 3d 3d 31 20 2a 2f 0a 20 20 75 38    INT==1 */.  u8
d9f0: 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f   colFlags;     /
da00: 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72  * Boolean proper
da10: 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c  ties.  See COLFL
da20: 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f  AG_ defines belo
da30: 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f  w */.};../* Allo
da40: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43  wed values for C
da50: 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a  olumn.colFlags:.
da60: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
da70: 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30  AG_PRIMKEY  0x00
da80: 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  01    /* Column 
da90: 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  is part of the p
daa0: 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64  rimary key */.#d
dab0: 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49  efine COLFLAG_HI
dac0: 44 44 45 4e 20 20 20 30 78 30 30 30 32 20 20 20  DDEN   0x0002   
dad0: 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c   /* A hidden col
dae0: 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c  umn in a virtual
daf0: 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   table */../*.**
db00: 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65   A "Collating Se
db10: 71 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e  quence" is defin
db20: 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ed by an instanc
db30: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
db40: 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e  ng.** structure.
db50: 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61   Conceptually, a
db60: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
db70: 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  nce consists of 
db80: 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20  a name and.** a 
db90: 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69  comparison routi
dba0: 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ne that defines 
dbb0: 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61  the order of tha
dbc0: 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a  t sequence..**.*
dbd0: 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d  * If CollSeq.xCm
dbe0: 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65  p is NULL, it me
dbf0: 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20  ans that the.** 
dc00: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
dc10: 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  ce is undefined.
dc20: 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20    Indices built 
dc30: 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a  on an undefined.
dc40: 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ** collating seq
dc50: 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65  uence may not be
dc60: 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e   read or written
dc70: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c  ..*/.struct Coll
dc80: 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  Seq {.  char *zN
dc90: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ame;          /*
dca0: 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c   Name of the col
dcb0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c  lating sequence,
dcc0: 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a   UTF-8 encoded *
dcd0: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
dce0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
dcf0: 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c  t encoding handl
dd00: 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a  ed by xCmp() */.
dd10: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20    void *pUser;  
dd20: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
dd30: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d   argument to xCm
dd40: 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  p() */.  int (*x
dd50: 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  Cmp)(void*,int, 
dd60: 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
dd70: 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a  , const void*);.
dd80: 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76    void (*xDel)(v
dd90: 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72  oid*);  /* Destr
dda0: 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20  uctor for pUser 
ddb0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73  */.};../*.** A s
ddc0: 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65  ort order can be
ddd0: 20 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44   either ASC or D
dde0: 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ESC..*/.#define 
ddf0: 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20  SQLITE_SO_ASC   
de00: 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69      0  /* Sort i
de10: 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
de20: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  r */.#define SQL
de30: 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20  ITE_SO_DESC     
de40: 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61   1  /* Sort in a
de50: 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a  scending order *
de60: 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20  /../*.** Column 
de70: 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a  affinity types..
de80: 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64  **.** These used
de90: 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69   to have mnemoni
dea0: 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20  c name like 'i' 
deb0: 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  for SQLITE_AFF_I
dec0: 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74  NTEGER and.** 't
ded0: 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46  ' for SQLITE_AFF
dee0: 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63  _TEXT.  But we c
def0: 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65  an save a little
df00: 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f   space and impro
df10: 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20  ve.** the speed 
df20: 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62  a little by numb
df30: 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73  ering the values
df40: 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20   consecutively. 
df50: 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68   .**.** But rath
df60: 65 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69  er than start wi
df70: 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65  th 0 or 1, we be
df80: 67 69 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54  gin with 'A'.  T
df90: 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e  hat way,.** when
dfa0: 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69   multiple affini
dfb0: 74 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e  ty types are con
dfc0: 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61  catenated into a
dfd0: 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75   string and.** u
dfe0: 73 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70  sed as the P4 op
dff0: 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c  erand, they will
e000: 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c   be more readabl
e010: 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c  e..**.** Note al
e020: 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65  so that the nume
e030: 72 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72  ric types are gr
e040: 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73  ouped together s
e050: 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a  o that testing.*
e060: 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20  * for a numeric 
e070: 74 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65  type is a single
e080: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e   comparison.  An
e090: 64 20 74 68 65 20 4e 4f 4e 45 20 74 79 70 65 20  d the NONE type 
e0a0: 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65  is first..*/.#de
e0b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
e0c0: 4e 4f 4e 45 20 20 20 20 20 27 41 27 0a 23 64 65  NONE     'A'.#de
e0d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
e0e0: 54 45 58 54 20 20 20 20 20 27 42 27 0a 23 64 65  TEXT     'B'.#de
e0f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
e100: 4e 55 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65  NUMERIC  'C'.#de
e110: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
e120: 49 4e 54 45 47 45 52 20 20 27 44 27 0a 23 64 65  INTEGER  'D'.#de
e130: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
e140: 52 45 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64  REAL     'E'..#d
e150: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
e160: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58  umericAffinity(X
e170: 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f  )  ((X)>=SQLITE_
e180: 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a  AFF_NUMERIC)../*
e190: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
e1a0: 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d  FF_MASK values m
e1b0: 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67  asks off the sig
e1c0: 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66  nificant bits of
e1d0: 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20   an.** affinity 
e1e0: 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69  value. .*/.#defi
e1f0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  ne SQLITE_AFF_MA
e200: 53 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a  SK     0x47../*.
e210: 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69  ** Additional bi
e220: 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63 61  t values that ca
e230: 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20 61  n be ORed with a
e240: 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f  n affinity witho
e250: 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74  ut.** changing t
e260: 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a  he affinity..**.
e270: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f  ** The SQLITE_NO
e280: 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20  TNULL flag is a 
e290: 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e  combination of N
e2a0: 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46  ULLEQ and JUMPIF
e2b0: 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73  NULL..** It caus
e2c0: 65 73 20 61 6e 20 61 73 73 65 72 74 28 29 20 74  es an assert() t
e2d0: 6f 20 66 69 72 65 20 69 66 20 65 69 74 68 65 72  o fire if either
e2e0: 20 6f 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f   operand to a co
e2f0: 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72  mparison.** oper
e300: 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49  ator is NULL.  I
e310: 74 20 69 73 20 61 64 64 65 64 20 74 6f 20 63 65  t is added to ce
e320: 72 74 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e  rtain comparison
e330: 20 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a   operators to.**
e340: 20 70 72 6f 76 65 20 74 68 61 74 20 74 68 65 20   prove that the 
e350: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77  operands are alw
e360: 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f  ays NOT NULL..*/
e370: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e380: 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31  JUMPIFNULL   0x1
e390: 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65  0  /* jumps if e
e3a0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
e3b0: 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
e3c0: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
e3d0: 20 20 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74       0x20  /* St
e3e0: 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  ore result in re
e3f0: 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68 61  g[P2] rather tha
e400: 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e  n jump */.#defin
e410: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
e420: 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e        0x80  /* N
e430: 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66  ULL=NULL */.#def
e440: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55  ine SQLITE_NOTNU
e450: 4c 4c 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a  LL      0x90  /*
e460: 20 41 73 73 65 72 74 20 74 68 61 74 20 6f 70 65   Assert that ope
e470: 72 61 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20  rands are never 
e480: 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  NULL */../*.** A
e490: 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  n object of this
e4a0: 20 74 79 70 65 20 69 73 20 63 72 65 61 74 65 64   type is created
e4b0: 20 66 6f 72 20 65 61 63 68 20 76 69 72 74 75 61   for each virtua
e4c0: 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20  l table present 
e4d0: 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61  in.** the databa
e4e0: 73 65 20 73 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a  se schema. .**.*
e4f0: 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  * If the databas
e500: 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  e schema is shar
e510: 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69  ed, then there i
e520: 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  s one instance o
e530: 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  f this.** struct
e540: 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61 74  ure for each dat
e550: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
e560: 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74   (sqlite3*) that
e570: 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65 64   uses the shared
e580: 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73  .** schema. This
e590: 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63 68   is because each
e5a0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
e5b0: 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74  tion requires it
e5c0: 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20  s own unique.** 
e5d0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
e5e0: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
e5f0: 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63  ndle used to acc
e600: 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20  ess the virtual 
e610: 74 61 62 6c 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d  table .** implem
e620: 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65  entation. sqlite
e630: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
e640: 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65  can not be share
e650: 64 20 62 65 74 77 65 65 6e 20 0a 2a 2a 20 64 61  d between .** da
e660: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
e670: 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68  ns, even when th
e680: 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e  e rest of the in
e690: 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
e6a0: 20 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73   .** schema is s
e6b0: 68 61 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d  hared, as the im
e6c0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74  plementation oft
e6d0: 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64 61  en stores the da
e6e0: 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
e6f0: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73  tion handle pass
e700: 65 64 20 74 6f 20 69 74 20 76 69 61 20 74 68 65  ed to it via the
e710: 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78   xConnect() or x
e720: 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a  Create() method.
e730: 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ** during initia
e740: 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61  lization interna
e750: 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62 61  lly. This databa
e760: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  se connection ha
e770: 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e  ndle may.** then
e780: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
e790: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d  virtual table im
e7a0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
e7b0: 61 63 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c  access real tabl
e7c0: 65 73 20 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68  es .** within th
e7d0: 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74  e database. So t
e7e0: 68 61 74 20 74 68 65 79 20 61 70 70 65 61 72 20  hat they appear 
e7f0: 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 63  as part of the c
e800: 61 6c 6c 65 72 73 20 0a 2a 2a 20 74 72 61 6e 73  allers .** trans
e810: 61 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63  action, these ac
e820: 63 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62  cesses need to b
e830: 65 20 6d 61 64 65 20 76 69 61 20 74 68 65 20 73  e made via the s
e840: 61 6d 65 20 64 61 74 61 62 61 73 65 20 0a 2a 2a  ame database .**
e850: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74   connection as t
e860: 68 61 74 20 75 73 65 64 20 74 6f 20 65 78 65 63  hat used to exec
e870: 75 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f  ute SQL operatio
e880: 6e 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61  ns on the virtua
e890: 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  l table..**.** A
e8a0: 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  ll VTable object
e8b0: 73 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  s that correspon
e8c0: 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61  d to a single ta
e8d0: 62 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a  ble in a shared.
e8e0: 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ** database sche
e8f0: 6d 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79  ma are initially
e900: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e   stored in a lin
e910: 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64  ked-list pointed
e920: 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61   to by.** the Ta
e930: 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62  ble.pVTable memb
e940: 65 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74  er variable of t
e950: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
e960: 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a   Table object..*
e970: 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65  * When an sqlite
e980: 33 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65 72  3_prepare() oper
e990: 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65  ation is require
e9a0: 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  d to access the 
e9b0: 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
e9c0: 2c 20 69 74 20 73 65 61 72 63 68 65 73 20 74 68  , it searches th
e9d0: 65 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56  e list for the V
e9e0: 54 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65  Table that corre
e9f0: 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a  sponds to the.**
ea00: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
ea10: 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70  tion doing the p
ea20: 72 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74  reparing so as t
ea30: 6f 20 75 73 65 20 74 68 65 20 63 6f 72 72 65 63  o use the correc
ea40: 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61  t.** sqlite3_vta
ea50: 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65  b* handle in the
ea60: 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e   compiled query.
ea70: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69  .**.** When an i
ea80: 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f  n-memory Table o
ea90: 62 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65 64  bject is deleted
eaa0: 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68   (for example wh
eab0: 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  en the.** schema
eac0: 20 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64   is being reload
ead0: 65 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73  ed for some reas
eae0: 6f 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20  on), the VTable 
eaf0: 6f 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 20  objects are not 
eb00: 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20  .** deleted and 
eb10: 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
eb20: 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f  * handles are no
eb30: 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65  t xDisconnect()e
eb40: 64 20 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  d .** immediatel
eb50: 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79  y. Instead, they
eb60: 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20   are moved from 
eb70: 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
eb80: 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f  e list to.** ano
eb90: 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ther linked list
eba0: 20 68 65 61 64 65 64 20 62 79 20 74 68 65 20 73   headed by the s
ebb0: 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65  qlite3.pDisconne
ebc0: 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  ct member of the
ebd0: 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  .** correspondin
ebe0: 67 20 73 71 6c 69 74 65 33 20 73 74 72 75 63 74  g sqlite3 struct
ebf0: 75 72 65 2e 20 54 68 65 79 20 61 72 65 20 74 68  ure. They are th
ec00: 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63  en deleted/xDisc
ec10: 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a 20 6e 65 78  onnected .** nex
ec20: 74 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65  t time a stateme
ec30: 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20 75  nt is prepared u
ec40: 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65  sing said sqlite
ec50: 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65  3*. This is done
ec60: 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61  .** to avoid dea
ec70: 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76  dlock issues inv
ec80: 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20  olving multiple 
ec90: 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75  sqlite3.mutex mu
eca0: 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20  texes..** Refer 
ecb0: 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76  to comments abov
ecc0: 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  e function sqlit
ecd0: 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
ece0: 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70  () for an.** exp
ecf0: 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77  lanation as to w
ed00: 68 79 20 69 74 20 69 73 20 73 61 66 65 20 74 6f  hy it is safe to
ed10: 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f   add an entry to
ed20: 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73   an sqlite3.pDis
ed30: 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20  connect.** list 
ed40: 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20  without holding 
ed50: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
ed60: 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20  g sqlite3.mutex 
ed70: 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  mutex..**.** The
ed80: 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65   memory for obje
ed90: 63 74 73 20 6f 66 20 74 68 69 73 20 74 79 70 65  cts of this type
eda0: 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63   is always alloc
edb0: 61 74 65 64 20 62 79 20 0a 2a 2a 20 73 71 6c 69  ated by .** sqli
edc0: 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75  te3DbMalloc(), u
edd0: 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74  sing the connect
ede0: 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65  ion handle store
edf0: 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61  d in VTable.db a
ee00: 73 20 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20  s .** the first 
ee10: 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  argument..*/.str
ee20: 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73  uct VTable {.  s
ee30: 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
ee40: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
ee50: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
ee60: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
ee70: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
ee80: 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20  Module *pMod;   
ee90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
eea0: 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69  nter to module i
eeb0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
eec0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
eed0: 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20  *pVtab;      /* 
eee0: 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20  Pointer to vtab 
eef0: 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e  instance */.  in
ef00: 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  t nRef;         
ef10: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
ef20: 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
ef30: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
ef40: 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61  */.  u8 bConstra
ef50: 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
ef60: 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
ef70: 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72  aints are suppor
ef80: 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61  ted */.  int iSa
ef90: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
efa0: 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74     /* Depth of t
efb0: 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61  he SAVEPOINT sta
efc0: 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  ck */.  VTable *
efd0: 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
efe0: 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e    /* Next in lin
eff0: 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61 62  ked list (see ab
f000: 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ove) */.};../*.*
f010: 2a 20 45 61 63 68 20 53 51 4c 20 74 61 62 6c 65  * Each SQL table
f020: 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
f030: 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 20  in memory by an 
f040: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 0a  instance of the.
f050: 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  ** following str
f060: 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 61  ucture..**.** Ta
f070: 62 6c 65 2e 7a 4e 61 6d 65 20 69 73 20 74 68 65  ble.zName is the
f080: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
f090: 6c 65 2e 20 20 54 68 65 20 63 61 73 65 20 6f 66  le.  The case of
f0a0: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
f0b0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
f0c0: 61 74 65 6d 65 6e 74 20 69 73 20 73 74 6f 72 65  atement is store
f0d0: 64 2c 20 62 75 74 20 63 61 73 65 20 69 73 20 6e  d, but case is n
f0e0: 6f 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 66  ot significant f
f0f0: 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  or.** comparison
f100: 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 6e  s..**.** Table.n
f110: 43 6f 6c 20 69 73 20 74 68 65 20 6e 75 6d 62 65  Col is the numbe
f120: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
f130: 74 68 69 73 20 74 61 62 6c 65 2e 20 20 54 61 62  this table.  Tab
f140: 6c 65 2e 61 43 6f 6c 20 69 73 20 61 0a 2a 2a 20  le.aCol is a.** 
f150: 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 61 72  pointer to an ar
f160: 72 61 79 20 6f 66 20 43 6f 6c 75 6d 6e 20 73 74  ray of Column st
f170: 72 75 63 74 75 72 65 73 2c 20 6f 6e 65 20 66 6f  ructures, one fo
f180: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 2a  r each column..*
f190: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  *.** If the tabl
f1a0: 65 20 68 61 73 20 61 6e 20 49 4e 54 45 47 45 52  e has an INTEGER
f1b0: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68   PRIMARY KEY, th
f1c0: 65 6e 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69  en Table.iPKey i
f1d0: 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 0a 2a  s the index of.*
f1e0: 2a 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 68 61  * the column tha
f1f0: 74 20 69 73 20 74 68 61 74 20 6b 65 79 2e 20 20  t is that key.  
f200: 20 4f 74 68 65 72 77 69 73 65 20 54 61 62 6c 65   Otherwise Table
f210: 2e 69 50 4b 65 79 20 69 73 20 6e 65 67 61 74 69  .iPKey is negati
f220: 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a 20 74 68 61  ve.  Note.** tha
f230: 74 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f  t the datatype o
f240: 66 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  f the PRIMARY KE
f250: 59 20 6d 75 73 74 20 62 65 20 49 4e 54 45 47 45  Y must be INTEGE
f260: 52 20 66 6f 72 20 74 68 69 73 20 66 69 65 6c 64  R for this field
f270: 20 74 6f 0a 2a 2a 20 62 65 20 73 65 74 2e 20 20   to.** be set.  
f280: 41 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  An INTEGER PRIMA
f290: 52 59 20 4b 45 59 20 69 73 20 75 73 65 64 20 61  RY KEY is used a
f2a0: 73 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20  s the rowid for 
f2b0: 65 61 63 68 20 72 6f 77 20 6f 66 0a 2a 2a 20 74  each row of.** t
f2c0: 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 61 20  he table.  If a 
f2d0: 74 61 62 6c 65 20 68 61 73 20 6e 6f 20 49 4e 54  table has no INT
f2e0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
f2f0: 2c 20 74 68 65 6e 20 61 20 72 61 6e 64 6f 6d 20  , then a random 
f300: 72 6f 77 69 64 0a 2a 2a 20 69 73 20 67 65 6e 65  rowid.** is gene
f310: 72 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72  rated for each r
f320: 6f 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e  ow of the table.
f330: 20 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b    TF_HasPrimaryK
f340: 65 79 20 69 73 20 73 65 74 20 69 66 0a 2a 2a 20  ey is set if.** 
f350: 74 68 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e  the table has an
f360: 79 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 49  y PRIMARY KEY, I
f370: 4e 54 45 47 45 52 20 6f 72 20 6f 74 68 65 72 77  NTEGER or otherw
f380: 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65  ise..**.** Table
f390: 2e 74 6e 75 6d 20 69 73 20 74 68 65 20 70 61 67  .tnum is the pag
f3a0: 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  e number for the
f3b0: 20 72 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65   root BTree page
f3c0: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 6e   of the table in
f3d0: 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
f3e0: 20 66 69 6c 65 2e 20 20 49 66 20 54 61 62 6c 65   file.  If Table
f3f0: 2e 69 44 62 20 69 73 20 74 68 65 20 69 6e 64 65  .iDb is the inde
f400: 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
f410: 65 20 74 61 62 6c 65 20 62 61 63 6b 65 6e 64 0a  e table backend.
f420: 2a 2a 20 69 6e 20 73 71 6c 69 74 65 2e 61 44 62  ** in sqlite.aDb
f430: 5b 5d 2e 20 20 30 20 69 73 20 66 6f 72 20 74 68  [].  0 is for th
f440: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
f450: 61 6e 64 20 31 20 69 73 20 66 6f 72 20 74 68 65  and 1 is for the
f460: 20 66 69 6c 65 20 74 68 61 74 0a 2a 2a 20 68 6f   file that.** ho
f470: 6c 64 73 20 74 65 6d 70 6f 72 61 72 79 20 74 61  lds temporary ta
f480: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
f490: 2e 20 20 49 66 20 54 46 5f 45 70 68 65 6d 65 72  .  If TF_Ephemer
f4a0: 61 6c 20 69 73 20 73 65 74 0a 2a 2a 20 74 68 65  al is set.** the
f4b0: 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 73  n the table is s
f4c0: 74 6f 72 65 64 20 69 6e 20 61 20 66 69 6c 65 20  tored in a file 
f4d0: 74 68 61 74 20 69 73 20 61 75 74 6f 6d 61 74 69  that is automati
f4e0: 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 0a 2a 2a  cally deleted.**
f4f0: 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 63   when the VDBE c
f500: 75 72 73 6f 72 20 74 6f 20 74 68 65 20 74 61 62  ursor to the tab
f510: 6c 65 20 69 73 20 63 6c 6f 73 65 64 2e 20 20 49  le is closed.  I
f520: 6e 20 74 68 69 73 20 63 61 73 65 20 54 61 62 6c  n this case Tabl
f530: 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72 65 66 65 72  e.tnum .** refer
f540: 73 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75  s VDBE cursor nu
f550: 6d 62 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20  mber that holds 
f560: 74 68 65 20 74 61 62 6c 65 20 6f 70 65 6e 2c 20  the table open, 
f570: 6e 6f 74 20 74 6f 20 74 68 65 20 72 6f 6f 74 0a  not to the root.
f580: 2a 2a 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 20  ** page number. 
f590: 20 54 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   Transient table
f5a0: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f  s are used to ho
f5b0: 6c 64 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ld the results o
f5c0: 66 20 61 0a 2a 2a 20 73 75 62 2d 71 75 65 72 79  f a.** sub-query
f5d0: 20 74 68 61 74 20 61 70 70 65 61 72 73 20 69 6e   that appears in
f5e0: 73 74 65 61 64 20 6f 66 20 61 20 72 65 61 6c 20  stead of a real 
f5f0: 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68  table name in th
f600: 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 0a 2a  e FROM clause .*
f610: 2a 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  * of a SELECT st
f620: 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  atement..*/.stru
f630: 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61  ct Table {.  cha
f640: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
f650: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
f660: 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a   table or view *
f670: 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c  /.  Column *aCol
f680: 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  ;        /* Info
f690: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
f6a0: 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49  ch column */.  I
f6b0: 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20  ndex *pIndex;   
f6c0: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53      /* List of S
f6d0: 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68  QL indexes on th
f6e0: 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53  is table. */.  S
f6f0: 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
f700: 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20      /* NULL for 
f710: 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20  tables.  Points 
f720: 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66  to definition if
f730: 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b   a view. */.  FK
f740: 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20  ey *pFKey;      
f750: 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73     /* Linked lis
f760: 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e  t of all foreign
f770: 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74 61   keys in this ta
f780: 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ble */.  char *z
f790: 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a  ColAff;       /*
f7a0: 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67   String defining
f7b0: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   the affinity of
f7c0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
f7d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
f7e0: 4d 49 54 5f 43 48 45 43 4b 0a 20 20 45 78 70 72  MIT_CHECK.  Expr
f7f0: 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20  List *pCheck;   
f800: 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f   /* All CHECK co
f810: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 65 6e  nstraints */.#en
f820: 64 69 66 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f  dif.  LogEst nRo
f830: 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45 73  wLogEst;   /* Es
f840: 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20  timated rows in 
f850: 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c  table - from sql
f860: 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20  ite_stat1 table 
f870: 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20  */.  int tnum;  
f880: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
f890: 74 20 42 54 72 65 65 20 6e 6f 64 65 20 66 6f 72  t BTree node for
f8a0: 20 74 68 69 73 20 74 61 62 6c 65 20 28 73 65 65   this table (see
f8b0: 20 6e 6f 74 65 20 61 62 6f 76 65 29 20 2a 2f 0a   note above) */.
f8c0: 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20    i16 iPKey;    
f8d0: 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74         /* If not
f8e0: 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20 61   negative, use a
f8f0: 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68  Col[iPKey] as th
f900: 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  e primary key */
f910: 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20  .  i16 nCol;    
f920: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
f930: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
f940: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
f950: 75 31 36 20 6e 52 65 66 3b 20 20 20 20 20 20 20  u16 nRef;       
f960: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
f970: 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68  f pointers to th
f980: 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f  is Table */.  Lo
f990: 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20  gEst szTabRow;  
f9a0: 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
f9b0: 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62  size of each tab
f9c0: 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20  le row in bytes 
f9d0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
f9e0: 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54  _ENABLE_COSTMULT
f9f0: 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75  .  LogEst costMu
fa00: 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20  lt;     /* Cost 
fa10: 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75  multiplier for u
fa20: 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  sing this table 
fa30: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 74  */.#endif.  u8 t
fa40: 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  abFlags;        
fa50: 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a   /* Mask of TF_*
fa60: 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20   values */.  u8 
fa70: 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20  keyConf;        
fa80: 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20    /* What to do 
fa90: 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75  in case of uniqu
faa0: 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f  eness conflict o
fab0: 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64  n iPKey */.#ifnd
fac0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
fad0: 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20  LTERTABLE.  int 
fae0: 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20  addColOffset;   
faf0: 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52   /* Offset in CR
fb00: 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20  EATE TABLE stmt 
fb10: 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c  to add a new col
fb20: 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  umn */.#endif.#i
fb30: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
fb40: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
fb50: 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b   int nModuleArg;
fb60: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
fb70: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  of arguments to 
fb80: 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20  the module */.  
fb90: 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41  char **azModuleA
fba0: 72 67 3b 20 20 2f 2a 20 54 65 78 74 20 6f 66 20  rg;  /* Text of 
fbb0: 61 6c 6c 20 6d 6f 64 75 6c 65 20 61 72 67 73 2e  all module args.
fbc0: 20 5b 30 5d 20 69 73 20 6d 6f 64 75 6c 65 20 6e   [0] is module n
fbd0: 61 6d 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ame */.  VTable 
fbe0: 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a  *pVTable;     /*
fbf0: 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20   List of VTable 
fc00: 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64  objects. */.#end
fc10: 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  if.  Trigger *pT
fc20: 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73  rigger;   /* Lis
fc30: 74 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74  t of triggers st
fc40: 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20  ored in pSchema 
fc50: 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
fc60: 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68  hema;     /* Sch
fc70: 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ema that contain
fc80: 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
fc90: 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f    Table *pNextZo
fca0: 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  mbie;  /* Next o
fcb0: 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d  n the Parse.pZom
fcc0: 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d  bieTab list */.}
fcd0: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
fce0: 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c   values for Tabl
fcf0: 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2f 0a 23  e.tabFlags..*/.#
fd00: 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e  define TF_Readon
fd10: 6c 79 20 20 20 20 20 20 20 20 30 78 30 31 20 20  ly        0x01  
fd20: 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73    /* Read-only s
fd30: 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23  ystem table */.#
fd40: 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65  define TF_Epheme
fd50: 72 61 6c 20 20 20 20 20 20 20 30 78 30 32 20 20  ral       0x02  
fd60: 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61    /* An ephemera
fd70: 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
fd80: 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79  ne TF_HasPrimary
fd90: 4b 65 79 20 20 20 30 78 30 34 20 20 20 20 2f 2a  Key   0x04    /*
fda0: 20 54 61 62 6c 65 20 68 61 73 20 61 20 70 72 69   Table has a pri
fdb0: 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66  mary key */.#def
fdc0: 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63 72 65  ine TF_Autoincre
fdd0: 6d 65 6e 74 20 20 20 30 78 30 38 20 20 20 20 2f  ment   0x08    /
fde0: 2a 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72  * Integer primar
fdf0: 79 20 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63  y key is autoinc
fe00: 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  rement */.#defin
fe10: 65 20 54 46 5f 56 69 72 74 75 61 6c 20 20 20 20  e TF_Virtual    
fe20: 20 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20       0x10    /* 
fe30: 49 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  Is a virtual tab
fe40: 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  le */.#define TF
fe50: 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20  _WithoutRowid   
fe60: 20 30 78 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72   0x20    /* No r
fe70: 6f 77 69 64 20 75 73 65 64 2e 20 50 52 49 4d 41  owid used. PRIMA
fe80: 52 59 20 4b 45 59 20 69 73 20 74 68 65 20 6b 65  RY KEY is the ke
fe90: 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73  y */.../*.** Tes
fea0: 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72  t to see whether
feb0: 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20   or not a table 
fec0: 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  is a virtual tab
fed0: 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20  le.  This is.** 
fee0: 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20  done as a macro 
fef0: 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20  so that it will 
ff00: 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74  be optimized out
ff10: 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a   when virtual.**
ff20: 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69   table support i
ff30: 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  s omitted from t
ff40: 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66  he build..*/.#if
ff50: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
ff60: 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
ff70: 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61   define IsVirtua
ff80: 6c 28 58 29 20 20 20 20 20 20 28 28 28 58 29 2d  l(X)      (((X)-
ff90: 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 56  >tabFlags & TF_V
ffa0: 69 72 74 75 61 6c 29 21 3d 30 29 0a 23 20 20 64  irtual)!=0).#  d
ffb0: 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
ffc0: 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63  lumn(X) (((X)->c
ffd0: 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41  olFlags & COLFLA
ffe0: 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65  G_HIDDEN)!=0).#e
fff0: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73  lse.#  define Is
10000 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20  Virtual(X)      
10010 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  0.#  define IsHi
10020 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a  ddenColumn(X) 0.
10030 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 65 73 20  #endif../* Does 
10040 74 68 65 20 74 61 62 6c 65 20 68 61 76 65 20 61  the table have a
10050 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
10060 65 20 48 61 73 52 6f 77 69 64 28 58 29 20 20 20  e HasRowid(X)   
10070 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67    (((X)->tabFlag
10080 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f  s & TF_WithoutRo
10090 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  wid)==0)../*.** 
100a0 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79  Each foreign key
100b0 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61   constraint is a
100c0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
100d0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
100e0 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66  cture..**.** A f
100f0 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73  oreign key is as
10100 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77  sociated with tw
10110 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22  o tables.  The "
10120 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a  from" table is.*
10130 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  * the table that
10140 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45   contains the RE
10150 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
10160 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65  that creates the
10170 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e   foreign.** key.
10180 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65    The "to" table
10190 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   is the table th
101a0 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74  at is named in t
101b0 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
101c0 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65  ause..** Conside
101d0 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a  r this example:.
101e0 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
101f0 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20   TABLE ex1(.**  
10200 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50       a INTEGER P
10210 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20  RIMARY KEY,.**  
10220 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43       b INTEGER C
10230 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45  ONSTRAINT fk1 RE
10240 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a  FERENCES ex2(x).
10250 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20  **     );.**.** 
10260 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  For foreign key 
10270 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d  "fk1", the from-
10280 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61  table is "ex1" a
10290 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  nd the to-table 
102a0 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75  is "ex2"..** Equ
102b0 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a  ivalent names:.*
102c0 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61  *.**     from-ta
102d0 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62  ble == child-tab
102e0 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74  le.**       to-t
102f0 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74  able == parent-t
10300 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20  able.**.** Each 
10310 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
10320 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69  e generates an i
10330 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
10340 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
10350 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61  re.** which is a
10360 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 66  ttached to the f
10370 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20  rom-table.  The 
10380 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f  to-table need no
10390 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20  t exist when.** 
103a0 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69  the from-table i
103b0 73 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20  s created.  The 
103c0 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65  existence of the
103d0 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74   to-table is not
103e0 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20   checked..**.** 
103f0 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  The list of all 
10400 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c  parents for chil
10410 64 20 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c  d Table X is hel
10420 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a  d at X.pFKey..**
10430 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c  .** A list of al
10440 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61  l children for a
10450 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28   table named Z (
10460 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20  which might not 
10470 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69  even exist).** i
10480 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61  s held in Schema
10490 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68 20 61  .fkeyHash with a
104a0 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a   hash key of Z..
104b0 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b  */.struct FKey {
104c0 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b  .  Table *pFrom;
104d0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
104e0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46  ntaining the REF
104f0 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28  ERENCES clause (
10500 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20  aka: Child) */. 
10510 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d   FKey *pNextFrom
10520 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20  ;  /* Next FKey 
10530 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e  with the same in
10540 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72   pFrom. Next par
10550 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a  ent of pFrom */.
10560 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20    char *zTo;    
10570 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
10580 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65  able that the ke
10590 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61  y points to (aka
105a0 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46  : Parent) */.  F
105b0 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20  Key *pNextTo;   
105c0 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68   /* Next with th
105d0 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74  e same zTo. Next
105e0 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a   child of zTo. *
105f0 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54  /.  FKey *pPrevT
10600 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75  o;    /* Previou
10610 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  s with the same 
10620 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f  zTo */.  int nCo
10630 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  l;         /* Nu
10640 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
10650 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20  in this key */. 
10660 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d   /* EV: R-30323-
10670 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73  21917 */.  u8 is
10680 44 65 66 65 72 72 65 64 3b 20 20 20 20 20 20 20  Deferred;       
10690 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
106a0 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69  raint checking i
106b0 73 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20  s deferred till 
106c0 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61  COMMIT */.  u8 a
106d0 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20  Action[2];      
106e0 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61    /* ON DELETE a
106f0 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74  nd ON UPDATE act
10700 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65  ions, respective
10710 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  ly */.  Trigger 
10720 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a  *apTrigger[2];/*
10730 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41   Triggers for aA
10740 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20  ction[] actions 
10750 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c  */.  struct sCol
10760 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61  Map {      /* Ma
10770 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73  pping of columns
10780 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c   in pFrom to col
10790 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20  umns in zTo */. 
107a0 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20     int iFrom;   
107b0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
107c0 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70  x of column in p
107d0 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72  From */.    char
107e0 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20   *zCol;         
107f0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c    /* Name of col
10800 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20  umn in zTo.  If 
10810 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59  NULL use PRIMARY
10820 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c   KEY */.  } aCol
10830 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
10840 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72  /* One entry for
10850 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f   each of nCol co
10860 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  lumns */.};../*.
10870 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72  ** SQLite suppor
10880 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e  ts many differen
10890 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76  t ways to resolv
108a0 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  e a constraint.*
108b0 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41  * error.  ROLLBA
108c0 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  CK processing me
108d0 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74  ans that a const
108e0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a  raint violation.
108f0 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70  ** causes the op
10900 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
10910 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66  ss to fail and f
10920 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  or the current t
10930 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ransaction.** to
10940 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
10950 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69    ABORT processi
10960 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65  ng means the ope
10970 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
10980 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61  s.** fails and a
10990 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ny prior changes
109a0 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f   from that one o
109b0 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63  peration are bac
109c0 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20  ked out,.** but 
109d0 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
109e0 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61  is not rolled ba
109f0 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73  ck.  FAIL proces
10a00 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a  sing means that.
10a10 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ** the operation
10a20 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f   in progress sto
10a30 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61  ps and returns a
10a40 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42  n error code.  B
10a50 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e  ut prior.** chan
10a60 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73  ges due to the s
10a70 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  ame operation ar
10a80 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74  e not backed out
10a90 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b   and no rollback
10aa0 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e  .** occurs.  IGN
10ab0 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ORE means that t
10ac0 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f  he particular ro
10ad0 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68  w that caused th
10ae0 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  e constraint.** 
10af0 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73  error is not ins
10b00 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  erted or updated
10b10 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
10b20 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
10b30 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72  rror.** is retur
10b40 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65  ned.  REPLACE me
10b50 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73  ans that preexis
10b60 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f  ting database ro
10b70 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a  ws that caused.*
10b80 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  * a UNIQUE const
10b90 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
10ba0 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74  are removed so t
10bb0 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65  hat the new inse
10bc0 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20  rt or.** update 
10bd0 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72  can proceed.  Pr
10be0 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
10bf0 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20  es and no error 
10c00 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a  is reported..**.
10c10 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54  ** RESTRICT, SET
10c20 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44  NULL, and CASCAD
10c30 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20  E actions apply 
10c40 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20  only to foreign 
10c50 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43  keys..** RESTRIC
10c60 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  T is the same as
10c70 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44   ABORT for IMMED
10c80 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79  IATE foreign key
10c90 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d  s and the.** sam
10ca0 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f  e as ROLLBACK fo
10cb0 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e  r DEFERRED keys.
10cc0 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20    SETNULL means 
10cd0 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e  that the foreign
10ce0 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74  .** key is set t
10cf0 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45  o NULL.  CASCADE
10d00 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45   means that a DE
10d10 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f  LETE or UPDATE o
10d20 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e  f the.** referen
10d30 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73  ced table row is
10d40 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f   propagated into
10d50 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f   the row that ho
10d60 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69  lds the.** forei
10d70 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54  gn key..** .** T
10d80 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d  he following sym
10d90 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65  bolic values are
10da0 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20   used to record 
10db0 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66  which type.** of
10dc0 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e   action to take.
10dd0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e  .*/.#define OE_N
10de0 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54  one     0   /* T
10df0 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74  here is no const
10e00 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a  raint to check *
10e10 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c  /.#define OE_Rol
10e20 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69  lback 1   /* Fai
10e30 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  l the operation 
10e40 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  and rollback the
10e50 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
10e60 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74  #define OE_Abort
10e70 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20      2   /* Back 
10e80 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20  out changes but 
10e90 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74  do no rollback t
10ea0 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
10eb0 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20  efine OE_Fail   
10ec0 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68    3   /* Stop th
10ed0 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20  e operation but 
10ee0 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20  leave all prior 
10ef0 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
10f00 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34  ne OE_Ignore   4
10f10 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65     /* Ignore the
10f20 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64   error. Do not d
10f30 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20  o the INSERT or 
10f40 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
10f50 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20  e OE_Replace  5 
10f60 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73    /* Delete exis
10f70 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65  ting record, the
10f80 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55  n do INSERT or U
10f90 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e  PDATE */..#defin
10fa0 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20  e OE_Restrict 6 
10fb0 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f    /* OE_Abort fo
10fc0 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f  r IMMEDIATE, OE_
10fd0 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46  Rollback for DEF
10fe0 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65  ERRED */.#define
10ff0 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20   OE_SetNull  7  
11000 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
11010 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
11020 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
11030 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20   OE_SetDflt  8  
11040 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
11050 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
11060 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a   its default */.
11070 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61  #define OE_Casca
11080 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61  de  9   /* Casca
11090 64 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a  de the changes *
110a0 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65  /..#define OE_De
110b0 66 61 75 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f  fault  10  /* Do
110c0 20 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65   whatever the de
110d0 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20  fault action is 
110e0 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  */.../*.** An in
110f0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
11100 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
11110 65 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74  e is passed as t
11120 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75  he first.** argu
11130 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56  ment to sqlite3V
11140 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e  dbeKeyCompare an
11150 64 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e  d is used to con
11160 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d  trol the .** com
11170 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74  parison of the t
11180 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a  wo index keys..*
11190 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61  *.** Note that a
111a0 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20  SortOrder[] and 
111b0 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69  aColl[] have nFi
111c0 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68  eld+1 slots.  Th
111d0 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c  ere.** are nFiel
111e0 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20  d slots for the 
111f0 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e  columns of an in
11200 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74  dex then one ext
11210 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74  ra slot.** for t
11220 68 65 20 72 6f 77 69 64 20 61 74 20 74 68 65 20  he rowid at the 
11230 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b  end..*/.struct K
11240 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e  eyInfo {.  u32 n
11250 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Ref;           /
11260 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65  * Number of refe
11270 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b  rences to this K
11280 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f  eyInfo object */
11290 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
112a0 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
112b0 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66  ncoding - one of
112c0 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a   the SQLITE_UTF*
112d0 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36   values */.  u16
112e0 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
112f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65   /* Number of ke
11300 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  y columns in the
11310 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20   index */.  u16 
11320 6e 58 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20  nXField;        
11330 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
11340 75 6d 6e 73 20 62 65 79 6f 6e 64 20 74 68 65 20  umns beyond the 
11350 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  key columns */. 
11360 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
11370 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
11380 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
11390 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
113a0 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74  der;     /* Sort
113b0 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68 20   order for each 
113c0 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c  column. */.  Col
113d0 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20  lSeq *aColl[1]; 
113e0 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
113f0 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20  quence for each 
11400 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20  term of the key 
11410 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
11420 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
11430 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
11440 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d  ure holds inform
11450 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a 2a  ation about a.**
11460 20 73 69 6e 67 6c 65 20 69 6e 64 65 78 20 72 65   single index re
11470 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61 6c  cord that has al
11480 72 65 61 64 79 20 62 65 65 6e 20 70 61 72 73 65  ready been parse
11490 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76  d out into indiv
114a0 69 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e  idual.** values.
114b0 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20  .**.** A record 
114c0 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61  is an object tha
114d0 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  t contains one o
114e0 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66  r more fields of
114f0 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64   data..** Record
11500 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74  s are used to st
11510 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ore the content 
11520 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61  of a table row a
11530 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74  nd to store.** t
11540 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64  he key of an ind
11550 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f  ex.  A blob enco
11560 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64  ding of a record
11570 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a   is created by.*
11580 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63  * the OP_MakeRec
11590 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68  ord opcode of th
115a0 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69  e VDBE and is di
115b0 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68  sassembled by th
115c0 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f  e.** OP_Column o
115d0 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  pcode..**.** Thi
115e0 73 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  s structure hold
115f0 73 20 61 20 72 65 63 6f 72 64 20 74 68 61 74 20  s a record that 
11600 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
11610 20 64 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a 2a   disassembled.**
11620 20 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74 69   into its consti
11630 74 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a 2a  tuent fields..**
11640 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20 72  .** The r1 and r
11650 32 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c  2 member variabl
11660 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64  es are only used
11670 20 62 79 20 74 68 65 20 6f 70 74 69 6d 69 7a 65   by the optimize
11680 64 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20  d comparison.** 
11690 66 75 6e 63 74 69 6f 6e 73 20 76 64 62 65 52 65  functions vdbeRe
116a0 63 6f 72 64 43 6f 6d 70 61 72 65 49 6e 74 28 29  cordCompareInt()
116b0 20 61 6e 64 20 76 64 62 65 52 65 63 6f 72 64 43   and vdbeRecordC
116c0 6f 6d 70 61 72 65 53 74 72 69 6e 67 28 29 2e 0a  ompareString()..
116d0 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b  */.struct Unpack
116e0 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79  edRecord {.  Key
116f0 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20  Info *pKeyInfo; 
11700 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e   /* Collation an
11710 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66  d sort-order inf
11720 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 31  ormation */.  u1
11730 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  6 nField;       
11740 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
11750 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b  ntries in apMem[
11760 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66 61 75 6c  ] */.  i8 defaul
11770 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f  t_rc;      /* Co
11780 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20  mparison result 
11790 69 66 20 6b 65 79 73 20 61 72 65 20 65 71 75 61  if keys are equa
117a0 6c 20 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f 64  l */.  u8 errCod
117b0 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72  e;         /* Er
117c0 72 6f 72 20 64 65 74 65 63 74 65 64 20 62 79 20  ror detected by 
117d0 78 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 20 28  xRecordCompare (
117e0 43 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d  CORRUPT or NOMEM
117f0 29 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d  ) */.  Mem *aMem
11800 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61  ;          /* Va
11810 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 31  lues */.  int r1
11820 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
11830 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
11840 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20   if (lhs > rhs) 
11850 2a 2f 0a 20 20 69 6e 74 20 72 32 3b 20 20 20 20  */.  int r2;    
11860 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
11870 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28  e to return if (
11880 72 68 73 20 3c 20 6c 68 73 29 20 2a 2f 0a 7d 3b  rhs < lhs) */.};
11890 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  .../*.** Each SQ
118a0 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65  L index is repre
118b0 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
118c0 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
118d0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
118e0 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
118f0 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73  *.** The columns
11900 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
11910 61 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64  at are to be ind
11920 65 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62  exed are describ
11930 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43  ed.** by the aiC
11940 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66  olumn[] field of
11950 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
11960 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73    For example, s
11970 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76  uppose.** we hav
11980 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  e the following 
11990 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a  table and index:
119a0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  .**.**     CREAT
119b0 45 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69  E TABLE Ex1(c1 i
119c0 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74  nt, c2 int, c3 t
119d0 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45  ext);.**     CRE
119e0 41 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e  ATE INDEX Ex2 ON
119f0 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a   Ex1(c3,c1);.**.
11a00 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20  ** In the Table 
11a10 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
11a20 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d  bing Ex1, nCol==
11a30 33 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20  3 because there 
11a40 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c  are.** three col
11a50 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
11a60 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78  e.  In the Index
11a70 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
11a80 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43  ibing.** Ex2, nC
11a90 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32  olumn==2 since 2
11aa0 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e   of the 3 column
11ab0 73 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64  s of Ex1 are ind
11ac0 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c  exed..** The val
11ad0 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69  ue of aiColumn i
11ae0 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c  s {2, 0}.  aiCol
11af0 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73  umn[0]==2 becaus
11b00 65 20 74 68 65 20 0a 2a 2a 20 66 69 72 73 74 20  e the .** first 
11b10 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64  column to be ind
11b20 65 78 65 64 20 28 63 33 29 20 68 61 73 20 61 6e  exed (c3) has an
11b30 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45   index of 2 in E
11b40 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68  x1.aCol[]..** Th
11b50 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20  e second column 
11b60 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63  to be indexed (c
11b70 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  1) has an index 
11b80 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61  of 0 in.** Ex1.a
11b90 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32  Col[], hence Ex2
11ba0 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e  .aiColumn[1]==0.
11bb0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78  .**.** The Index
11bc0 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64  .onError field d
11bd0 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65  etermines whethe
11be0 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64  r or not the ind
11bf0 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  exed columns.** 
11c00 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65 20 61  must be unique a
11c10 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66  nd what to do if
11c20 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20   they are not.  
11c30 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72  When Index.onErr
11c40 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69  or=OE_None,.** i
11c50 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20  t means this is 
11c60 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64  not a unique ind
11c70 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69  ex.  Otherwise i
11c80 74 20 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e  t is a unique in
11c90 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76  dex.** and the v
11ca0 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e  alue of Index.on
11cb0 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74  Error indicate t
11cc0 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63  he which conflic
11cd0 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a  t resolution .**
11ce0 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d   algorithm to em
11cf0 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e  ploy whenever an
11d00 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65   attempt is made
11d10 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e   to insert a non
11d20 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65  -unique.** eleme
11d30 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  nt..*/.struct In
11d40 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  dex {.  char *zN
11d50 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
11d60 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
11d70 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20   index */.  i16 
11d80 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  *aiColumn;      
11d90 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f       /* Which co
11da0 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62  lumns are used b
11db0 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31  y this index.  1
11dc0 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67  st is 0 */.  Log
11dd0 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74  Est *aiRowLogEst
11de0 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e  ;     /* From AN
11df0 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73  ALYZE: Est. rows
11e00 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63   selected by eac
11e10 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61  h column */.  Ta
11e20 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20  ble *pTable;    
11e30 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51         /* The SQ
11e40 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e  L table being in
11e50 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  dexed */.  char 
11e60 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20  *zColAff;       
11e70 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65      /* String de
11e80 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
11e90 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
11ea0 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
11eb0 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
11ec0 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64   /* The next ind
11ed0 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ex associated wi
11ee0 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c  th the same tabl
11ef0 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
11f00 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20  Schema;         
11f10 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
11f20 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20  ning this index 
11f30 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
11f40 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  der;          /*
11f50 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
11f60 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61  : True==DESC, Fa
11f70 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 68  lse==ASC */.  ch
11f80 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20  ar **azColl;    
11f90 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
11fa0 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  of collation seq
11fb0 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20  uence names for 
11fc0 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20  index */.  Expr 
11fd0 2a 70 50 61 72 74 49 64 78 57 68 65 72 65 3b 20  *pPartIdxWhere; 
11fe0 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61      /* WHERE cla
11ff0 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20  use for partial 
12000 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 4b 65 79  indices */.  Key
12010 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20  Info *pKeyInfo; 
12020 20 20 20 20 20 20 2f 2a 20 41 20 4b 65 79 49 6e        /* A KeyIn
12030 66 6f 20 6f 62 6a 65 63 74 20 73 75 69 74 61 62  fo object suitab
12040 6c 65 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65  le for this inde
12050 78 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  x */.  int tnum;
12060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12070 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61  /* DB Page conta
12080 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68  ining root of th
12090 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f  is index */.  Lo
120a0 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20  gEst szIdxRow;  
120b0 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
120c0 74 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20  ted average row 
120d0 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f  size in bytes */
120e0 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20  .  u16 nKeyCol; 
120f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
12100 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
12110 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79   forming the key
12120 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d   */.  u16 nColum
12130 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
12140 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
12150 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68  mns stored in th
12160 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20  e index */.  u8 
12170 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20  onError;        
12180 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72        /* OE_Abor
12190 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45  t, OE_Ignore, OE
121a0 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f  _Replace, or OE_
121b0 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  None */.  unsign
121c0 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20  ed idxType:2;   
121d0 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c     /* 1==UNIQUE,
121e0 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c   2==PRIMARY KEY,
121f0 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58   0==CREATE INDEX
12200 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62   */.  unsigned b
12210 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f  Unordered:1;   /
12220 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78  * Use this index
12230 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75   for == or IN qu
12240 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  eries only */.  
12250 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74  unsigned uniqNot
12260 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65  Null:1;  /* True
12270 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e   if UNIQUE and N
12280 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20  OT NULL for all 
12290 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73  columns */.  uns
122a0 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a  igned isResized:
122b0 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
122c0 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65   resizeIndexObje
122d0 63 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61  ct() has been ca
122e0 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  lled */.  unsign
122f0 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b  ed isCovering:1;
12300 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
12310 69 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67  is is a covering
12320 20 69 6e 64 65 78 20 2a 2f 0a 23 69 66 64 65 66   index */.#ifdef
12330 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
12340 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20  TAT3_OR_STAT4.  
12350 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20  int nSample;    
12360 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
12370 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69  er of elements i
12380 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20  n aSample[] */. 
12390 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b   int nSampleCol;
123a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
123b0 65 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65  e of IndexSample
123c0 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f  .anEq[] and so o
123d0 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  n */.  tRowcnt *
123e0 61 41 76 67 45 71 3b 20 20 20 20 20 20 20 20 20  aAvgEq;         
123f0 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76  /* Average nEq v
12400 61 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e  alues for keys n
12410 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f  ot in aSample */
12420 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a  .  IndexSample *
12430 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53  aSample;    /* S
12440 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65  amples of the le
12450 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20  ft-most key */. 
12460 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45   tRowcnt *aiRowE
12470 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e  st;       /* Non
12480 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61  -logarithmic sta
12490 74 31 20 64 61 74 61 20 66 6f 72 20 74 68 69 73  t1 data for this
124a0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77   index */.  tRow
124b0 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20  cnt nRowEst0;   
124c0 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61       /* Non-loga
124d0 72 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f  rithmic number o
124e0 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e  f rows in the in
124f0 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b  dex */.#endif.};
12500 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
12510 76 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78  values for Index
12520 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66  .idxType.*/.#def
12530 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
12540 50 45 5f 41 50 50 44 45 46 20 20 20 20 20 20 30  PE_APPDEF      0
12550 20 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73     /* Created us
12560 69 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45 58  ing CREATE INDEX
12570 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
12580 54 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55  TE_IDXTYPE_UNIQU
12590 45 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d  E      1   /* Im
125a0 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55  plements a UNIQU
125b0 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  E constraint */.
125c0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
125d0 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45  DXTYPE_PRIMARYKE
125e0 59 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65  Y  2   /* Is the
125f0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72   PRIMARY KEY for
12600 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f   the table */../
12610 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
12620 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 50 52   index X is a PR
12630 49 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20  IMARY KEY index 
12640 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69  */.#define IsPri
12650 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20  maryKeyIndex(X) 
12660 20 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d   ((X)->idxType==
12670 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50  SQLITE_IDXTYPE_P
12680 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52  RIMARYKEY)../* R
12690 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e  eturn true if in
126a0 64 65 78 20 58 20 69 73 20 61 20 55 4e 49 51 55  dex X is a UNIQU
126b0 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  E index */.#defi
126c0 6e 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78  ne IsUniqueIndex
126d0 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f  (X)      ((X)->o
126e0 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29  nError!=OE_None)
126f0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d  ../*.** Each sam
12700 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  ple stored in th
12710 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e sqlite_stat3 t
12720 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e  able is represen
12730 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 0a 2a  ted in memory .*
12740 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75 63 74  * using a struct
12750 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65  ure of this type
12760 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61  .  See documenta
12770 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20  tion at the top 
12780 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a  of the.** analyz
12790 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20  e.c source file 
127a0 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
127b0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
127c0 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c  truct IndexSampl
127d0 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20  e {.  void *p;  
127e0 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
127f0 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65  er to sampled re
12800 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b  cord */.  int n;
12810 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
12820 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e  ize of record in
12830 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77   bytes */.  tRow
12840 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a  cnt *anEq;    /*
12850 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
12860 72 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b  rows where the k
12870 65 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73  ey equals this s
12880 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
12890 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20  nt *anLt;    /* 
128a0 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
128b0 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73  ows where key is
128c0 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
128d0 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77  sample */.  tRow
128e0 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a  cnt *anDLt;   /*
128f0 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
12900 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65  distinct keys le
12910 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d  ss than this sam
12920 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ple */.};../*.**
12930 20 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69   Each token comi
12940 6e 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65  ng out of the le
12950 78 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  xer is an instan
12960 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74  ce of.** this st
12970 72 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73  ructure.  Tokens
12980 20 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61   are also used a
12990 73 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70  s part of an exp
129a0 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e  ression..**.** N
129b0 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d  ote if Token.z==
129c0 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e  0 then Token.dyn
129d0 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65   and Token.n are
129e0 20 75 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a   undefined and.*
129f0 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61  * may contain ra
12a00 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f  ndom values.  Do
12a10 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73   not make any as
12a20 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74 20  sumptions about 
12a30 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64  Token.dyn.** and
12a40 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f   Token.n when To
12a50 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72  ken.z==0..*/.str
12a60 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f  uct Token {.  co
12a70 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20  nst char *z;    
12a80 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20   /* Text of the 
12a90 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c  token.  Not NULL
12aa0 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a  -terminated! */.
12ab0 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e    unsigned int n
12ac0 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  ;    /* Number o
12ad0 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20  f characters in 
12ae0 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b  this token */.};
12af0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
12b00 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
12b10 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69  cture contains i
12b20 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65  nformation neede
12b30 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a  d to generate.**
12b40 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45   code for a SELE
12b50 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  CT that contains
12b60 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
12b70 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45  ions..**.** If E
12b80 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43  xpr.op==TK_AGG_C
12b90 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f  OLUMN or TK_AGG_
12ba0 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78  FUNCTION then Ex
12bb0 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61  pr.pAggInfo is a
12bc0 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  .** pointer to t
12bd0 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
12be0 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  The Expr.iColumn
12bf0 20 66 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e   field is the in
12c00 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66  dex in.** AggInf
12c10 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49  o.aCol[] or AggI
12c20 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69  nfo.aFunc[] of i
12c30 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65  nformation neede
12c40 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a  d to generate.**
12c50 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e   code for that n
12c60 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e  ode..**.** AggIn
12c70 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20  fo.pGroupBy and 
12c80 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45  AggInfo.aFunc.pE
12c90 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65  xpr point to fie
12ca0 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a  lds within the.*
12cb0 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63  * original Selec
12cc0 74 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  t structure that
12cd0 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20 53   describes the S
12ce0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
12cf0 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64    These.** field
12d00 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f  s do not need to
12d10 20 62 65 20 66 72 65 65 64 20 77 68 65 6e 20 64   be freed when d
12d20 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20  eallocating the 
12d30 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72  AggInfo structur
12d40 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67  e..*/.struct Agg
12d50 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65  Info {.  u8 dire
12d60 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ctMode;         
12d70 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65   /* Direct rende
12d80 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20  ring mode means 
12d90 74 61 6b 65 20 64 61 74 61 20 64 69 72 65 63 74  take data direct
12da0 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ly.             
12db0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
12dc0 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c  from source tabl
12dd0 65 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 66  es rather than f
12de0 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73  rom accumulators
12df0 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74   */.  u8 useSort
12e00 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a  ingIdx;       /*
12e10 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c   In direct mode,
12e20 20 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 73   reference the s
12e30 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74  orting index rat
12e40 68 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  her.            
12e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
12e60 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65   than the source
12e70 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20   table */.  int 
12e80 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20  sortingIdx;     
12e90 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
12ea0 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74  mber of the sort
12eb0 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ing index */.  i
12ec0 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61  nt sortingIdxPTa
12ed0 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72  b;     /* Cursor
12ee0 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64   number of pseud
12ef0 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  o-table */.  int
12f00 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b   nSortingColumn;
12f10 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12f20 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
12f30 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
12f40 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d  /.  int mnReg, m
12f50 78 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52  xReg;       /* R
12f60 61 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65 72  ange of register
12f70 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
12f80 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a  aCol and aFunc *
12f90 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47  /.  ExprList *pG
12fa0 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54  roupBy;     /* T
12fb0 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75  he group by clau
12fc0 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41  se */.  struct A
12fd0 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20  ggInfo_col {    
12fe0 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75  /* For each colu
12ff0 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63  mn used in sourc
13000 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20  e tables */.    
13010 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
13020 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72           /* Sour
13030 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
13040 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
13050 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
13060 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
13070 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
13080 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e  .    int iColumn
13090 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
130a0 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77   Column number w
130b0 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65  ithin the source
130c0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
130d0 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b  t iSorterColumn;
130e0 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e         /* Column
130f0 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73   number in the s
13100 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
13110 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20      int iMem;   
13120 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13130 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  Memory location 
13140 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63  that acts as acc
13150 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20  umulator */.    
13160 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
13170 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
13180 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73  original express
13190 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c  ion */.  } *aCol
131a0 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b  ;.  int nColumn;
131b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
131c0 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e  umber of used en
131d0 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20  tries in aCol[] 
131e0 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75  */.  int nAccumu
131f0 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20  lator;       /* 
13200 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
13210 73 20 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f  s that show thro
13220 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75  ugh to the outpu
13230 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
13240 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
13250 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d  Additional colum
13260 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79  ns are used only
13270 20 61 73 20 70 61 72 61 6d 65 74 65 72 73 20 74   as parameters t
13280 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  o.              
13290 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61              ** a
132a0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
132b0 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41  ns */.  struct A
132c0 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20  ggInfo_func {   
132d0 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67 72  /* For each aggr
132e0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a  egate function *
132f0 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
13300 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
13310 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63  * Expression enc
13320 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69  oding the functi
13330 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65  on */.    FuncDe
13340 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20  f *pFunc;       
13350 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67     /* The aggreg
13360 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70  ate function imp
13370 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20  lementation */. 
13380 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20     int iMem;    
13390 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
133a0 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
133b0 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75  hat acts as accu
133c0 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69  mulator */.    i
133d0 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20  nt iDistinct;   
133e0 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d          /* Ephem
133f0 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20  eral table used 
13400 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49  to enforce DISTI
13410 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e  NCT */.  } *aFun
13420 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20  c;.  int nFunc; 
13430 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13440 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
13450 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a  s in aFunc[] */.
13460 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61  };../*.** The da
13470 74 61 74 79 70 65 20 79 6e 56 61 72 20 69 73 20  tatype ynVar is 
13480 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  a signed integer
13490 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69 74 20  , either 16-bit 
134a0 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73  or 32-bit..** Us
134b0 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62  ually it is 16-b
134c0 69 74 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c  its.  But if SQL
134d0 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
134e0 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61 74  _NUMBER is great
134f0 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37  er.** than 32767
13500 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65   we have to make
13510 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d   it 32-bit.  16-
13520 62 69 74 20 69 73 20 70 72 65 66 65 72 72 65 64  bit is preferred
13530 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75   because.** it u
13540 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20  ses less memory 
13550 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65  in the Expr obje
13560 63 74 2c 20 77 68 69 63 68 20 69 73 20 61 20 62  ct, which is a b
13570 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a  ig memory user.*
13580 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74  * in systems wit
13590 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72  h lots of prepar
135a0 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20  ed statements.  
135b0 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61 74  And few applicat
135c0 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72  ions.** need mor
135d0 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20  e than about 10 
135e0 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e  or 20 variables.
135f0 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65    But some extre
13600 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a  me users want.**
13610 20 74 6f 20 68 61 76 65 20 70 72 65 70 61 72 65   to have prepare
13620 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  d statements wit
13630 68 20 6f 76 65 72 20 33 32 37 36 37 20 76 61 72  h over 32767 var
13640 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20  iables, and for 
13650 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69  them.** the opti
13660 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20  on is available 
13670 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  (at compile-time
13680 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  )..*/.#if SQLITE
13690 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
136a0 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65  MBER<=32767.type
136b0 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23  def i16 ynVar;.#
136c0 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74  else.typedef int
136d0 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a   ynVar;.#endif..
136e0 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20  /*.** Each node 
136f0 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  of an expression
13700 20 69 6e 20 74 68 65 20 70 61 72 73 65 20 74 72   in the parse tr
13710 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  ee is an instanc
13720 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  e.** of this str
13730 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78  ucture..**.** Ex
13740 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63  pr.op is the opc
13750 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72  ode. The integer
13760 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f   parser token co
13770 64 65 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a  des are reused.*
13780 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72  * as opcodes her
13790 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  e. For example, 
137a0 74 68 65 20 70 61 72 73 65 72 20 64 65 66 69 6e  the parser defin
137b0 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61  es TK_GE to be a
137c0 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64  n integer.** cod
137d0 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74  e representing t
137e0 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72  he ">=" operator
137f0 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65  . This same inte
13800 67 65 72 20 63 6f 64 65 20 69 73 20 72 65 75 73  ger code is reus
13810 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65  ed.** to represe
13820 6e 74 20 74 68 65 20 67 72 65 61 74 65 72 2d 74  nt the greater-t
13830 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20  han-or-equal-to 
13840 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20  operator in the 
13850 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72  expression.** tr
13860 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ee..**.** If the
13870 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
13880 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54  n SQL literal (T
13890 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c  K_INTEGER, TK_FL
138a0 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a  OAT, TK_BLOB, .*
138b0 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c  * or TK_STRING),
138c0 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
138d0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65   contains the te
138e0 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69  xt of the SQL li
138f0 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65  teral. If.** the
13900 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
13910 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41   variable (TK_VA
13920 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78  RIABLE), then Ex
13930 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
13940 73 20 74 68 65 20 0a 2a 2a 20 76 61 72 69 61 62  s the .** variab
13950 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79  le name. Finally
13960 2c 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  , if the express
13970 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75  ion is an SQL fu
13980 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54  nction (TK_FUNCT
13990 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78  ION),.** then Ex
139a0 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
139b0 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
139c0 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  e function..**.*
139d0 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e  * Expr.pRight an
139e0 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65  d Expr.pLeft are
139f0 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69   the left and ri
13a00 67 68 74 20 73 75 62 65 78 70 72 65 73 73 69 6f  ght subexpressio
13a10 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72  ns of a.** binar
13a20 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68  y operator. Eith
13a30 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62  er or both may b
13a40 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78  e NULL..**.** Ex
13a50 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20  pr.x.pList is a 
13a60 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74  list of argument
13a70 73 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  s if the express
13a80 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75  ion is an SQL fu
13a90 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53  nction,.** a CAS
13aa0 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20  E expression or 
13ab0 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e  an IN expression
13ac0 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c   of the form "<l
13ad0 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e  hs> IN (<y>, <z>
13ae0 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78  ...)"..** Expr.x
13af0 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73 65 64  .pSelect is used
13b00 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
13b10 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65  on is a sub-sele
13b20 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73  ct or an express
13b30 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f  ion of.** the fo
13b40 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45  rm "<lhs> IN (SE
13b50 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74  LECT ...)". If t
13b60 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20  he EP_xIsSelect 
13b70 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 74 68  bit is set in th
13b80 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20  e.** Expr.flags 
13b90 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e  mask, then Expr.
13ba0 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c  x.pSelect is val
13bb0 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45  id. Otherwise, E
13bc0 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 0a  xpr.x.pList is .
13bd0 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20  ** valid..**.** 
13be0 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  An expression of
13bf0 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20   the form ID or 
13c00 49 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20  ID.ID refers to 
13c10 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61  a column in a ta
13c20 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68  ble..** For such
13c30 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78   expressions, Ex
13c40 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20  pr.op is set to 
13c50 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78  TK_COLUMN and Ex
13c60 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20  pr.iTable is.** 
13c70 74 68 65 20 69 6e 74 65 67 65 72 20 63 75 72 73  the integer curs
13c80 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56  or number of a V
13c90 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  DBE cursor point
13ca0 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c  ing to that tabl
13cb0 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43  e and.** Expr.iC
13cc0 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c  olumn is the col
13cd0 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  umn number for t
13ce0 68 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75  he specific colu
13cf0 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65  mn.  If the.** e
13d00 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65  xpression is use
13d10 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e  d as a result in
13d20 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 53 45   an aggregate SE
13d30 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a  LECT, then the.*
13d40 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20  * value is also 
13d50 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78  stored in the Ex
13d60 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69  pr.iAgg column i
13d70 6e 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20  n the aggregate 
13d80 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61  so that.** it ca
13d90 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 61 66  n be accessed af
13da0 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74  ter all aggregat
13db0 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e  es are computed.
13dc0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
13dd0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75  pression is an u
13de0 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20  nbound variable 
13df0 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73 74 69  marker (a questi
13e00 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63 68 61 72  on mark .** char
13e10 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65  acter '?' in the
13e20 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74   original SQL) t
13e30 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61  hen the Expr.iTa
13e40 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e  ble holds the in
13e50 64 65 78 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 66  dex .** number f
13e60 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c 65  or that variable
13e70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
13e80 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
13e90 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78 70  ubquery then Exp
13ea0 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20  r.iColumn holds 
13eb0 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65  an integer.** re
13ec0 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f  gister number co
13ed0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73  ntaining the res
13ee0 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71 75  ult of the subqu
13ef0 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ery.  If the.** 
13f00 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20 61  subquery gives a
13f10 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74   constant result
13f20 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73  , then iTable is
13f30 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75 62   -1.  If the sub
13f40 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61  query.** gives a
13f50 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65   different answe
13f60 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20 74  r at different t
13f70 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61 74  imes during stat
13f80 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67  ement processing
13f90 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20  .** then iTable 
13fa0 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  is the address o
13fb0 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74  f a subroutine t
13fc0 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65  hat computes the
13fd0 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a   subquery..**.**
13fe0 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73 20   If the Expr is 
13ff0 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d  of type OP_Colum
14000 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65  n, and the table
14010 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67   it is selecting
14020 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69   from.** is a di
14030 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20  sk table or the 
14040 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74  "old.*" pseudo-t
14050 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20  able, then pTab 
14060 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
14070 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
14080 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e  able definition.
14090 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f  .**.** ALLOCATIO
140a0 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45  N NOTES:.**.** E
140b0 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20  xpr objects can 
140c0 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d  use a lot of mem
140d0 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61 74  ory space in dat
140e0 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54  abase schema.  T
140f0 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65  o.** help reduce
14100 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d   memory requirem
14110 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20  ents, sometimes 
14120 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77  an Expr object w
14130 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61  ill be.** trunca
14140 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64  ted.  And to red
14150 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  uce the number o
14160 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  f memory allocat
14170 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a  ions, sometimes.
14180 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45  ** two or more E
14190 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c  xpr objects will
141a0 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20   be stored in a 
141b0 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c  single memory al
141c0 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67  location,.** tog
141d0 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72 2e  ether with Expr.
141e0 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a  zToken strings..
141f0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f  **.** If the EP_
14200 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54  Reduced and EP_T
14210 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61  okenOnly flags a
14220 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61  re set when.** a
14230 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73  n Expr object is
14240 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65   truncated.  Whe
14250 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20  n EP_Reduced is 
14260 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a  set, then all.**
14270 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72 20   the child Expr 
14280 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45  objects in the E
14290 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78  xpr.pLeft and Ex
142a0 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72 65  pr.pRight subtre
142b0 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69  es.** are contai
142c0 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 73  ned within the s
142d0 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ame memory alloc
142e0 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f  ation.  Note, ho
142f0 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74  wever, that.** t
14300 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20 45  he subtrees in E
14310 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45  xpr.x.pList or E
14320 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72  xpr.x.pSelect ar
14330 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61 74  e always separat
14340 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64  ely.** allocated
14350 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
14360 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45  whether or not E
14370 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74  P_Reduced is set
14380 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
14390 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20   {.  u8 op;     
143a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
143b0 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d  peration perform
143c0 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
143d0 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
143e0 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ty;         /* T
143f0 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74  he affinity of t
14400 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69  he column or 0 i
14410 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a  f not a column *
14420 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20  /.  u32 flags;  
14430 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
14440 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50  rious flags.  EP
14450 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a  _* See below */.
14460 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68    union {.    ch
14470 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20  ar *zToken;     
14480 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61       /* Token va
14490 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e  lue. Zero termin
144a0 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65  ated and dequote
144b0 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61  d */.    int iVa
144c0 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  lue;            
144d0 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20  /* Non-negative 
144e0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 66  integer value if
144f0 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a   EP_IntValue */.
14500 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20    } u;..  /* If 
14510 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
14520 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
14530 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
14540 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
14550 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
14560 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
14570 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
14580 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
14590 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
145a0 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
145b0 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
145c0 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a  r malfunction. .
145d0 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
145e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
145f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14600 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14610 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72  *******/..  Expr
14620 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20   *pLeft;        
14630 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f     /* Left subno
14640 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52  de */.  Expr *pR
14650 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f  ight;          /
14660 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20  * Right subnode 
14670 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
14680 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74   ExprList *pList
14690 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e  ;     /* op = IN
146a0 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
146b0 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e  , CASE, FUNCTION
146c0 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20  , BETWEEN */.   
146d0 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
146e0 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53  ;     /* EP_xIsS
146f0 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49  elect and op = I
14700 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43  N, EXISTS, SELEC
14710 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f  T */.  } x;..  /
14720 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
14730 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ced flag is set 
14740 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
14750 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
14760 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
14770 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
14780 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
14790 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
147a0 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
147b0 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
147c0 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
147d0 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
147e0 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
147f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14800 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14810 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14820 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20  *********/..#if 
14830 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
14840 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48  DEPTH>0.  int nH
14850 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
14860 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68   /* Height of th
14870 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79  e tree headed by
14880 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65   this node */.#e
14890 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c  ndif.  int iTabl
148a0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
148b0 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73   TK_COLUMN: curs
148c0 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62  or number of tab
148d0 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d  le holding colum
148e0 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
148f0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
14900 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73  _REGISTER: regis
14910 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20  ter number.     
14920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14930 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45      ** TK_TRIGGE
14940 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d  R: 1 -> new, 0 -
14950 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20  > old.          
14960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
14970 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20  * EP_Unlikely:  
14980 31 33 34 32 31 37 37 32 38 20 74 69 6d 65 73 20  134217728 times 
14990 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f 0a 20 20  likelihood */.  
149a0 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20  ynVar iColumn;  
149b0 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c         /* TK_COL
149c0 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  UMN: column inde
149d0 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64  x.  -1 for rowid
149e0 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
149f0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
14a00 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61  _VARIABLE: varia
14a10 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61  ble number (alwa
14a20 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20 69  ys >= 1). */.  i
14a30 31 36 20 69 41 67 67 3b 20 20 20 20 20 20 20 20  16 iAgg;        
14a40 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65        /* Which e
14a50 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f  ntry in pAggInfo
14a60 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46  ->aCol[] or ->aF
14a70 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69  unc[] */.  i16 i
14a80 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20  RightJoinTable; 
14a90 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a    /* If EP_FromJ
14aa0 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74  oin, the right t
14ab0 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e  able of the join
14ac0 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20   */.  u8 op2;   
14ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14ae0 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69  TK_REGISTER: ori
14af0 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45  ginal value of E
14b00 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20  xpr.op.         
14b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68  ** TK_COLUMN: th
14b30 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f  e value of p5 fo
14b40 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20  r OP_Column.    
14b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b60 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46       ** TK_AGG_F
14b70 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67  UNCTION: nesting
14b80 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49   depth */.  AggI
14b90 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20  nfo *pAggInfo;  
14ba0 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b     /* Used by TK
14bb0 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  _AGG_COLUMN and 
14bc0 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20  TK_AGG_FUNCTION 
14bd0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
14be0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
14bf0 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55  able for TK_COLU
14c00 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  MN expressions. 
14c10 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
14c20 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74   following are t
14c30 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62  he meanings of b
14c40 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  its in the Expr.
14c50 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
14c60 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a  #define EP_FromJ
14c70 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a  oin  0x000001 /*
14c80 20 4f 72 69 67 69 6e 61 74 65 64 20 69 6e 20 4f   Originated in O
14c90 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73  N or USING claus
14ca0 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 23  e of a join */.#
14cb0 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20  define EP_Agg   
14cc0 20 20 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20      0x000002 /* 
14cd0 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  Contains one or 
14ce0 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
14cf0 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
14d00 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65 64 20  ine EP_Resolved 
14d10 20 30 78 30 30 30 30 30 34 20 2f 2a 20 49 44 73   0x000004 /* IDs
14d20 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c   have been resol
14d30 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a  ved to COLUMNs *
14d40 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 45 72 72  /.#define EP_Err
14d50 6f 72 20 20 20 20 20 30 78 30 30 30 30 30 38 20  or     0x000008 
14d60 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 63 6f  /* Expression co
14d70 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
14d80 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65  re errors */.#de
14d90 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74  fine EP_Distinct
14da0 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20 41 67    0x000010 /* Ag
14db0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
14dc0 20 77 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b   with DISTINCT k
14dd0 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e  eyword */.#defin
14de0 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30  e EP_VarSelect 0
14df0 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65  x000020 /* pSele
14e00 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64  ct is correlated
14e10 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a  , not constant *
14e20 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c  /.#define EP_Dbl
14e30 51 75 6f 74 65 64 20 30 78 30 30 30 30 34 30 20  Quoted 0x000040 
14e40 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f  /* token.z was o
14e50 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e  riginally in "..
14e60 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ." */.#define EP
14e70 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30  _InfixFunc 0x000
14e80 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  080 /* True for 
14e90 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f  an infix functio
14ea0 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65  n: LIKE, GLOB, e
14eb0 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  tc */.#define EP
14ec0 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30  _Collate   0x000
14ed0 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74  100 /* Tree cont
14ee0 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54  ains a TK_COLLAT
14ef0 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64  E operator */.#d
14f00 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69 63  efine EP_Generic
14f10 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20 49     0x000200 /* I
14f20 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72  gnore COLLATE or
14f30 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68 69   affinity on thi
14f40 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e  s tree */.#defin
14f50 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 30  e EP_IntValue  0
14f60 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67  x000400 /* Integ
14f70 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e  er value contain
14f80 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a  ed in u.iValue *
14f90 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73  /.#define EP_xIs
14fa0 53 65 6c 65 63 74 20 30 78 30 30 30 38 30 30 20  Select 0x000800 
14fb0 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20  /* x.pSelect is 
14fc0 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65  valid (otherwise
14fd0 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a   x.pList is) */.
14fe0 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20  #define EP_Skip 
14ff0 20 20 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a       0x001000 /*
15000 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72   COLLATE, AS, or
15010 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65   UNLIKELY */.#de
15020 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20  fine EP_Reduced 
15030 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78    0x002000 /* Ex
15040 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 52  pr struct EXPR_R
15050 45 44 55 43 45 44 53 49 5a 45 20 62 79 74 65 73  EDUCEDSIZE bytes
15060 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
15070 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78   EP_TokenOnly 0x
15080 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73  004000 /* Expr s
15090 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e  truct EXPR_TOKEN
150a0 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f  ONLYSIZE bytes o
150b0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
150c0 50 5f 53 74 61 74 69 63 20 20 20 20 30 78 30 30  P_Static    0x00
150d0 38 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20  8000 /* Held in 
150e0 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69  memory not obtai
150f0 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ned from malloc(
15100 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ) */.#define EP_
15110 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30 30  MemToken  0x0100
15120 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71  00 /* Need to sq
15130 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45 78  lite3DbFree() Ex
15140 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65  pr.zToken */.#de
15150 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65  fine EP_NoReduce
15160 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61    0x020000 /* Ca
15170 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44  nnot EXPRDUP_RED
15180 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f  UCE this Expr */
15190 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69  .#define EP_Unli
151a0 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30 20 2f  kely  0x040000 /
151b0 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20  * unlikely() or 
151c0 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e  likelihood() fun
151d0 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
151e0 20 45 50 5f 43 6f 6e 73 74 61 6e 74 20 20 30 78   EP_Constant  0x
151f0 30 38 30 30 30 30 20 2f 2a 20 4e 6f 64 65 20 69  080000 /* Node i
15200 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a  s a constant */.
15210 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
15220 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
15230 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
15240 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
15250 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67  he .** Expr.flag
15260 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
15270 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65  ine ExprHasPrope
15280 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28  rty(E,P)     (((
15290 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d  E)->flags&(P))!=
152a0 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48  0).#define ExprH
152b0 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c  asAllProperty(E,
152c0 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73  P)  (((E)->flags
152d0 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66  &(P))==(P)).#def
152e0 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ine ExprSetPrope
152f0 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29  rty(E,P)     (E)
15300 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  ->flags|=(P).#de
15310 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72  fine ExprClearPr
15320 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45  operty(E,P)   (E
15330 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a  )->flags&=~(P)..
15340 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74 56 56  /* The ExprSetVV
15350 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72  AProperty() macr
15360 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 56 65  o is used for Ve
15370 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69  rification, Vali
15380 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41  dation,.** and A
15390 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c  ccreditation onl
153a0 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b  y.  It works lik
153b0 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74  e ExprSetPropert
153c0 79 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a  y() during VVA.*
153d0 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75 74 20  * processes but 
153e0 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64  is a no-op for d
153f0 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64  elivery..*/.#ifd
15400 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
15410 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  # define ExprSet
15420 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29  VVAProperty(E,P)
15430 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50    (E)->flags|=(P
15440 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
15450 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65   ExprSetVVAPrope
15460 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a  rty(E,P).#endif.
15470 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f  ./*.** Macros to
15480 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e   determine the n
15490 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72  umber of bytes r
154a0 65 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72  equired by a nor
154b0 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74 72  mal Expr .** str
154c0 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72  uct, an Expr str
154d0 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f  uct with the EP_
154e0 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65 74  Reduced flag set
154f0 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 20 0a   in Expr.flags .
15500 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73  ** and an Expr s
15510 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
15520 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
15530 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65   set..*/.#define
15540 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20   EXPR_FULLSIZE  
15550 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28           sizeof(
15560 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20  Expr)           
15570 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a  /* Full size */.
15580 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44  #define EXPR_RED
15590 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20  UCEDSIZE        
155a0 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54  offsetof(Expr,iT
155b0 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e  able)  /* Common
155c0 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65   features */.#de
155d0 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f  fine EXPR_TOKENO
155e0 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66  NLYSIZE      off
155f0 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74  setof(Expr,pLeft
15600 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61  )   /* Fewer fea
15610 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tures */../*.** 
15620 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
15630 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  the sqlite3ExprD
15640 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53  up() function. S
15650 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f  ee the header co
15660 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20  mment .** above 
15670 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
15680 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f   for details..*/
15690 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44 55 50  .#define EXPRDUP
156a0 5f 52 45 44 55 43 45 20 20 20 20 20 20 20 20 20  _REDUCE         
156b0 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20  0x0001  /* Used 
156c0 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70  reduced-size Exp
156d0 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  r nodes */../*.*
156e0 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72  * A list of expr
156f0 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65  essions.  Each e
15700 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70  xpression may op
15710 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a  tionally have a.
15720 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70  ** name.  An exp
15730 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69  r/name combinati
15740 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69  on can be used i
15750 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20  n several ways, 
15760 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c  such.** as the l
15770 69 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20  ist of "expr AS 
15780 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f  ID" fields follo
15790 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20  wing a "SELECT" 
157a0 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73  or in the.** lis
157b0 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22  t of "ID = expr"
157c0 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44   items in an UPD
157d0 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20  ATE.  A list of 
157e0 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a  expressions can.
157f0 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  ** also be used 
15800 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  as the argument 
15810 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69  to a function, i
15820 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
15830 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c   a.zName.** fiel
15840 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a  d is not used..*
15850 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20  *.** By default 
15860 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66  the Expr.zSpan f
15870 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d  ield holds a hum
15880 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63  an-readable desc
15890 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ription of.** th
158a0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  e expression tha
158b0 74 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65  t is used in the
158c0 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65   generation of e
158d0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e  rror messages an
158e0 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65  d.** column labe
158f0 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  ls.  In this cas
15900 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73  e, Expr.zSpan is
15910 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74   typically the t
15920 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75  ext of a.** colu
15930 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73  mn expression as
15940 20 69 74 20 65 78 69 73 74 73 20 69 6e 20 61 20   it exists in a 
15950 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
15960 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a  .  However, if.*
15970 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62  * the bSpanIsTab
15980 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68   flag is set, th
15990 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72  en zSpan is over
159a0 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74  loaded to mean t
159b0 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68  he name.** of th
159c0 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20  e result column 
159d0 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54  in the form: DAT
159e0 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55  ABASE.TABLE.COLU
159f0 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a  MN.  This later.
15a00 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20  ** form is used 
15a10 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74  for name resolut
15a20 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20  ion with nested 
15a30 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f  FROM clauses..*/
15a40 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74  .struct ExprList
15a50 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20   {.  int nExpr; 
15a60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
15a70 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73  umber of express
15a80 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  ions on the list
15a90 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70   */.  struct Exp
15aa0 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20  rList_item { /* 
15ab0 46 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73  For each express
15ac0 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ion in the list 
15ad0 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
15ae0 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  pr;            /
15af0 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78  * The list of ex
15b00 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20  pressions */.   
15b10 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
15b20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
15b30 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
15b40 68 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f  h this expressio
15b50 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  n */.    char *z
15b60 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20  Span;           
15b70 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78   /* Original tex
15b80 74 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73  t of the express
15b90 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f  ion */.    u8 so
15ba0 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
15bb0 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43     /* 1 for DESC
15bc0 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f   or 0 for ASC */
15bd0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f  .    unsigned do
15be0 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20  ne :1;       /* 
15bf0 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61  A flag to indica
15c00 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69  te when processi
15c10 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a  ng is finished *
15c20 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62  /.    unsigned b
15c30 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a  SpanIsTab :1; /*
15c40 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e   zSpan holds DB.
15c50 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a  TABLE.COLUMN */.
15c60 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75      unsigned reu
15c70 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43  sable :1;   /* C
15c80 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
15c90 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a  on is reusable *
15ca0 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20  /.    union {.  
15cb0 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20      struct {.   
15cc0 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42       u16 iOrderB
15cd0 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f  yCol;      /* Fo
15ce0 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75  r ORDER BY, colu
15cf0 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73  mn number in res
15d00 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20  ult set */.     
15d10 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20     u16 iAlias;  
15d20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
15d30 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c  x into Parse.aAl
15d40 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20  ias[] for zName 
15d50 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20  */.      } x;.  
15d60 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78      int iConstEx
15d70 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52  prReg;      /* R
15d80 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68  egister in which
15d90 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63   Expr value is c
15da0 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75  ached */.    } u
15db0 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20  ;.  } *a;       
15dc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
15dd0 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74  loc a power of t
15de0 77 6f 20 67 72 65 61 74 65 72 20 6f 72 20 65 71  wo greater or eq
15df0 75 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a  ual to nExpr */.
15e00 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
15e10 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
15e20 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
15e30 62 79 20 74 68 65 20 70 61 72 73 65 72 20 74 6f  by the parser to
15e40 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20   record both.** 
15e50 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66  the parse tree f
15e60 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
15e70 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66   and the span of
15e80 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20   input text for 
15e90 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  an.** expression
15ea0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
15eb0 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70  Span {.  Expr *p
15ec0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Expr;          /
15ed0 2a 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * The expression
15ee0 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20   parse tree */. 
15ef0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74   const char *zSt
15f00 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20  art;   /* First 
15f10 63 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70  character of inp
15f20 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e  ut text */.  con
15f30 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20  st char *zEnd;  
15f40 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63     /* One charac
15f50 74 65 72 20 70 61 73 74 20 74 68 65 20 65 6e 64  ter past the end
15f60 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
15f70 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
15f80 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
15f90 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f  structure can ho
15fa0 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74  ld a simple list
15fb0 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c   of identifiers,
15fc0 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20  .** such as the 
15fd0 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20  list "a,b,c" in 
15fe0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
15ff0 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20  atements:.**.** 
16000 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
16010 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53   t(a,b,c) VALUES
16020 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52   ...;.**      CR
16030 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f  EATE INDEX idx O
16040 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20  N t(a,b,c);.**  
16050 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
16060 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55  ER trig BEFORE U
16070 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63  PDATE ON t(a,b,c
16080 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65  ) ...;.**.** The
16090 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69   IdList.a.idx fi
160a0 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e  eld is used when
160b0 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72   the IdList repr
160c0 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20  esents the list 
160d0 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d  of.** column nam
160e0 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  es after a table
160f0 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45   name in an INSE
16100 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  RT statement.  I
16110 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  n the statement.
16120 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54  **.**     INSERT
16130 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e   INTO t(a,b,c) .
16140 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20  ...**.** If "a" 
16150 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75  is the k-th colu
16160 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c  mn of table "t",
16170 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30   then IdList.a[0
16180 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72  ].idx==k..*/.str
16190 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73  uct IdList {.  s
161a0 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65  truct IdList_ite
161b0 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e  m {.    char *zN
161c0 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
161d0 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66  e of the identif
161e0 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ier */.    int i
161f0 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  dx;          /* 
16200 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61  Index in some Ta
16210 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20  ble.aCol[] of a 
16220 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61  column named zNa
16230 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20  me */.  } *a;.  
16240 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20  int nId;        
16250 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64   /* Number of id
16260 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65  entifiers on the
16270 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
16280 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64  ** The bitmask d
16290 61 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20  atatype defined 
162a0 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f  below is used fo
162b0 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  r various optimi
162c0 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43  zations..**.** C
162d0 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f  hanging this fro
162e0 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20  m a 64-bit to a 
162f0 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69  32-bit type limi
16300 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
16310 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20  .** tables in a 
16320 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65  join to 32 inste
16330 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69  ad of 64.  But i
16340 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74  t also reduces t
16350 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68  he size.** of th
16360 65 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38  e library by 738
16370 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a   bytes on ix86..
16380 2a 2f 0a 74 79 70 65 64 65 66 20 75 36 34 20 42  */.typedef u64 B
16390 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54  itmask;../*.** T
163a0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  he number of bit
163b0 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20  s in a Bitmask. 
163c0 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69   "BMS" means "Bi
163d0 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a  tMask Size"..*/.
163e0 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69  #define BMS  ((i
163f0 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61  nt)(sizeof(Bitma
16400 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41  sk)*8))../*.** A
16410 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73   bit in a Bitmas
16420 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  k.*/.#define MAS
16430 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69 74  KBIT(n)   (((Bit
16440 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64  mask)1)<<(n)).#d
16450 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28  efine MASKBIT32(
16460 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69  n) (((unsigned i
16470 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a  nt)1)<<(n))../*.
16480 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
16490 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
164a0 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c  ibes the FROM cl
164b0 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
164c0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45   statement..** E
164d0 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62  ach table or sub
164e0 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f  query in the FRO
164f0 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65  M clause is a se
16500 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f  parate element o
16510 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74  f.** the SrcList
16520 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a  .a[] array..**.*
16530 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74  * With the addit
16540 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ion of multiple 
16550 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74  database support
16560 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
16570 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e  structure.** can
16580 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
16590 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74   describe a part
165a0 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63  icular table suc
165b0 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74  h as the table t
165c0 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69  hat.** is modifi
165d0 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c  ed by an INSERT,
165e0 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
165f0 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  TE statement.  I
16600 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a  n standard SQL,.
16610 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20  ** such a table 
16620 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65  must be a simple
16630 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20   name: ID.  But 
16640 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74  in SQLite, the t
16650 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20  able can.** now 
16660 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  be identified by
16670 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65   a database name
16680 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68  , a dot, then th
16690 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44  e table name: ID
166a0 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a  .ID..**.** The j
166b0 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f  ointype starts o
166c0 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a  ut showing the j
166d0 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e  oin type between
166e0 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62   the current tab
166f0 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65  le.** and the ne
16700 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20  xt table on the 
16710 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65  list.  The parse
16720 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73  r builds the lis
16730 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42  t this way..** B
16740 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  ut sqlite3SrcLis
16750 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29  tShiftJoinType()
16760 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68   later shifts th
16770 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74  e jointypes so t
16780 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e  hat each.** join
16790 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74  type expresses t
167a0 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  he join between 
167b0 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  the table and th
167c0 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65  e previous table
167d0 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63  ..**.** In the c
167e0 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68  olUsed field, th
167f0 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
16800 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74   (bit 63) is set
16810 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a   if the table.**
16820 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
16830 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61  han 63 columns a
16840 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20  nd the 64-th or 
16850 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20  later column is 
16860 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  used..*/.struct 
16870 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20  SrcList {.  int 
16880 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  nSrc;        /* 
16890 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
168a0 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69   or subqueries i
168b0 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
168c0 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f  e */.  u32 nAllo
168d0 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  c;      /* Numbe
168e0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c  r of entries all
168f0 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65  ocated in a[] be
16900 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  low */.  struct 
16910 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20  SrcList_item {. 
16920 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65     Schema *pSche
16930 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74  ma;  /* Schema t
16940 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65  o which this ite
16950 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20  m is fixed */.  
16960 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73    char *zDatabas
16970 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64  e;  /* Name of d
16980 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
16990 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
169a0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
169b0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
169c0 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  he table */.    
169d0 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20  char *zAlias;   
169e0 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72    /* The "B" par
169f0 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20  t of a "A AS B" 
16a00 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69  phrase.  zName i
16a10 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20  s the "A" */.   
16a20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
16a30 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62     /* An SQL tab
16a40 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  le corresponding
16a50 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20   to zName */.   
16a60 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
16a70 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73  ;  /* A SELECT s
16a80 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e  tatement used in
16a90 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c   place of a tabl
16aa0 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e  e name */.    in
16ab0 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20  t addrFillSub;  
16ac0 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75  /* Address of su
16ad0 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69  broutine to mani
16ae0 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20  fest a subquery 
16af0 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
16b00 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69  turn;    /* Regi
16b10 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74  ster holding ret
16b20 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61  urn address of a
16b30 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20  ddrFillSub */.  
16b40 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b    int regResult;
16b50 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73      /* Registers
16b60 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73   holding results
16b70 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65   of a co-routine
16b80 20 2a 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e 74   */.    u8 joint
16b90 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70  ype;      /* Typ
16ba0 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65  e of join betwee
16bb0 6e 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64 20  n this able and 
16bc0 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a  the previous */.
16bd0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74      unsigned not
16be0 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f  Indexed :1;    /
16bf0 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  * True if there 
16c00 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44  is a NOT INDEXED
16c10 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 75   clause */.    u
16c20 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c  nsigned isCorrel
16c30 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75  ated :1;  /* Tru
16c40 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20 69  e if sub-query i
16c50 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a  s correlated */.
16c60 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61      unsigned via
16c70 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f  Coroutine :1;  /
16c80 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73  * Implemented as
16c90 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f   a co-routine */
16ca0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73  .    unsigned is
16cb0 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20  Recursive :1;   
16cc0 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75  /* True for recu
16cd0 72 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20  rsive reference 
16ce0 69 6e 20 57 49 54 48 20 2a 2f 0a 23 69 66 6e 64  in WITH */.#ifnd
16cf0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45  ef SQLITE_OMIT_E
16d00 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53  XPLAIN.    u8 iS
16d10 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20  electId;     /* 
16d20 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74  If pSelect!=0, t
16d30 68 65 20 69 64 20 6f 66 20 74 68 65 20 73 75 62  he id of the sub
16d40 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a  -select in EQP *
16d50 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74  /.#endif.    int
16d60 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f   iCursor;      /
16d70 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
16d80 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f  r number used to
16d90 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61 62   access this tab
16da0 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  le */.    Expr *
16db0 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  pOn;        /* T
16dc0 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20  he ON clause of 
16dd0 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64  a join */.    Id
16de0 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20  List *pUsing;   
16df0 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61  /* The USING cla
16e00 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
16e10 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c  .    Bitmask col
16e20 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20  Used;  /* Bit N 
16e30 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f  (1<<N) set if co
16e40 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69  lumn N of pTab i
16e50 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 63 68  s used */.    ch
16e60 61 72 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20  ar *zIndex;     
16e70 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72  /* Identifier fr
16e80 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c  om "INDEXED BY <
16e90 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20  zIndex>" clause 
16ea0 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  */.    Index *pI
16eb0 6e 64 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65  ndex;    /* Inde
16ec0 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72 72  x structure corr
16ed0 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e  esponding to zIn
16ee0 64 65 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20  dex, if any */. 
16ef0 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20   } a[1];        
16f00 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72       /* One entr
16f10 79 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74  y for each ident
16f20 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73  ifier on the lis
16f30 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  t */.};../*.** P
16f40 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20  ermitted values 
16f50 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  of the SrcList.a
16f60 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a  .jointype field.
16f70 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e  */.#define JT_IN
16f80 4e 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20  NER     0x0001  
16f90 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66    /* Any kind of
16fa0 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20   inner or cross 
16fb0 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
16fc0 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30  JT_CROSS     0x0
16fd0 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63  002    /* Explic
16fe0 69 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52  it use of the CR
16ff0 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  OSS keyword */.#
17000 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41  define JT_NATURA
17010 4c 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a  L   0x0004    /*
17020 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74   True for a "nat
17030 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64  ural" join */.#d
17040 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20  efine JT_LEFT   
17050 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20     0x0008    /* 
17060 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20  Left outer join 
17070 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49  */.#define JT_RI
17080 47 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20  GHT     0x0010  
17090 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72    /* Right outer
170a0 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
170b0 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78   JT_OUTER     0x
170c0 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22  0020    /* The "
170d0 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69  OUTER" keyword i
170e0 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65  s present */.#de
170f0 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20  fine JT_ERROR   
17100 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75    0x0040    /* u
17110 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70  nknown or unsupp
17120 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20  orted join type 
17130 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73  */.../*.** Flags
17140 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72   appropriate for
17150 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20   the wctrlFlags 
17160 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c  parameter of sql
17170 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29  ite3WhereBegin()
17180 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72  .** and the Wher
17190 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73  eInfo.wctrlFlags
171a0 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66   member..*/.#def
171b0 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
171c0 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30  Y_NORMAL   0x000
171d0 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64  0 /* No-op */.#d
171e0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
171f0 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30  RBY_MIN      0x0
17200 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  001 /* ORDER BY 
17210 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d  processing for m
17220 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65  in() func */.#de
17230 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
17240 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30  BY_MAX      0x00
17250 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70  02 /* ORDER BY p
17260 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61  rocessing for ma
17270 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  x() func */.#def
17280 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53  ine WHERE_ONEPAS
17290 53 5f 44 45 53 49 52 45 44 20 20 30 78 30 30 30  S_DESIRED  0x000
172a0 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20  4 /* Want to do 
172b0 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f  one-pass UPDATE/
172c0 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e  DELETE */.#defin
172d0 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54  e WHERE_DUPLICAT
172e0 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 30 38 20  ES_OK    0x0008 
172f0 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20  /* Ok to return 
17300 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20  a row more than 
17310 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  once */.#define 
17320 57 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f  WHERE_OMIT_OPEN_
17330 43 4c 4f 53 45 20 20 30 78 30 30 31 30 20 2f 2a  CLOSE  0x0010 /*
17340 20 54 61 62 6c 65 20 63 75 72 73 6f 72 73 20 61   Table cursors a
17350 72 65 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20  re already open 
17360 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
17370 5f 46 4f 52 43 45 5f 54 41 42 4c 45 20 20 20 20  _FORCE_TABLE    
17380 20 20 30 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e    0x0020 /* Do n
17390 6f 74 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d  ot use an index-
173a0 6f 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a 23  only search */.#
173b0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45  define WHERE_ONE
173c0 54 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78  TABLE_ONLY    0x
173d0 30 30 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64  0040 /* Only cod
173e0 65 20 74 68 65 20 31 73 74 20 74 61 62 6c 65 20  e the 1st table 
173f0 69 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a 20  in pTabList */. 
17400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17410 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 30 78           /*   0x
17420 30 30 38 30 20 2f 2f 20 6e 6f 74 20 63 75 72 72  0080 // not curr
17430 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 23 64  ently used */.#d
17440 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55  efine WHERE_GROU
17450 50 42 59 20 20 20 20 20 20 20 20 20 20 30 78 30  PBY          0x0
17460 31 30 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20  100 /* pOrderBy 
17470 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55  is really a GROU
17480 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  P BY */.#define 
17490 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59  WHERE_DISTINCTBY
174a0 20 20 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a         0x0200 /*
174b0 20 70 4f 72 64 65 72 62 79 20 69 73 20 72 65 61   pOrderby is rea
174c0 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20 63  lly a DISTINCT c
174d0 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
174e0 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54   WHERE_WANT_DIST
174f0 49 4e 43 54 20 20 20 20 30 78 30 34 30 30 20 2f  INCT    0x0400 /
17500 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65  * All output nee
17510 64 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63  ds to be distinc
17520 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
17530 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20  RE_SORTBYGROUP  
17540 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20 53 75      0x0800 /* Su
17550 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65  pport sqlite3Whe
17560 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a  reIsSorted() */.
17570 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 52 45  #define WHERE_RE
17580 4f 50 45 4e 5f 49 44 58 20 20 20 20 20 20 20 30  OPEN_IDX       0
17590 78 31 30 30 30 20 2f 2a 20 54 72 79 20 74 6f 20  x1000 /* Try to 
175a0 75 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78  use OP_ReopenIdx
175b0 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20   */../* Allowed 
175c0 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72  return values fr
175d0 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  om sqlite3WhereI
175e0 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23  sDistinct().*/.#
175f0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
17600 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20  TINCT_NOOP      
17610 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b  0  /* DISTINCT k
17620 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20  eyword not used 
17630 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
17640 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45  _DISTINCT_UNIQUE
17650 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70      1  /* No dup
17660 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69  licates */.#defi
17670 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
17680 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f  T_ORDERED   2  /
17690 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73  * All duplicates
176a0 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f   are adjacent */
176b0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
176c0 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45  ISTINCT_UNORDERE
176d0 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74  D 3  /* Duplicat
176e0 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65 64  es are scattered
176f0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d   */../*.** A Nam
17700 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73  eContext defines
17710 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68   a context in wh
17720 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74  ich to resolve t
17730 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a  able and column.
17740 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63  ** names.  The c
17750 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20  ontext consists 
17760 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62  of a list of tab
17770 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69 73  les (the pSrcLis
17780 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20  t) field and.** 
17790 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20  a list of named 
177a0 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69  expression (pELi
177b0 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20  st).  The named 
177c0 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20  expression list 
177d0 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20  may.** be NULL. 
177e0 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65 73   The pSrc corres
177f0 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f  ponds to the FRO
17800 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
17810 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68  LECT or.** to th
17820 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70  e table being op
17830 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53  erated on by INS
17840 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20  ERT, UPDATE, or 
17850 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20  DELETE.  The.** 
17860 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e  pEList correspon
17870 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74  ds to the result
17880 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54   set of a SELECT
17890 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72   and is NULL for
178a0 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d  .** other statem
178b0 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65  ents..**.** Name
178c0 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20  Contexts can be 
178d0 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65  nested.  When re
178e0 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74  solving names, t
178f0 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a  he inner-most .*
17900 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61  * context is sea
17910 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66  rched first.  If
17920 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75   no match is fou
17930 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74  nd, the next out
17940 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  er.** context is
17950 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68   checked.  If th
17960 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20  ere is still no 
17970 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20  match, the next 
17980 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68  context.** is ch
17990 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f  ecked.  This pro
179a0 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75  cess continues u
179b0 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61  ntil either a ma
179c0 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20  tch is found.** 
179d0 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20  or all contexts 
179e0 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e  are check.  When
179f0 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
17a00 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62  d, the nRef memb
17a10 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  er of.** the con
17a20 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20  text containing 
17a30 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63  the match is inc
17a40 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a  remented. .**.**
17a50 20 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67   Each subquery g
17a60 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f  ets a new NameCo
17a70 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78  ntext.  The pNex
17a80 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74  t field points t
17a90 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  o the.** NameCon
17aa0 74 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65  text in the pare
17ab0 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20  nt query.  Thus 
17ac0 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73  the process of s
17ad0 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e  canning the.** N
17ae0 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20  ameContext list 
17af0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73  corresponds to s
17b00 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68  earching through
17b10 20 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75   successively ou
17b20 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65  ter.** subquerie
17b30 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20  s looking for a 
17b40 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74  match..*/.struct
17b50 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20   NameContext {. 
17b60 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
17b70 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
17b80 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ser */.  SrcList
17b90 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a   *pSrcList;   /*
17ba0 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62   One or more tab
17bb0 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f  les used to reso
17bc0 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45  lve names */.  E
17bd0 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b  xprList *pEList;
17be0 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
17bf0 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73  list of result-s
17c00 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  et columns */.  
17c10 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
17c20 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  o;   /* Informat
17c30 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67  ion about aggreg
17c40 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76  ates at this lev
17c50 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74  el */.  NameCont
17c60 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  ext *pNext;  /* 
17c70 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20  Next outer name 
17c80 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66  context.  NULL f
17c90 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a  or outermost */.
17ca0 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
17cb0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17cc0 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76   of names resolv
17cd0 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65  ed by this conte
17ce0 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  xt */.  int nErr
17cf0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
17d00 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
17d10 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69   encountered whi
17d20 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  le resolving nam
17d30 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c  es */.  u16 ncFl
17d40 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ags;         /* 
17d50 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f  Zero or more NC_
17d60 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20  * flags defined 
17d70 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  below */.};../*.
17d80 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
17d90 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f  s for the NameCo
17da0 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66  ntext, ncFlags f
17db0 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  ield..**.** Note
17dc0 3a 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20  :  NC_MinMaxAgg 
17dd0 6d 75 73 74 20 68 61 76 65 20 74 68 65 20 73 61  must have the sa
17de0 6d 65 20 76 61 6c 75 65 20 61 73 20 53 46 5f 4d  me value as SF_M
17df0 69 6e 4d 61 78 41 67 67 20 61 6e 64 0a 2a 2a 20  inMaxAgg and.** 
17e00 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
17e10 41 58 2e 0a 2a 2a 20 0a 2a 2f 0a 23 64 65 66 69  AX..** .*/.#defi
17e20 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20  ne NC_AllowAgg  
17e30 30 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65  0x0001  /* Aggre
17e40 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  gate functions a
17e50 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20  re allowed here 
17e60 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61  */.#define NC_Ha
17e70 73 41 67 67 20 20 20 20 30 78 30 30 30 32 20 20  sAgg    0x0002  
17e80 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61  /* One or more a
17e90 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
17ea0 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69  ns seen */.#defi
17eb0 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20  ne NC_IsCheck   
17ec0 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20  0x0004  /* True 
17ed0 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  if resolving nam
17ee0 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f  es in a CHECK co
17ef0 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
17f00 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63  ine NC_InAggFunc
17f10 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65   0x0008  /* True
17f20 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72   if analyzing ar
17f30 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67  guments to an ag
17f40 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  g func */.#defin
17f50 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30  e NC_PartIdx   0
17f60 78 30 30 31 30 20 20 2f 2a 20 54 72 75 65 20 69  x0010  /* True i
17f70 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61  f resolving a pa
17f80 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52  rtial index WHER
17f90 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  E */.#define NC_
17fa0 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30  MinMaxAgg 0x1000
17fb0 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67    /* min/max agg
17fc0 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53  regates seen.  S
17fd0 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f  ee note above */
17fe0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
17ff0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
18000 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
18010 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f  ontains all info
18020 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65  rmation.** neede
18030 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f  d to generate co
18040 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20  de for a single 
18050 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
18060 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69  ..**.** nLimit i
18070 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74  s set to -1 if t
18080 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54  here is no LIMIT
18090 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65   clause.  nOffse
180a0 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a  t is set to 0..*
180b0 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20  * If there is a 
180c0 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
180d0 65 20 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c  e parser sets nL
180e0 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75  imit to the valu
180f0 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69  e of the.** limi
18100 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f  t and nOffset to
18110 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
18120 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69  e offset (or 0 i
18130 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a  f there is not.*
18140 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20  * offset).  But 
18150 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74  later on, nLimit
18160 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63   and nOffset bec
18170 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c  ome the memory l
18180 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74  ocations.** in t
18190 68 65 20 56 44 42 45 20 74 68 61 74 20 72 65 63  he VDBE that rec
181a0 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e  ord the limit an
181b0 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72  d offset counter
181c0 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65  s..**.** addrOpe
181d0 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20  nEphm[] entries 
181e0 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72  contain the addr
181f0 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70  ess of OP_OpenEp
18200 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e  hemeral opcodes.
18210 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65 73  .** These addres
18220 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72  ses must be stor
18230 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63 61  ed so that we ca
18240 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69  n go back and fi
18250 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f  ll in.** the P4_
18260 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70  KEYINFO and P2 p
18270 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e  arameters later.
18280 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65    Neither the Ke
18290 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65  yInfo nor.** the
182a0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
182b0 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20  ns in P2 can be 
182c0 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65 20  computed at the 
182d0 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20  same time.** as 
182e0 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20  the OP_OpenEphm 
182f0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63  instruction is c
18300 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74  oded because not
18310 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72  .** enough infor
18320 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
18330 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20   compound query 
18340 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74  is known at that
18350 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b   point..** The K
18360 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f  eyInfo for addrO
18370 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b  penTran[0] and [
18380 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  1] contains coll
18390 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a  ating sequences.
183a0 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c  ** for the resul
183b0 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49  t set.  The KeyI
183c0 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
183d0 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73  Ephm[2] contains
183e0 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65   collating.** se
183f0 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20  quences for the 
18400 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
18410 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63  .*/.struct Selec
18420 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a  t {.  ExprList *
18430 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20  pEList;      /* 
18440 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68  The fields of th
18450 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38  e result */.  u8
18460 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
18470 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20       /* One of: 
18480 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20  TK_UNION TK_ALL 
18490 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f  TK_INTERSECT TK_
184a0 45 58 43 45 50 54 20 2a 2f 0a 20 20 75 31 36 20  EXCEPT */.  u16 
184b0 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20  selFlags;       
184c0 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46     /* Various SF
184d0 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69  _* values */.  i
184e0 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73  nt iLimit, iOffs
184f0 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20  et;   /* Memory 
18500 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e  registers holdin
18510 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54  g LIMIT & OFFSET
18520 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66   counters */.#if
18530 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
18540 42 4c 45 44 0a 20 20 63 68 61 72 20 7a 53 65 6c  BLED.  char zSel
18550 4e 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a  Name[12];     /*
18560 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f   Symbolic name o
18570 66 20 74 68 69 73 20 53 45 4c 45 43 54 20 75 73  f this SELECT us
18580 65 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20  e for debugging 
18590 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
185a0 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b  addrOpenEphm[2];
185b0 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68     /* OP_OpenEph
185c0 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74  em opcodes relat
185d0 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
185e0 74 20 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65  t */.  u64 nSele
185f0 63 74 52 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a  ctRow;        /*
18600 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65   Estimated numbe
18610 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  r of result rows
18620 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
18630 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Src;         /* 
18640 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  The FROM clause 
18650 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
18660 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  e;          /* T
18670 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
18680 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
18690 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54  GroupBy;    /* T
186a0 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  he GROUP BY clau
186b0 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48  se */.  Expr *pH
186c0 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f  aving;         /
186d0 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61  * The HAVING cla
186e0 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
186f0 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20  t *pOrderBy;    
18700 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
18710 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65  clause */.  Sele
18720 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20  ct *pPrior;     
18730 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65     /* Prior sele
18740 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ct in a compound
18750 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e   select statemen
18760 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  t */.  Select *p
18770 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
18780 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20   Next select to 
18790 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f  the left in a co
187a0 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72  mpound */.  Expr
187b0 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20   *pLimit;       
187c0 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72     /* LIMIT expr
187d0 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61  ession. NULL mea
187e0 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a  ns not used. */.
187f0 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b    Expr *pOffset;
18800 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53           /* OFFS
18810 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e  ET expression. N
18820 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73  ULL means not us
18830 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ed. */.  With *p
18840 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  With;           
18850 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20 61  /* WITH clause a
18860 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20  ttached to this 
18870 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e  select. Or NULL.
18880 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
18890 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
188a0 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73   Select.selFlags
188b0 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65 66  .  The "SF" pref
188c0 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ix stands for.**
188d0 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a   "Select Flag"..
188e0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69  */.#define SF_Di
188f0 73 74 69 6e 63 74 20 20 20 20 20 20 20 20 30 78  stinct        0x
18900 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20  0001  /* Output 
18910 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e  should be DISTIN
18920 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  CT */.#define SF
18930 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20  _Resolved       
18940 20 30 78 30 30 30 32 20 20 2f 2a 20 49 64 65 6e   0x0002  /* Iden
18950 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65  tifiers have bee
18960 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64  n resolved */.#d
18970 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61  efine SF_Aggrega
18980 74 65 20 20 20 20 20 20 20 30 78 30 30 30 34 20  te       0x0004 
18990 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67   /* Contains agg
189a0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
189b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55   */.#define SF_U
189c0 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30  sesEphemeral   0
189d0 78 30 30 30 38 20 20 2f 2a 20 55 73 65 73 20 74  x0008  /* Uses t
189e0 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  he OpenEphemeral
189f0 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69   opcode */.#defi
18a00 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20  ne SF_Expanded  
18a10 20 20 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a        0x0010  /*
18a20 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
18a30 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e  pand() called on
18a40 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65   this */.#define
18a50 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20   SF_HasTypeInfo 
18a60 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20 46      0x0020  /* F
18a70 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20 68  ROM subqueries h
18a80 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61  ave Table metada
18a90 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ta */.#define SF
18aa0 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20  _Compound       
18ab0 20 30 78 30 30 34 30 20 20 2f 2a 20 50 61 72 74   0x0040  /* Part
18ac0 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71   of a compound q
18ad0 75 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  uery */.#define 
18ae0 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20  SF_Values       
18af0 20 20 20 30 78 30 30 38 30 20 20 2f 2a 20 53 79     0x0080  /* Sy
18b00 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56  nthesized from V
18b10 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a  ALUES clause */.
18b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b30 20 20 20 20 2f 2a 20 20 20 20 20 30 78 30 31 30      /*     0x010
18b40 30 20 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0a 23  0  NOT USED */.#
18b50 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64  define SF_Nested
18b60 46 72 6f 6d 20 20 20 20 20 20 30 78 30 32 30 30  From      0x0200
18b70 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70    /* Part of a p
18b80 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f  arenthesized FRO
18b90 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  M clause */.#def
18ba0 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76  ine SF_MaybeConv
18bb0 65 72 74 20 20 20 20 30 78 30 34 30 30 20 20 2f  ert    0x0400  /
18bc0 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f  * Need convertCo
18bd0 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
18be0 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66  bquery() */.#def
18bf0 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76 65  ine SF_Recursive
18c00 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20 2f         0x0800  /
18c10 2a 20 54 68 65 20 72 65 63 75 72 73 69 76 65 20  * The recursive 
18c20 70 61 72 74 20 6f 66 20 61 20 72 65 63 75 72 73  part of a recurs
18c30 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69  ive CTE */.#defi
18c40 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20  ne SF_MinMaxAgg 
18c50 20 20 20 20 20 20 30 78 31 30 30 30 20 20 2f 2a        0x1000  /*
18c60 20 41 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61   Aggregate conta
18c70 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d  ining min() or m
18c80 61 78 28 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  ax() */.../*.** 
18c90 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61  The results of a
18ca0 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64   SELECT can be d
18cb0 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 73 65  istributed in se
18cc0 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64  veral ways, as d
18cd0 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65  efined.** by one
18ce0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
18cf0 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22  g macros.  The "
18d00 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e  SRT" prefix mean
18d10 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74  s "SELECT Result
18d20 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a  .** Type"..**.**
18d30 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20       SRT_Union  
18d40 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
18d50 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61  ts as a key in a
18d60 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78   temporary index
18d70 20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20   .**            
18d80 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69 66           identif
18d90 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53  ied by pDest->iS
18da0 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  DParm..**.**    
18db0 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
18dc0 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20   Remove results 
18dd0 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61  from the tempora
18de0 72 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e  ry index pDest->
18df0 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20  iSDParm..**.**  
18e00 20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20 20     SRT_Exists   
18e10 20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20     Store a 1 in 
18e20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73  memory cell pDes
18e30 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68  t->iSDParm if th
18e40 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20  e result.**     
18e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e60 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  set is not empty
18e70 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
18e80 44 69 73 63 61 72 64 20 20 20 20 20 54 68 72 6f  Discard     Thro
18e90 77 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 77  w the results aw
18ea0 61 79 2e 20 20 54 68 69 73 20 69 73 20 75 73 65  ay.  This is use
18eb0 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20  d by SELECT.**  
18ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ed0 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69     statements wi
18ee0 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 77 68  thin triggers wh
18ef0 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65  ose only purpose
18f00 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   is.**          
18f10 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
18f20 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66  ide-effects of f
18f30 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
18f40 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  All of the above
18f50 20 61 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e   are free to ign
18f60 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45 52 20  ore their ORDER 
18f70 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65  BY clause. Those
18f80 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20   that.** follow 
18f90 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f  must honor the O
18fa0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
18fb0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75  **.**     SRT_Ou
18fc0 74 70 75 74 20 20 20 20 20 20 47 65 6e 65 72 61  tput      Genera
18fd0 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70  te a row of outp
18fe0 75 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50  ut (using the OP
18ff0 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20  _ResultRow.**   
19000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19010 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61    opcode) for ea
19020 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65  ch row in the re
19030 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  sult set..**.** 
19040 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20      SRT_Mem     
19050 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69      Only valid i
19060 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  f the result is 
19070 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
19080 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19090 20 20 20 20 20 20 20 20 53 74 6f 72 65 20 74 68          Store th
190a0 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f  e first column o
190b0 66 20 74 68 65 20 66 69 72 73 74 20 72 65 73 75  f the first resu
190c0 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20  lt row.**       
190d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
190e0 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d   register pDest-
190f0 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62  >iSDParm then ab
19100 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a  andon the rest.*
19110 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19120 20 20 20 20 20 20 6f 66 20 74 68 65 20 71 75 65        of the que
19130 72 79 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e  ry.  This destin
19140 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c  ation implies "L
19150 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20  IMIT 1"..**.**  
19160 20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20 20     SRT_Set      
19170 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75     The result mu
19180 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63  st be a single c
19190 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61  olumn.  Store ea
191a0 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ch.**           
191b0 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66            row of
191c0 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b   result as the k
191d0 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73  ey in table pDes
191e0 74 2d 3e 69 53 44 50 61 72 6d 2e 20 0a 2a 2a 20  t->iSDParm. .** 
191f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19200 20 20 20 20 41 70 70 6c 79 20 74 68 65 20 61 66      Apply the af
19210 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66  finity pDest->af
19220 66 53 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f  fSdst before sto
19230 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20  ring.**         
19240 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
19250 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d  lts.  Used to im
19260 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c  plement "IN (SEL
19270 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a  ECT ...)"..**.**
19280 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61       SRT_EphemTa
19290 62 20 20 20 20 43 72 65 61 74 65 20 61 6e 20 74  b    Create an t
192a0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
192b0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e  Dest->iSDParm an
192c0 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20  d store.**      
192d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
192e0 68 65 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e  he result there.
192f0 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c   The cursor is l
19300 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a  eft open after.*
19310 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19320 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e        returning.
19330 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
19340 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20  RT_Table except 
19350 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  that.**         
19360 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
19370 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65   destination use
19380 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  s OP_OpenEphemer
19390 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20  al to create.** 
193a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193b0 20 20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69      the table fi
193c0 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  rst..**.**     S
193d0 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47  RT_Coroutine   G
193e0 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75  enerate a co-rou
193f0 74 69 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e  tine that return
19400 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a  s a new row of.*
19410 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19420 20 20 20 20 20 20 72 65 73 75 6c 74 73 20 65 61        results ea
19430 63 68 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e  ch time it is in
19440 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72  voked.  The entr
19450 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20  y point.**      
19460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
19470 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65  f the co-routine
19480 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
19490 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53  gister pDest->iS
194a0 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20  DParm.**        
194b0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64               and
194c0 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20   the result row 
194d0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65  is stored in pDe
194e0 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74  st->nDest regist
194f0 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ers.**          
19500 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74             start
19510 69 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e  ing with pDest->
19520 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  iSdst..**.**    
19530 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
19540 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
19550 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  n temporary tabl
19560 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
19570 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66  ..**     SRT_Fif
19580 6f 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73  o        This is
19590 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54   like SRT_EphemT
195a0 61 62 20 65 78 63 65 70 74 20 74 68 61 74 20 74  ab except that t
195b0 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20  he table.**     
195c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195d0 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c  is assumed to al
195e0 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20  ready be open.  
195f0 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20  SRT_Fifo has.** 
19600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19610 20 20 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e      the addition
19620 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62  al property of b
19630 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e  eing able to ign
19640 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ore.**          
19650 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 4f             the O
19660 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
19670 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
19680 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20  stFifo    Store 
19690 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d  results in a tem
196a0 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
196b0 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
196c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196d0 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65      But also use
196e0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
196f0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b   pDest->iSDParm+
19700 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  1 as.**         
19710 20 20 20 20 20 20 20 20 20 20 20 20 61 20 72 65              a re
19720 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f  cord of all prio
19730 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67  r results and ig
19740 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61  nore any duplica
19750 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  te.**           
19760 20 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20            rows. 
19770 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44   Name means:  "D
19780 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a  istinct Fifo"..*
19790 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65  *.**     SRT_Que
197a0 75 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  ue       Store r
197b0 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69  esults in priori
197c0 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e  ty queue pDest->
197d0 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a  iSDParm (really.
197e0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
197f0 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29         an index)
19800 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65 71 75  .  Append a sequ
19810 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74  ence number so t
19820 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a  hat all entries.
19830 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19840 20 20 20 20 20 20 20 61 72 65 20 64 69 73 74 69         are disti
19850 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  nct..**.**     S
19860 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 53  RT_DistQueue   S
19870 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
19880 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70  priority queue p
19890 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e  Dest->iSDParm on
198a0 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20  ly if.**        
198b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
198c0 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73   same record has
198d0 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72   never been stor
198e0 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a  ed before.  The.
198f0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19900 20 20 20 20 20 20 20 69 6e 64 65 78 20 61 74 20         index at 
19910 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31  pDest->iSDParm+1
19920 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20   hold all prior 
19930 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  stores..*/.#defi
19940 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20  ne SRT_Union    
19950 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20      1  /* Store 
19960 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69  result as keys i
19970 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
19980 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74  efine SRT_Except
19990 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d         2  /* Rem
199a0 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20  ove result from 
199b0 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f  a UNION index */
199c0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69  .#define SRT_Exi
199d0 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20  sts       3  /* 
199e0 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72  Store 1 if the r
199f0 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70  esult is not emp
19a00 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ty */.#define SR
19a10 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34  T_Discard      4
19a20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65    /* Do not save
19a30 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79   the results any
19a40 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65  where */.#define
19a50 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20   SRT_Fifo       
19a60 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    5  /* Store re
19a70 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
19a80 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
19a90 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
19aa0 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20  SRT_DistFifo    
19ab0 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f   6  /* Like SRT_
19ac0 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65  Fifo, but unique
19ad0 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f   results only */
19ae0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65  .#define SRT_Que
19af0 75 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20  ue        7  /* 
19b00 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
19b10 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66  an queue */.#def
19b20 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75  ine SRT_DistQueu
19b30 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20  e    8  /* Like 
19b40 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75  SRT_Queue, but u
19b50 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e  nique results on
19b60 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52  ly */../* The OR
19b70 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73  DER BY clause is
19b80 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c   ignored for all
19b90 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f   of the above */
19ba0 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62  .#define Ignorab
19bb0 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58  leOrderby(X) ((X
19bc0 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69  ->eDest)<=SRT_Di
19bd0 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e  stQueue)..#defin
19be0 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20  e SRT_Output    
19bf0 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20     9  /* Output 
19c00 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75  each row of resu
19c10 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  lt */.#define SR
19c20 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30  T_Mem         10
19c30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
19c40 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65  t in a memory ce
19c50 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ll */.#define SR
19c60 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 31 31  T_Set         11
19c70 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
19c80 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  ts as keys in an
19c90 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
19ca0 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20  e SRT_EphemTab  
19cb0 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20    12  /* Create 
19cc0 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e  transient tab an
19cd0 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54  d store like SRT
19ce0 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e  _Table */.#defin
19cf0 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20  e SRT_Coroutine 
19d00 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74    13  /* Generat
19d10 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  e a single row o
19d20 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66  f result */.#def
19d30 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20  ine SRT_Table   
19d40 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65      14  /* Store
19d50 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20   result as data 
19d60 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
19d70 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a  c rowid */../*.*
19d80 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
19d90 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73   this object des
19da0 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20  cribes where to 
19db0 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c  put of the resul
19dc0 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43  ts of.** a SELEC
19dd0 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  T statement..*/.
19de0 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
19df0 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20  t {.  u8 eDest; 
19e00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f             /* Ho
19e10 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20  w to dispose of 
19e20 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e  the results.  On
19e30 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e   of SRT_* above.
19e40 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64   */.  char affSd
19e50 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 66  st;        /* Af
19e60 66 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e  finity used when
19e70 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20   eDest==SRT_Set 
19e80 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d  */.  int iSDParm
19e90 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70  ;         /* A p
19ea0 61 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79  arameter used by
19eb0 20 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f   the eDest dispo
19ec0 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20  sal method */.  
19ed0 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20  int iSdst;      
19ee0 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
19ef0 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75  ister where resu
19f00 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20  lts are written 
19f10 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20  */.  int nSdst; 
19f20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
19f30 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
19f40 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20   allocated */.  
19f50 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
19f60 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75  By;  /* Key colu
19f70 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75  mns for SRT_Queu
19f80 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75  e and SRT_DistQu
19f90 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  eue */.};../*.**
19fa0 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e   During code gen
19fb0 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65  eration of state
19fc0 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e  ments that do in
19fd0 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49  serts into AUTOI
19fe0 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62  NCREMENT .** tab
19ff0 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69  les, the followi
1a000 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ng information i
1a010 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
1a020 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e  e Table.u.autoIn
1a030 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f  c.p.** pointer o
1a040 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65  f each autoincre
1a050 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65  ment table to re
1a060 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69  cord some side i
1a070 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a  nformation that.
1a080 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  ** the code gene
1a090 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65  rator needs.  We
1a0a0 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65   have to keep pe
1a0b0 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72  r-table autoincr
1a0c0 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ement.** informa
1a0d0 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73  tion in case ins
1a0e0 65 72 74 73 20 61 72 65 20 64 6f 77 6e 20 77 69  erts are down wi
1a0f0 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20  thin triggers.  
1a100 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a  Triggers do not.
1a110 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72  ** normally coor
1a120 64 69 6e 61 74 65 20 74 68 65 69 72 20 61 63 74  dinate their act
1a130 69 76 69 74 69 65 73 2c 20 62 75 74 20 77 65 20  ivities, but we 
1a140 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64  do need to coord
1a150 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61  inate the.** loa
1a160 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20  ding and saving 
1a170 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  of autoincrement
1a180 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
1a190 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49  .struct AutoincI
1a1a0 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49  nfo {.  AutoincI
1a1b0 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a  nfo *pNext;   /*
1a1c0 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b   Next info block
1a1d0 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68   in a list of th
1a1e0 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c  em all */.  Tabl
1a1f0 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
1a200 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20    /* Table this 
1a210 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72  info block refer
1a220 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44  s to */.  int iD
1a230 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
1a240 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69  /* Index in sqli
1a250 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74  te3.aDb[] of dat
1a260 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54  abase holding pT
1a270 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43  ab */.  int regC
1a280 74 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  tr;           /*
1a290 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   Memory register
1a2a0 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77   holding the row
1a2b0 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b  id counter */.};
1a2c0 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20  ../*.** Size of 
1a2d0 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65  the column cache
1a2e0 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
1a2f0 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20  TE_N_COLCACHE.# 
1a300 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f  define SQLITE_N_
1a310 43 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64  COLCACHE 10.#end
1a320 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61  if../*.** At lea
1a330 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20  st one instance 
1a340 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1a350 20 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72   structure is cr
1a360 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 0a  eated for each .
1a370 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61 74 20  ** trigger that 
1a380 6d 61 79 20 62 65 20 66 69 72 65 64 20 77 68 69  may be fired whi
1a390 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e  le parsing an IN
1a3a0 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20  SERT, UPDATE or 
1a3b0 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d  DELETE.** statem
1a3c0 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62  ent. All such ob
1a3d0 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72 65 64  jects are stored
1a3e0 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c   in the linked l
1a3f0 69 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a  ist headed at.**
1a400 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
1a410 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f  rg and deleted o
1a420 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  nce statement co
1a430 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65  mpilation has be
1a440 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e  en.** completed.
1a450 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75  .**.** A Vdbe su
1a460 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69  b-program that i
1a470 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f  mplements the bo
1a480 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75  dy and WHEN clau
1a490 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a  se of trigger.**
1a4a0 20 54 72 69 67 67 65 72 50 72 67 2e 70 54 72 69   TriggerPrg.pTri
1a4b0 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61  gger, assuming a
1a4c0 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   default ON CONF
1a4d0 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a  LICT clause of.*
1a4e0 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63  * TriggerPrg.orc
1a4f0 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69  onf, is stored i
1a500 6e 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67  n the TriggerPrg
1a510 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62  .pProgram variab
1a520 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65  le..** The Parse
1a530 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73  .pTriggerPrg lis
1a540 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73  t never contains
1a550 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74   two entries wit
1a560 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61  h the same.** va
1a570 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54  lues for both pT
1a580 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e  rigger and orcon
1a590 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69  f..**.** The Tri
1a5a0 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b  ggerPrg.aColmask
1a5b0 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20  [0] variable is 
1a5c0 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66  set to a mask of
1a5d0 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a   old.* columns.*
1a5e0 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72 20 73  * accessed (or s
1a5f0 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67  et to 0 for trig
1a600 67 65 72 73 20 66 69 72 65 64 20 61 73 20 61 20  gers fired as a 
1a610 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54  result of INSERT
1a620 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29   .** statements)
1a630 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65  . Similarly, the
1a640 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
1a650 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65  mask[1] variable
1a660 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20   is set to.** a 
1a670 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  mask of new.* co
1a680 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68  lumns used by th
1a690 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74  e program..*/.st
1a6a0 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20  ruct TriggerPrg 
1a6b0 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  {.  Trigger *pTr
1a6c0 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54  igger;      /* T
1a6d0 72 69 67 67 65 72 20 74 68 69 73 20 70 72 6f 67  rigger this prog
1a6e0 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72  ram was coded fr
1a6f0 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50  om */.  TriggerP
1a700 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  rg *pNext;      
1a710 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e  /* Next entry in
1a720 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
1a730 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62  rg list */.  Sub
1a740 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
1a750 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20  m;   /* Program 
1a760 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72  implementing pTr
1a770 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a  igger/orconf */.
1a780 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20    int orconf;   
1a790 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1a7a0 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
1a7b0 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32   policy */.  u32
1a7c0 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20   aColmask[2];   
1a7d0 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66       /* Masks of
1a7e0 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f   old.*, new.* co
1a7f0 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a  lumns accessed *
1a800 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
1a810 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65  yDbMask datatype
1a820 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b   for the bitmask
1a830 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64   of all attached
1a840 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
1a850 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  if SQLITE_MAX_AT
1a860 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65  TACHED>30.  type
1a870 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61  def unsigned cha
1a880 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54  r yDbMask[(SQLIT
1a890 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39  E_MAX_ATTACHED+9
1a8a0 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44  )/8];.# define D
1a8b0 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20  bMaskTest(M,I)  
1a8c0 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28    (((M)[(I)/8]&(
1a8d0 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29  1<<((I)&7)))!=0)
1a8e0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1a8f0 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d  Zero(M)      mem
1a900 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66  set((M),0,sizeof
1a910 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62  (M)).# define Db
1a920 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20  MaskSet(M,I)    
1a930 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c   (M)[(I)/8]|=(1<
1a940 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65 66 69  <((I)&7)).# defi
1a950 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  ne DbMaskAllZero
1a960 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d  (M)   sqlite3DbM
1a970 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20  askAllZero(M).# 
1a980 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e  define DbMaskNon
1a990 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74  Zero(M)   (sqlit
1a9a0 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e3DbMaskAllZero(
1a9b0 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74  M)==0).#else.  t
1a9c0 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20  ypedef unsigned 
1a9d0 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64  int yDbMask;.# d
1a9e0 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74  efine DbMaskTest
1a9f0 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28  (M,I)    (((M)&(
1aa00 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49  ((yDbMask)1)<<(I
1aa10 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65  )))!=0).# define
1aa20 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20   DbMaskZero(M)  
1aa30 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69      (M)=0.# defi
1aa40 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49  ne DbMaskSet(M,I
1aa50 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44  )     (M)|=(((yD
1aa60 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23  bMask)1)<<(I)).#
1aa70 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c   define DbMaskAl
1aa80 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d  lZero(M)   (M)==
1aa90 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  0.# define DbMas
1aaa0 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d  kNonZero(M)   (M
1aab0 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  )!=0.#endif../*.
1aac0 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72  ** An SQL parser
1aad0 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70   context.  A cop
1aae0 79 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  y of this struct
1aaf0 75 72 65 20 69 73 20 70 61 73 73 65 64 20 74 68  ure is passed th
1ab00 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72  rough.** the par
1ab10 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74  ser and down int
1ab20 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72  o all the parser
1ab30 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20   action routine 
1ab40 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63  in order to.** c
1ab50 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f  arry around info
1ab60 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  rmation that is 
1ab70 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e  global to the en
1ab80 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a  tire parse..**.*
1ab90 2a 20 54 68 65 20 73 74 72 75 63 74 75 72 65 20  * The structure 
1aba0 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20  is divided into 
1abb0 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e  two parts.  When
1abc0 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20   the parser and 
1abd0 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65  code.** generate
1abe0 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73   call themselves
1abf0 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68   recursively, th
1ac00 65 20 66 69 72 73 74 20 70 61 72 74 20 6f 66 20  e first part of 
1ac10 74 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  the structure.**
1ac20 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74   is constant but
1ac30 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74   the second part
1ac40 20 69 73 20 72 65 73 65 74 20 61 74 20 74 68 65   is reset at the
1ac50 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65   beginning and e
1ac60 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65  nd of.** each re
1ac70 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  cursion..**.** T
1ac80 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e  he nTableLock an
1ac90 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72  d aTableLock var
1aca0 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20  iables are only 
1acb0 75 73 65 64 20 69 66 20 74 68 65 20 73 68 61 72  used if the shar
1acc0 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65 61  ed-cache .** fea
1acd0 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20  ture is enabled 
1ace0 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28 29  (if sqlite3Tsd()
1acf0 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 20  ->useSharedData 
1ad00 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20 61  is true). They a
1ad10 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74  re.** used to st
1ad20 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20 74  ore the set of t
1ad30 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69  able-locks requi
1ad40 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65  red by the state
1ad50 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f  ment being.** co
1ad60 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e  mpiled. Function
1ad70 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
1ad80 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 61  k() is used to a
1ad90 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68  dd entries to th
1ada0 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74  e.** list..*/.st
1adb0 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73  ruct Parse {.  s
1adc0 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
1add0 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20      /* The main 
1ade0 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74 75  database structu
1adf0 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45  re */.  char *zE
1ae00 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20  rrMsg;       /* 
1ae10 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  An error message
1ae20 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62   */.  Vdbe *pVdb
1ae30 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e  e;         /* An
1ae40 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63   engine for exec
1ae50 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 62  uting database b
1ae60 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74  ytecode */.  int
1ae70 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
1ae80 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65    /* Return code
1ae90 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20   from execution 
1aea0 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73  */.  u8 colNames
1aeb0 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55  Set;      /* TRU
1aec0 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d  E after OP_Colum
1aed0 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69  nName has been i
1aee0 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a  ssued to pVdbe *
1aef0 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68 65  /.  u8 checkSche
1af00 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73  ma;      /* Caus
1af10 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  es schema cookie
1af20 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20   check after an 
1af30 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65  error */.  u8 ne
1af40 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  sted;           
1af50 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
1af60 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65  ted calls to the
1af70 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e   parser/code gen
1af80 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e  erator */.  u8 n
1af90 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20  TempReg;        
1afa0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65   /* Number of te
1afb0 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
1afc0 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20  s in aTempReg[] 
1afd0 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57  */.  u8 isMultiW
1afe0 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75  rite;     /* Tru
1aff0 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d  e if statement m
1b000 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74  ay modify/insert
1b010 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
1b020 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b  /.  u8 mayAbort;
1b030 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1b040 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61   if statement ma
1b050 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54  y throw an ABORT
1b060 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20   exception */.  
1b070 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20  u8 hasCompound; 
1b080 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20       /* Need to 
1b090 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f  invoke convertCo
1b0a0 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
1b0b0 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38  bquery() */.  u8
1b0c0 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20   okConstFactor; 
1b0d0 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74     /* OK to fact
1b0e0 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73  or out constants
1b0f0 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70 52   */.  int aTempR
1b100 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f  eg[8];     /* Ho
1b110 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74  lding area for t
1b120 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
1b130 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e  rs */.  int nRan
1b140 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  geReg;       /* 
1b150 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70  Size of the temp
1b160 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62  orary register b
1b170 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52  lock */.  int iR
1b180 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f  angeReg;       /
1b190 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65 72  * First register
1b1a0 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65   in temporary re
1b1b0 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a  gister block */.
1b1c0 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
1b1d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b1e0 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20   of errors seen 
1b1f0 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20  */.  int nTab;  
1b200 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1b210 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c  ber of previousl
1b220 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45  y allocated VDBE
1b230 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e   cursors */.  in
1b240 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t nMem;         
1b250 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1b260 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65  memory cells use
1b270 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  d so far */.  in
1b280 74 20 6e 53 65 74 3b 20 20 20 20 20 20 20 20 20  t nSet;         
1b290 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1b2a0 73 65 74 73 20 75 73 65 64 20 73 6f 20 66 61 72  sets used so far
1b2b0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b   */.  int nOnce;
1b2c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1b2d0 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20  mber of OP_Once 
1b2e0 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 73 6f 20  instructions so 
1b2f0 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70  far */.  int nOp
1b300 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a  Alloc;        /*
1b310 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73   Number of slots
1b320 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56   allocated for V
1b330 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69  dbe.aOp[] */.  i
1b340 6e 74 20 69 46 69 78 65 64 4f 70 3b 20 20 20 20  nt iFixedOp;    
1b350 20 20 20 20 2f 2a 20 4e 65 76 65 72 20 62 61 63      /* Never bac
1b360 6b 20 6f 75 74 20 6f 70 63 6f 64 65 73 20 69 46  k out opcodes iF
1b370 69 78 65 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c  ixedOp-1 or earl
1b380 69 65 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42  ier */.  int ckB
1b390 61 73 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ase;          /*
1b3a0 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20 6f   Base register o
1b3b0 66 20 64 61 74 61 20 64 75 72 69 6e 67 20 63 68  f data during ch
1b3c0 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  eck constraints 
1b3d0 2a 2f 0a 20 20 69 6e 74 20 69 50 61 72 74 49 64  */.  int iPartId
1b3e0 78 54 61 62 3b 20 20 20 20 20 2f 2a 20 54 61 62  xTab;     /* Tab
1b3f0 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  le corresponding
1b400 20 74 6f 20 61 20 70 61 72 74 69 61 6c 20 69 6e   to a partial in
1b410 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61  dex */.  int iCa
1b420 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a  cheLevel;     /*
1b430 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20   ColCache valid 
1b440 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d  when aColCache[]
1b450 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c  .iLevel<=iCacheL
1b460 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43  evel */.  int iC
1b470 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f  acheCnt;       /
1b480 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74  * Counter used t
1b490 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43  o generate aColC
1b4a0 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65  ache[].lru value
1b4b0 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65  s */.  int nLabe
1b4c0 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  l;          /* N
1b4d0 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20  umber of labels 
1b4e0 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  used */.  int *a
1b4f0 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f  Label;         /
1b500 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20  * Space to hold 
1b510 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20  the labels */.  
1b520 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65  struct yColCache
1b530 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c   {.    int iTabl
1b540 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
1b550 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d  Table cursor num
1b560 62 65 72 20 2a 2f 0a 20 20 20 20 69 31 36 20 69  ber */.    i16 i
1b570 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
1b580 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e   /* Table column
1b590 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75   number */.    u
1b5a0 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20  8 tempReg;      
1b5b0 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20       /* iReg is 
1b5c0 61 20 74 65 6d 70 20 72 65 67 69 73 74 65 72 20  a temp register 
1b5d0 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65  that needs to be
1b5e0 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e   freed */.    in
1b5f0 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  t iLevel;       
1b600 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c      /* Nesting l
1b610 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20  evel */.    int 
1b620 69 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20  iReg;           
1b630 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61    /* Reg with va
1b640 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  lue of this colu
1b650 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65  mn. 0 means none
1b660 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75  . */.    int lru
1b670 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1b680 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79  * Least recently
1b690 20 75 73 65 64 20 65 6e 74 72 79 20 68 61 73 20   used entry has 
1b6a0 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c  the smallest val
1b6b0 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61  ue */.  } aColCa
1b6c0 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  che[SQLITE_N_COL
1b6d0 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20  CACHE];  /* One 
1b6e0 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
1b6f0 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20  cache entry */. 
1b700 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73   ExprList *pCons
1b710 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e  tExpr;/* Constan
1b720 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  t expressions */
1b730 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61  .  Token constra
1b740 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20  intName;/* Name 
1b750 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  of the constrain
1b760 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  t currently bein
1b770 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44  g parsed */.  yD
1b780 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b  bMask writeMask;
1b790 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72     /* Start a wr
1b7a0 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
1b7b0 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62 61 73  on these databas
1b7c0 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20  es */.  yDbMask 
1b7d0 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20  cookieMask;  /* 
1b7e0 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d  Bitmask of schem
1b7f0 61 20 76 65 72 69 66 69 65 64 20 64 61 74 61 62  a verified datab
1b800 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f  ases */.  int co
1b810 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49 54 45  okieValue[SQLITE
1b820 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 32 5d  _MAX_ATTACHED+2]
1b830 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20  ;  /* Values of 
1b840 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72 69 66  cookies to verif
1b850 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  y */.  int regRo
1b860 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52  wid;        /* R
1b870 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1b880 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45 20  rowid of CREATE 
1b890 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20  TABLE entry */. 
1b8a0 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20   int regRoot;   
1b8b0 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
1b8c0 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70  r holding root p
1b8d0 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e  age number for n
1b8e0 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20  ew objects */.  
1b8f0 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20  int nMaxArg;    
1b900 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73       /* Max args
1b910 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72 20   passed to user 
1b920 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d  function by sub-
1b930 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53  program */.#if S
1b940 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
1b950 45 44 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74  ED.  int nSelect
1b960 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
1b970 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74  ber of SELECT st
1b980 61 74 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f  atements seen */
1b990 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e  .  int nSelectIn
1b9a0 64 65 6e 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66  dent;   /* How f
1b9b0 61 72 20 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c  ar to indent SEL
1b9c0 45 43 54 54 52 41 43 45 28 29 20 6f 75 74 70 75  ECTTRACE() outpu
1b9d0 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  t */.#endif.#ifn
1b9e0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1b9f0 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69  SHARED_CACHE.  i
1ba00 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20  nt nTableLock;  
1ba10 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1ba20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62  of locks in aTab
1ba30 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c  leLock */.  Tabl
1ba40 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63  eLock *aTableLoc
1ba50 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74  k; /* Required t
1ba60 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73  able locks for s
1ba70 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
1ba80 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74   */.#endif.  Aut
1ba90 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b  oincInfo *pAinc;
1baa0 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
1bab0 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45   about AUTOINCRE
1bac0 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f  MENT counters */
1bad0 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ..  /* Informati
1bae0 6f 6e 20 75 73 65 64 20 77 68 69 6c 65 20 63 6f  on used while co
1baf0 64 69 6e 67 20 74 72 69 67 67 65 72 20 70 72 6f  ding trigger pro
1bb00 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73  grams. */.  Pars
1bb10 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20  e *pToplevel;   
1bb20 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74   /* Parse struct
1bb30 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f  ure for main pro
1bb40 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a  gram (or NULL) *
1bb50 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67  /.  Table *pTrig
1bb60 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c  gerTab;  /* Tabl
1bb70 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62  e triggers are b
1bb80 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a  eing coded for *
1bb90 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54 61  /.  int addrCrTa
1bba0 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72  b;       /* Addr
1bbb0 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65  ess of OP_Create
1bbc0 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20  Table opcode on 
1bbd0 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a  CREATE TABLE */.
1bbe0 20 20 69 6e 74 20 61 64 64 72 53 6b 69 70 50 4b    int addrSkipPK
1bbf0 3b 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73  ;      /* Addres
1bc00 73 20 6f 66 20 69 6e 73 74 72 75 63 74 69 6f 6e  s of instruction
1bc10 20 74 6f 20 73 6b 69 70 20 50 52 49 4d 41 52 59   to skip PRIMARY
1bc20 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 20 20   KEY index */.  
1bc30 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20  u32 nQueryLoop; 
1bc40 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62       /* Est numb
1bc50 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73  er of iterations
1bc60 20 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a   of a query (10*
1bc70 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33  log2(N)) */.  u3
1bc80 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20  2 oldmask;      
1bc90 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c     /* Mask of ol
1bca0 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  d.* columns refe
1bcb0 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20  renced */.  u32 
1bcc0 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  newmask;        
1bcd0 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e   /* Mask of new.
1bce0 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
1bcf0 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72  nced */.  u8 eTr
1bd00 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f  iggerOp;       /
1bd10 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  * TK_UPDATE, TK_
1bd20 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c  INSERT or TK_DEL
1bd30 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63  ETE */.  u8 eOrc
1bd40 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
1bd50 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
1bd60 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20  LICT policy for 
1bd70 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f  trigger steps */
1bd80 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69  .  u8 disableTri
1bd90 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20  ggers;  /* True 
1bda0 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67  to disable trigg
1bdb0 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a  ers */..  /*****
1bdc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bdd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bde0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bdf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1be00 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69  ***.  ** Above i
1be10 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65  s constant betwe
1be20 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20  en recursions.  
1be30 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62  Below is reset b
1be40 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a  efore and after.
1be50 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73    ** each recurs
1be60 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61  ion.  The bounda
1be70 72 79 20 62 65 74 77 65 65 6e 20 74 68 65 73 65  ry between these
1be80 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20   two regions is 
1be90 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20  determined.  ** 
1bea0 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50  using offsetof(P
1beb0 61 72 73 65 2c 6e 56 61 72 29 20 73 6f 20 74 68  arse,nVar) so th
1bec0 65 20 6e 56 61 72 20 66 69 65 6c 64 20 6d 75 73  e nVar field mus
1bed0 74 20 62 65 20 74 68 65 20 66 69 72 73 74 20 66  t be the first f
1bee0 69 65 6c 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65  ield.  ** in the
1bef0 20 72 65 63 75 72 73 69 76 65 20 72 65 67 69 6f   recursive regio
1bf00 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
1bf10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bf20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bf30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bf40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
1bf50 20 20 69 6e 74 20 6e 56 61 72 3b 20 20 20 20 20    int nVar;     
1bf60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1bf70 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72  umber of '?' var
1bf80 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74  iables seen in t
1bf90 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f  he SQL so far */
1bfa0 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20  .  int nzVar;   
1bfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1bfc0 4e 75 6d 62 65 72 20 6f 66 20 61 76 61 69 6c 61  Number of availa
1bfd0 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56  ble slots in azV
1bfe0 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b  ar[] */.  u8 iPk
1bff0 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
1c000 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45      /* ASC or DE
1c010 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50  SC for INTEGER P
1c020 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20  RIMARY KEY */.  
1c030 75 38 20 62 46 72 65 65 57 69 74 68 3b 20 20 20  u8 bFreeWith;   
1c040 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1c050 65 20 69 66 20 70 57 69 74 68 20 73 68 6f 75 6c  e if pWith shoul
1c060 64 20 62 65 20 66 72 65 65 64 20 77 69 74 68 20  d be freed with 
1c070 70 61 72 73 65 72 20 2a 2f 0a 20 20 75 38 20 65  parser */.  u8 e
1c080 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20  xplain;         
1c090 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1c0a0 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61   the EXPLAIN fla
1c0b0 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68  g is found on th
1c0c0 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64  e query */.#ifnd
1c0d0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
1c0e0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75 38  IRTUALTABLE.  u8
1c0f0 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20 20 20   declareVtab;   
1c100 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1c110 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69 74 65  if inside sqlite
1c120 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
1c130 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c   */.  int nVtabL
1c140 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ock;            
1c150 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72  /* Number of vir
1c160 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c  tual tables to l
1c170 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ock */.#endif.  
1c180 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20 20 20  int nAlias;     
1c190 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1c1a0 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64 20 72  ber of aliased r
1c1b0 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e  esult set column
1c1c0 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67  s */.  int nHeig
1c1d0 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ht;             
1c1e0 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74   /* Expression t
1c1f0 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63 75  ree height of cu
1c200 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74  rrent sub-select
1c210 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
1c220 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
1c230 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64 3b    int iSelectId;
1c240 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1c250 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65 6c  D of current sel
1c260 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e 20  ect for EXPLAIN 
1c270 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20  output */.  int 
1c280 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20 20  iNextSelectId;  
1c290 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61 76        /* Next av
1c2a0 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20 49  ailable select I
1c2b0 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75  D for EXPLAIN ou
1c2c0 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  tput */.#endif. 
1c2d0 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20   char **azVar;  
1c2e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f             /* Po
1c2f0 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65 73 20  inters to names 
1c300 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f  of parameters */
1c310 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65 70  .  Vdbe *pReprep
1c320 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  are;         /* 
1c330 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70 61  VM being reprepa
1c340 72 65 64 20 28 73 71 6c 69 74 65 33 52 65 70 72  red (sqlite3Repr
1c350 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f  epare()) */.  co
1c360 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b  nst char *zTail;
1c370 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53          /* All S
1c380 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65  QL text past the
1c390 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20   last semicolon 
1c3a0 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c  parsed */.  Tabl
1c3b0 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20  e *pNewTable;   
1c3c0 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65        /* A table
1c3d0 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74   being construct
1c3e0 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42  ed by CREATE TAB
1c3f0 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  LE */.  Trigger 
1c400 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20  *pNewTrigger;   
1c410 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64    /* Trigger und
1c420 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20  er construct by 
1c430 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  a CREATE TRIGGER
1c440 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1c450 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
1c460 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d  /* The 6th param
1c470 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74  eter to db->xAut
1c480 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20  h callbacks */. 
1c490 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65   Token sNameToke
1c4a0 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f  n;         /* To
1c4b0 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69  ken with unquali
1c4c0 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65  fied schema obje
1c4d0 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b  ct name */.  Tok
1c4e0 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20  en sLastToken;  
1c4f0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61         /* The la
1c500 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20  st token parsed 
1c510 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1c520 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
1c530 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67  BLE.  Token sArg
1c540 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1c550 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74  /* Complete text
1c560 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67   of a module arg
1c570 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65  ument */.  Table
1c580 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20   **apVtabLock;  
1c590 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
1c5a0 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  to virtual table
1c5b0 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e  s needing lockin
1c5c0 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61  g */.#endif.  Ta
1c5d0 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b  ble *pZombieTab;
1c5e0 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
1c5f0 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  of Table objects
1c600 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72   to delete after
1c610 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54   code gen */.  T
1c620 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69 67  riggerPrg *pTrig
1c630 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b  gerPrg;  /* Link
1c640 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64  ed list of coded
1c650 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20 57   triggers */.  W
1c660 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20  ith *pWith;     
1c670 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
1c680 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65 2c  ent WITH clause,
1c690 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a 0a   or NULL */.};..
1c6a0 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
1c6b0 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69  e if currently i
1c6c0 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33  nside an sqlite3
1c6d0 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20  _declare_vtab() 
1c6e0 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  call..*/.#ifdef 
1c6f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1c700 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69  UALTABLE.  #defi
1c710 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54  ne IN_DECLARE_VT
1c720 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65  AB 0.#else.  #de
1c730 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
1c740 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65  VTAB (pParse->de
1c750 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69  clareVtab).#endi
1c760 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
1c770 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1c780 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1c790 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20  can be declared 
1c7a0 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75  on a stack and u
1c7b0 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74  sed.** to save t
1c7c0 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  he Parse.zAuthCo
1c7d0 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74  ntext value so t
1c7e0 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65  hat it can be re
1c7f0 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f  stored later..*/
1c800 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74  .struct AuthCont
1c810 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ext {.  const ch
1c820 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
1c830 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64  ;   /* Put saved
1c840 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
1c850 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61  ext here */.  Pa
1c860 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
1c870 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1c880 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
1c890 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69   */.};../*.** Bi
1c8a0 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72  tfield flags for
1c8b0 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72   P5 value in var
1c8c0 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f  ious opcodes..*/
1c8d0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1c8e0 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78  NCHANGE       0x
1c8f0 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20  01    /* Set to 
1c900 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e  update db->nChan
1c910 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ge */.#define OP
1c920 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20  FLAG_EPHEM      
1c930 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
1c940 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72  _Column: Ephemer
1c950 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20  al output is ok 
1c960 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1c970 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20  G_LASTROWID     
1c980 30 78 30 32 20 20 20 20 2f 2a 20 53 65 74 20 74  0x02    /* Set t
1c990 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73  o update db->las
1c9a0 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e  tRowid */.#defin
1c9b0 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  e OPFLAG_ISUPDAT
1c9c0 45 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f  E      0x04    /
1c9d0 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74  * This OP_Insert
1c9e0 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54   is an sql UPDAT
1c9f0 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E */.#define OPF
1ca00 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20  LAG_APPEND      
1ca10 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69    0x08    /* Thi
1ca20 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62  s is likely to b
1ca30 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23  e an append */.#
1ca40 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53  define OPFLAG_US
1ca50 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30  ESEEKRESULT 0x10
1ca60 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76      /* Try to av
1ca70 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74  oid a seek in Bt
1ca80 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23  reeInsert() */.#
1ca90 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45  define OPFLAG_LE
1caa0 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34 30  NGTHARG     0x40
1cab0 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
1cac0 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c   only used for l
1cad0 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69  ength() */.#defi
1cae0 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  ne OPFLAG_TYPEOF
1caf0 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20 20  ARG     0x80    
1cb00 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
1cb10 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f  y used for typeo
1cb20 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  f() */.#define O
1cb30 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20  PFLAG_BULKCSR   
1cb40 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
1cb50 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f  P_Open** used to
1cb60 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f   open bulk curso
1cb70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
1cb80 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20  LAG_P2ISREG     
1cb90 20 20 30 78 30 32 20 20 20 20 2f 2a 20 50 32 20    0x02    /* P2 
1cba0 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20  to OP_Open** is 
1cbb0 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  a register numbe
1cbc0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
1cbd0 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20  LAG_PERMUTE     
1cbe0 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
1cbf0 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65  Compare: use the
1cc00 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a   permutation */.
1cc10 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67  ./*. * Each trig
1cc20 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ger present in t
1cc30 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
1cc40 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  ma is stored as 
1cc50 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20  an instance of. 
1cc60 2a 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  * struct Trigger
1cc70 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72  . . *. * Pointer
1cc80 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f  s to instances o
1cc90 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1cca0 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
1ccb0 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49  wo ways.. * 1. I
1ccc0 6e 20 74 68 65 20 22 74 72 69 67 48 61 73 68 22  n the "trigHash"
1ccd0 20 68 61 73 68 20 74 61 62 6c 65 20 28 70 61 72   hash table (par
1cce0 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  t of the sqlite3
1ccf0 2a 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74  * that represent
1cd00 73 20 74 68 65 20 0a 20 2a 20 20 20 20 64 61 74  s the . *    dat
1cd10 61 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c  abase). This all
1cd20 6f 77 73 20 54 72 69 67 67 65 72 20 73 74 72 75  ows Trigger stru
1cd30 63 74 75 72 65 73 20 74 6f 20 62 65 20 72 65 74  ctures to be ret
1cd40 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a  rieved by name..
1cd50 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65   * 2. All trigge
1cd60 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  rs associated wi
1cd70 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  th a single tabl
1cd80 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20  e form a linked 
1cd90 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a  list, using the.
1cda0 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62   *    pNext memb
1cdb0 65 72 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  er of struct Tri
1cdc0 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20  gger. A pointer 
1cdd0 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
1cde0 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20  ment of the. *  
1cdf0 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73    linked list is
1ce00 20 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 22   stored as the "
1ce10 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72  pTrigger" member
1ce20 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74   of the associat
1ce30 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20  ed. *    struct 
1ce40 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65  Table.. *. * The
1ce50 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d   "step_list" mem
1ce60 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  ber points to th
1ce70 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
1ce80 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  of a linked list
1ce90 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  . * containing t
1cea0 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
1ceb0 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  s specified as t
1cec0 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
1ced0 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54  am.. */.struct T
1cee0 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20  rigger {.  char 
1cef0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
1cf00 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f     /* The name o
1cf10 66 20 74 68 65 20 74 72 69 67 67 65 72 20 20 20  f the trigger   
1cf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf30 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a       */.  char *
1cf40 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  table;          
1cf50 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f    /* The table o
1cf60 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20  r view to which 
1cf70 74 68 65 20 74 72 69 67 67 65 72 20 61 70 70 6c  the trigger appl
1cf80 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ies */.  u8 op; 
1cf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfa0 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
1cfb0 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
1cfc0 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20   TK_INSERT      
1cfd0 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d     */.  u8 tr_tm
1cfe0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1cff0 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45  /* One of TRIGGE
1d000 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45  R_BEFORE, TRIGGE
1d010 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70  R_AFTER */.  Exp
1d020 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20  r *pWhen;       
1d030 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e       /* The WHEN
1d040 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65   clause of the e
1d050 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62  xpression (may b
1d060 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c  e NULL) */.  IdL
1d070 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20  ist *pColumns;  
1d080 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20       /* If this 
1d090 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20  is an UPDATE OF 
1d0a0 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72  <column-list> tr
1d0b0 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20  igger,.         
1d0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0d0 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d      the <column-
1d0e0 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20  list> is stored 
1d0f0 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  here */.  Schema
1d100 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
1d110 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
1d120 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67  aining the trigg
1d130 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  er */.  Schema *
1d140 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20  pTabSchema;     
1d150 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
1d160 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a  ning the table *
1d170 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
1d180 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c  *step_list; /* L
1d190 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67  ink list of trig
1d1a0 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70  ger program step
1d1b0 73 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f  s             */
1d1c0 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78  .  Trigger *pNex
1d1d0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
1d1e0 78 74 20 74 72 69 67 67 65 72 20 61 73 73 6f 63  xt trigger assoc
1d1f0 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74  iated with the t
1d200 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  able */.};../*.*
1d210 2a 20 41 20 74 72 69 67 67 65 72 20 69 73 20 65  * A trigger is e
1d220 69 74 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f  ither a BEFORE o
1d230 72 20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67  r an AFTER trigg
1d240 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  er.  The followi
1d250 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20  ng constants.** 
1d260 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e  determine which.
1d270 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65   .**.** If there
1d280 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72   are multiple tr
1d290 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68  iggers, you migh
1d2a0 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45  t of some BEFORE
1d2b0 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e   and some AFTER.
1d2c0 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65  .** In that case
1d2d0 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73  s, the constants
1d2e0 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52   below can be OR
1d2f0 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a  ed together..*/.
1d300 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f  #define TRIGGER_
1d310 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e  BEFORE  1.#defin
1d320 65 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20  e TRIGGER_AFTER 
1d330 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e    2../*. * An in
1d340 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74  stance of struct
1d350 20 54 72 69 67 67 65 72 53 74 65 70 20 69 73 20   TriggerStep is 
1d360 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20  used to store a 
1d370 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65  single SQL state
1d380 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20  ment. * that is 
1d390 61 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67  a part of a trig
1d3a0 67 65 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a  ger-program. . *
1d3b0 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66  . * Instances of
1d3c0 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
1d3d0 74 65 70 20 61 72 65 20 73 74 6f 72 65 64 20 69  tep are stored i
1d3e0 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65  n a singly linke
1d3f0 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20  d list (linked. 
1d400 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65  * using the "pNe
1d410 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65  xt" member) refe
1d420 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 22 73  renced by the "s
1d430 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
1d440 20 6f 66 20 74 68 65 20 0a 20 2a 20 61 73 73 6f   of the . * asso
1d450 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54 72  ciated struct Tr
1d460 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20  igger instance. 
1d470 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
1d480 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20  t of the linked 
1d490 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66  list is. * the f
1d4a0 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68 65  irst step of the
1d4b0 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
1d4c0 2e 0a 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70  .. * . * The "op
1d4d0 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74  " member indicat
1d4e0 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20  es whether this 
1d4f0 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22  is a "DELETE", "
1d500 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45  INSERT", "UPDATE
1d510 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22  " or. * "SELECT"
1d520 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20   statement. The 
1d530 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20  meanings of the 
1d540 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73  other members is
1d550 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
1d560 68 65 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20  he . * value of 
1d570 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  "op" as follows:
1d580 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
1d590 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f  _INSERT). * orco
1d5a0 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20  nf    -> stores 
1d5b0 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
1d5c0 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65  algorithm. * pSe
1d5d0 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69  lect   -> If thi
1d5e0 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
1d5f0 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e  NTO ... SELECT .
1d600 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  .. statement, th
1d610 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  en. *           
1d620 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61     this stores a
1d630 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
1d640 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1d650 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c  . Otherwise NULL
1d660 2e 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d  .. * target    -
1d670 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e  > A token holdin
1d680 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d  g the quoted nam
1d690 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
1d6a0 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20  o insert into.. 
1d6b0 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49  * pExprList -> I
1d6c0 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
1d6d0 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c  ERT INTO ... VAL
1d6e0 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e  UES ... statemen
1d6f0 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20  t, then. *      
1d700 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f          this sto
1d710 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65  res values to be
1d720 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72   inserted. Other
1d730 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49  wise NULL.. * pI
1d740 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68  dList   -> If th
1d750 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
1d760 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d  INTO ... (<colum
1d770 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53  n-names>) VALUES
1d780 20 2e 2e 2e 20 0a 20 2a 20 20 20 20 20 20 20 20   ... . *        
1d790 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c        statement,
1d7a0 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65   then this store
1d7b0 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d  s the column-nam
1d7c0 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20  es to be. *     
1d7d0 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74 65           inserte
1d7e0 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f  d into.. *. * (o
1d7f0 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a  p == TK_DELETE).
1d800 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20   * target    -> 
1d810 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20  A token holding 
1d820 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20  the quoted name 
1d830 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
1d840 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20  delete from.. * 
1d850 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65  pWhere    -> The
1d860 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66   WHERE clause of
1d870 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74   the DELETE stat
1d880 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20  ement if one is 
1d890 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20  specified.. *   
1d8a0 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72             Other
1d8b0 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20  wise NULL.. * . 
1d8c0 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41  * (op == TK_UPDA
1d8d0 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20  TE). * target   
1d8e0 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64   -> A token hold
1d8f0 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e  ing the quoted n
1d900 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
1d910 20 74 6f 20 75 70 64 61 74 65 20 72 6f 77 73 20   to update rows 
1d920 6f 66 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  of.. * pWhere   
1d930 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
1d940 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41  ause of the UPDA
1d950 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
1d960 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
1d970 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
1d980 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
1d990 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d  .. * pExprList -
1d9a0 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20  > A list of the 
1d9b0 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74  columns to updat
1d9c0 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73  e and the expres
1d9d0 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a  sions to update.
1d9e0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1d9f0 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c  them to. See sql
1da00 69 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63  ite3Update() doc
1da10 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70  umentation of "p
1da20 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20  Changes". *     
1da30 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e           argumen
1da40 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63  t.. * . */.struc
1da50 74 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a  t TriggerStep {.
1da60 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
1da70 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
1da80 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
1da90 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
1daa0 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20  , TK_SELECT */. 
1dab0 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20   u8 orconf;     
1dac0 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c        /* OE_Roll
1dad0 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54  back etc. */.  T
1dae0 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20  rigger *pTrig;  
1daf0 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67      /* The trigg
1db00 65 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65  er that this ste
1db10 70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a  p is a part of *
1db20 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
1db30 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45  ect;     /* SELE
1db40 43 54 20 73 74 61 74 6d 65 6e 74 20 6f 72 20 52  CT statment or R
1db50 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54  HS of INSERT INT
1db60 4f 20 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20  O .. SELECT ... 
1db70 2a 2f 0a 20 20 54 6f 6b 65 6e 20 74 61 72 67 65  */.  Token targe
1db80 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61 72  t;        /* Tar
1db90 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45  get table for DE
1dba0 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e  LETE, UPDATE, IN
1dbb0 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a  SERT */.  Expr *
1dbc0 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f  pWhere;        /
1dbd0 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  * The WHERE clau
1dbe0 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72  se for DELETE or
1dbf0 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f   UPDATE steps */
1dc00 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78  .  ExprList *pEx
1dc10 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63  prList; /* SET c
1dc20 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54 45  lause for UPDATE
1dc30 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70  . */.  IdList *p
1dc40 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43  IdList;     /* C
1dc50 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20  olumn names for 
1dc60 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67  INSERT */.  Trig
1dc70 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20  gerStep *pNext; 
1dc80 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20   /* Next in the 
1dc90 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54  link-list */.  T
1dca0 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73  riggerStep *pLas
1dcb0 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d  t;  /* Last elem
1dcc0 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74  ent in link-list
1dcd0 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20  . Valid for 1st 
1dce0 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a  elem only */.};.
1dcf0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
1dd00 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
1dd10 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
1dd20 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
1dd30 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20  sqliteFix....** 
1dd40 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79  routines as they
1dd50 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20   walk the parse 
1dd60 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74  tree to make dat
1dd70 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73  abase references
1dd80 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a  .** explicit.  .
1dd90 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
1dda0 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65  t DbFixer DbFixe
1ddb0 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65  r;.struct DbFixe
1ddc0 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  r {.  Parse *pPa
1ddd0 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rse;      /* The
1dde0 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74   parsing context
1ddf0 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  .  Error message
1de00 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a  s written here *
1de10 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
1de20 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69  ema;    /* Fix i
1de30 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68  tems to this sch
1de40 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61  ema */.  int bVa
1de50 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20  rOnly;       /* 
1de60 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62  Check for variab
1de70 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e  le references on
1de80 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ly */.  const ch
1de90 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d  ar *zDb;    /* M
1dea0 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a  ake sure all obj
1deb0 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e  ects are contain
1dec0 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61 62  ed in this datab
1ded0 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ase */.  const c
1dee0 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20  har *zType;  /* 
1def0 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Type of the cont
1df00 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
1df10 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
1df20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  */.  const Token
1df30 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65   *pName; /* Name
1df40 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
1df50 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
1df60 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d  or messages */.}
1df70 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65  ;../*.** An obje
1df80 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63 63  cted used to acc
1df90 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78 74  umulate the text
1dfa0 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68 65   of a string whe
1dfb0 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20  re we.** do not 
1dfc0 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77  necessarily know
1dfd0 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74 72   how big the str
1dfe0 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74  ing will be in t
1dff0 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63  he end..*/.struc
1e000 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73  t StrAccum {.  s
1e010 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
1e020 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
1e030 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f  database for loo
1e040 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20  kaside.  Can be 
1e050 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a  NULL */.  char *
1e060 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f  zBase;         /
1e070 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74  * A base allocat
1e080 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d  ion.  Not from m
1e090 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72  alloc. */.  char
1e0a0 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20   *zText;        
1e0b0 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63   /* The string c
1e0c0 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20  ollected so far 
1e0d0 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61 72 3b  */.  int  nChar;
1e0e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
1e0f0 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e  gth of the strin
1e100 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  g so far */.  in
1e110 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  t  nAlloc;      
1e120 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20     /* Amount of 
1e130 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  space allocated 
1e140 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e  in zText */.  in
1e150 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20  t  mxAlloc;     
1e160 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c     /* Maximum al
1e170 6c 6f 77 65 64 20 73 74 72 69 6e 67 20 6c 65 6e  lowed string len
1e180 67 74 68 20 2a 2f 0a 20 20 75 38 20 20 20 75 73  gth */.  u8   us
1e190 65 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a  eMalloc;      /*
1e1a0 20 30 3a 20 6e 6f 6e 65 2c 20 20 31 3a 20 73 71   0: none,  1: sq
1e1b0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20 20  lite3DbMalloc,  
1e1c0 32 3a 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  2: sqlite3_mallo
1e1d0 63 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63 45  c */.  u8   accE
1e1e0 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 53  rror;       /* S
1e1f0 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72  TRACCUM_NOMEM or
1e200 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47   STRACCUM_TOOBIG
1e210 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53   */.};.#define S
1e220 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20  TRACCUM_NOMEM   
1e230 31 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43  1.#define STRACC
1e240 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a 0a 2f 2a  UM_TOOBIG  2../*
1e250 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  .** A pointer to
1e260 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
1e270 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75  is used to commu
1e280 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69  nicate informati
1e290 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74  on.** from sqlit
1e2a0 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61  e3Init and OP_Pa
1e2b0 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74  rseSchema into t
1e2c0 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  he sqlite3InitCa
1e2d0 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64  llback..*/.typed
1e2e0 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71  ef struct {.  sq
1e2f0 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
1e300 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
1e310 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  e being initiali
1e320 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  zed */.  char **
1e330 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20  pzErrMsg;    /* 
1e340 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  Error message st
1e350 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69  ored here */.  i
1e360 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  nt iDb;         
1e370 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e     /* 0 for main
1e380 20 64 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f   database.  1 fo
1e390 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20  r TEMP, 2.. for 
1e3a0 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e  ATTACHed */.  in
1e3b0 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
1e3c0 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65    /* Result code
1e3d0 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
1e3e0 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a  } InitData;../*.
1e3f0 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e  ** Structure con
1e400 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63  taining global c
1e410 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74  onfiguration dat
1e420 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  a for the SQLite
1e430 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20   library..**.** 
1e440 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61  This structure a
1e450 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d  lso contains som
1e460 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74  e state informat
1e470 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
1e480 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20  qlite3Config {. 
1e490 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20   int bMemstat;  
1e4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4b0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
1e4c0 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74  able memory stat
1e4d0 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72  us */.  int bCor
1e4e0 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  eMutex;         
1e4f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1e500 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65  e to enable core
1e510 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69   mutexing */.  i
1e520 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20  nt bFullMutex;  
1e530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e540 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
1e550 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67  le full mutexing
1e560 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55   */.  int bOpenU
1e570 72 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ri;             
1e580 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1e590 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c  to interpret fil
1e5a0 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a  enames as URIs *
1e5b0 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b  /.  int bUseCis;
1e5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5d0 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76        /* Use cov
1e5e0 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f  ering indices fo
1e5f0 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a  r full-scans */.
1e600 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20    int mxStrlen; 
1e610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e620 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73      /* Maximum s
1e630 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a  tring length */.
1e640 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75    int neverCorru
1e650 70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pt;             
1e660 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
1e670 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66  is always well-f
1e680 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73  ormed */.  int s
1e690 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20  zLookaside;     
1e6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e6b0 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
1e6c0 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f  e buffer size */
1e6d0 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64  .  int nLookasid
1e6e0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1e6f0 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
1e700 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
1e710 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 73 71 6c 69   count */.  sqli
1e720 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
1e730 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
1e740 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72   Low-level memor
1e750 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74  y allocation int
1e760 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
1e770 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
1e780 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a  s mutex;      /*
1e790 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78   Low-level mutex
1e7a0 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
1e7b0 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d  sqlite3_pcache_m
1e7c0 65 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b  ethods2 pcache2;
1e7d0 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70    /* Low-level p
1e7e0 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66  age-cache interf
1e7f0 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
1e800 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
1e810 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65             /* He
1e820 61 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65  ap storage space
1e830 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b   */.  int nHeap;
1e840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e850 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
1e860 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20  of pHeap[] */.  
1e870 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71  int mnReq, mxReq
1e880 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e890 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78    /* Min and max
1e8a0 20 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73   heap requests s
1e8b0 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  izes */.  sqlite
1e8c0 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20  3_int64 szMmap; 
1e8d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d              /* m
1e8e0 6d 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20  map() space per 
1e8f0 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73  open file */.  s
1e900 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d  qlite3_int64 mxM
1e910 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
1e920 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75   /* Maximum valu
1e930 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a  e for szMmap */.
1e940 20 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63 68    void *pScratch
1e950 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e960 20 20 20 20 2f 2a 20 53 63 72 61 74 63 68 20 6d      /* Scratch m
1e970 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
1e980 7a 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  zScratch;       
1e990 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e9a0 53 69 7a 65 20 6f 66 20 65 61 63 68 20 73 63 72  Size of each scr
1e9b0 61 74 63 68 20 62 75 66 66 65 72 20 2a 2f 0a 20  atch buffer */. 
1e9c0 20 69 6e 74 20 6e 53 63 72 61 74 63 68 3b 20 20   int nScratch;  
1e9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9e0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1e9f0 73 63 72 61 74 63 68 20 62 75 66 66 65 72 73 20  scratch buffers 
1ea00 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65  */.  void *pPage
1ea10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ea20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63         /* Page c
1ea30 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20  ache memory */. 
1ea40 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20   int szPage;    
1ea50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea60 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
1ea70 63 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65  ch page in pPage
1ea80 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67  [] */.  int nPag
1ea90 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1eaa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1eab0 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
1eac0 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pPage[] */.  int
1ead0 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20   mxParserStack; 
1eae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1eaf0 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20  * maximum depth 
1eb00 6f 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74  of the parser st
1eb10 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61  ack */.  int sha
1eb20 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b  redCacheEnabled;
1eb30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72             /* tr
1eb40 75 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63  ue if shared-cac
1eb50 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20  he mode enabled 
1eb60 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76  */.  /* The abov
1eb70 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69  e might be initi
1eb80 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65  alized to non-ze
1eb90 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ro.  The followi
1eba0 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79  ng need to alway
1ebb0 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79  s.  ** initially
1ebc0 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65   be zero, howeve
1ebd0 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e  r. */.  int isIn
1ebe0 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
1ebf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1ec00 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69  e after initiali
1ec10 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73  zation has finis
1ec20 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50  hed */.  int inP
1ec30 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20 20  rogress;        
1ec40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1ec50 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c  ue while initial
1ec60 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72  ization in progr
1ec70 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d  ess */.  int isM
1ec80 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20  utexInit;       
1ec90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1eca0 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65 73  ue after mutexes
1ecb0 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64   are initialized
1ecc0 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c   */.  int isMall
1ecd0 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  ocInit;         
1ece0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1ecf0 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20  after malloc is 
1ed00 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
1ed10 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69   int isPCacheIni
1ed20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1ed30 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
1ed40 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69   malloc is initi
1ed50 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20  alized */.  int 
1ed60 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20  nRefInitMutex;  
1ed70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ed80 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73   Number of users
1ed90 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a   of pInitMutex *
1eda0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
1edb0 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20  x *pInitMutex;  
1edc0 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75        /* Mutex u
1edd0 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69  sed by sqlite3_i
1ede0 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20  nitialize() */. 
1edf0 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f   void (*xLog)(vo
1ee00 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
1ee10 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f  ar*); /* Functio
1ee20 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f  n for logging */
1ee30 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67  .  void *pLogArg
1ee40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ee50 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
1ee60 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f   argument to xLo
1ee70 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  g() */.#ifdef SQ
1ee80 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c  LITE_ENABLE_SQLL
1ee90 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c  OG.  void(*xSqll
1eea0 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  og)(void*,sqlite
1eeb0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
1eec0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53  int);.  void *pS
1eed0 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66  qllogArg;.#endif
1eee0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 56  .#ifdef SQLITE_V
1eef0 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f  DBE_COVERAGE.  /
1ef00 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
1ef10 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74  callback (if not
1ef20 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65   NULL) is invoke
1ef30 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45 20  d on every VDBE 
1ef40 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72  branch.  ** oper
1ef50 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65 20  ation.  Set the 
1ef60 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 53  callback using S
1ef70 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56  QLITE_TESTCTRL_V
1ef80 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20  DBE_COVERAGE..  
1ef90 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64 62  */.  void (*xVdb
1efa0 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69  eBranch)(void*,i
1efb0 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75 38 20 65  nt iSrcLine,u8 e
1efc0 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f  This,u8 eMx);  /
1efd0 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  * Callback */.  
1efe0 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e 63  void *pVdbeBranc
1eff0 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  hArg;           
1f000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f010 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74            /* 1st
1f020 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e   argument */.#en
1f030 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
1f040 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
1f050 54 45 53 54 0a 20 20 69 6e 74 20 28 2a 78 54 65  TEST.  int (*xTe
1f060 73 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29  stCallback)(int)
1f070 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f  ;        /* Invo
1f080 6b 65 64 20 62 79 20 73 71 6c 69 74 65 33 46 61  ked by sqlite3Fa
1f090 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64  ultSim() */.#end
1f0a0 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74  if.  int bLocalt
1f0b0 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20  imeFault;       
1f0c0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1f0d0 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65  o fail localtime
1f0e0 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a  () calls */.};..
1f0f0 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f  /*.** This macro
1f100 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
1f110 6f 66 20 61 73 73 65 72 74 28 29 20 73 74 61 74  of assert() stat
1f120 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63 61  ements to indica
1f130 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 61  te that.** the a
1f140 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76 61  ssert is only va
1f150 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f  lid on a well-fo
1f160 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20 20  rmed database.  
1f170 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a  Instead of:.**.*
1f180 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20  *     assert( X 
1f190 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69  );.**.** One wri
1f1a0 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61  tes:.**.**     a
1f1b0 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52 52  ssert( X || CORR
1f1c0 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20  UPT_DB );.**.** 
1f1d0 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74 72  CORRUPT_DB is tr
1f1e0 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c  ue during normal
1f1f0 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52   operation.  COR
1f200 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74  RUPT_DB does not
1f210 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68 61   indicate.** tha
1f220 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  t the database i
1f230 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f 72  s definitely cor
1f240 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20  rupt, only that 
1f250 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72 72  it might be corr
1f260 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74  upt..** For most
1f270 20 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f 52   test cases, COR
1f280 52 55 50 54 5f 44 42 20 69 73 20 73 65 74 20 74  RUPT_DB is set t
1f290 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61 20  o false using a 
1f2a0 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74  special.** sqlit
1f2b0 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
1f2c0 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65 73  ).  This enables
1f2d0 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
1f2e0 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a  ents to prove.**
1f2f0 20 74 68 69 6e 67 73 20 74 68 61 74 20 61 72 65   things that are
1f300 20 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f 72   always true for
1f310 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74   well-formed dat
1f320 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  abases..*/.#defi
1f330 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20 28  ne CORRUPT_DB  (
1f340 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65  sqlite3Config.ne
1f350 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a  verCorrupt==0)..
1f360 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f  /*.** Context po
1f370 69 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f 77  inter passed dow
1f380 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20 74 72  n through the tr
1f390 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75  ee-walk..*/.stru
1f3a0 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 69 6e  ct Walker {.  in
1f3b0 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61 63  t (*xExprCallbac
1f3c0 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  k)(Walker*, Expr
1f3d0 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62  *);     /* Callb
1f3e0 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73 69  ack for expressi
1f3f0 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  ons */.  int (*x
1f400 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29 28  SelectCallback)(
1f410 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29  Walker*,Select*)
1f420 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66  ;  /* Callback f
1f430 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20  or SELECTs */.  
1f440 76 6f 69 64 20 28 2a 78 53 65 6c 65 63 74 43 61  void (*xSelectCa
1f450 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a  llback2)(Walker*
1f460 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63  ,Select*);/* Sec
1f470 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  ond callback for
1f480 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 50 61   SELECTs */.  Pa
1f490 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
1f4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4b0 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65          /* Parse
1f4c0 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20  r context.  */. 
1f4d0 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68   int walkerDepth
1f4e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f4f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1f500 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65 72 69  mber of subqueri
1f510 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65  es */.  u8 eCode
1f520 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f540 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f    /* A small pro
1f550 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a  cessing code */.
1f560 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20    union {       
1f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f580 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
1f590 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63 61  xtra data for ca
1f5a0 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61  llback */.    Na
1f5b0 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20  meContext *pNC; 
1f5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69           /* Nami
1f5e0 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  ng context */.  
1f5f0 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
1f600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f610 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f620 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20  A counter */.   
1f630 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20   int iCur;      
1f640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f650 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
1f660 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a   cursor number *
1f670 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70  /.    SrcList *p
1f680 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20  SrcList;        
1f690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6a0 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20   /* FROM clause 
1f6b0 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72  */.    struct Sr
1f6c0 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e  cCount *pSrcCoun
1f6d0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1f6e0 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f    /* Counting co
1f6f0 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20  lumn references 
1f700 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a  */.  } u;.};../*
1f710 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61   Forward declara
1f720 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c  tions */.int sql
1f730 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c  ite3WalkExpr(Wal
1f740 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  ker*, Expr*);.in
1f750 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70  t sqlite3WalkExp
1f760 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45  rList(Walker*, E
1f770 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
1f780 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
1f790 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
1f7a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1f7b0 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61  alkSelectExpr(Wa
1f7c0 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
1f7d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
1f7e0 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65  SelectFrom(Walke
1f7f0 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f  r*, Select*);../
1f800 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65  *.** Return code
1f810 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d   from the parse-
1f820 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69  tree walking pri
1f830 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68 65 69  mitives and thei
1f840 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a  r.** callbacks..
1f850 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43  */.#define WRC_C
1f860 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f  ontinue    0   /
1f870 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20  * Continue down 
1f880 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f  into children */
1f890 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75  .#define WRC_Pru
1f8a0 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20  ne       1   /* 
1f8b0 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75  Omit children bu
1f8c0 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69  t continue walki
1f8d0 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23  ng siblings */.#
1f8e0 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74  define WRC_Abort
1f8f0 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62         2   /* Ab
1f900 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77  andon the tree w
1f910 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  alk */../*.** An
1f920 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
1f930 73 20 73 74 72 75 63 74 75 72 65 20 72 65 70 72  s structure repr
1f940 65 73 65 6e 74 73 20 61 20 73 65 74 20 6f 66 20  esents a set of 
1f950 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54 45 73  one or more CTEs
1f960 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c  .** (common tabl
1f970 65 20 65 78 70 72 65 73 73 69 6f 6e 73 29 20 63  e expressions) c
1f980 72 65 61 74 65 64 20 62 79 20 61 20 73 69 6e 67  reated by a sing
1f990 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 0a  le WITH clause..
1f9a0 2a 2f 0a 73 74 72 75 63 74 20 57 69 74 68 20 7b  */.struct With {
1f9b0 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20 20 20 20  .  int nCte;    
1f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9d0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1f9e0 43 54 45 73 20 69 6e 20 74 68 65 20 57 49 54 48  CTEs in the WITH
1f9f0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69 74   clause */.  Wit
1fa00 68 20 2a 70 4f 75 74 65 72 3b 20 20 20 20 20 20  h *pOuter;      
1fa10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fa20 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54 48 20  Containing WITH 
1fa30 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20  clause, or NULL 
1fa40 2a 2f 0a 20 20 73 74 72 75 63 74 20 43 74 65 20  */.  struct Cte 
1fa50 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
1fa60 20 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68       /* For each
1fa70 20 43 54 45 20 69 6e 20 74 68 65 20 57 49 54 48   CTE in the WITH
1fa80 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20   clause.... */. 
1fa90 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
1faa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fab0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
1fac0 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 45 78  is CTE */.    Ex
1fad0 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20  prList *pCols;  
1fae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1faf0 20 4c 69 73 74 20 6f 66 20 65 78 70 6c 69 63 69   List of explici
1fb00 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20  t column names, 
1fb10 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53  or NULL */.    S
1fb20 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
1fb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1fb40 2a 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e  * The definition
1fb50 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a   of this CTE */.
1fb60 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
1fb70 7a 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  zErr;           
1fb80 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73      /* Error mes
1fb90 73 61 67 65 20 66 6f 72 20 63 69 72 63 75 6c 61  sage for circula
1fba0 72 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a  r references */.
1fbb0 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69    } a[1];.};..#i
1fbc0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1fbd0 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  G./*.** An insta
1fbe0 6e 63 65 20 6f 66 20 74 68 65 20 54 72 65 65 56  nce of the TreeV
1fbf0 69 65 77 20 6f 62 6a 65 63 74 20 69 73 20 75 73  iew object is us
1fc00 65 64 20 66 6f 72 20 70 72 69 6e 74 69 6e 67 20  ed for printing 
1fc10 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
1fc20 2a 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  * data structure
1fc30 73 20 6f 6e 20 73 71 6c 69 74 65 33 44 65 62 75  s on sqlite3Debu
1fc40 67 50 72 69 6e 74 66 28 29 20 75 73 69 6e 67 20  gPrintf() using 
1fc50 61 20 74 72 65 65 2d 6c 69 6b 65 20 76 69 65 77  a tree-like view
1fc60 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 65 65  ..*/.struct Tree
1fc70 56 69 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c 65  View {.  int iLe
1fc80 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  vel;            
1fc90 20 2f 2a 20 57 68 69 63 68 20 6c 65 76 65 6c 20   /* Which level 
1fca0 6f 66 20 74 68 65 20 74 72 65 65 20 77 65 20 61  of the tree we a
1fcb0 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20 62  re on */.  u8  b
1fcc0 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20 20  Line[100];      
1fcd0 20 20 20 2f 2a 20 44 72 61 77 20 76 65 72 74 69     /* Draw verti
1fce0 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69 20  cal in column i 
1fcf0 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20 74  if bLine[i] is t
1fd00 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66  rue */.};.#endif
1fd10 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
1fd20 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d   */../*.** Assum
1fd30 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74  ing zIn points t
1fd40 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
1fd50 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61 72   of a UTF-8 char
1fd60 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63  acter,.** advanc
1fd70 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74  e zIn to point t
1fd80 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
1fd90 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54 46   of the next UTF
1fda0 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f  -8 character..*/
1fdb0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
1fdc0 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b  SKIP_UTF8(zIn) {
1fdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fde0 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20          \.  if( 
1fdf0 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30  (*(zIn++))>=0xc0
1fe00 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20   ){             
1fe10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a   \.    while( (*
1fe30 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38  zIn & 0xc0)==0x8
1fe40 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20  0 ){ zIn++; }   
1fe50 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20            \.  } 
1fe60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe90 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68     \.}../*.** Th
1fea0 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20  e SQLITE_*_BKPT 
1feb0 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62 73 74  macros are subst
1fec0 69 74 75 74 65 73 20 66 6f 72 20 74 68 65 20 65  itutes for the e
1fed0 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a  rror codes with.
1fee0 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  ** the same name
1fef0 20 62 75 74 20 77 69 74 68 6f 75 74 20 74 68 65   but without the
1ff00 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20   _BKPT suffix.  
1ff10 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76  These macros inv
1ff20 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20  oke.** routines 
1ff30 74 68 61 74 20 72 65 70 6f 72 74 20 74 68 65 20  that report the 
1ff40 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77  line-number on w
1ff50 68 69 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f  hich the error o
1ff60 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69  riginated.** usi
1ff70 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29  ng sqlite3_log()
1ff80 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20  .  The routines 
1ff90 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63  also provide a c
1ffa0 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a  onvenient place.
1ffb0 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62 75  ** to set a debu
1ffc0 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e  gger breakpoint.
1ffd0 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  .*/.int sqlite3C
1ffe0 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29  orruptError(int)
1fff0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73  ;.int sqlite3Mis
20000 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69  useError(int);.i
20010 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70  nt sqlite3Cantop
20020 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64  enError(int);.#d
20030 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52  efine SQLITE_COR
20040 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65  RUPT_BKPT sqlite
20050 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f  3CorruptError(__
20060 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20  LINE__).#define 
20070 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b  SQLITE_MISUSE_BK
20080 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65  PT sqlite3Misuse
20090 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
200a0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
200b0 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c  ANTOPEN_BKPT sql
200c0 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f  ite3CantopenErro
200d0 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a  r(__LINE__).../*
200e0 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c  .** FTS4 is real
200f0 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20  ly an extension 
20100 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73  for FTS3.  It is
20110 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74   enabled using t
20120 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41  he.** SQLITE_ENA
20130 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20  BLE_FTS3 macro. 
20140 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f   But to avoid co
20150 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20  nfusion we also 
20160 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49  call.** the SQLI
20170 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d  TE_ENABLE_FTS4 m
20180 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73  acro to serve as
20190 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51   an alias for SQ
201a0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
201b0 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
201c0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
201d0 54 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64  TS4) && !defined
201e0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
201f0 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51  TS3).# define SQ
20200 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
20210 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
20220 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65  he ctype.h heade
20230 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20  r is needed for 
20240 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d  non-ASCII system
20250 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a  s.  It is also.*
20260 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33  * needed by FTS3
20270 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e   when FTS3 is in
20280 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d  cluded in the am
20290 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23  algamation..*/.#
202a0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
202b0 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20  TE_ASCII) || \. 
202c0 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49     (defined(SQLI
202d0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20  TE_ENABLE_FTS3) 
202e0 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
202f0 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29  E_AMALGAMATION))
20300 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70  .# include <ctyp
20310 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  e.h>.#endif../*.
20320 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
20330 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68   macros mimic th
20340 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61  e standard libra
20350 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75  ry functions tou
20360 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61  pper(),.** isspa
20370 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c  ce(), isalnum(),
20380 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69   isdigit() and i
20390 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65  sxdigit(), respe
203a0 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20  ctively. The.** 
203b0 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20  sqlite versions 
203c0 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53  only work for AS
203d0 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20  CII characters, 
203e0 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f  regardless of lo
203f0 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  cale..*/.#ifdef 
20400 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64  SQLITE_ASCII.# d
20410 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75  efine sqlite3Tou
20420 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28  pper(x)  ((x)&~(
20430 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
20440 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
20450 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66  x)]&0x20)).# def
20460 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61  ine sqlite3Isspa
20470 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  ce(x)   (sqlite3
20480 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
20490 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
204a0 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  1).# define sqli
204b0 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20  te3Isalnum(x)   
204c0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
204d0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
204e0 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66  (x)]&0x06).# def
204f0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70  ine sqlite3Isalp
20500 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  ha(x)   (sqlite3
20510 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
20520 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
20530 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  2).# define sqli
20540 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20  te3Isdigit(x)   
20550 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
20560 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
20570 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66  (x)]&0x04).# def
20580 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69  ine sqlite3Isxdi
20590 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33  git(x)  (sqlite3
205a0 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
205b0 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
205c0 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  8).# define sqli
205d0 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
205e0 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c  (sqlite3UpperToL
205f0 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63  ower[(unsigned c
20600 68 61 72 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a  har)(x)]).#else.
20610 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20620 54 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f 75  Toupper(x)   tou
20630 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63  pper((unsigned c
20640 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
20650 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65  e sqlite3Isspace
20660 28 78 29 20 20 20 69 73 73 70 61 63 65 28 28 75  (x)   isspace((u
20670 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
20680 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
20690 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69  e3Isalnum(x)   i
206a0 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64  salnum((unsigned
206b0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
206c0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70  ine sqlite3Isalp
206d0 68 61 28 78 29 20 20 20 69 73 61 6c 70 68 61 28  ha(x)   isalpha(
206e0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
206f0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
20700 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20  ite3Isdigit(x)  
20710 20 69 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e   isdigit((unsign
20720 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
20730 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78  efine sqlite3Isx
20740 64 69 67 69 74 28 78 29 20 20 69 73 78 64 69 67  digit(x)  isxdig
20750 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  it((unsigned cha
20760 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
20770 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78  sqlite3Tolower(x
20780 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73  )   tolower((uns
20790 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
207a0 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
207b0 65 33 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a  e3IsIdChar(u8);.
207c0 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20  ./*.** Internal 
207d0 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79  function prototy
207e0 70 65 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73  pes.*/.#define s
207f0 71 6c 69 74 65 33 53 74 72 49 43 6d 70 20 73 71  qlite3StrICmp sq
20800 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 0a 69 6e  lite3_stricmp.in
20810 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  t sqlite3Strlen3
20820 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  0(const char*);.
20830 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
20840 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f  trNICmp sqlite3_
20850 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71  strnicmp..int sq
20860 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28  lite3MallocInit(
20870 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
20880 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69  te3MallocEnd(voi
20890 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  d);.void *sqlite
208a0 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f  3Malloc(u64);.vo
208b0 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
208c0 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64  cZero(u64);.void
208d0 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
208e0 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20  cZero(sqlite3*, 
208f0 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
20900 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73  te3DbMallocRaw(s
20910 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63  qlite3*, u64);.c
20920 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74  har *sqlite3DbSt
20930 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f  rDup(sqlite3*,co
20940 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
20950 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44   *sqlite3DbStrND
20960 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
20970 74 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 76  t char*, u64);.v
20980 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c  oid *sqlite3Real
20990 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b  loc(void*, u64);
209a0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
209b0 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71  ReallocOrFree(sq
209c0 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c  lite3 *, void *,
209d0 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
209e0 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71  ite3DbRealloc(sq
209f0 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c  lite3 *, void *,
20a00 20 75 36 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u64);.void sqli
20a10 74 65 33 44 62 46 72 65 65 28 73 71 6c 69 74 65  te3DbFree(sqlite
20a20 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  3*, void*);.int 
20a30 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a  sqlite3MallocSiz
20a40 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  e(void*);.int sq
20a50 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a  lite3DbMallocSiz
20a60 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  e(sqlite3*, void
20a70 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
20a80 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69  3ScratchMalloc(i
20a90 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
20aa0 33 53 63 72 61 74 63 68 46 72 65 65 28 76 6f 69  3ScratchFree(voi
20ab0 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  d*);.void *sqlit
20ac0 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74  e3PageMalloc(int
20ad0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
20ae0 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a  ageFree(void*);.
20af0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53  void sqlite3MemS
20b00 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b  etDefault(void);
20b10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e  .void sqlite3Ben
20b20 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76  ignMallocHooks(v
20b30 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76  oid (*)(void), v
20b40 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a  oid (*)(void));.
20b50 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e  int sqlite3HeapN
20b60 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b  earlyFull(void);
20b70 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65  ../*.** On syste
20b80 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74  ms with ample st
20b90 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68  ack space and th
20ba0 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63  at support alloc
20bb0 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65  a(), make.** use
20bc0 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20   of alloca() to 
20bd0 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72  obtain space for
20be0 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63   large automatic
20bf0 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65   objects.  By de
20c00 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e  fault,.** obtain
20c10 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c   space from mall
20c20 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  oc()..**.** The 
20c30 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65  alloca() routine
20c40 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e   never returns N
20c50 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  ULL.  This will 
20c60 63 61 75 73 65 20 63 6f 64 65 20 70 61 74 68 73  cause code paths
20c70 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69  .** that deal wi
20c80 74 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  th sqlite3StackA
20c90 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20  lloc() failures 
20ca0 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c  to be unreachabl
20cb0 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  e..*/.#ifdef SQL
20cc0 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23  ITE_USE_ALLOCA.#
20cd0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
20ce0 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e  tackAllocRaw(D,N
20cf0 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20  )   alloca(N).# 
20d00 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
20d10 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  ackAllocZero(D,N
20d20 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61  )  memset(alloca
20d30 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66  (N), 0, N).# def
20d40 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
20d50 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20  Free(D,P)       
20d60 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
20d70 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
20d80 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69  cRaw(D,N)   sqli
20d90 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44  te3DbMallocRaw(D
20da0 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,N).# define sql
20db0 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65  ite3StackAllocZe
20dc0 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33  ro(D,N)  sqlite3
20dd0 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  DbMallocZero(D,N
20de0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
20df0 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29  e3StackFree(D,P)
20e00 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
20e10 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66  Free(D,P).#endif
20e20 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
20e30 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63  ENABLE_MEMSYS3.c
20e40 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d  onst sqlite3_mem
20e50 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65  _methods *sqlite
20e60 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76  3MemGetMemsys3(v
20e70 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  oid);.#endif.#if
20e80 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
20e90 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20  E_MEMSYS5.const 
20ea0 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
20eb0 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
20ec0 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b  etMemsys5(void);
20ed0 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65  .#endif...#ifnde
20ee0 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f  f SQLITE_MUTEX_O
20ef0 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  MIT.  sqlite3_mu
20f00 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73  tex_methods cons
20f10 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c  t *sqlite3Defaul
20f20 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  tMutex(void);.  
20f30 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
20f40 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c  thods const *sql
20f50 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f  ite3NoopMutex(vo
20f60 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  id);.  sqlite3_m
20f70 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74  utex *sqlite3Mut
20f80 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20  exAlloc(int);.  
20f90 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78  int sqlite3Mutex
20fa0 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e  Init(void);.  in
20fb0 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e  t sqlite3MutexEn
20fc0 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  d(void);.#endif.
20fd0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74  .int sqlite3Stat
20fe0 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f  usValue(int);.vo
20ff0 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
21000 41 64 64 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  Add(int, int);.v
21010 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
21020 73 53 65 74 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  sSet(int, int);.
21030 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
21040 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
21050 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  INT.  int sqlite
21060 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a  3IsNaN(double);.
21070 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
21080 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20  qlite3IsNaN(X)  
21090 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
210a0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
210b0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
210c0 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66  ucture holds inf
210d0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53  ormation about S
210e0 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  QL.** functions 
210f0 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61  arguments that a
21100 72 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  re the parameter
21110 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28  s to the printf(
21120 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  ) function..*/.s
21130 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75  truct PrintfArgu
21140 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41  ments {.  int nA
21150 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
21160 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62     /* Total numb
21170 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
21180 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20  */.  int nUsed; 
21190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
211a0 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
211b0 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61 72  ents used so far
211c0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61   */.  sqlite3_va
211d0 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f  lue **apArg;   /
211e0 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76  * The argument v
211f0 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65  alues */.};..#de
21200 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
21210 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31  TF_INTERNAL 0x01
21220 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
21230 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20  PRINTF_SQLFUNC  
21240 30 78 30 32 0a 76 6f 69 64 20 73 71 6c 69 74 65  0x02.void sqlite
21250 33 56 58 50 72 69 6e 74 66 28 53 74 72 41 63 63  3VXPrintf(StrAcc
21260 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20  um*, u32, const 
21270 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
21280 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72  .void sqlite3XPr
21290 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20  intf(StrAccum*, 
212a0 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  u32, const char*
212b0 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71  , ...);.char *sq
212c0 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c  lite3MPrintf(sql
212d0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
212e0 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73  *, ...);.char *s
212f0 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73  qlite3VMPrintf(s
21300 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
21310 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 63  ar*, va_list);.c
21320 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 41 70 70  har *sqlite3MApp
21330 65 6e 64 66 28 73 71 6c 69 74 65 33 2a 2c 63 68  endf(sqlite3*,ch
21340 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
21350 2e 2e 2e 29 3b 0a 23 69 66 20 64 65 66 69 6e 65  ...);.#if define
21360 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
21370 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
21380 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73  _DEBUG).  void s
21390 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
213a0 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  f(const char*, .
213b0 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  ..);.#endif.#if 
213c0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
213d0 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c  EST).  void *sql
213e0 69 74 65 33 54 65 73 74 54 65 78 74 54 6f 50 74  ite3TestTextToPt
213f0 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  r(const char*);.
21400 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69  #endif..#if defi
21410 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
21420 29 0a 20 20 54 72 65 65 56 69 65 77 20 2a 73 71  ).  TreeView *sq
21430 6c 69 74 65 33 54 72 65 65 56 69 65 77 50 75 73  lite3TreeViewPus
21440 68 28 54 72 65 65 56 69 65 77 2a 2c 75 38 29 3b  h(TreeView*,u8);
21450 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
21460 72 65 65 56 69 65 77 50 6f 70 28 54 72 65 65 56  reeViewPop(TreeV
21470 69 65 77 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  iew*);.  void sq
21480 6c 69 74 65 33 54 72 65 65 56 69 65 77 4c 69 6e  lite3TreeViewLin
21490 65 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  e(TreeView*, con
214a0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
214b0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
214c0 65 65 56 69 65 77 49 74 65 6d 28 54 72 65 65 56  eeViewItem(TreeV
214d0 69 65 77 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  iew*, const char
214e0 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73  *, u8);.  void s
214f0 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78  qlite3TreeViewEx
21500 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  pr(TreeView*, co
21510 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a  nst Expr*, u8);.
21520 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
21530 65 65 56 69 65 77 45 78 70 72 4c 69 73 74 28 54  eeViewExprList(T
21540 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
21550 45 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63  ExprList*, u8, c
21560 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
21570 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
21580 69 65 77 53 65 6c 65 63 74 28 54 72 65 65 56 69  iewSelect(TreeVi
21590 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63  ew*, const Selec
215a0 74 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a  t*, u8);.#endif.
215b0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ..void sqlite3Se
215c0 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c  tString(char **,
215d0 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74   sqlite3*, const
215e0 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f   char*, ...);.vo
215f0 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d  id sqlite3ErrorM
21600 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  sg(Parse*, const
21610 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e   char*, ...);.in
21620 74 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65  t sqlite3Dequote
21630 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (char*);.int sql
21640 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28  ite3KeywordCode(
21650 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
21660 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  har*, int);.int 
21670 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72  sqlite3RunParser
21680 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
21690 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  har*, char **);.
216a0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
216b0 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29  shCoding(Parse*)
216c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
216d0 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b  TempReg(Parse*);
216e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
216f0 65 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73  easeTempReg(Pars
21700 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  e*,int);.int sql
21710 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65  ite3GetTempRange
21720 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
21730 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
21740 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  eTempRange(Parse
21750 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
21760 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d   sqlite3ClearTem
21770 70 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a  pRegCache(Parse*
21780 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
21790 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65  ExprAlloc(sqlite
217a0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b  3*,int,const Tok
217b0 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  en*,int);.Expr *
217c0 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69  sqlite3Expr(sqli
217d0 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
217e0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
217f0 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62  te3ExprAttachSub
21800 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45  trees(sqlite3*,E
21810 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  xpr*,Expr*,Expr*
21820 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
21830 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e  PExpr(Parse*, in
21840 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  t, Expr*, Expr*,
21850 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
21860 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
21870 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78  rAnd(sqlite3*,Ex
21880 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  pr*, Expr*);.Exp
21890 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75  r *sqlite3ExprFu
218a0 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78  nction(Parse*,Ex
218b0 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  prList*, Token*)
218c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
218d0 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65  prAssignVarNumbe
218e0 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  r(Parse*, Expr*)
218f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
21900 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  prDelete(sqlite3
21910 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c  *, Expr*);.ExprL
21920 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
21930 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65  ListAppend(Parse
21940 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
21950 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21960 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28  ExprListSetName(
21970 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
21980 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Token*,int);.vo
21990 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
219a0 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a  stSetSpan(Parse*
219b0 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53  ,ExprList*,ExprS
219c0 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  pan*);.void sqli
219d0 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74  te3ExprListDelet
219e0 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
219f0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
21a00 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  te3Init(sqlite3*
21a10 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73  , char**);.int s
21a20 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
21a30 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  ck(void*, int, c
21a40 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  har**, char**);.
21a50 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67  void sqlite3Prag
21a60 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ma(Parse*,Token*
21a70 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
21a80 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21a90 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
21aa0 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c  OfConnection(sql
21ab0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
21ac0 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
21ad0 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ma(sqlite3*,int)
21ae0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
21af0 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72  llapseDatabaseAr
21b00 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ray(sqlite3*);.v
21b10 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
21b20 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69 6e 74  Parse(Parse*,int
21b30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
21b40 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61  ommitInternalCha
21b50 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  nges(sqlite3*);.
21b60 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65  Table *sqlite3Re
21b70 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28  sultSetOfSelect(
21b80 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b  Parse*,Select*);
21b90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
21ba0 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72  nMasterTable(Par
21bb0 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65  se *, int);.Inde
21bc0 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72  x *sqlite3Primar
21bd0 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a  yKeyIndex(Table*
21be0 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f  );.i16 sqlite3Co
21bf0 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65  lumnOfIndex(Inde
21c00 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73  x*, i16);.void s
21c10 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65  qlite3StartTable
21c20 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
21c30 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  oken*,int,int,in
21c40 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
21c50 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61  ite3AddColumn(Pa
21c60 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  rse*,Token*);.vo
21c70 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74  id sqlite3AddNot
21c80 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74  Null(Parse*, int
21c90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
21ca0 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72  ddPrimaryKey(Par
21cb0 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
21cc0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
21cd0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
21ce0 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50  heckConstraint(P
21cf0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
21d00 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
21d10 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65 2a 2c  lumnType(Parse*,
21d20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
21d30 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56  lite3AddDefaultV
21d40 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72  alue(Parse*,Expr
21d50 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Span*);.void sql
21d60 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79  ite3AddCollateTy
21d70 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
21d80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21d90 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  EndTable(Parse*,
21da0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38  Token*,Token*,u8
21db0 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73  ,Select*);.int s
21dc0 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63  qlite3ParseUri(c
21dd0 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
21de0 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20   char*,unsigned 
21df0 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  int*,.          
21e00 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
21e10 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63  3_vfs**,char**,c
21e20 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a  har **);.Btree *
21e30 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42  sqlite3DbNameToB
21e40 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  tree(sqlite3*,co
21e50 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
21e60 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28  sqlite3CodeOnce(
21e70 50 61 72 73 65 20 2a 29 3b 0a 0a 23 69 66 64 65  Parse *);..#ifde
21e80 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
21e90 49 4c 54 49 4e 5f 54 45 53 54 0a 23 20 64 65 66  ILTIN_TEST.# def
21ea0 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74  ine sqlite3Fault
21eb0 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b  Sim(X) SQLITE_OK
21ec0 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c  .#else.  int sql
21ed0 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74  ite3FaultSim(int
21ee0 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65  );.#endif..Bitve
21ef0 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63  c *sqlite3Bitvec
21f00 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74  Create(u32);.int
21f10 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
21f20 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  st(Bitvec*, u32)
21f30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
21f40 76 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20  vecSet(Bitvec*, 
21f50 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u32);.void sqlit
21f60 65 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69  e3BitvecClear(Bi
21f70 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64  tvec*, u32, void
21f80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21f90 42 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69  BitvecDestroy(Bi
21fa0 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69  tvec*);.u32 sqli
21fb0 74 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69  te3BitvecSize(Bi
21fc0 74 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  tvec*);.int sqli
21fd0 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e  te3BitvecBuiltin
21fe0 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a  Test(int,int*);.
21ff0 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33  .RowSet *sqlite3
22000 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74  RowSetInit(sqlit
22010 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69  e3*, void*, unsi
22020 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20  gned int);.void 
22030 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65  sqlite3RowSetCle
22040 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69  ar(RowSet*);.voi
22050 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49  d sqlite3RowSetI
22060 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69  nsert(RowSet*, i
22070 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
22080 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65  RowSetTest(RowSe
22090 74 2a 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20  t*, int iBatch, 
220a0 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
220b0 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53  3RowSetNext(RowS
220c0 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69  et*, i64*);..voi
220d0 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 56  d sqlite3CreateV
220e0 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  iew(Parse*,Token
220f0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
22100 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29  Select*,int,int)
22110 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
22120 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
22130 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51  ) || !defined(SQ
22140 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
22150 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71  LTABLE).  int sq
22160 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
22170 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54  mnNames(Parse*,T
22180 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  able*);.#else.# 
22190 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69  define sqlite3Vi
221a0 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
221b0 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a  (A,B) 0.#endif..
221c0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41  #if SQLITE_MAX_A
221d0 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74  TTACHED>30.  int
221e0 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c   sqlite3DbMaskAl
221f0 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a  lZero(yDbMask);.
22200 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
22210 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72  te3DropTable(Par
22220 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
22230 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
22240 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61  qlite3CodeDropTa
22250 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ble(Parse*, Tabl
22260 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
22270 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
22280 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
22290 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65   Table*);.#ifnde
222a0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
222b0 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f  TOINCREMENT.  vo
222c0 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
222d0 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72  crementBegin(Par
222e0 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76  se *pParse);.  v
222f0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69  oid sqlite3Autoi
22300 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73  ncrementEnd(Pars
22310 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73  e *pParse);.#els
22320 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
22330 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
22340 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65  egin(X).# define
22350 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
22360 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64  ementEnd(X).#end
22370 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  if.void sqlite3I
22380 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72  nsert(Parse*, Sr
22390 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c  cList*, Select*,
223a0 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a   IdList*, int);.
223b0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72  void *sqlite3Arr
223c0 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74  ayAllocate(sqlit
223d0 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e  e3*,void*,int,in
223e0 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74  t*,int*);.IdList
223f0 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41   *sqlite3IdListA
22400 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20  ppend(sqlite3*, 
22410 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  IdList*, Token*)
22420 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c  ;.int sqlite3IdL
22430 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a  istIndex(IdList*
22440 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53  ,const char*);.S
22450 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
22460 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71  rcListEnlarge(sq
22470 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
22480 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63  , int, int);.Src
22490 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
224a0 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74  ListAppend(sqlit
224b0 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  e3*, SrcList*, T
224c0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
224d0 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
224e0 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f  SrcListAppendFro
224f0 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72  mTerm(Parse*, Sr
22500 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
22510 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20  Token*,.        
22520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 6f                To
22540 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45  ken*, Select*, E
22550 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a  xpr*, IdList*);.
22560 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
22570 69 73 74 49 6e 64 65 78 65 64 42 79 28 50 61 72  istIndexedBy(Par
22580 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  se *, SrcList *,
22590 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e 74 20 73   Token *);.int s
225a0 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c  qlite3IndexedByL
225b0 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73  ookup(Parse *, s
225c0 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
225d0 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  em *);.void sqli
225e0 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a  te3SrcListShiftJ
225f0 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a  oinType(SrcList*
22600 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
22610 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73  rcListAssignCurs
22620 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ors(Parse*, SrcL
22630 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
22640 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28  te3IdListDelete(
22650 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74  sqlite3*, IdList
22660 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22670 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71  SrcListDelete(sq
22680 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
22690 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
226a0 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62  3AllocateIndexOb
226b0 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31  ject(sqlite3*,i1
226c0 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 49  6,int,char**);.I
226d0 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65  ndex *sqlite3Cre
226e0 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
226f0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72  Token*,Token*,Sr
22700 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  cList*,ExprList*
22710 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20  ,int,Token*,.   
22720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22730 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e         Expr*, in
22740 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
22750 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50  lite3DropIndex(P
22760 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
22770 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
22780 65 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  e3Select(Parse*,
22790 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74   Select*, Select
227a0 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a  Dest*);.Select *
227b0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77  sqlite3SelectNew
227c0 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
227d0 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
227e0 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20  ,ExprList*,.    
227f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22800 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c       Expr*,ExprL
22810 69 73 74 2a 2c 75 31 36 2c 45 78 70 72 2a 2c 45  ist*,u16,Expr*,E
22820 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
22830 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28  te3SelectDelete(
22840 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74  sqlite3*, Select
22850 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
22860 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28  e3SrcListLookup(
22870 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
22880 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
22890 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c  ReadOnly(Parse*,
228a0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76   Table*, int);.v
228b0 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  oid sqlite3OpenT
228c0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  able(Parse*, int
228d0 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20   iCur, int iDb, 
228e0 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69  Table*, int);.#i
228f0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
22900 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44  _ENABLE_UPDATE_D
22910 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20  ELETE_LIMIT) && 
22920 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
22930 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45  OMIT_SUBQUERY).E
22940 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69  xpr *sqlite3Limi
22950 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72  tWhere(Parse*,Sr
22960 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
22970 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  rList*,Expr*,Exp
22980 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  r*,char*);.#endi
22990 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  f.void sqlite3De
229a0 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c  leteFrom(Parse*,
229b0 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a   SrcList*, Expr*
229c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
229d0 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72  pdate(Parse*, Sr
229e0 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
229f0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
22a00 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74  WhereInfo *sqlit
22a10 65 33 57 68 65 72 65 42 65 67 69 6e 28 50 61 72  e3WhereBegin(Par
22a20 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  se*,SrcList*,Exp
22a30 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
22a40 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b  rList*,u16,int);
22a50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65  .void sqlite3Whe
22a60 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a  reEnd(WhereInfo*
22a70 29 3b 0a 75 36 34 20 73 71 6c 69 74 65 33 57 68  );.u64 sqlite3Wh
22a80 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e  ereOutputRowCoun
22a90 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  t(WhereInfo*);.i
22aa0 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
22ab0 73 44 69 73 74 69 6e 63 74 28 57 68 65 72 65 49  sDistinct(WhereI
22ac0 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
22ad0 65 33 57 68 65 72 65 49 73 4f 72 64 65 72 65 64  e3WhereIsOrdered
22ae0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
22af0 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
22b00 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e 66 6f  Sorted(WhereInfo
22b10 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
22b20 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65  hereContinueLabe
22b30 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  l(WhereInfo*);.i
22b40 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 42  nt sqlite3WhereB
22b50 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49  reakLabel(WhereI
22b60 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
22b70 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73  e3WhereOkOnePass
22b80 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74  (WhereInfo*, int
22b90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
22ba0 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
22bb0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
22bc0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20   int, int, int, 
22bd0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
22be0 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
22bf0 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c  mnOfTable(Vdbe*,
22c00 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
22c10 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
22c20 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76  lite3ExprCodeMov
22c30 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
22c40 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
22c50 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 53  qlite3ExprCacheS
22c60 74 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  tore(Parse*, int
22c70 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
22c80 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
22c90 68 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a  hePush(Parse*);.
22ca0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
22cb0 43 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a 29  CachePop(Parse*)
22cc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
22cd0 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61  prCacheRemove(Pa
22ce0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
22cf0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
22d00 72 43 61 63 68 65 43 6c 65 61 72 28 50 61 72 73  rCacheClear(Pars
22d10 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
22d20 33 45 78 70 72 43 61 63 68 65 41 66 66 69 6e 69  3ExprCacheAffini
22d30 74 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c  tyChange(Parse*,
22d40 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
22d50 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
22d60 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
22d70 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22d80 65 33 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72  e3ExprCodeFactor
22d90 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70  able(Parse*, Exp
22da0 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
22db0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 74  qlite3ExprCodeAt
22dc0 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45 78 70  Init(Parse*, Exp
22dd0 72 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e  r*, int, u8);.in
22de0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
22df0 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78  eTemp(Parse*, Ex
22e00 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
22e10 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54  sqlite3ExprCodeT
22e20 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78  arget(Parse*, Ex
22e30 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
22e40 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41  sqlite3ExprCodeA
22e50 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20  ndCache(Parse*, 
22e60 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
22e70 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
22e80 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c  ExprList(Parse*,
22e90 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
22ea0 20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20 53 51   u8);.#define SQ
22eb0 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50 20 20 20  LITE_ECEL_DUP   
22ec0 20 20 20 30 78 30 31 20 20 2f 2a 20 44 65 65 70     0x01  /* Deep
22ed0 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f  , not shallow co
22ee0 70 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  pies */.#define 
22ef0 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43 54  SQLITE_ECEL_FACT
22f00 4f 52 20 20 20 30 78 30 32 20 20 2f 2a 20 46 61  OR   0x02  /* Fa
22f10 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e  ctor out constan
22f20 74 20 74 65 72 6d 73 20 2a 2f 0a 76 6f 69 64 20  t terms */.void 
22f30 73 71 6c 69 74 65 33 45 78 70 72 49 66 54 72 75  sqlite3ExprIfTru
22f40 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
22f50 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
22f60 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61   sqlite3ExprIfFa
22f70 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  lse(Parse*, Expr
22f80 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61  *, int, int);.Ta
22f90 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  ble *sqlite3Find
22fa0 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63  Table(sqlite3*,c
22fb0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
22fc0 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20  t char*);.Table 
22fd0 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61  *sqlite3LocateTa
22fe0 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74 20 69  ble(Parse*,int i
22ff0 73 56 69 65 77 2c 63 6f 6e 73 74 20 63 68 61 72  sView,const char
23000 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
23010 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c  .Table *sqlite3L
23020 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50  ocateTableItem(P
23030 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77  arse*,int isView
23040 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f  ,struct SrcList_
23050 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a  item *);.Index *
23060 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78  sqlite3FindIndex
23070 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
23080 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
23090 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
230a0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
230b0 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69  Table(sqlite3*,i
230c0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
230d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c  .void sqlite3Unl
230e0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65  inkAndDeleteInde
230f0 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  x(sqlite3*,int,c
23100 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
23110 64 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28  d sqlite3Vacuum(
23120 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
23130 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68  ite3RunVacuum(ch
23140 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b  ar**, sqlite3*);
23150 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61  .char *sqlite3Na
23160 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69  meFromToken(sqli
23170 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  te3*, Token*);.i
23180 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
23190 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45 78 70  mpare(Expr*, Exp
231a0 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
231b0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d  lite3ExprListCom
231c0 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20  pare(ExprList*, 
231d0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  ExprList*, int);
231e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
231f0 49 6d 70 6c 69 65 73 45 78 70 72 28 45 78 70 72  ImpliesExpr(Expr
23200 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
23210 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23220 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65  AnalyzeAggregate
23230 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
23240 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
23250 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41  ite3ExprAnalyzeA
23260 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65  ggList(NameConte
23270 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a  xt*,ExprList*);.
23280 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74  int sqlite3Funct
23290 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28 45  ionUsesThisSrc(E
232a0 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  xpr*, SrcList*);
232b0 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65  .Vdbe *sqlite3Ge
232c0 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 76  tVdbe(Parse*);.v
232d0 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53  oid sqlite3PrngS
232e0 61 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a  aveState(void);.
232f0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
23300 52 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69  RestoreState(voi
23310 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
23320 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69  RollbackAll(sqli
23330 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
23340 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
23350 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20  ySchema(Parse*, 
23360 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
23370 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65  e3CodeVerifyName
23380 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20  dSchema(Parse*, 
23390 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29  const char *zDb)
233a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
233b0 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50  ginTransaction(P
233c0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
233d0 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54  d sqlite3CommitT
233e0 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
233f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23400 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63 74  RollbackTransact
23410 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ion(Parse*);.voi
23420 64 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69  d sqlite3Savepoi
23430 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
23440 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
23450 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
23460 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b  ints(sqlite3 *);
23470 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61  .void sqlite3Lea
23480 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a  veMutexAndCloseZ
23490 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b  ombie(sqlite3*);
234a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
234b0 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a  IsConstant(Expr*
234c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
234d0 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a  prIsConstantNotJ
234e0 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  oin(Expr*);.int 
234f0 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
23500 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28  stantOrFunction(
23510 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20  Expr*, u8);.int 
23520 73 71 6c 69 74 65 33 45 78 70 72 49 73 54 61 62  sqlite3ExprIsTab
23530 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a  leConstant(Expr*
23540 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
23550 65 33 45 78 70 72 49 73 49 6e 74 65 67 65 72 28  e3ExprIsInteger(
23560 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  Expr*, int*);.in
23570 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e  t sqlite3ExprCan
23580 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70  BeNull(const Exp
23590 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
235a0 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e  ExprNeedsNoAffin
235b0 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20  ityChange(const 
235c0 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e  Expr*, char);.in
235d0 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64  t sqlite3IsRowid
235e0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  (const char*);.v
235f0 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
23600 61 74 65 52 6f 77 44 65 6c 65 74 65 28 50 61 72  ateRowDelete(Par
23610 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67  se*,Table*,Trigg
23620 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  er*,int,int,int,
23630 69 31 36 2c 75 38 2c 75 38 2c 75 38 29 3b 0a 76  i16,u8,u8,u8);.v
23640 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
23650 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74  ateRowIndexDelet
23660 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
23670 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
23680 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
23690 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50  nerateIndexKey(P
236a0 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69  arse*, Index*, i
236b0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  nt, int, int, in
236c0 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a  t*,Index*,int);.
236d0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
236e0 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28  lvePartIdxLabel(
236f0 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
23700 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
23710 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b  eConstraintCheck
23720 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  s(Parse*,Table*,
23730 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
23740 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20  ,int,.          
23750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23760 20 20 20 20 20 20 20 20 20 20 20 75 38 2c 75 38             u8,u8
23770 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64  ,int,int*);.void
23780 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65   sqlite3Complete
23790 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a  Insertion(Parse*
237a0 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Table*,int,int,
237b0 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74  int,int*,int,int
237c0 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
237d0 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e  e3OpenTableAndIn
237e0 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61  dices(Parse*, Ta
237f0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
23800 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29  u8*, int*, int*)
23810 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
23820 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f  ginWriteOperatio
23830 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  n(Parse*, int, i
23840 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
23850 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73  3MultiWrite(Pars
23860 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
23870 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a  3MayAbort(Parse*
23880 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48  );.void sqlite3H
23890 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  altConstraint(Pa
238a0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
238b0 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a  char*, i8, u8);.
238c0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71  void sqlite3Uniq
238d0 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ueConstraint(Par
238e0 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a  se*, int, Index*
238f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
23900 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50  owidConstraint(P
23910 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c  arse*, int, Tabl
23920 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  e*);.Expr *sqlit
23930 65 33 45 78 70 72 44 75 70 28 73 71 6c 69 74 65  e3ExprDup(sqlite
23940 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45  3*,Expr*,int);.E
23950 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  xprList *sqlite3
23960 45 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69  ExprListDup(sqli
23970 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  te3*,ExprList*,i
23980 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  nt);.SrcList *sq
23990 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75 70 28  lite3SrcListDup(
239a0 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74  sqlite3*,SrcList
239b0 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a  *,int);.IdList *
239c0 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70  sqlite3IdListDup
239d0 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74  (sqlite3*,IdList
239e0 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69  *);.Select *sqli
239f0 74 65 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c  te3SelectDup(sql
23a00 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e  ite3*,Select*,in
23a10 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54 54 52  t);.#if SELECTTR
23a20 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f 69 64  ACE_ENABLED.void
23a30 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65   sqlite3SelectSe
23a40 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c 63 6f  tName(Select*,co
23a50 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73  nst char*);.#els
23a60 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
23a70 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28  e3SelectSetName(
23a80 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  A,B).#endif.void
23a90 20 73 71 6c 69 74 65 33 46 75 6e 63 44 65 66 49   sqlite3FuncDefI
23aa0 6e 73 65 72 74 28 46 75 6e 63 44 65 66 48 61 73  nsert(FuncDefHas
23ab0 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46  h*, FuncDef*);.F
23ac0 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46  uncDef *sqlite3F
23ad0 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  indFunction(sqli
23ae0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
23af0 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38 29 3b  ,int,int,u8,u8);
23b00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
23b10 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63  isterBuiltinFunc
23b20 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  tions(sqlite3*);
23b30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
23b40 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e  isterDateTimeFun
23b50 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
23b60 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
23b70 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e  erGlobalFunction
23b80 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  s(void);.int sql
23b90 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f  ite3SafetyCheckO
23ba0 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  k(sqlite3*);.int
23bb0 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
23bc0 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69  eckSickOrOk(sqli
23bd0 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
23be0 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28  te3ChangeCookie(
23bf0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23  Parse*, int);..#
23c00 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
23c10 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26  TE_OMIT_VIEW) &&
23c20 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
23c30 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76  _OMIT_TRIGGER).v
23c40 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72  oid sqlite3Mater
23c50 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65  ializeView(Parse
23c60 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a  *, Table*, Expr*
23c70 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  , int);.#endif..
23c80 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
23c90 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f  MIT_TRIGGER.  vo
23ca0 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54  id sqlite3BeginT
23cb0 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
23cc0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
23cd0 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63  ,int,IdList*,Src
23ce0 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
23cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d00 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74    Expr*,int, int
23d10 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
23d20 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28 50  3FinishTrigger(P
23d30 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74  arse*, TriggerSt
23d40 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20  ep*, Token*);.  
23d50 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
23d60 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
23d70 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  SrcList*, int);.
23d80 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
23d90 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61 72  opTriggerPtr(Par
23da0 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a  se*, Trigger*);.
23db0 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
23dc0 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28  e3TriggersExist(
23dd0 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c  Parse *, Table*,
23de0 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
23df0 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20   int *pMask);.  
23e00 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33  Trigger *sqlite3
23e10 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72 73  TriggerList(Pars
23e20 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20  e *, Table *);. 
23e30 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
23e40 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72 73  eRowTrigger(Pars
23e50 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69  e*, Trigger *, i
23e60 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  nt, ExprList*, i
23e70 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20  nt, Table *,.   
23e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e90 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e           int, in
23ea0 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
23eb0 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
23ec0 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72 73  iggerDirect(Pars
23ed0 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  e *, Trigger *, 
23ee0 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Table *, int, in
23ef0 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
23f00 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67 65  sqliteViewTrigge
23f10 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  rs(Parse*, Table
23f20 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45  *, Expr*, int, E
23f30 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69  xprList*);.  voi
23f40 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
23f50 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69 74  riggerStep(sqlit
23f60 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  e3*, TriggerStep
23f70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
23f80 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
23f90 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69  rSelectStep(sqli
23fa0 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  te3*,Select*);. 
23fb0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
23fc0 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73 65  lite3TriggerInse
23fd0 72 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  rtStep(sqlite3*,
23fe0 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c  Token*, IdList*,
23ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24010 20 20 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a           Select*
24020 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ,u8);.  TriggerS
24030 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
24040 67 65 72 55 70 64 61 74 65 53 74 65 70 28 73 71  gerUpdateStep(sq
24050 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  lite3*,Token*,Ex
24060 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  prList*, Expr*, 
24070 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  u8);.  TriggerSt
24080 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
24090 65 72 44 65 6c 65 74 65 53 74 65 70 28 73 71 6c  erDeleteStep(sql
240a0 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78  ite3*,Token*, Ex
240b0 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  pr*);.  void sql
240c0 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
240d0 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  r(sqlite3*, Trig
240e0 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ger*);.  void sq
240f0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
24100 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
24110 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
24120 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c  har*);.  u32 sql
24130 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61  ite3TriggerColma
24140 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65  sk(Parse*,Trigge
24150 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  r*,ExprList*,int
24160 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29  ,int,Table*,int)
24170 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ;.# define sqlit
24180 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28  e3ParseToplevel(
24190 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76  p) ((p)->pToplev
241a0 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65  el ? (p)->pTople
241b0 76 65 6c 20 3a 20 28 70 29 29 0a 23 65 6c 73 65  vel : (p)).#else
241c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
241d0 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28 42  3TriggersExist(B
241e0 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65  ,C,D,E,F) 0.# de
241f0 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65  fine sqlite3Dele
24200 74 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23  teTrigger(A,B).#
24210 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44   define sqlite3D
24220 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 41 2c  ropTriggerPtr(A,
24230 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
24240 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
24250 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29  teTrigger(A,B,C)
24260 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24270 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28  3CodeRowTrigger(
24280 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c  A,B,C,D,E,F,G,H,
24290 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  I).# define sqli
242a0 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
242b0 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c  rDirect(A,B,C,D,
242c0 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71  E,F).# define sq
242d0 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74  lite3TriggerList
242e0 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e  (X, Y) 0.# defin
242f0 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
24300 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65  plevel(p) p.# de
24310 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
24320 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43  gerColmask(A,B,C
24330 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64  ,D,E,F,G) 0.#end
24340 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  if..int sqlite3J
24350 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20  oinType(Parse*, 
24360 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
24370 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
24380 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72 65 69  lite3CreateForei
24390 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78  gnKey(Parse*, Ex
243a0 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  prList*, Token*,
243b0 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
243c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
243d0 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61  ferForeignKey(Pa
243e0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e  rse*, int);.#ifn
243f0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
24400 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20  AUTHORIZATION.  
24410 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
24420 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72  Read(Parse*,Expr
24430 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73  *,Schema*,SrcLis
24440 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
24450 65 33 41 75 74 68 43 68 65 63 6b 28 50 61 72 73  e3AuthCheck(Pars
24460 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  e*,int, const ch
24470 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
24480 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
24490 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
244a0 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61  thContextPush(Pa
244b0 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78  rse*, AuthContex
244c0 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
244d0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
244e0 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41  AuthContextPop(A
244f0 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20  uthContext*);.  
24500 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 52  int sqlite3AuthR
24510 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63  eadCol(Parse*, c
24520 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e  onst char *, con
24530 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b  st char *, int);
24540 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
24550 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
24560 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e  a,b,c,d).# defin
24570 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  e sqlite3AuthChe
24580 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20  ck(a,b,c,d,e)   
24590 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66   SQLITE_OK.# def
245a0 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
245b0 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63  ontextPush(a,b,c
245c0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
245d0 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70  e3AuthContextPop
245e0 28 61 29 20 20 28 28 76 6f 69 64 29 28 61 29 29  (a)  ((void)(a))
245f0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
24600 69 74 65 33 41 74 74 61 63 68 28 50 61 72 73 65  ite3Attach(Parse
24610 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  *, Expr*, Expr*,
24620 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
24630 6c 69 74 65 33 44 65 74 61 63 68 28 50 61 72 73  lite3Detach(Pars
24640 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
24650 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28   sqlite3FixInit(
24660 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a  DbFixer*, Parse*
24670 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
24680 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
24690 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
246a0 78 53 72 63 4c 69 73 74 28 44 62 46 69 78 65 72  xSrcList(DbFixer
246b0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
246c0 74 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65  t sqlite3FixSele
246d0 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c  ct(DbFixer*, Sel
246e0 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
246f0 65 33 46 69 78 45 78 70 72 28 44 62 46 69 78 65  e3FixExpr(DbFixe
24700 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
24710 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69  sqlite3FixExprLi
24720 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  st(DbFixer*, Exp
24730 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
24740 69 74 65 33 46 69 78 54 72 69 67 67 65 72 53 74  ite3FixTriggerSt
24750 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69  ep(DbFixer*, Tri
24760 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20  ggerStep*);.int 
24770 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73  sqlite3AtoF(cons
24780 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c  t char *z, doubl
24790 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e  e*, int, u8);.in
247a0 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33  t sqlite3GetInt3
247b0 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  2(const char *, 
247c0 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
247d0 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61  e3Atoi(const cha
247e0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
247f0 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e  Utf16ByteLen(con
24800 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20  st void *pData, 
24810 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20  int nChar);.int 
24820 73 71 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c  sqlite3Utf8CharL
24830 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70  en(const char *p
24840 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29  Data, int nByte)
24850 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74 66  ;.u32 sqlite3Utf
24860 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a  8Read(const u8**
24870 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
24880 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f  3LogEst(u64);.Lo
24890 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
248a0 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67  stAdd(LogEst,Log
248b0 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  Est);.#ifndef SQ
248c0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
248d0 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71  LTABLE.LogEst sq
248e0 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44  lite3LogEstFromD
248f0 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23  ouble(double);.#
24900 65 6e 64 69 66 0a 75 36 34 20 73 71 6c 69 74 65  endif.u64 sqlite
24910 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67  3LogEstToInt(Log
24920 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75  Est);../*.** Rou
24930 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e  tines to read an
24940 64 20 77 72 69 74 65 20 76 61 72 69 61 62 6c 65  d write variable
24950 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73  -length integers
24960 2e 20 20 54 68 65 73 65 20 75 73 65 64 20 74 6f  .  These used to
24970 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c  .** be defined l
24980 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20  ocally, but now 
24990 77 65 20 75 73 65 20 74 68 65 20 76 61 72 69 6e  we use the varin
249a0 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68  t routines in th
249b0 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65  e util.c.** file
249c0 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
249d0 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e  PutVarint(unsign
249e0 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a  ed char*, u64);.
249f0 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
24a00 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  int(const unsign
24a10 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a  ed char *, u64 *
24a20 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  );.u8 sqlite3Get
24a30 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75  Varint32(const u
24a40 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
24a50 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  u32 *);.int sqli
24a60 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34  te3VarintLen(u64
24a70 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   v);../*.** The 
24a80 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20 66  common case is f
24a90 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f 20 62  or a varint to b
24aa0 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e  e a single byte.
24ab0 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67    They following
24ac0 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c  .** macros handl
24ad0 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  e the common cas
24ae0 65 20 77 69 74 68 6f 75 74 20 61 20 70 72 6f 63  e without a proc
24af0 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75 74 20  edure call, but 
24b00 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65  then call.** the
24b10 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20 6c   procedure for l
24b20 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a  arger varints..*
24b30 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  /.#define getVar
24b40 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20  int32(A,B)  \.  
24b50 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30  (u8)((*(A)<(u8)0
24b60 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a  x80)?((B)=(u32)*
24b70 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65  (A)),1:sqlite3Ge
24b80 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75  tVarint32((A),(u
24b90 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66  32 *)&(B))).#def
24ba0 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32 28  ine putVarint32(
24bb0 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
24bc0 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30 78  (u32)(B)<(u32)0x
24bd0 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67  80)?(*(A)=(unsig
24be0 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a  ned char)(B)),1:
24bf0 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56 61  \.  sqlite3PutVa
24c00 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29 0a 23  rint((A),(B))).#
24c10 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
24c20 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 56 61      sqlite3GetVa
24c30 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74  rint.#define put
24c40 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65  Varint    sqlite
24c50 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e  3PutVarint...con
24c60 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
24c70 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72  IndexAffinityStr
24c80 28 56 64 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a  (Vdbe *, Index *
24c90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54  );.void sqlite3T
24ca0 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62  ableAffinity(Vdb
24cb0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  e*, Table*, int)
24cc0 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f  ;.char sqlite3Co
24cd0 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28 45 78  mpareAffinity(Ex
24ce0 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
24cf0 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  aff2);.int sqlit
24d00 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f  e3IndexAffinityO
24d10 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63  k(Expr *pExpr, c
24d20 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79  har idx_affinity
24d30 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45  );.char sqlite3E
24d40 78 70 72 41 66 66 69 6e 69 74 79 28 45 78 70 72  xprAffinity(Expr
24d50 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71   *pExpr);.int sq
24d60 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73  lite3Atoi64(cons
24d70 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69  t char*, i64*, i
24d80 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
24d90 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36  ite3DecOrHexToI6
24da0 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  4(const char*, i
24db0 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  64*);.void sqlit
24dc0 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67 28 73  e3ErrorWithMsg(s
24dd0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
24de0 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a  nst char*,...);.
24df0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
24e00 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  r(sqlite3*,int);
24e10 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65  .void *sqlite3He
24e20 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a  xToBlob(sqlite3*
24e30 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  , const char *z,
24e40 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69   int n);.u8 sqli
24e50 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20  te3HexToInt(int 
24e60 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  h);.int sqlite3T
24e70 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65  woPartName(Parse
24e80 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b   *, Token *, Tok
24e90 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b  en *, Token **);
24ea0 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
24eb0 4c 49 54 45 5f 54 45 53 54 29 20 0a 63 6f 6e 73  LITE_TEST) .cons
24ec0 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45  t char *sqlite3E
24ed0 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e  rrName(int);.#en
24ee0 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20  dif..const char 
24ef0 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69  *sqlite3ErrStr(i
24f00 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
24f10 52 65 61 64 53 63 68 65 6d 61 28 50 61 72 73 65  ReadSchema(Parse
24f20 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53   *pParse);.CollS
24f30 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43  eq *sqlite3FindC
24f40 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c  ollSeq(sqlite3*,
24f50 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68  u8 enc, const ch
24f60 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65  ar*,int);.CollSe
24f70 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  q *sqlite3Locate
24f80 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
24f90 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61  Parse, const cha
24fa0 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65  r*zName);.CollSe
24fb0 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f  q *sqlite3ExprCo
24fc0 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
24fd0 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72  rse, Expr *pExpr
24fe0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
24ff0 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f  ExprAddCollateTo
25000 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  ken(Parse *pPars
25010 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20  e, Expr*, const 
25020 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73  Token*);.Expr *s
25030 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c  qlite3ExprAddCol
25040 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65  lateString(Parse
25050 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68  *,Expr*,const ch
25060 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  ar*);.Expr *sqli
25070 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61  te3ExprSkipColla
25080 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  te(Expr*);.int s
25090 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53  qlite3CheckCollS
250a0 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c  eq(Parse *, Coll
250b0 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Seq *);.int sqli
250c0 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61  te3CheckObjectNa
250d0 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73  me(Parse *, cons
250e0 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20  t char *);.void 
250f0 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
25100 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c  anges(sqlite3 *,
25110 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
25120 65 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c  e3AddInt64(i64*,
25130 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
25140 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69  3SubInt64(i64*,i
25150 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
25160 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  MulInt64(i64*,i6
25170 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  4);.int sqlite3A
25180 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69  bsInt32(int);.#i
25190 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
251a0 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69  LE_8_3_NAMES.voi
251b0 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66  d sqlite3FileSuf
251c0 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a  fix3(const char*
251d0 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  , char*);.#else.
251e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
251f0 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29  FileSuffix3(X,Y)
25200 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74  .#endif.u8 sqlit
25210 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e  e3GetBoolean(con
25220 73 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a  st char *z,u8);.
25230 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
25240 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71  ite3ValueText(sq
25250 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38  lite3_value*, u8
25260 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
25270 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33  lueBytes(sqlite3
25280 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f  _value*, u8);.vo
25290 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  id sqlite3ValueS
252a0 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61  etStr(sqlite3_va
252b0 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  lue*, int, const
252c0 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20   void *,u8, .   
252d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252e0 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69       void(*)(voi
252f0 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  d*));.void sqlit
25300 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73  e3ValueSetNull(s
25310 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a  qlite3_value*);.
25320 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
25330 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61  eFree(sqlite3_va
25340 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76  lue*);.sqlite3_v
25350 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c  alue *sqlite3Val
25360 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29  ueNew(sqlite3 *)
25370 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55  ;.char *sqlite3U
25380 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20  tf16to8(sqlite3 
25390 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  *, const void*, 
253a0 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
253b0 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78  lite3ValueFromEx
253c0 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78  pr(sqlite3 *, Ex
253d0 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71  pr *, u8, u8, sq
253e0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b  lite3_value **);
253f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
25400 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28  ueApplyAffinity(
25410 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c  sqlite3_value *,
25420 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65   u8, u8);.#ifnde
25430 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
25440 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e  ATION.extern con
25450 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
25460 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72   sqlite3OpcodePr
25470 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e  operty[];.extern
25480 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
25490 63 68 61 72 20 73 71 6c 69 74 65 33 55 70 70 65  char sqlite3Uppe
254a0 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65  rToLower[];.exte
254b0 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
254c0 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 43 74  d char sqlite3Ct
254d0 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e  ypeMap[];.extern
254e0 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c   const Token sql
254f0 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b  ite3IntTokens[];
25500 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57  .extern SQLITE_W
25510 53 44 20 73 74 72 75 63 74 20 53 71 6c 69 74 65  SD struct Sqlite
25520 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43  3Config sqlite3C
25530 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 53 51  onfig;.extern SQ
25540 4c 49 54 45 5f 57 53 44 20 46 75 6e 63 44 65 66  LITE_WSD FuncDef
25550 48 61 73 68 20 73 71 6c 69 74 65 33 47 6c 6f 62  Hash sqlite3Glob
25560 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66  alFunctions;.#if
25570 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
25580 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20  _WSD.extern int 
25590 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79  sqlite3PendingBy
255a0 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69  te;.#endif.#endi
255b0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  f.void sqlite3Ro
255c0 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69  otPageMoved(sqli
255d0 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  te3*, int, int, 
255e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
255f0 65 33 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a  e3Reindex(Parse*
25600 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
25610 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
25620 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f  lterFunctions(vo
25630 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
25640 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c  3AlterRenameTabl
25650 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
25660 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  t*, Token*);.int
25670 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e   sqlite3GetToken
25680 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
25690 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a  char *, int *);.
256a0 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74  void sqlite3Nest
256b0 65 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  edParse(Parse*, 
256c0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
256d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
256e0 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
256f0 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a  tements(sqlite3*
25700 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  );.int sqlite3Co
25710 64 65 53 75 62 73 65 6c 65 63 74 28 50 61 72 73  deSubselect(Pars
25720 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74  e *, Expr *, int
25730 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
25740 69 74 65 33 53 65 6c 65 63 74 50 72 65 70 28 50  ite3SelectPrep(P
25750 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
25760 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 69  NameContext*);.i
25770 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53  nt sqlite3MatchS
25780 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68  panName(const ch
25790 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
257a0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
257b0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
257c0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45   sqlite3ResolveE
257d0 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e  xprNames(NameCon
257e0 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  text*, Expr*);.v
257f0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
25800 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61  veSelectNames(Pa
25810 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
25820 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f  ameContext*);.vo
25830 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
25840 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50  eSelfReference(P
25850 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
25860 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
25870 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
25880 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42  solveOrderGroupB
25890 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  y(Parse*, Select
258a0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  *, ExprList*, co
258b0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
258c0 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65   sqlite3ColumnDe
258d0 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61  fault(Vdbe *, Ta
258e0 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ble *, int, int)
258f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
25900 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75  terFinishAddColu
25910 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65  mn(Parse *, Toke
25920 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n *);.void sqlit
25930 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43  e3AlterBeginAddC
25940 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53  olumn(Parse *, S
25950 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53  rcList *);.CollS
25960 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f  eq *sqlite3GetCo
25970 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38  llSeq(Parse*, u8
25980 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e  , CollSeq *, con
25990 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20  st char*);.char 
259a0 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54  sqlite3AffinityT
259b0 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ype(const char*,
259c0 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u8*);.void sqli
259d0 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65  te3Analyze(Parse
259e0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
259f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
25a00 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72  nvokeBusyHandler
25a10 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a  (BusyHandler*);.
25a20 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44  int sqlite3FindD
25a30 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65  b(sqlite3*, Toke
25a40 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
25a50 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74  FindDbName(sqlit
25a60 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
25a70 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
25a80 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c  AnalysisLoad(sql
25a90 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a  ite3*,int iDB);.
25aa0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
25ab0 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73  teIndexSamples(s
25ac0 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b  qlite3*,Index*);
25ad0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66  .void sqlite3Def
25ae0 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78  aultRowEst(Index
25af0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25b00 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63  RegisterLikeFunc
25b10 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20  tions(sqlite3*, 
25b20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
25b30 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28  3IsLikeFunction(
25b40 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69  sqlite3*,Expr*,i
25b50 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nt*,char*);.void
25b60 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46   sqlite3MinimumF
25b70 69 6c 65 46 6f 72 6d 61 74 28 50 61 72 73 65 2a  ileFormat(Parse*
25b80 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
25b90 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43  d sqlite3SchemaC
25ba0 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63  lear(void *);.Sc
25bb0 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68  hema *sqlite3Sch
25bc0 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a  emaGet(sqlite3 *
25bd0 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20  , Btree *);.int 
25be0 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49  sqlite3SchemaToI
25bf0 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62  ndex(sqlite3 *db
25c00 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79  , Schema *);.Key
25c10 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
25c20 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65  InfoAlloc(sqlite
25c30 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69  3*,int,int);.voi
25c40 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f  d sqlite3KeyInfo
25c50 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b  Unref(KeyInfo*);
25c60 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
25c70 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49  3KeyInfoRef(KeyI
25c80 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a  nfo*);.KeyInfo *
25c90 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66  sqlite3KeyInfoOf
25ca0 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e  Index(Parse*, In
25cb0 64 65 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  dex*);.#ifdef SQ
25cc0 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73  LITE_DEBUG.int s
25cd0 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57  qlite3KeyInfoIsW
25ce0 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f  riteable(KeyInfo
25cf0 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  *);.#endif.int s
25d00 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63  qlite3CreateFunc
25d10 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
25d20 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69  t char *, int, i
25d30 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76  nt, void *, .  v
25d40 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
25d50 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
25d60 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a  ite3_value **),.
25d70 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
25d80 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
25d90 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
25da0 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  ), void (*)(sqli
25db0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20  te3_context*),. 
25dc0 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
25dd0 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a  *pDestructor.);.
25de0 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45 78  int sqlite3ApiEx
25df0 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  it(sqlite3 *db, 
25e00 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
25e10 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73  3OpenTempDatabas
25e20 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69  e(Parse *);..voi
25e30 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
25e40 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c  mInit(StrAccum*,
25e50 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   char*, int, int
25e60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
25e70 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74  trAccumAppend(St
25e80 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68  rAccum*,const ch
25e90 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ar*,int);.void s
25ea0 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
25eb0 70 65 6e 64 41 6c 6c 28 53 74 72 41 63 63 75 6d  pendAll(StrAccum
25ec0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
25ed0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 70 70 65  void sqlite3Appe
25ee0 6e 64 43 68 61 72 28 53 74 72 41 63 63 75 6d 2a  ndChar(StrAccum*
25ef0 2c 69 6e 74 2c 63 68 61 72 29 3b 0a 63 68 61 72  ,int,char);.char
25f00 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63 75   *sqlite3StrAccu
25f10 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d  mFinish(StrAccum
25f20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25f30 53 74 72 41 63 63 75 6d 52 65 73 65 74 28 53 74  StrAccumReset(St
25f40 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73  rAccum*);.void s
25f50 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73 74  qlite3SelectDest
25f60 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a  Init(SelectDest*
25f70 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20  ,int,int);.Expr 
25f80 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f  *sqlite3CreateCo
25f90 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33  lumnExpr(sqlite3
25fa0 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69   *, SrcList *, i
25fb0 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20  nt, int);..void 
25fc0 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73  sqlite3BackupRes
25fd0 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63  tart(sqlite3_bac
25fe0 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  kup *);.void sql
25ff0 69 74 65 33 42 61 63 6b 75 70 55 70 64 61 74 65  ite3BackupUpdate
26000 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20  (sqlite3_backup 
26010 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75  *, Pgno, const u
26020 38 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  8 *);..#ifdef SQ
26030 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
26040 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20  3_OR_STAT4.void 
26050 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75  sqlite3AnalyzeFu
26060 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69  nctions(void);.i
26070 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50  nt sqlite3Stat4P
26080 72 6f 62 65 53 65 74 56 61 6c 75 65 28 50 61 72  robeSetValue(Par
26090 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63  se*,Index*,Unpac
260a0 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72  kedRecord**,Expr
260b0 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a  *,u8,int,int*);.
260c0 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
260d0 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61  ValueFromExpr(Pa
260e0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c  rse*, Expr*, u8,
260f0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a   sqlite3_value**
26100 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
26110 74 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e  tat4ProbeFree(Un
26120 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a  packedRecord*);.
26130 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
26140 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c  Column(sqlite3*,
26150 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
26160 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f  t, int, sqlite3_
26170 76 61 6c 75 65 2a 2a 29 3b 0a 23 65 6e 64 69 66  value**);.#endif
26180 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ../*.** The inte
26190 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d  rface to the LEM
261a0 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72  ON-generated par
261b0 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c  ser.*/.void *sql
261c0 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28  ite3ParserAlloc(
261d0 76 6f 69 64 2a 28 2a 29 28 75 36 34 29 29 3b 0a  void*(*)(u64));.
261e0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
261f0 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f  erFree(void*, vo
26200 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76  id(*)(void*));.v
26210 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
26220 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f  r(void*, int, To
26230 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69  ken, Parse*);.#i
26240 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53  fdef YYTRACKMAXS
26250 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20  TACKDEPTH.  int 
26260 73 71 6c 69 74 65 33 50 61 72 73 65 72 53 74 61  sqlite3ParserSta
26270 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23  ckPeak(void*);.#
26280 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69  endif..void sqli
26290 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e  te3AutoLoadExten
262a0 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  sions(sqlite3*);
262b0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
262c0 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53  OMIT_LOAD_EXTENS
262d0 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ION.  void sqlit
262e0 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
262f0 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c  s(sqlite3*);.#el
26300 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
26310 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f  te3CloseExtensio
26320 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ns(X).#endif..#i
26330 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
26340 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20  T_SHARED_CACHE. 
26350 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62   void sqlite3Tab
26360 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20  leLock(Parse *, 
26370 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f  int, int, u8, co
26380 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c  nst char *);.#el
26390 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
263a0 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c  ite3TableLock(v,
263b0 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a  w,x,y,z).#endif.
263c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
263d0 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  EST.  int sqlite
263e0 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65  3Utf8To8(unsigne
263f0 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  d char*);.#endif
26400 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
26410 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
26420 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  E.#  define sqli
26430 74 65 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a  te3VtabClear(Y).
26440 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
26450 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53  3VtabSync(X,Y) S
26460 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69  QLITE_OK.#  defi
26470 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  ne sqlite3VtabRo
26480 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66  llback(X).#  def
26490 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43  ine sqlite3VtabC
264a0 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69  ommit(X).#  defi
264b0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e  ne sqlite3VtabIn
264c0 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65  Sync(db) 0.#  de
264d0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
264e0 4c 6f 63 6b 28 58 29 20 0a 23 20 20 64 65 66 69  Lock(X) .#  defi
264f0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  ne sqlite3VtabUn
26500 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  lock(X).#  defin
26510 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  e sqlite3VtabUnl
26520 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65  ockList(X).#  de
26530 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
26540 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20  Savepoint(X, Y, 
26550 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20  Z) SQLITE_OK.#  
26560 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65  define sqlite3Ge
26570 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28  tVTable(X,Y)  ((
26580 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65  VTable*)0).#else
26590 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
265a0 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65  VtabClear(sqlite
265b0 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a  3 *db, Table*);.
265c0 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
265d0 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71  tabDisconnect(sq
265e0 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65  lite3 *db, Table
265f0 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c   *p);.   int sql
26600 69 74 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c  ite3VtabSync(sql
26610 69 74 65 33 20 2a 64 62 2c 20 56 64 62 65 2a 29  ite3 *db, Vdbe*)
26620 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
26630 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c  VtabRollback(sql
26640 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e  ite3 *db);.   in
26650 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d  t sqlite3VtabCom
26660 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29  mit(sqlite3 *db)
26670 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
26680 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65  3VtabLock(VTable
26690 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c   *);.   void sql
266a0 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56  ite3VtabUnlock(V
266b0 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69  Table *);.   voi
266c0 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  d sqlite3VtabUnl
266d0 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a  ockList(sqlite3*
266e0 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
266f0 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73  3VtabSavepoint(s
26700 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69  qlite3 *, int, i
26710 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  nt);.   void sql
26720 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
26730 72 6d 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69  rmsg(Vdbe*, sqli
26740 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56  te3_vtab*);.   V
26750 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65  Table *sqlite3Ge
26760 74 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  tVTable(sqlite3*
26770 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65  , Table*);.#  de
26780 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
26790 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62 29  InSync(db) ((db)
267a0 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28  ->nVTrans>0 && (
267b0 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29  db)->aVTrans==0)
267c0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
267d0 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74  ite3VtabMakeWrit
267e0 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c  able(Parse*,Tabl
267f0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
26800 33 56 74 61 62 42 65 67 69 6e 50 61 72 73 65 28  3VtabBeginParse(
26810 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
26820 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
26830 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26840 65 33 56 74 61 62 46 69 6e 69 73 68 50 61 72 73  e3VtabFinishPars
26850 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
26860 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
26870 74 61 62 41 72 67 49 6e 69 74 28 50 61 72 73 65  tabArgInit(Parse
26880 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26890 56 74 61 62 41 72 67 45 78 74 65 6e 64 28 50 61  VtabArgExtend(Pa
268a0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  rse*, Token*);.i
268b0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
268c0 6c 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33  llCreate(sqlite3
268d0 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
268e0 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  ar *, char **);.
268f0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
26900 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65  allConnect(Parse
26910 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20  *, Table*);.int 
26920 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
26930 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c  estroy(sqlite3*,
26940 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
26950 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
26960 56 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65  VtabBegin(sqlite
26970 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a  3 *, VTable *);.
26980 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
26990 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63  VtabOverloadFunc
269a0 74 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46  tion(sqlite3 *,F
269b0 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72  uncDef*, int nAr
269c0 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  g, Expr*);.void 
269d0 73 71 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75  sqlite3InvalidFu
269e0 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63  nction(sqlite3_c
269f0 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
26a00 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71  te3_value**);.sq
26a10 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69  lite3_int64 sqli
26a20 74 65 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69  te3StmtCurrentTi
26a30 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  me(sqlite3_conte
26a40 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xt*);.int sqlite
26a50 33 56 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e  3VdbeParameterIn
26a60 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74  dex(Vdbe*, const
26a70 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   char*, int);.in
26a80 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65  t sqlite3Transfe
26a90 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65  rBindings(sqlite
26aa0 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65  3_stmt *, sqlite
26ab0 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20  3_stmt *);.void 
26ac0 73 71 6c 69 74 65 33 50 61 72 73 65 72 52 65 73  sqlite3ParserRes
26ad0 65 74 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20  et(Parse*);.int 
26ae0 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
26af0 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71  (Vdbe*);.void sq
26b00 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 68 65  lite3ExprListChe
26b10 63 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c  ckLength(Parse*,
26b20 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
26b30 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65  t char*);.CollSe
26b40 71 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79  q *sqlite3Binary
26b50 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50  CompareCollSeq(P
26b60 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
26b70 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  Expr *);.int sql
26b80 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79  ite3TempInMemory
26b90 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29  (const sqlite3*)
26ba0 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ;.const char *sq
26bb0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65  lite3JournalMode
26bc0 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64  name(int);.#ifnd
26bd0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
26be0 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  AL.  int sqlite3
26bf0 43 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74  Checkpoint(sqlit
26c00 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e3*, int, int, i
26c10 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e  nt*, int*);.  in
26c20 74 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61  t sqlite3WalDefa
26c30 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71  ultHook(void*,sq
26c40 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
26c50 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  r*,int);.#endif.
26c60 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
26c70 4d 49 54 5f 43 54 45 0a 20 20 57 69 74 68 20 2a  MIT_CTE.  With *
26c80 73 71 6c 69 74 65 33 57 69 74 68 41 64 64 28 50  sqlite3WithAdd(P
26c90 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65  arse*,With*,Toke
26ca0 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c  n*,ExprList*,Sel
26cb0 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ect*);.  void sq
26cc0 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28  lite3WithDelete(
26cd0 73 71 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b  sqlite3*,With*);
26ce0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57  .  void sqlite3W
26cf0 69 74 68 50 75 73 68 28 50 61 72 73 65 2a 2c 20  ithPush(Parse*, 
26d00 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73  With*, u8);.#els
26d10 65 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  e.#define sqlite
26d20 33 57 69 74 68 50 75 73 68 28 78 2c 79 2c 7a 29  3WithPush(x,y,z)
26d30 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
26d40 57 69 74 68 44 65 6c 65 74 65 28 78 2c 79 29 0a  WithDelete(x,y).
26d50 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61  #endif../* Decla
26d60 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63  rations for func
26d70 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e  tions in fkey.c.
26d80 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72   All of these ar
26d90 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a  e replaced by.**
26da0 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66   no-op macros if
26db0 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45   OMIT_FOREIGN_KE
26dc0 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e  Y is defined. In
26dd0 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f   this case no fo
26de0 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e  reign.** key fun
26df0 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76  ctionality is av
26e00 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54  ailable. If OMIT
26e10 5f 54 52 49 47 47 45 52 20 69 73 20 64 65 66 69  _TRIGGER is defi
26e20 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f  ned but.** OMIT_
26e30 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e  FOREIGN_KEY is n
26e40 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66  ot, only some of
26e50 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61   the functions a
26e60 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a  re no-oped. In.*
26e70 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f 72 65  * this case fore
26e80 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72  ign keys are par
26e90 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65  sed, but no othe
26ea0 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  r functionality 
26eb0 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20  is .** provided 
26ec0 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20  (enforcement of 
26ed0 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72  FK constraints r
26ee0 65 71 75 69 72 65 73 20 74 68 65 20 74 72 69 67  equires the trig
26ef0 67 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29  gers sub-system)
26f00 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
26f10 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  d(SQLITE_OMIT_FO
26f20 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64  REIGN_KEY) && !d
26f30 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
26f40 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f  IT_TRIGGER).  vo
26f50 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63  id sqlite3FkChec
26f60 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  k(Parse*, Table*
26f70 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
26f80 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
26f90 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c  qlite3FkDropTabl
26fa0 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
26fb0 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  t *, Table*);.  
26fc0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63  void sqlite3FkAc
26fd0 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61  tions(Parse*, Ta
26fe0 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ble*, ExprList*,
26ff0 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29   int, int*, int)
27000 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  ;.  int sqlite3F
27010 6b 52 65 71 75 69 72 65 64 28 50 61 72 73 65 2a  kRequired(Parse*
27020 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20  , Table*, int*, 
27030 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69  int);.  u32 sqli
27040 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72  te3FkOldmask(Par
27050 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  se*, Table*);.  
27060 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52  FKey *sqlite3FkR
27070 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20  eferences(Table 
27080 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
27090 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74  ine sqlite3FkAct
270a0 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66  ions(a,b,c,d,e,f
270b0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
270c0 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63  te3FkCheck(a,b,c
270d0 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e  ,d,e,f).  #defin
270e0 65 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54  e sqlite3FkDropT
270f0 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64  able(a,b,c).  #d
27100 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f  efine sqlite3FkO
27110 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20  ldmask(a,b)     
27120 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20      0.  #define 
27130 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65  sqlite3FkRequire
27140 64 28 61 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a  d(a,b,c,d)    0.
27150 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
27160 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
27170 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71  GN_KEY.  void sq
27180 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71  lite3FkDelete(sq
27190 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29  lite3 *, Table*)
271a0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  ;.  int sqlite3F
271b0 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72  kLocateIndex(Par
271c0 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a  se*,Table*,FKey*
271d0 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b  ,Index**,int**);
271e0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
271f0 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
27200 28 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20  (a,b).  #define 
27210 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
27220 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a  ndex(a,b,c,d,e).
27230 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41  #endif.../*.** A
27240 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69  vailable fault i
27250 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c  njectors.  Shoul
27260 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65  d be numbered be
27270 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a  ginning with 0..
27280 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
27290 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f  E_FAULTINJECTOR_
272a0 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65  MALLOC     0.#de
272b0 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c  fine SQLITE_FAUL
272c0 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20  TINJECTOR_COUNT 
272d0 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
272e0 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74  e interface to t
272f0 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74  he code in fault
27300 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e  .c used for iden
27310 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22  tifying "benign"
27320 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  .** malloc failu
27330 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  res. This is onl
27340 79 20 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c  y present if SQL
27350 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
27360 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20  _TEST.** is not 
27370 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e  defined..*/.#ifn
27380 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
27390 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76  BUILTIN_TEST.  v
273a0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
273b0 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69  BenignMalloc(voi
273c0 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  d);.  void sqlit
273d0 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
273e0 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20  c(void);.#else. 
273f0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
27400 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
27410 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  c().  #define sq
27420 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
27430 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f  lloc().#endif../
27440 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74  *.** Allowed ret
27450 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  urn values from 
27460 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
27470 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ex().*/.#define 
27480 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20  IN_INDEX_ROWID  
27490 20 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61        1   /* Sea
274a0 72 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66  rch the rowid of
274b0 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64   the table */.#d
274c0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45  efine IN_INDEX_E
274d0 50 48 20 20 20 20 20 20 20 20 20 20 32 20 20 20  PH          2   
274e0 2f 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70 68  /* Search an eph
274f0 65 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f  emeral b-tree */
27500 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
27510 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33  X_INDEX_ASC    3
27520 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69     /* Existing i
27530 6e 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a  ndex ASCENDING *
27540 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
27550 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20  EX_INDEX_DESC   
27560 34 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20  4   /* Existing 
27570 69 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47  index DESCENDING
27580 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
27590 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20  NDEX_NOOP       
275a0 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c    5   /* No tabl
275b0 65 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65  e available. Use
275c0 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a   comparisons */.
275d0 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c  /*.** Allowed fl
275e0 61 67 73 20 66 6f 72 20 74 68 65 20 33 72 64 20  ags for the 3rd 
275f0 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
27600 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
27610 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  )..*/.#define IN
27620 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20  _INDEX_NOOP_OK  
27630 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b     0x0001  /* OK
27640 20 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e   to return IN_IN
27650 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66  DEX_NOOP */.#def
27660 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d  ine IN_INDEX_MEM
27670 42 45 52 53 48 49 50 20 20 30 78 30 30 30 32 20  BERSHIP  0x0002 
27680 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20   /* IN operator 
27690 75 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73  used for members
276a0 68 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66  hip test */.#def
276b0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f  ine IN_INDEX_LOO
276c0 50 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20  P        0x0004 
276d0 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20   /* IN operator 
276e0 75 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a  used as a loop *
276f0 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  /.int sqlite3Fin
27700 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a  dInIndex(Parse *
27710 2c 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69  , Expr *, u32, i
27720 6e 74 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  nt*);..#ifdef SQ
27730 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d  LITE_ENABLE_ATOM
27740 49 43 5f 57 52 49 54 45 0a 20 20 69 6e 74 20 73  IC_WRITE.  int s
27750 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65  qlite3JournalOpe
27760 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c  n(sqlite3_vfs *,
27770 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73   const char *, s
27780 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69  qlite3_file *, i
27790 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20  nt, int);.  int 
277a0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69  sqlite3JournalSi
277b0 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  ze(sqlite3_vfs *
277c0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
277d0 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71  JournalCreate(sq
277e0 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 20  lite3_file *);. 
277f0 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
27800 6e 61 6c 45 78 69 73 74 73 28 73 71 6c 69 74 65  nalExists(sqlite
27810 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 23 65 6c 73  3_file *p);.#els
27820 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
27830 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70  te3JournalSize(p
27840 56 66 73 29 20 28 28 70 56 66 73 29 2d 3e 73 7a  Vfs) ((pVfs)->sz
27850 4f 73 46 69 6c 65 29 0a 20 20 23 64 65 66 69 6e  OsFile).  #defin
27860 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  e sqlite3Journal
27870 45 78 69 73 74 73 28 70 29 20 31 0a 23 65 6e 64  Exists(p) 1.#end
27880 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  if..void sqlite3
27890 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  MemJournalOpen(s
278a0 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
278b0 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f  int sqlite3MemJo
278c0 75 72 6e 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b  urnalSize(void);
278d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4d 65  .int sqlite3IsMe
278e0 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c 69 74 65 33  mJournal(sqlite3
278f0 5f 66 69 6c 65 20 2a 29 3b 0a 0a 23 69 66 20 53  _file *);..#if S
27900 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
27910 45 50 54 48 3e 30 0a 20 20 76 6f 69 64 20 73 71  EPTH>0.  void sq
27920 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67  lite3ExprSetHeig
27930 68 74 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ht(Parse *pParse
27940 2c 20 45 78 70 72 20 2a 70 29 3b 0a 20 20 69 6e  , Expr *p);.  in
27950 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  t sqlite3SelectE
27960 78 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74  xprHeight(Select
27970 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74   *);.  int sqlit
27980 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
27990 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  t(Parse*, int);.
279a0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
279b0 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65  sqlite3ExprSetHe
279c0 69 67 68 74 28 78 2c 79 29 0a 20 20 23 64 65 66  ight(x,y).  #def
279d0 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ine sqlite3Selec
279e0 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30  tExprHeight(x) 0
279f0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
27a00 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
27a10 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75  t(x,y).#endif..u
27a20 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79  32 sqlite3Get4by
27a30 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76  te(const u8*);.v
27a40 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62  oid sqlite3Put4b
27a50 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a  yte(u8*, u32);..
27a60 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
27a70 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
27a80 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  FY.  void sqlite
27a90 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
27aa0 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71  ed(sqlite3 *, sq
27ab0 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64  lite3 *);.  void
27ac0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
27ad0 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74  onUnlocked(sqlit
27ae0 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20  e3 *db);.  void 
27af0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
27b00 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20  nClosed(sqlite3 
27b10 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  *db);.#else.  #d
27b20 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
27b30 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78  nectionBlocked(x
27b40 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,y).  #define sq
27b50 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
27b60 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65  nlocked(x).  #de
27b70 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
27b80 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a  ectionClosed(x).
27b90 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
27ba0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f  QLITE_DEBUG.  vo
27bb0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
27bc0 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61  Trace(FILE*, cha
27bd0 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  r *);.#endif../*
27be0 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
27bf0 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45  E_ENABLE IOTRACE
27c00 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68 65   exists then the
27c10 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
27c20 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61  .** sqlite3IoTra
27c30 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  ce is a pointer 
27c40 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65  to a printf-like
27c50 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f   routine used to
27c60 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72  .** print I/O tr
27c70 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 20  acing messages. 
27c80 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
27c90 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
27ca0 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
27cb0 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65  E(A)  if( sqlite
27cc0 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69  3IoTrace ){ sqli
27cd0 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a  te3IoTrace A; }.
27ce0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64    void sqlite3Vd
27cf0 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62  beIOTraceSql(Vdb
27d00 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 45 58 54 45  e*);.SQLITE_EXTE
27d10 52 4e 20 76 6f 69 64 20 28 2a 73 71 6c 69 74 65  RN void (*sqlite
27d20 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20  3IoTrace)(const 
27d30 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73  char*,...);.#els
27d40 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  e.# define IOTRA
27d50 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73  CE(A).# define s
27d60 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
27d70 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a  eSql(X).#endif..
27d80 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74  /*.** These rout
27d90 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61 62  ines are availab
27da0 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e  le for the mem2.
27db0 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f  c debugging memo
27dc0 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20  ry allocator.** 
27dd0 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20  only.  They are 
27de0 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 74  used to verify t
27df0 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22 74  hat different "t
27e00 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a  ypes" of memory.
27e10 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  ** allocations a
27e20 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63  re properly trac
27e30 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65  ked by the syste
27e40 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  m..**.** sqlite3
27e50 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
27e60 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70 65  ) sets the "type
27e70 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69  " of an allocati
27e80 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20  on to one of.** 
27e90 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61  the MEMTYPE_* ma
27ea0 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c  cros defined bel
27eb0 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75  ow.  The type mu
27ec0 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20  st be a bitmask 
27ed0 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65  with.** a single
27ee0 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20   bit set..**.** 
27ef0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
27f00 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e 73  asType() returns
27f10 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20   true if any of 
27f20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20  the bits in its 
27f30 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65  second.** argume
27f40 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70  nt match the typ
27f50 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65  e set by the pre
27f60 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d  vious sqlite3Mem
27f70 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a  debugSetType()..
27f80 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
27f90 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20 69  ugHasType() is i
27fa0 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20  ntended for use 
27fb0 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29 20  inside assert() 
27fc0 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
27fd0 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
27fe0 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e  gNoType() return
27ff0 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f  s true if none o
28000 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
28010 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
28020 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
28030 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
28040 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
28050 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
28060 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20  ..**.** Perhaps 
28070 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61  the most importa
28080 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20  nt point is the 
28090 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
280a0 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a  en MEMTYPE_HEAP.
280b0 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c  ** and MEMTYPE_L
280c0 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e  OOKASIDE.  If an
280d0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d   allocation is M
280e0 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
280f0 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20  , that means.** 
28100 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  it might have be
28110 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20  en allocated by 
28120 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70  lookaside, excep
28130 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  t the allocation
28140 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67   was.** too larg
28150 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77  e or lookaside w
28160 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e  as already full.
28170 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e    It is importan
28180 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  t to verify.** t
28190 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  hat allocations 
281a0 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
281b0 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20 62  been satisfied b
281c0 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20  y lookaside are 
281d0 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61  not.** passed ba
281e0 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  ck to non-lookas
281f0 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
28200 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73 75  nes.  Asserts su
28210 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61  ch as the.** exa
28220 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70  mple above are p
28230 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e  laced on the non
28240 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
28250 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65  ) routines to ve
28260 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e  rify.** this con
28270 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20  straint. .**.** 
28280 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e  All of this is n
28290 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75  o-op for a produ
282a0 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74  ction build.  It
282b0 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f   only comes into
282c0 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68  .** play when th
282d0 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  e SQLITE_MEMDEBU
282e0 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  G compile-time o
282f0 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a  ption is used..*
28300 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
28310 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20  MEMDEBUG.  void 
28320 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
28330 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  etType(void*,u8)
28340 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
28350 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76  emdebugHasType(v
28360 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
28370 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
28380 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  oType(void*,u8);
28390 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
283a0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
283b0 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20  etType(X,Y)  /* 
283c0 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e  no-op */.# defin
283d0 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
283e0 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31  gHasType(X,Y)  1
283f0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
28400 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
28410 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a  X,Y)   1.#endif.
28420 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
28430 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20  HEAP       0x01 
28440 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70   /* General heap
28450 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
28460 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
28470 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20  LOOKASIDE  0x02 
28480 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20 6d 69   /* Heap that mi
28490 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f  ght have been lo
284a0 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65 66 69  okaside */.#defi
284b0 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52 41 54  ne MEMTYPE_SCRAT
284c0 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a 20 53  CH    0x04  /* S
284d0 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f  cratch allocatio
284e0 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
284f0 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20 20 20  MTYPE_PCACHE    
28500 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65 20 63   0x08  /* Page c
28510 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ache allocations
28520 20 2a 2f 0a 0a 23 69 66 20 28 53 51 4c 49 54 45   */..#if (SQLITE
28530 5f 45 4e 41 42 4c 45 5f 41 50 50 4c 45 5f 53 50  _ENABLE_APPLE_SP
28540 49 3e 30 29 20 26 26 20 64 65 66 69 6e 65 64 28  I>0) && defined(
28550 5f 5f 41 50 50 4c 45 5f 5f 29 0a 0a 2f 2a 0a 2a  __APPLE__)../*.*
28560 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
28570 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
28580 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
28590 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 70 72 6f   to hold the pro
285a0 63 65 73 73 20 49 44 0a 2a 2a 20 61 6e 64 20 72  cess ID.** and r
285b0 65 74 75 72 6e 2d 62 79 2d 72 65 66 65 72 65 6e  eturn-by-referen
285c0 63 65 20 6c 6f 63 6b 73 74 61 74 65 20 76 61 6c  ce lockstate val
285d0 75 65 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f  ue.  The SQLITE_
285e0 46 43 4e 54 4c 5f 4c 4f 43 4b 53 54 41 54 45 5f  FCNTL_LOCKSTATE_
285f0 50 49 44 0a 2a 2a 20 72 65 71 75 69 72 65 73 20  PID.** requires 
28600 74 68 65 20 34 74 68 20 61 72 67 75 6d 65 6e 74  the 4th argument
28610 20 74 6f 20 73 71 6c 69 74 65 33 5f 66 69 6c 65   to sqlite3_file
28620 5f 63 6f 6e 74 72 6f 6c 20 74 6f 20 62 65 20 61  _control to be a
28630 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 0a 2a   pointer to an.*
28640 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 4c 6f  * instance of Lo
28650 63 6b 73 74 61 74 65 50 49 44 20 69 6e 69 74 69  ckstatePID initi
28660 61 6c 69 7a 65 64 20 77 69 74 68 20 61 20 4c 6f  alized with a Lo
28670 63 6b 73 74 61 74 65 50 49 44 2e 70 69 64 20 76  ckstatePID.pid v
28680 61 6c 75 65 20 65 71 75 61 6c 0a 2a 2a 20 74 6f  alue equal.** to
28690 20 61 20 70 72 6f 63 65 73 73 20 49 44 20 74 6f   a process ID to
286a0 20 62 65 20 74 65 73 74 65 64 2c 20 6f 72 20 74   be tested, or t
286b0 68 65 20 73 70 65 63 69 61 6c 20 76 61 6c 75 65  he special value
286c0 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54   SQLITE_LOCKSTAT
286d0 45 5f 41 4e 59 50 49 44 0a 2a 2a 20 54 68 65 20  E_ANYPID.** The 
286e0 4c 6f 63 6b 73 74 61 74 65 2e 73 74 61 74 65 20  Lockstate.state 
286f0 76 61 6c 75 65 20 69 73 20 61 6c 77 61 79 73 20  value is always 
28700 73 65 74 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68  set to one of th
28710 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75  e following valu
28720 65 73 0a 2a 2a 20 77 68 65 6e 20 73 71 6c 69 74  es.** when sqlit
28730 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 20  e3_file_control 
28740 72 65 74 75 72 6e 73 3a 0a 2a 2a 20 0a 2a 2a 20  returns:.** .** 
28750 20 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41    SQLITE_LOCKSTA
28760 54 45 5f 4f 46 46 20 20 20 20 6e 6f 20 61 63 74  TE_OFF    no act
28770 69 76 65 20 73 71 6c 69 74 65 20 66 69 6c 65 20  ive sqlite file 
28780 6c 6f 63 6b 73 20 6d 61 74 63 68 20 74 68 65 20  locks match the 
28790 73 70 65 63 69 66 69 65 64 20 70 69 64 0a 2a 2a  specified pid.**
287a0 20 20 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54     SQLITE_LOCKST
287b0 41 54 45 5f 4f 4e 20 20 20 20 20 61 63 74 69 76  ATE_ON     activ
287c0 65 20 73 71 6c 69 74 65 20 66 69 6c 65 20 6c 6f  e sqlite file lo
287d0 63 6b 73 20 6d 61 74 63 68 20 74 68 65 20 73 70  cks match the sp
287e0 65 63 69 66 69 65 64 20 70 69 64 0a 2a 2a 20 20  ecified pid.**  
287f0 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54   SQLITE_LOCKSTAT
28800 45 5f 4e 4f 54 41 44 42 20 70 61 74 68 20 70 6f  E_NOTADB path po
28810 69 6e 74 73 20 74 6f 20 61 20 66 69 6c 65 20 74  ints to a file t
28820 68 61 74 20 69 73 20 6e 6f 74 20 61 6e 20 73 71  hat is not an sq
28830 6c 69 74 65 20 64 62 20 66 69 6c 65 0a 2a 2a 20  lite db file.** 
28840 20 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41    SQLITE_LOCKSTA
28850 54 45 5f 45 52 52 4f 52 20 20 70 61 74 68 20 77  TE_ERROR  path w
28860 61 73 20 6e 6f 74 20 76 61 69 6c 64 20 6f 72 20  as not vaild or 
28870 77 61 73 20 75 6e 72 65 61 64 61 62 6c 65 0a 2a  was unreadable.*
28880 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
28890 20 4c 6f 63 6b 73 74 61 74 65 50 49 44 20 4c 6f   LockstatePID Lo
288a0 63 6b 73 74 61 74 65 50 49 44 3b 0a 73 74 72 75  ckstatePID;.stru
288b0 63 74 20 4c 6f 63 6b 73 74 61 74 65 50 49 44 20  ct LockstatePID 
288c0 7b 0a 20 20 70 69 64 5f 74 20 70 69 64 3b 20 20  {.  pid_t pid;  
288d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
288e0 2a 20 50 72 6f 63 65 73 73 20 49 44 20 74 6f 20  * Process ID to 
288f0 74 65 73 74 20 2a 2f 0a 20 20 69 6e 74 20 73 74  test */.  int st
28900 61 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ate;            
28910 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 61 74       /* The stat
28920 65 20 6f 66 20 74 68 65 20 6c 6f 63 6b 20 28 72  e of the lock (r
28930 65 74 75 72 6e 20 76 61 6c 75 65 29 20 2a 2f 0a  eturn value) */.
28940 7d 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 28 53  };..#endif /* (S
28950 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 50  QLITE_ENABLE_APP
28960 4c 45 5f 53 50 49 3e 30 29 20 26 26 20 64 65 66  LE_SPI>0) && def
28970 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20  ined(__APPLE__) 
28980 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64  */../*.** Thread
28990 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f  ing interface.*/
289a0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
289b0 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30  WORKER_THREADS>0
289c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65  .int sqlite3Thre
289d0 61 64 43 72 65 61 74 65 28 53 51 4c 69 74 65 54  adCreate(SQLiteT
289e0 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29  hread**,void*(*)
289f0 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a  (void*),void*);.
28a00 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61  int sqlite3Threa
28a10 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65  dJoin(SQLiteThre
28a20 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65  ad*, void**);.#e
28a30 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  ndif..#endif /* 
28a40 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f  _SQLITEINT_H_ */
28a50 0a                                               .